CentOS7 fail2banについて

■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

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする