| Works
CentOS 6.5でfail2banを設定
特に変わったことをしたわけではないのですが、これまで意外と使う機会が無かったのでメモです。
今回の目的は、「SSHポートへの不正なアクセスを検知して、一定時間ブロックすると共に管理者へメール送信する」という、ごく基本的な内容です。
CentOS 6はepelレポジトリからインストールすることができます。
# yum install fail2ban
基本設定ファイル"/etc/fail2ban/fail2ban.conf"を編集します。
今回の変更点は、ログファイルの出力先のみです(初期値は"SYSLOG")。
ログの出力先は"/var/log/fail2ban.log"にすることが多いようですが、個人的には特定のフォルダ内に分けたかったので"/var/fail2ban/fail2ban.log"にしました。
最終的な設定値は以下の通りです(空行とコメント行は省略)。
[Definition]
loglevel = 3
logtarget = /var/log/fail2ban/fail2ban.log
socket = /var/run/fail2ban/fail2ban.sock
pidfile = /var/run/fail2ban/fail2ban.pid
ログ出力先の設定に合わせて、ログローテーションの設定"/etc/logrotate.d/fail2ban"に記載してあるパスも変更します。
/var/log/fail2ban/fail2ban.log {
rotate 7
missingok
compress
postrotate
/usr/bin/fail2ban-client flushlogs 1>/dev/null || true
endscript
}
続いて"/etc/fail2ban/jail.conf"でルールを設定します。
SSHを対象とする場合、初期のjail.confで既に"[ssh-iptables]"という部分があるので、ここを変更します。
最終的な[ssh-iptables]ブロックは以下の通りです。
[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root@mydomain.local, sender=fail2ban@mydomain.local, sendername="Fail2Ban"]
logpath = /var/log/secure
bantime = 3600
maxretry = 3
- action … 不正アクセスを検知したときの動作
- bantime … 検知した不正アクセス元のIPアドレスを記憶している時間
- maxretry … 不正アクセスとして検知するまでの接続回数
actionについては、
iptables[name=SSH, port=ssh, protocol=tcp]
→ 不正アクセス元のIPアドレスをiptablesでREJECTする
sendmail-whois[name=SSH, dest=root@mydomain.local, sender=fail2ban@mydomain.local, sendername="Fail2Ban"]
→ 不正アクセスを検知したときに"dest"で指定したメールアドレスにメール通知
("sender"は送信元アドレス、"sendername"は送信者名になる)
メール送信についてはローカルにPostfix等のMTAを動かしておく必要あり。
ここまで設定したらサービスの起動と自動起動の設定をしておく(今回の場合はyumインストールの時点で自動起動になっていた)。
# service fail2ban start
# chkconfig fail2ban on
で、さっそく不正アクセスがありました。
不正アクセスがあったときに送信されるメールは、既定だとこんな感じ("xxx.xxx.xxx.xxx"が不正アクセス元アドレス)。
Subject : [Fail2Ban] SSH: banned xxx.xxx.xxx.xxx from myhost.mydomain.local
---
Hi,
The IP xxx.xxx.xxx.xxx has just been banned by Fail2Ban after
3 attempts against SSH.
Here is more information about xxx.xxx.xxx.xxx:
missing whois program
Regards,
Fail2Ban
この時のログは、こんな感じ。
2014-09-16 15:41:07,345 fail2ban.actions[7952]: WARNING [ssh-iptables] Ban xxx.xxx.xxx.xxx
2014-09-16 16:41:07,938 fail2ban.actions[7952]: WARNING [ssh-iptables] Unban xxx.xxx.xxx.xxx
きっちり1時間(3600秒)の間アクセスを禁止しています。