fail2banで不正アクセスから保護

Server

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:

アクセスログをチェックして不正アクセスがあれば、これでメールサーバー等を守ることができます

ブルートフォース攻撃などがあれば、ログインはされなくてもサーバーに負担はかかるのでこういった対策が有効です

コメント