サーバを運用していると世界中からお客様が訪ねてきます。Blogを閲覧するお客様なら大歓迎ですが不正アクセスを試みるお客様はお断りしたいものです。特にメールサーバを導入し運用しているとSMTPポートへの不正中継や不正ログインのアタックが頻繁に発生します。
1.導入の経緯
postfix-pflogsummを導入して不正アクセスを監視していましたが延々と続くアタックに対してどうにかならないかと悩んでいました。IPアドレスを指定してFirewalldのDropゾーンに登録をしていましたがとても手間がかかり時間があるときでないとできませんでした。そこで見つけたのがこのfail2ban!
Fail2ban はSSHだけではなく、設定によってPostfixをはじめ様々な攻撃を防いでくれます。Fail2ban の仕組みは、アプリケーションのログを監視し不正なパターンにマッチしたものを iptables(CentOS7からはFirewalld) に追加して一定時間アクセスを拒否します。
fail2banがどのIPをブロックしたか、どこからアクセスがあったかは導入したLogWathの送ってくるメールで教えてくれます。素晴らしい!求めていたのはまさにこれでした。
2.インストール
前提:CentOS7,Systemd,ファイアウォールはFirewalld,PosfixはSASL認証
例によってEPELリポジトリからインストールします。
1 |
yum --enablerepo=epel -y install fail2ban fail2ban-systemd |
2.設定ファイルの編集
デフォルトの設定ファイルは以下にあります。
/etc/fail2ban/jail.conf
拡張設定ファイルは以下のディレクトリにファイルを作成します。
/etc/fail2ban/jail.local
デフォルトではSSHしか有効になっていないのでPostfixを追加します。
以下を新規追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[DEFAULT] ignoreip = 127.0.0.1/8 192.168.0.0/24 bantime = 86400 findtime = 3600 maxretry = 5 usedns = yes [postfix-sasl] enabled = true backend = systemd port = smtp,465,submission,imap3,imaps,pop3,pop3s logpath = %(postfix_log)s bantime = 604800 findtime = 86400 maxretry = 4 banaction = firewallcmd-ipset |
上記設定ではportで指定したポートに対してアクセス監視を行いfindtimeで指定した時間(24H)内にmaxretryで指定した回数(4回)の不正アクセスがあるとBAN(ブロック)します。ブロックする期間はbantimeで指定した時間(7日)です。
4.起動設定と動作確認
起動して再起動後も起動するように設定します。
1 2 |
# systemctl start fail2ban # systemctl enable fail2ban |
現在拒否されているリスト出力
# ipset –list (fail2ban-postfix-sasl)
フィルターの確認
# /etc/fail2ban/filter.d/postfix-sasl.conf
ログファイルはここに作成されます。
/var/log/fail2ban.log
5.参考にさせて頂いたサイト
CentOS7+fail2ban+firewalldで不正アクセス対策