Ubuntuにfail2banを導入する方法の超入門編です。
今回は初期設定で用意されているsshd postfix-sasl dovecotの監視を有効化するまでを解説しています。
fail2banとは
ログを監視して一定時間に複数回ログインや認証の失敗といった不正なアクセス検知すると、通信元のIPアドレスを一時的にブロックして不正アクセス攻撃を防御してくれるセキュリティソフトです。
インストール
aptを使ってfail2banをインストールします。
$ sudo apt update $ sudo apt install fail2ban
ちなみに、ConoHaVPSとさくらのVPSでは最初からfail2banがインストールされていて、SSHを監視する設定が有効化されていました。
監視設定
監視の設定は/etc/fail2ban/jail.confにあらかじめ設定されているものを元にして、変更したい項目を/etc/fail2ban/jail.localに記述して設定を行います。
「/etc/fail2ban/jail.local」ファイルがない場合はファイルを新規に作成する必要が有ります。
$ cd /etc/fail2ban $ sudo vi jail.local
すでにjail.localがある場合はバックアップを行ってから編集を行います。
$ sudo cp -p jail.local jail.local_$(date +%Y%m%d-%H%M%S) $ sudo vi jail.local
設定項目
fail2banには色々と設定項目が有りますが、今回は下記項目の設定を行っていきます。
- bantime = 時間: BANされる時間(-1に設定すると永久BAN)
- findtime = 時間: ここで設定した時間内にmaxretry回数を超えて認証失敗BANされる
- maxretry = 回数: BANされるまでの認証失敗やエラー回数
- enabled = true: 設定の有効化
- port = ポート番号: サービスが使用しているポート番号
設定内容
jail.localを編集してjail.confに最初から設定されている内容から、下記セクションについての設定を変更します。
- [DEFAULT] bantime,findtime,maxretryの設定を変更
- [sshd] 監視の有効化とSSHのポート番号変更
- [postfix-sasl] 監視の有効化
- [dovecot] 監視の有効化
[DEFAULT]セクションでは600秒(10分)の間に5回に認証失敗やエラー等が発生すると、1800秒(30分)BAN(通信を遮断)する設定に変更しています。
[sshd]セクションでは、SSHの接続ポートをデフォルトの22番から10022番に変更しているためportの設定を追加しています。
[DEFAULT] bantime = 1800 findtime = 600 maxretry = 5 [sshd] enabled = true port = 10022 [postfix-sasl] enabled = true [dovecot] enabled = true
jail.confを参照することで、各セクションの初期設定内容を確認することができます。
jail.confについて
jail.confという設定ファイルが最初からありますが、こちらは基本の設定でfail2banのバージョンアップにより変更が入る可能性があります。
そのため、jail.confで設定の変更を行うとバージョンアップ時に設定が変更されてしまい、fail2banの動作が意図したものと異なる可能性が有るので、直接設定を行わないようにしてくださいと公式サイトで説明されています。
https://github.com/fail2ban/fail2ban/wiki/Proper-fail2ban-configuration
起動と自動起動設定
設定ファイルの作成が完了したら、fail2banの起動とサーバ起動時に自動起動する設定を行います。
$ sudo systemctl start fail2ban.service $ sudo systemctl enable fail2ban.service
監視対象の確認
fail2ban-client statusコマンドで、現在設定されている監視対象を確認することができます。
$ sudo fail2ban-client status Status |- Number of jail: 3 `- Jail list: dovecot, postfix-sasl, sshd
BANされたIPを確認
「fail2ban-client status セクション名」でセクション個別の状態を確認することができます。
sshdを指定してコマンドを実行すると、以下のような情報が表示されます。
$ sudo fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 2 | |- Total failed: 440 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 3 `- Banned IP list: xxx.xxx.xxx.xxx
「Banned IP list:」に現在BANされているIPアドレスが表示されますが、今回はマスクしています。
BAN(通信遮断)の解除
BANを解除するには下記のコマンドを実行します。
$ sudo fail2ban-client set セクション名 unbanip IPアドレス
sshdでBANされているIPアドレスの解除を行ってみます。(IPアドレスはマスクしています)
$ sudo fail2ban-client set sshd unbanip xxx.xxx.xxx.xxx
1 # 1と表示されます
sshdについて確認してみると、「Currently banned:」が0になり「Banned IP list:」に表示されていたIPアドレスも消えていて、BANが解除されたことが分かります。
$ sudo fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 2 | |- Total failed: 440 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 0 |- Total banned: 3 `- Banned IP list:
設定ファイルの優先順位
監視ルールの設定ファイルは以下の順で読み込まれて、後に読み込まれた設定が有効となります。
- /etc/fail2ban/jail.conf
- /etc/fail2ban/jail.d/*.conf #アルファベット順
- /etc/fail2ban/jail.local
- /etc/fail2ban/jail.d/*.local #アルファベット順
今回の説明では/etc/fail2ban/jail.localに監視ルールをまとめて設定していますが、/etc/fail2ban/jail.d/に監視するサービス毎に下記のような設定ファイルを作成するという方法もあります。
- sshd.local
- dovecot.local
- smtp-auth.local
コメント