Fail2ban(フェイル・トゥー・バン)とは、Linuxサーバーで広く使われている不正アクセス対策ツールです。
簡単に言うと、「不審なログイン試行が一定回数あったら、そのIPアドレスを一時的にブロックしてくれる」セキュリティソフトです
主な特徴:
- SSHやメール、FTPなど様々なサービスに対応
- ログファイルを監視して、不正なアクセス(例:パスワード総当たり攻撃)を検出
- 条件に一致したIPをiptablesなどで自動的にBAN(遮断)
- BANの期間は設定で変更可能
Fail2BanでSSH、Postfix、Dovecotを保護するには、各サービスごとに専用の「jail(監獄)」設定を行う必要があります
ちなみにそれぞれのログを確認するコマンドは以下の通りです
Ubuntu 20.04の場合:
#SSH接続のログ
sudo cat /var/log/auth.log | grep ssh
#postfixのログ
sudo grep postfix /var/log/mail.log
#dovecotのログ
sudo grep dovecot /var/log/mail.log
1. fail2ban をインストール
Ubuntu20.04の場合:
sudo apt update
sudo apt install fail2ban
2. 設定ファイルの編集
Fail2Banの設定は通常、/etc/fail2ban/jail.conf ではなく、カスタム設定を jail.local に記述します
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
以下のように設定を追記・編集します
ssh、postfix、dovecot、postfix-saslの接続設定の保護を定義します
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
[postfix]
enabled = true
port = smtp,ssmtp,submission
filter = postfix
logpath = /var/log/mail.log
maxretry = 5
bantime = 3600
findtime = 600
action = iptables[name=postfix, port=smtp, protocol=tcp]
[dovecot]
enabled = true
port = imap,imap2,imaps,pop3,pop3s
filter = dovecot
logpath = /var/log/mail.log
maxretry = 3
bantime = 86400
findtime = 600
action = iptables-multiport[name=dovecot, port="imap,imap2,imaps,pop3,pop3s", protocol=tcp]
[postfix-sasl]
enabled = true
port = smtp,submission,465
filter = postfix-sasl
logpath = /var/log/mail.log
maxretry = 3
bantime = 3600
findtime = 600
action = iptables[name=postfix-sasl, port=smtp, protocol=tcp]
【共通の設定項目と意味】
enabled = true
- このjail(保護ルール)を有効にするかどうか
- true にするとFail2Banがこのルールでログ監視を開始します
port = xxx
- 対象サービスが使用するポート番号
- 例:ssh, smtp, submission, imap, pop3 など
- 複数ある場合はカンマ区切り
- もしSSHのポートを22以外に変更していたら、port = ssh を実際の番号に変えてください
filter = xxx
- /etc/fail2ban/filter.d/xxx.conf にある正規表現の定義ファイルを指定
- このファイルで、ログから「悪意のあるアクセス」と判断する条件が定義されています
- postfix-saslはpostfixと同じフィルターを使っています
logpath = /path/to/log
- ログファイルのパス。Fail2Banがこのログファイルを監視して、不正アクセスの痕跡を探します
maxretry = n
- 指定された回数(
n
)ログに失敗の痕跡が出たら、アクセス元IPをBAN(遮断)します
findtime = 600(省略可)
- maxretry 回の失敗がこの秒数以内にあったらBANします(この例では600秒=10分)
bantime = 600(省略可)
- BANされたIPアドレスを遮断し続ける秒数(この例も10分)
3. フィルター設定の確認(必要なら修正)
フィルター定義ファイルは /etc/fail2ban/filter.d/ にあります
- SSH: sshd.conf(通常デフォルトでOK)
- Postfix: postfix.conf(通常デフォルトでOK)
- Dovecot: dovecot.conf(通常デフォルトでOK)
- postfix-sasl:postfix-sasl.confを利用しますが、内容を少し変更しました
以下のコマンドでpostfixのフィルター設定ファイルを編集します
sudo nano /etc/fail2ban/filter.d/postfix-sasl.conf
以下のように編集します
[Definition]
failregex =
postfix/smtpd.*authentication failed.*\[<HOST>\]
postfix/smtpd.*: disconnect from .* \[<HOST>\].*auth=0/[1-9].*
postfix/smtpd.*: disconnect from .* \[<HOST>\].*auth=0/1.*
ignoreregex =
各行の解説
postfix/smtpd.*authentication failed.*\[<HOST>\].
- *authentication failed.*: authentication failed(認証失敗)という文字列を含む行を対象としています
- この部分は、認証に失敗したことを示します
- \[<HOST>\]: 失敗した接続元IPアドレスを <HOST> にマッチさせます
- <HOST> はFail2Banが自動的にIPアドレスに置き換えるプレースホルダーです
postfix/smtpd.*: disconnect from .* \[<HOST>\].*auth=0/[1-9].*
- .*: disconnect from .*: 接続の切断を示すログ切断元IPアドレス(<HOST>)とその後の詳細が続きます
auth=0/[1-9]
:auth=0/[1-9]
は、認証が失敗した状態を示します- 特に
auth=0
は認証が全く行われなかったことを示し、その後の[1-9]
は、失敗した回数を示します - 認証が0回のままで切断された場合、これは攻撃の兆候である可能性が高いです
postfix/smtpd.*: disconnect from .* \[<HOST>\].*auth=0/1.*
- .*: disconnect from .*: 接続の切断を示すログ
- auth=0/1: これも認証失敗のサインです
- auth=0/1は1回の試行で認証に失敗した場合を示します
ignoreregex の説明
ignoreregex: ここに書かれている正規表現は、特定のログ行を無視するために使用されます
今回は空白のままです
現状では特に無視するべきログは指定されていません
4. fail2ban を再起動
設定ファイルを変更したらシステムを再起動します
sudo systemctl restart fail2ban
5. ステータス確認
以下のコマンドでfail2banの各サービスへの状態を確認します
sudo fail2ban-client status
sudo fail2ban-client status sshd
sudo fail2ban-client status postfix
sudo fail2ban-client status dovecot
正常に起動できれば以下のように表示されます
Status for the jail: postfix
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| - Journal matches: _SYSTEMD_UNIT=postfix.service
- Actions
|- Currently banned: 0
|- Total banned: 0
- Banned IP list:
アクセスログをチェックして不正アクセスがあれば、これでメールサーバー等を守ることができます
ブルートフォース攻撃などがあれば、ログインはされなくてもサーバーに負担はかかるのでこういった対策が有効です
コメント