Fail2ban (日本語) - ArchWiki

# Fail2ban (日本語)

関連記事

- Sshguard

Warning: IP ブラックリストを使えば取るに足らない攻撃を防ぐことはできますが、別にデーモンを使う必要がありログは残ります (特に攻撃者が何度もサーバーにアタックした場合 `/var` を含むパーティションが一杯になってしまう可能性もあります)。さらに、攻撃者が IP アドレスを知っている場合、ソースヘッダーを偽装したパケットを送りつけてサーバーからロックアウトさせるよう仕向けてくるかもしれません。SSH keys はこれらの問題に煩わされることなくブルートフォースの問題を解決する方法を提供します。

Fail2ban は様々なテキストのログファイルをスキャンして、何度もパスワード認証を失敗している IP アドレスを拒否するようファイアウォールのルールを更新して ban します。Sshguard に似ています。

Warning: 正しく機能させるためにログの IP アドレスを正確にパースさせることが重要です。保護したいアプリケーションごとにログフィルターがちゃんと動くかどうかテストするようにしてください。

## インストール

公式リポジトリから fail2ban をインストールしてください。

誰かが ban されたときに Fail2ban にメールを送って欲しいときは、SSMTP (など) をセットアップする必要があります。

### systemd

`fail2ban.service` サービスユニットを使って下さい。使い方は systemd を参照。

## ハードニング

現在、fail2ban は root で実行する必要があり、systemd でプロセスをハードニングする余地があります。参照: systemd for Administrators, Part XII

### ケイパビリティ

セキュリティを強化するために既存の `fail2ban.service` のドロップイン設定ファイルで `CapabilityBoundingSet` を指定することで fail2ban のケイパビリティを制限できます:

    /etc/systemd/system/fail2ban.service.d/capabilities.conf

    [Service]
    CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW

上の例では、`CAP_DAC_READ_SEARCH` で fail2ban に完全な読み取りアクセスを許可し、`CAP_NET_ADMIN` と `CAP_NET_RAW` で iptables によるファイアウォールのルールの設定を許可しています。fail2ban の設定によっては、ケイパビリティを追加する必要があるでしょう。詳しくは `man capabilities` を見て下さい。

### ファイルシステムのアクセス

`[Service]` セクションで、ReadOnlyDirectories や ReadWriteDirectories を使うことで、ファイルシステムの読み書きアクセスを制限することができます。例えば:

    ReadOnlyDirectories=/
    ReadWriteDirectories=/var/run/fail2ban /var/lib/fail2ban /var/spool/postfix/maildrop /tmp

上の例では、pid やソケットファイルの `/var/run/fail2ban` と、postfix sendmail の `/var/spool/postfix/maildrop` を除いて、ファイルシステムを読み取り専用に制限しています。ケイパビリティと同じく、システム設定や fail2ban の設定によって変える必要が出てきます。fail2ban の動作の中には `/tmp` ディレクトリが必要になるものもあります。fail2ban の行動記録を保存して欲しい場合は `/var/log` を追加してください。

## SSH jail

`/etc/fail2ban/jail.conf` を編集して ssh-iptables セクションを修正して ssh-iptables を有効化してアクションを設定します。

Note: ディストリビューションのアップデートで `jail.conf` ファイルは上書きされてしまう可能性があるので、`jail.local` ファイルや `jail.d/` ディレクトリ下の .conf ファイル (例: `jail.d/ssh-iptables.conf`) に修正を加えるのが推奨されます。

使っているファイアウォールが iptables の場合:

    [ssh-iptables]
    enabled  = true
    filter   = sshd
    action   = iptables[name=SSH, port=ssh, protocol=tcp]
               sendmail-whois[name=SSH, dest=your@mail.org, sender=fail2ban@mail.com]
    logpath  = /var/log/auth.log
    maxretry = 5

Fail2Ban はバージョン 0.9 から `backend = systemd` を設定することで systemd の journal から直接読み取ることができるようになっています。

使っているファイアウォールが shorewall の場合:

    [ssh-shorewall]
    enabled  = true
    filter   = sshd
    action   = shorewall
               sendmail-whois[name=SSH, dest=your@mail.org, sender=fail2ban@mail.com]
    logpath  = /var/log/auth.log
    maxretry = 5

Note: `/etc/shorewall/shorewall.conf` で `BLACKLIST` を `ALL` に設定することができます。この設定を行わないと IP アドレスを ban するルールは新しい接続にしか適用されません。

また、`/etc/ssh/sshd_config` に次を追加/変更してください:

    LogLevel VERBOSE

そうしないとパスワード認証の失敗が正しく記録されません。

Category:

- Secure Shell (日本語)