■CentOS7でfail2banのインストール
外部公開サーバを日々運用しているとSSHやSMTP Authなどで、ひたすら認証を繰り返してくる輩がいます。認証に成功しなければ実害はないわけですが、おそらく機械的にアクセスして日々延々と認証試行を繰り返し、甘いパスワードを設定しているアカウントなどがあれば認証を突破される可能性もあるわけで決して気持ちのいいものではありません。
そこでfail2banをインストールしていると例えば特定のIPから何秒間の間に何回以上、認証失敗が繰り返されるとそのIPからは無条件にアクセス拒否ということが自動で設定することができます。また、対象アプリはApacheやPostfix、SSHなど複数にも対応しているので入れていて損はないソフトだと思いましたので、ここにインストールしたときの記録を残します。
なおCentOS7であれば通常はfirewalldと連携するのですが、ここではあえてiptablesで運用しているものと仮定してインストールします。まずfail2banのインストールです。
# yum install fail2ban fail2ban-systemd # rpm -qa | grep fail2ban fail2ban-0.9.7-1.el7.noarch fail2ban-firewalld-0.9.7-1.el7.noarch fail2ban-server-0.9.7-1.el7.noarch fail2ban-systemd-0.9.7-1.el7.noarch fail2ban-sendmail-0.9.7-1.el7.noarch |
インストールしたfail2banを有効にします。
# systemctl enable fail2ban.service # systemctl start fail2ban.service |
まずCentOS7の場合はfirewalldがデフォルト設定になっているので意図的にiptablesに変更する必要があります。以下のファイルを編集します。
# vi /etc/fail2ban/jail.d/00-firewalld.conf #以下をコメントアウト #[DEFAULT] #banaction = firewallcmd-ipset |
設定ファイルは/etc/fail2ban/jail.confですが、同ディレクトリにjail.localというファイルを作ることで設定を上書きすることができます。そのためjail..localを新規に作ってそこに設定を記載したほうがわかりやすいかなと思います。
普段運用している中で一番被害が多いのがsmtp authを有効にしていて外部からID/PASSを破られ、spanを出されるというケースが非常に多いです。そもそもsmtp authをやめれば良い話なのですが、利便性の面からそういうわけにもいかず。ということでpostfix saslを対象にまず設定してみます。
最初に/etc/fail2ban/jail.localを作成し全体設定などを行っていきます。
# vi /etc/fail2ban/jail.local [DEFAULT] <省略> # Destination email address used solely for the interpolations in # jail.{conf,local,d/*} configuration files. destemail = webmaster@unix-power.net # Sender email address used solely for some actions sender = webmaster@unix-power.net ignoreip = 127.0.0.1/8 172.16.0.0/16 bantime = 86400 findtime = 600 maxretry = 5 backend = systemd usedns = yes <省略> |
上記のDEFAULTは全体設定です。まず不正アクセスを受けた際にメール送信することが可能でその際のfrom,toアドレスを設定しています。ignoreipは対象外となるIPで、findtimeの間にmaxretry失敗するとbantimeの間、接続を拒否するルールをiptablesに自動追加してくれます。これにpostfix用の設定を追記します。
[postfix-sasl] enabled = true port = smtp,465,submission,imap3,imaps,pop3,pop3s logpath = %(postfix_log)s |
postfix以外にもfail2banには多数のフィルタが用意されており、/etc/fail2ban/filter.d以下に各種フィルタが用意されています。以下はsshおよびdovecotに関するbanです。
[sshd] enabled = true port = ssh,10022 [Dovecot] enabled = true port = pop3,pop3s,imap,imaps,submission,465,sieve logpath = %(dovecot_log)s |
しつこく何度もbanを繰り返すIPに対しては長期間banを設定することが可能なrecidiveという設定が可能です。下記では1日で10回banされたIPに対しては1週間アクセス不可の設定をしております。さらにそれらのログをメールで送信する処理をしております。
[recidive] enabled = true action = %(action_mwl)s bantime = 604800 findtime = 86400 maxretry = 10 |
これらの設定を反映させるためfail2banを再起動します。
# systemctl restart fail2ban |
iptablesと正常に連携できているかどうかはiptablesの内容を表示させると確認できます。
# iptables -nvL Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 1969 235K f2b-recidive tcp -- * * 0.0.0.0/0 0.0.0.0/0 0 0 f2b-postfix-sasl tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 25,465,587,220,993,110,995 264 26206 f2b-sshd tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22,10022 <省略> |
実際にbanしたIPリストは以下のコマンドで確認できます。
# ipset --list |