fail2banの導入
こんにちは、技術部のamiyataです。
今回はcentos6環境へfail2banを導入、動作確認までを行いたいと思います。
・インストール
そのままではパッケージが存在しないため、epelのリポジトリを利用します
# yum install fail2ban 読み込んだプラグイン:changelog, fastestmirror, ps インストール処理の設定をしています Loading mirror speeds from cached hostfile * base: ftp.tsukuba.wide.ad.jp * extras: ftp.tsukuba.wide.ad.jp * remi-safe: mirrors.mediatemple.net * updates: ftp.tsukuba.wide.ad.jp パッケージ fail2ban は利用できません。 エラー: 何もしません# yum install epel-release必要に応じて、/etc/yum.repos.d/epel.repo 内の
enableを調整します。
普段は利用しない場合は0にしておくとよいです。# grep enable /etc/yum.repos.d/epel.repo enabled=0 enabled=0 enabled=0上記対応を行った場合は、enablerepoでepelを指定してインストール
# yum --enablerepo=epel install fail2banetc配下に配置されます。
# ll /etc/fail2ban/ 合計 68 drwxr-xr-x 2 root root 4096 4月 5 04:07 2017 action.d -rw-r--r-- 1 root root 2313 2月 18 03:17 2017 fail2ban.conf drwxr-xr-x 2 root root 4096 2月 18 03:17 2017 fail2ban.d drwxr-xr-x 3 root root 4096 4月 5 04:07 2017 filter.d -rw-r--r-- 1 root root 21280 2月 18 03:17 2017 jail.conf drwxr-xr-x 2 root root 4096 2月 18 03:17 2017 jail.d -rw-r--r-- 1 root root 2375 12月 9 23:36 2016 paths-common.conf -rw-r--r-- 1 root root 642 12月 9 23:36 2016 paths-debian.conf -rw-r--r-- 1 root root 769 2月 18 03:17 2017 paths-fedora.conf -rw-r--r-- 1 root root 1174 12月 9 23:36 2016 paths-freebsd.conf -rw-r--r-- 1 root root 975 12月 9 23:36 2016 paths-opensuse.conf -rw-r--r-- 1 root root 290 12月 9 23:36 2016 paths-osx.conffail2ban.confとjail.confは設定ファイルになりますが、
設定は.localが優先されるためそれぞれの.localを作成してそこに必要なものを記述します。# echo -e "[Definition]\nlogtarget = /var/log/fail2ban.log" > /etc/fail2ban/fail2ban.localログの出力先については環境の応じてpathは変更して下さい。
# vi /etc/fail2ban/jail.local [DEFAULT] ignoreip = backend = polling bantime = 3600 ; 1hour maxretry= 5 usedns = no [ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/secure findtime = 1800 ; 30 min設定の意味はjail.confを確認してください。
filterについては下記ディレクトリにデフォルトでいろいろあるので
必要なものを設定します。自分で作成することも可能です。/etc/fail2ban/filter.d/
起動させましょう
/etc/init.d/fail2ban start可能であれば動作確認を行いましょう。
外部サーバからアタックを行いますfail2ban導入サーバはログを流しておきます。
# tail -f /var/log/fail2ban.log下記のようなログが出ていて実際に接続ができない状態になっていれば成功です。
2017-04-08 05:22:06,913 fail2ban.actions [21552]: NOTICE [ssh-iptables] Ban 61.195.167.218また下記コマンドで今の状態が確認できます。
有効な設定一覧が出ます。
# fail2ban-client status Status |- Number of jail: 1 `- Jail list: ssh-iptablesJail listあるものを指定するとその設定でのブロック状況などがわかります。
# fail2ban-client status ssh-iptables Status for the jail: ssh-iptables |- Filter | |- Currently failed: 0 | |- Total failed: 6 | `- File list: /var/log/secure `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 61.195.167.218せっかくなので独自フィルターを作ってみましょう
よくアタックのあるwordpressのxmlrpcへのPOSTで作ります
ログの出力内容を確認します。
61.195.167.218 - - [08/Apr/2017:05:44:33 +0900] "POST /xmlrpc.php HTTP/1.1" 302 - "-" "curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2"わかりやすい命名をします
# vi /etc/fail2ban/filter.d/wp-xmlrpc.conf # cat /etc/fail2ban/filter.d/wp-xmlrpc.conf [Definition] failregex = ^<HOST> - .*"POST /xmlrpc.php HTTP.*$ ignoreregex =記述内容は他の設定及び、ログの内容を確認して記載します。
jail.local へ追加したフィルターを使う設定を追記します。
# vi jail.local [wp-xmlrpc-iptables] enabled = true filter = wp-xmlrpc action = iptables[name=WEB, port=http,https, protocol=tcp] logpath = /var/log/httpd/access_log findtime = 1800 ; 30 minfail2banを再起動します
# /etc/init.d/fail2ban restart読み込まれているか確認します
# fail2ban-client status Status |- Number of jail: 2 `- Jail list: ssh-iptables, wp-xmlrpc-iptables実際にテストします
# tail -f /var/log/fail2ban.log 2017-04-08 06:05:11,677 fail2ban.actions [23298]: NOTICE [wp-xmlrpc-iptables] Ban 61.195.167.218# fail2ban-client status wp-xmlrpc-iptables Status for the jail: wp-xmlrpc-iptables |- Filter | |- Currently failed: 0 | |- Total failed: 5 | `- File list: /var/log/httpd/access_log `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 61.195.167.218できました。今回は一例としてxmlrpcへのフィルターを追加しましたが
自分で使うことはほとんどないのであれば.htaccess等で
アクセスできないようにしてしまいましょう。fail2banはあくまでログから失敗や連続アクセスを判断しブロックするため、
始めからアクセス情報が漏れていたりする場合効果がありません。メールは仕方ない部分もありますが、
webサイトの管理ページ等は可能であれば固定IPのみの
アクセスにしたほうがはるかによいです。以上、になります。