1月 092017
 

fail2ban とは、ログファイルを読み取り、不審なアクセスを行なった IP Address 特定し、当該 IP Address からのアクセスを自動的に一定時間(期間)拒否することができるソフトウェアです。

訳あって、すぐに sshd のポートを変更できないサーバーを任されていますが、Port 22 への攻撃が激しいため fail2ban を導入しました。

作業は全て root で行っていることを前提としています。

環境

  • CentOS 7.2

インストールと起動

fail2ban は EPEL (エンタープライズ Linux 用拡張パッケージ) リポジトリにありますので、まだ EPEL リポジトリを導入していない時は次のように導入します。

EPEL リポジトリの導入が済みましたら、早速 fail2ban のインストールと起動を行います。

これだけで導入は完了です。
続いて sshd の監視を行う設定を書いていきます。

設定

設定ファイルは /etc/fail2ban/jail.conf になりますが、直接触るのではなく、/etc/fail2ban/jail.local を作ることで設定をオーバーライドできるようです。

例えば、下記のような 2 行だけのファイルを作成し、/etc/fail2ban/jail.local として保存すると、sshd の監視を行うことができます。

つまり jail.local に書かれていない記述は jail.conf がデフォルト値として使われるようですので、jail.conf を参考に jail.local を作っていくことを考えればよいかと思います。

しかし、個人的には fail2ban のアップデートを行なった時に動作が変わることを極力防ぐことができるとも考えられるので、/etc/fail2ban/jail.conf をコピーして使っても良いと考えます。

設定の反映

daemon を再起動させます。

動作確認

現在の状態を確認するには次のコマンドで行います。

表示例

現在の ban リストの確認方法は次のコマンドで行います。

表示例

fail2ban-sshd という名前でまとめて、iptables で制御しているようです。

iptables にこのようなルールが追加されていました。

生ログをみてみます。

ban -> unban -> ban -> unban を延々と繰り返している IP Address があります。

このような攻撃への対策も fail2ban で行えます。

常習犯対策

繰り返し不正アクセスを試みる IP Address に対しては、recidive の設定をします。recidive とはオランダ語で「常習犯」という意味のようで、ある一定期間で決められた回数の BAN が行われた IP Address を長期間アクセス拒否にする設定です。

/etc/fail2ban/jail.local に次を追記しました。

3 回 BAN を繰り返した IP Address を対象としています。

設定後は忘れずに daemon を再起動します。

その後ログをみてみます。

しつこい 117.135.144.233 が recidive に引っかかったようです。

とりあえずこんな感じにしました

sshd について、600 秒以内(デフォルト)に 3 回不正アクセスを行なった IP Address を 600 秒間(デフォルト) BAN します

常習犯(recidive)について、1 日以内(デフォルト)に 3 回 BAN になった IP Address を 1 週間(デフォルト) BAN します。

ちなみに複数ポートをチェックする時は

複数ポートを監視する時にはカンマで区切るようです。