URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

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秒)の間アクセスを禁止しています。