Fail2BanでカスタムBanActionを作成してVirusTotalとAbuseIPDBに告げ口する
Fail2Ban
Fail2Banはサーバに対するアクセス失敗ログや認証失敗ログを参照し、不要なアクセスを制限します。 Fail2Banを使用してそのような不要なアクセスをサーバに到達する前にファイアウォール等で遮断するのが一般的です。 しかし、このような遮断行為はある意味受け身的であり、やられっぱなしも癪です。 この記事は、遮断に加えて通報機能もFail2Banに持たせる事を目指します。
最近のクラウドサーバは、標準のサイバーレジリエンスでFail2Banがインストールされています。現在、syakesaba.comでは以下のサーバをFail2Ban対象としています。この設定は、sshd, postfix, dovecot, nginxの認証ログを参照し、一定期間、所定の回数の認証失敗ログの発生をトリガーにファイアウォールであるiptablesで認証失敗したホストを一定期間接続出来ないようにするものです。このファイル以外はOSのパッケージマネージャでインストールされた標準の設定ファイルを使用しています。
# /etc/fail2ban/jail.d/defaults-debian.conf
[DEFAULT]
banaction = iptables
banaction_allports = iptables[type=allports]
backend = systemd
[sshd]
enabled = true
backend = systemd
[postfix]
enabled = true
backend = systemd
[dovecot]
enabled = true
backend = systemd
[nginx-http-auth]
enabled = true
backend = systemd
今回は以下のサービスに対してBan対象のホストを通知するBanActionをsshd
に追加します。
AbuseIPDB
AbuseIPDBはアカウントを持っている方なら誰でも悪意のあるIPアドレスを通報できるサービスです。
アカウント登録
AbuseIPDBホームページの右上のSign Upから登録を行います。FREEプランで登録します。
Warning
usernameはCommunityに公開されます。
最後に、APIキーを取得しておきます。ログイン後のホームページの右上のMy API
メニューから取得が可能です。
VirusTotal
VirusTotalもアカウントを持っている方なら誰でも悪意のあるIoCを通報できるサービスです。
アカウント登録
VirusTotalホームページの右上のSign Upから登録を行います。FREEプランで登録します。
Warning
First Name, Last Name, usernameすべてCommunityに公開されます。
APIキーを取得しておきます。ログイン後のホームページの右上のAPI Key
メニューから取得が可能です。
Fail2Ban: sshdの構成
通常、Fail2Banは3つのコンポーネントで構成されます。
- Jail: 監査対象を定義します。
enabled = true
であれば監査が有効になります。/etc/fail2ban/jail.d/*.conf
/etc/fail2ban/jail.local
- Filter: 監査対象のメッセージ(ログ文字列など)から失敗ログを抽出する処理を定義します。主に構造化された正規表現です。
/etc/fail2ban/filter.d/*.conf
- Action: 監査対象の失敗ログが観測された場合に実行する処理を定義します。
/etc/fail2ban/action.d/*.conf
私の環境ではsshdのFail2Banコンポーネントは以下で定義されてました。
- Jail:
/etc/fail2ban/jail.d/defaults-debian.conf
- Filter:
/etc/fail2ban/filter.d/sshd.conf
- Action:
/etc/fail2ban/action.d/iptables.conf