EPELリポジトリから導入可能
たくさんあってややこしい
fail2ban全体の設定ファイル。動作ログの出力先などを変更すべし。後述するrecidiveの設定の時にログの出力先をsyslogから変更する必要がある。
logtarget = /var/log/fail2ban.log
[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] sendmail-whois[name=SSH, [email protected], [email protected], sendername="Fail2Ban"] logpath = /var/log/secure bantime = 3600 maxretry = 3
なお基本的にはjail.confはデフォルトとしてそのまま変更せず、同じフォルダにjail.localを作成すべき。conf→localの順番で読み込んで設定を追記またはオーバーライドできる。
主要なサービスの定義はすでにある。カスタマイズしたものはここに配置して、jail.localから[ファイル名]で適用できる。
#ブロックされていない状態 [ec2-user@ip-172-31-29-154 ~]$ ssh example.com ssh_exchange_identification: read: Connection reset by peer #ブロックされているとconnection timeoutになる [ec2-user@ip-172-31-29-154 ~]$ ssh example.com ssh: connect to host example.com port 22: Connection timed out
iptablesは直接触らないので一工夫必要。SSHの成功は確認できたが、Apacheを入れるとエラーになってしまう。
https://github.com/miniwark/miniwark-howtos/wiki/Fail2Ban-setup-for-Apache
ログに出力したものを解析するので、sshで22番ポートをふさいでいたりした場合は検知できない。また禁止期間中にアクセスしても回数にはカウントされないし、禁止期間が延びるわけではない(最初の禁止から設定時間後にクリア)。厳しくしすぎると解除するのが大変。
fail2ban-client set JAIL名 unbanip MYIP
2015-10-20 06:41:33,835 fail2ban.filter [6501]: INFO [recidive] Found 91.196.50.33 2015-10-20 06:51:34,767 fail2ban.actions [6501]: NOTICE [apache-noscript] Unban 91.196.50.33 2015-10-20 08:20:40,342 fail2ban.filter [6501]: INFO [apache-noscript] Found 144.76.58.210 2015-10-20 08:20:40,404 fail2ban.filter [6501]: INFO [apache-noscript] Found 144.76.58.210 2015-10-20 08:20:40,461 fail2ban.actions [6501]: NOTICE [apache-noscript] Ban 144.76.58.210 2015-10-20 08:20:40,463 fail2ban.filter [6501]: INFO [recidive] Found 144.76.58.210 2015-10-20 08:20:40,685 fail2ban.actions [6501]: NOTICE [apache-noscript] 144.76.58.210 already banned 2015-10-20 08:26:09,698 fail2ban.filter [6501]: INFO [apache-nokiddies] Found 5.61.40.29 2015-10-20 08:30:41,450 fail2ban.actions [6501]: NOTICE [apache-noscript] Unban 144.76.58.210
grep -v "ERROR" fail2ban.log | awk '{print $8}' | sort | uniq -c | sort