「Fail2ban」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (序文を修正) |
Kusanaginoturugi (トーク | 投稿記録) |
||
(他の1人の利用者による、間の6版が非表示) | |||
1行目: | 1行目: | ||
[[Category:ファイアウォール]] |
[[Category:ファイアウォール]] |
||
− | [[Category: |
+ | [[Category:セキュアシェル]] |
[[en:Fail2ban]] |
[[en:Fail2ban]] |
||
[[ro:Fail2ban]] |
[[ro:Fail2ban]] |
||
8行目: | 8行目: | ||
{{Related|セキュリティ}} |
{{Related|セキュリティ}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | [ |
+ | [https://www.fail2ban.org/wiki/index.php/Main_Page Fail2ban] は、ログファイル (例:{{ic|/var/log/httpd/error_log}}) をスキャンし、認証の試行回数が多すぎる、脆弱性のスキャンなど、悪意のある兆候を示す IP を禁止します。一般に、Fail2ban は、次に、次の IP アドレスを拒否するように [[ファイアウォール]] ルールを更新するために使用されます。指定された時間だけですが、他の任意のアクション (電子メールの送信など) も設定できます。 |
+ | {{Warning| |
||
− | {{warning|IP ブラックリストを使えば取るに足らない攻撃を防ぐことはできますが、デーモンを使う必要がある上に攻撃時のログは残ります (特に攻撃者が何度もサーバーにアタックした場合 {{ic|/var}} を含むパーティションが一杯になってしまう可能性もあります)。さらに、攻撃者があなたの IP アドレスを知っている場合、ソースヘッダーを偽装したパケットを送りつけてあなたがサーバーにアクセスできないように仕向けてくるかもしれません。[[SSH 鍵]]はこれらの問題に煩わされることなくブルートフォースの問題を解決する方法を提供します。}} |
||
+ | * IP を禁止するソフトウェアを使用することで、些細な攻撃は止めることができますが、追加のデーモンとロギングの成功に依存します。 |
||
+ | * fail2ban を [[sshd]] などと併用することは、公開鍵認証などが有効になっている場合 には、通常は意味がありません。 |
||
+ | * また、[[VPN]] の代わりにもなりません。必要な場合を除き、サービスをインターネットに公開しないでください。 |
||
+ | * さらに、攻撃者があなたの IP アドレスを知っている場合、送信元ヘッダーを偽装したパケットを送信し、あなたの IP アドレスを使用禁止にすることができます。必ず {{ic|ignoreip}} で IP を指定してください。 |
||
+ | }} |
||
== インストール == |
== インストール == |
||
− | + | 次のパッケージのいずれかを [[インストール]] して下さい: |
|
+ | * {{Pkg|fail2ban}} - 最新の安定バージョン。 |
||
− | 誰かが ban されたときに Fail2ban からメールを送信したい場合、[[SSMTP]] などをセットアップする必要があります。 |
||
+ | * {{AUR|fail2ban-git}} - マスターからの最新のコミット。 |
||
− | + | == 使い方 == |
|
− | {{ic|fail2ban.service}} |
+ | Fail2ban を [[Fail2ban#設定|設定]] し {{ic|fail2ban.service}} を [[起動/有効化]] します: |
− | == |
+ | === fail2ban-client === |
+ | failed2ban-client を使用すると、jail (リロード、再起動、ステータスなど) を監視して、使用可能なすべてのコマンドを表示できます: |
||
− | 現在、fail2ban は root で実行する必要があり、systemd でプロセスをハードニングする余地があります。参照: [http://0pointer.de/blog/projects/security.html systemd for Administrators, Part XII] |
||
+ | $ fail2ban-client |
||
− | === ケイパビリティ === |
||
+ | 有効なジェイルをすべて表示するには: |
||
− | セキュリティを強化するために既存の {{ic|fail2ban.service}} の[[Systemd#ユニットファイルの編集|ドロップイン設定ファイル]]で {{ic|CapabilityBoundingSet}} を指定することで fail2ban の[[ケイパビリティ]]を制限できます: |
||
+ | # fail2ban-client status |
||
− | {{hc|/etc/systemd/system/fail2ban.service.d/capabilities.conf|2= |
||
− | [Service] |
||
− | CapabilityBoundingSet=CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW |
||
− | }} |
||
+ | たとえば ''sshd'' などの jail のステータスを確認するには: |
||
− | 上の例では、{{ic|CAP_DAC_READ_SEARCH}} で fail2ban に完全な読み取りアクセスを許可し、{{ic|CAP_NET_ADMIN}} と {{ic|CAP_NET_RAW}} で [[iptables]] によるファイアウォールのルールの設定を許可しています。fail2ban の設定によっては、ケイパビリティを追加する必要があるでしょう。詳しくは {{man|7|capabilities}} を見て下さい。 |
||
+ | {{hc|# fail2ban-client status sshd|<nowiki> |
||
− | === ファイルシステムのアクセス === |
||
+ | Status for the jail: sshd |
||
+ | |- Filter |
||
+ | | |- Currently failed: 1 |
||
+ | | |- Total failed: 9 |
||
+ | | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd |
||
+ | `- Actions |
||
+ | |- Currently banned: 1 |
||
+ | |- Total banned: 1 |
||
+ | `- Banned IP list: 0.0.0.0 |
||
+ | </nowiki>}} |
||
+ | 禁止された IP を含むすべての jail のコンパクトバージョンの場合: |
||
− | {{Note|環境によっては以下の設定で fail2ban が使えなくなる可能性があります。最初は以下の設定を使わないで fail2ban を試してください。}} |
||
+ | {{hc|# fail2ban-client banned| |
||
− | {{ic|[Service]}} セクションで、''ReadOnlyDirectories'' や ''ReadWriteDirectories'' を使うことで、ファイルシステムの読み書きアクセスを制限することができます。例えば: |
||
+ | [{'sshd': ['192.168.100.50']}, {'apache-auth': []}] |
||
− | ReadOnlyDirectories=/ |
||
+ | }} |
||
− | ReadWriteDirectories=/var/run/fail2ban /var/lib/fail2ban /var/spool/postfix/maildrop /tmp /var/log/fail2ban |
||
− | 上の例では、pid やソケットファイルの {{ic|/var/run/fail2ban}} と、[[postfix]] sendmail の {{ic|/var/spool/postfix/maildrop}} を除いて、ファイルシステムを読み取り専用に制限しています。ケイパビリティと同じく、システム設定や fail2ban の設定によって変える必要が出てきます。fail2ban の動作の中には {{ic|/tmp}} ディレクトリが必要になるものもあります。fail2ban の行動記録を保存して欲しい場合は {{ic|/var/log/fail2ban}} を追加してください。全てのディレクトリが存在していることを確認してください。存在しない場合、サービスの起動時にエラーコード 226 が表示されます。また、{{ic|/etc/fail2ban/fail2ban.conf}} の logtarget を修正してください: |
||
− | logtarget = /var/log/fail2ban/fail2ban.log |
||
== 設定 == |
== 設定 == |
||
− | + | [[アップグレード]] 中に {{ic|/etc/fail2ban/jail.conf}} に対して [[pacman/Pacnew と Pacsave]] が作成される可能性があるため、{{man|5|jail.conf|CONFIGURATION FILES FORMAT}} では、''アップグレードを容易にする'' ために、ユーザーが {{ic|/etc/fail2ban/jail.local}} ファイルを [[作成]] することをお勧めします。 |
|
+ | たとえば、デフォルトの禁止期間を 1 日に変更するには、次のようにします: |
||
− | === デフォルト jail === |
||
+ | {{hc|/etc/fail2ban/jail.local|2= |
||
− | 多数のサービスに対応しているデフォルトの jail は {{ic|/etc/fail2ban/jail.conf}} に存在していますが、デフォルトでは有効になっていません。セクションヘッダーを適当な {{ic|.local}} ファイルにコピーすることで有効にできます。 |
||
+ | [DEFAULT] |
||
+ | bantime = 1d |
||
+ | }} |
||
+ | または、{{ic|/etc/fail2ban/jail.d}} ディレクトリの下に別の {{ic|''name''.local}} ファイルを作成します (例:{{ic|/etc/fail2ban/jail.d/sshd.local}} |
||
− | === パス === |
||
+ | {{ic|fail2ban.service}} を [[再起動]] して設定の変更を適用します。 |
||
− | Arch Linux の基本設定を有効にするには、{{ic|jail.local}} ファイルに以下のセクションを追加・変更: |
||
− | [INCLUDES] |
||
− | before = paths-arch.conf |
||
+ | === jails を有効にする === |
||
− | {{ic|fail2ban.service}} を[[再起動]]して設定をテストしてください。fail2ban サービスが起動に失敗すると ''fail2ban-client'' から "file not found errors" が出力されます。{{ic|paths-arch.conf}} や {{ic|jail.local}} を必要に応じて調整してください。デフォルトの jail は設定を変更しないと動作しない場合があります。 |
||
+ | |||
+ | デフォルトでは、すべての jails は無効になっています。{{ic|1=enabled = true}} を使用したい jails に [[ヘルプ:読み方#追加, 追記, 作成, 編集|追加]] します。たとえば、[[OpenSSH]] jails を有効にする場合: |
||
+ | |||
+ | {{hc|/etc/fail2ban/jail.local|2= |
||
+ | [sshd] |
||
+ | enabled = true |
||
+ | }} |
||
+ | |||
+ | 参照 [[Fail2ban#カスタム SSH jail]] |
||
+ | |||
+ | === 警告メールを受信する === |
||
+ | |||
+ | 誰かが禁止されたときに電子メールを受信したい場合は、SMTP クライアント (例:[[msmtp]]) を設定し、以下に示すようにデフォルトのアクションを変更する必要があります。 |
||
+ | |||
+ | {{hc|/etc/fail2ban/jail.local|2= |
||
+ | [DEFAULT] |
||
+ | destemail = yourname@example.com |
||
+ | sender = yourname@example.com |
||
+ | |||
+ | # to ban & send an e-mail with whois report to the destemail. |
||
+ | action = %(action_mw)s |
||
+ | |||
+ | # same as action_mw but also send relevant log lines |
||
+ | #action = %(action_mwl)s |
||
+ | }} |
||
+ | |||
+ | === ファイアウォールとサービス === |
||
+ | |||
+ | デフォルトでは、Fail2ban は [[iptables]] を使用します。ただし、ほとんどの [[ファイアウォール]] とサービスの設定は簡単です。たとえば、[[nftables]] を使用するには: |
||
+ | |||
+ | {{hc|/etc/fail2ban/jail.local|2= |
||
+ | [DEFAULT] |
||
+ | banaction = nftables |
||
+ | banaction_allports = nftables[type=allports] |
||
+ | }} |
||
+ | |||
+ | 他の例については、{{ic|/etc/fail2ban/action.d/}} を参照してください。例:[https://github.com/fail2ban/fail2ban/blob/master/config/action.d/ufw.conf ufw.conf] |
||
+ | |||
+ | == ヒントとテクニック == |
||
=== カスタム SSH jail === |
=== カスタム SSH jail === |
||
+ | {{Warning|攻撃者があなたの IP アドレスを知っている場合、スプーフィングされたソースヘッダーを持つパケットを送信し、あなたの IP アドレスをサーバーからロックアウトすることができます。[[SSH 鍵]] は、これらの問題を発生させずにブルートフォースの問題に対する洗練されたソリューションを提供します。}} |
||
− | {{ic|/etc/fail2ban/jail.d/jail.conf}} を編集して、以下のセクションを追加して信頼する IP アドレスのリストを更新します。 |
||
+ | |||
+ | {{ic|/etc/fail2ban/jail.d/sshd.local}} を編集し、このセクションを追加して、{{ic|ignoreip}} の信頼できる IP アドレスのリストを更新します: |
||
+ | |||
+ | {{hc|/etc/fail2ban/jail.d/sshd.local|2= |
||
+ | [sshd] |
||
+ | enabled = true |
||
+ | filter = sshd |
||
+ | banaction = iptables |
||
+ | backend = systemd |
||
+ | maxretry = 5 |
||
+ | findtime = 1d |
||
+ | bantime = 2w |
||
+ | ignoreip = 127.0.0.1/8 |
||
+ | }} |
||
+ | |||
+ | {{Note| |
||
+ | * パスワードの失敗が正しく記録されないかもしれないので、fail2ban の完全な監視を許可するために、{{ic|/etc/ssh/sshd_config}} で {{ic|LogLevel VERBOSE}} を設定する必要があるかもしれません。 |
||
+ | * Fail2ban はバージョン 0.10 から IPv6 をサポートしています。それに合わせて [[ファイアウォール]] を適応してください、例えば {{ic|ip6tables.service}} を [[起動]]/[[有効化]] など。 |
||
+ | * (ユニットファイルに {{ic|1=LogNamespace=''something''}} を追加することで) ジャーナルの名前空間を使用する場合、{{ic|backend}} を次のように設定することで、fail2ban にそれらのログを読ませることができます:{{ic|1=backend = systemd[journalfiles="/var/log/journal/*.''something''/system.journal"]}} のように設定します。 |
||
+ | }} |
||
+ | |||
+ | {{Tip| |
||
+ | * [[ufw]] のような [[iptables]] フロントエンドを使用する場合、iptables を使用する代わりに {{ic|1=banaction = ufw}} を使用することができます。 |
||
+ | * また、{{ic|/etc/shorewall/shorewall.conf}} の {{ic|BLACKLIST}} を {{ic|ALL}} に設定すると、IP アドレスを禁止するために追加されたルールは新しい接続だけに影響します。 |
||
+ | }} |
||
+ | |||
+ | === Systemd バックエンド: ジャーナルフィルタリング === |
||
+ | |||
+ | パフォーマンスを向上させるために ''systemd'' バックエンドを使用する場合は、{{ic|journalmatch}} を使用してフィルターを設定します。たとえば、カーネルレベルのログメッセージのみを解析するには、次のようにします。 |
||
+ | |||
+ | {{hc|/etc/fail2ban/filter.d/fwdrop.local|2= |
||
+ | [Definition] |
||
+ | failregex = ^.*DROP_.*SRC=<ADDR> DST=.*$ |
||
+ | journalmatch = _TRANSPORT=kernel |
||
+ | }} |
||
+ | |||
+ | こちらも参照 {{man|7|systemd.journal-fields}} |
||
+ | |||
+ | === サービスの強化 === |
||
+ | |||
+ | 現在、Fail2ban は ''root'' として実行する必要があります。したがって、[[systemd]] を使用してプロセスを強化することを検討することをお勧めします。 |
||
+ | |||
+ | {{ic|fail2ban.service}} の [[systemd#ドロップインファイル|ドロップイン]] 設定ファイルを [[作成]]: |
||
+ | |||
+ | {{hc|/etc/systemd/system/fail2ban.service.d/override.conf|2= |
||
+ | [Service] |
||
+ | PrivateDevices=yes |
||
+ | PrivateTmp=yes |
||
+ | ProtectHome=read-only |
||
+ | ProtectSystem=strict |
||
+ | ReadWritePaths=-/var/run/fail2ban |
||
+ | ReadWritePaths=-/var/lib/fail2ban |
||
+ | ReadWritePaths=-/var/log/fail2ban |
||
+ | ReadWritePaths=-/var/spool/postfix/maildrop |
||
+ | ReadWritePaths=-/run/xtables.lock |
||
+ | CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW |
||
+ | }} |
||
+ | |||
+ | {{ic|CapabilityBoundingSet}} パラメータ {{ic|CAP_DAC_READ_SEARCH}} を使用すると、Fail2ban にすべてのディレクトリとファイルへの完全な読み取りアクセスが許可されます。{{ic|CAP_NET_ADMIN}} と {{ic|CAP_NET_RAW}} により、[[コマンドラインシェル]] インターフェイスを持つファイアウォール上で Fail2ban を動作させることができます。詳細については、{{man|7|capabilities}} を参照してください。 |
||
+ | {{ic|1=ProtectSystem=strict}} を使用すると、[[ファイルシステム]] 階層は読み取り専用になり、{{ic|ReadWritePaths}} は Fail2ban に必要なパスへの書き込みアクセスを許可します。 |
||
− | 使っているファイアウォールが [[iptables]] の場合: |
||
− | [DEFAULT] |
||
− | bantime = 1d |
||
− | ignoreip = 127.0.0.1/8 |
||
− | |||
− | [sshd] |
||
− | enabled = true |
||
− | filter = sshd |
||
− | action = iptables |
||
− | backend = systemd |
||
− | maxretry = 5 |
||
− | findtime = 1d |
||
− | bantime = 2w |
||
+ | Create {{ic|/etc/fail2ban/fail2ban.local}} with the correct {{ic|logtarget}} path: |
||
− | fail2ban はバージョン 0.10 から [[IPv6]] をサポートしています。使用しているファイアウォールに応じて、{{ic|ip6tables.service}} などを起動・有効化してください。 |
||
+ | {{hc|/etc/fail2ban/fail2ban.local|<nowiki> |
||
+ | [Definition] |
||
+ | logtarget = /var/log/fail2ban/fail2ban.log |
||
+ | </nowiki>}} |
||
+ | root として {{ic|/var/log/fail2ban/}} ディレクトリを作成します。 |
||
− | {{Note|ファイアウォールとして [[shorewall]] を使っている場合、{{ic|iptables}} を {{ic|shorewall}} に置き換えてください。また、{{ic|/etc/shorewall/shorewall.conf}} の {{ic|BLACKLIST}} を {{ic|ALL}} に設定することができます。この設定を行わないと IP アドレスを ban するルールは新しい接続にしか適用されません。}} |
||
+ | 最後に、[[systemd#ユニットを使う|systemd デーモンを]] [[再起動]] して実行しユニットの変更を適用し、{{ic|fail2ban.service}} を実行します。 |
||
− | また、{{ic|/etc/ssh/sshd_config}} に次を追加/変更してください: |
||
− | LogLevel VERBOSE |
||
− | そうしないとパスワード認証の失敗が正しく記録されません。 |
||
== 参照 == |
== 参照 == |
2024年8月16日 (金) 18:36時点における最新版
Fail2ban は、ログファイル (例:/var/log/httpd/error_log
) をスキャンし、認証の試行回数が多すぎる、脆弱性のスキャンなど、悪意のある兆候を示す IP を禁止します。一般に、Fail2ban は、次に、次の IP アドレスを拒否するように ファイアウォール ルールを更新するために使用されます。指定された時間だけですが、他の任意のアクション (電子メールの送信など) も設定できます。
目次
インストール
次のパッケージのいずれかを インストール して下さい:
- fail2ban - 最新の安定バージョン。
- fail2ban-gitAUR - マスターからの最新のコミット。
使い方
Fail2ban を 設定 し fail2ban.service
を 起動/有効化 します:
fail2ban-client
failed2ban-client を使用すると、jail (リロード、再起動、ステータスなど) を監視して、使用可能なすべてのコマンドを表示できます:
$ fail2ban-client
有効なジェイルをすべて表示するには:
# fail2ban-client status
たとえば sshd などの jail のステータスを確認するには:
# fail2ban-client status sshd
Status for the jail: sshd |- Filter | |- Currently failed: 1 | |- Total failed: 9 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 0.0.0.0
禁止された IP を含むすべての jail のコンパクトバージョンの場合:
# fail2ban-client banned
[{'sshd': ['192.168.100.50']}, {'apache-auth': []}]
設定
アップグレード 中に /etc/fail2ban/jail.conf
に対して pacman/Pacnew と Pacsave が作成される可能性があるため、jail.conf(5) § CONFIGURATION FILES FORMAT では、アップグレードを容易にする ために、ユーザーが /etc/fail2ban/jail.local
ファイルを 作成 することをお勧めします。
たとえば、デフォルトの禁止期間を 1 日に変更するには、次のようにします:
/etc/fail2ban/jail.local
[DEFAULT] bantime = 1d
または、/etc/fail2ban/jail.d
ディレクトリの下に別の name.local
ファイルを作成します (例:/etc/fail2ban/jail.d/sshd.local
fail2ban.service
を 再起動 して設定の変更を適用します。
jails を有効にする
デフォルトでは、すべての jails は無効になっています。enabled = true
を使用したい jails に 追加 します。たとえば、OpenSSH jails を有効にする場合:
/etc/fail2ban/jail.local
[sshd] enabled = true
警告メールを受信する
誰かが禁止されたときに電子メールを受信したい場合は、SMTP クライアント (例:msmtp) を設定し、以下に示すようにデフォルトのアクションを変更する必要があります。
/etc/fail2ban/jail.local
[DEFAULT] destemail = yourname@example.com sender = yourname@example.com # to ban & send an e-mail with whois report to the destemail. action = %(action_mw)s # same as action_mw but also send relevant log lines #action = %(action_mwl)s
ファイアウォールとサービス
デフォルトでは、Fail2ban は iptables を使用します。ただし、ほとんどの ファイアウォール とサービスの設定は簡単です。たとえば、nftables を使用するには:
/etc/fail2ban/jail.local
[DEFAULT] banaction = nftables banaction_allports = nftables[type=allports]
他の例については、/etc/fail2ban/action.d/
を参照してください。例:ufw.conf
ヒントとテクニック
カスタム SSH jail
/etc/fail2ban/jail.d/sshd.local
を編集し、このセクションを追加して、ignoreip
の信頼できる IP アドレスのリストを更新します:
/etc/fail2ban/jail.d/sshd.local
[sshd] enabled = true filter = sshd banaction = iptables backend = systemd maxretry = 5 findtime = 1d bantime = 2w ignoreip = 127.0.0.1/8
Systemd バックエンド: ジャーナルフィルタリング
パフォーマンスを向上させるために systemd バックエンドを使用する場合は、journalmatch
を使用してフィルターを設定します。たとえば、カーネルレベルのログメッセージのみを解析するには、次のようにします。
/etc/fail2ban/filter.d/fwdrop.local
[Definition] failregex = ^.*DROP_.*SRC=<ADDR> DST=.*$ journalmatch = _TRANSPORT=kernel
こちらも参照 systemd.journal-fields(7)
サービスの強化
現在、Fail2ban は root として実行する必要があります。したがって、systemd を使用してプロセスを強化することを検討することをお勧めします。
fail2ban.service
の ドロップイン 設定ファイルを 作成:
/etc/systemd/system/fail2ban.service.d/override.conf
[Service] PrivateDevices=yes PrivateTmp=yes ProtectHome=read-only ProtectSystem=strict ReadWritePaths=-/var/run/fail2ban ReadWritePaths=-/var/lib/fail2ban ReadWritePaths=-/var/log/fail2ban ReadWritePaths=-/var/spool/postfix/maildrop ReadWritePaths=-/run/xtables.lock CapabilityBoundingSet=CAP_AUDIT_READ CAP_DAC_READ_SEARCH CAP_NET_ADMIN CAP_NET_RAW
CapabilityBoundingSet
パラメータ CAP_DAC_READ_SEARCH
を使用すると、Fail2ban にすべてのディレクトリとファイルへの完全な読み取りアクセスが許可されます。CAP_NET_ADMIN
と CAP_NET_RAW
により、コマンドラインシェル インターフェイスを持つファイアウォール上で Fail2ban を動作させることができます。詳細については、capabilities(7) を参照してください。
ProtectSystem=strict
を使用すると、ファイルシステム 階層は読み取り専用になり、ReadWritePaths
は Fail2ban に必要なパスへの書き込みアクセスを許可します。
Create /etc/fail2ban/fail2ban.local
with the correct logtarget
path:
/etc/fail2ban/fail2ban.local
[Definition] logtarget = /var/log/fail2ban/fail2ban.log
root として /var/log/fail2ban/
ディレクトリを作成します。
最後に、systemd デーモンを 再起動 して実行しユニットの変更を適用し、fail2ban.service
を実行します。