ウェブサイト検索

Debian 12にFail2banをインストールして使用する


Debian 12にFail2banをインストールして使用する

このページで

  1. それがどのように機能するか
  2. Fail2banの設定

    1. 刑務所を可能にする
    2. ログを追ってください
    3. トラブルシューティング
    4. 自己のIPアドレスをホワイトリストに登録すること
    5. 手動で禁止する
    6. 手動での禁止解除
    7. 結論

Fail2banは、ログファイルを監視してログインの失敗を検出し、失敗の多いソースIPアドレスを一時的にホストへのアクセスから禁止します。これは、パスワード推測ブルートフォース攻撃に対する防御手段です。インターネットに接続されているホストでは、fail2banが非常に役立ちます。

Debian 12のfail2banのバージョンは1.0.2です。

root@posti:~# fail2ban-client version
1.0.2

fail2banが現在実行中かどうかを確認するには、fail2ban-clientでサーバーにpingコマンドを送信してください。fail2banサーバーは、実行中の場合「pong」と応答します。

root@posti:/etc/fail2ban# fail2ban-client ping
Server replied: pong
root@posti:/etc/fail2ban#

それがどのように機能するか

Fail2banは、フィルター、アクション、監視対象のファイルをジャイルに収集します。いくつかのジャイルは配布に付属しています。それらは動作を開始するために有効化する必要があります。フィルターは認証失敗を検出する方法を指定します。アクションは禁止および解除の方法を定義します。

侵入試行は、findtime中に同じIPアドレスから最大試行回数のログイン失敗が検出された場合にバンをトリガーします。その後、IPはbantime秒間禁止されます。バンがbantime秒間有効であった後、バンは解除され、IPは再度ホストにアクセスできます。Fail2banはIPv4とIPv6の両方を処理できます。

さらなる情報は、ディレクトリ /usr/share/doc/fail2ban/ 内のファイルから読むことができます。

Fail2banの設定

Debian GNU/Linux システムでは、デフォルトで fail2ban がインストールされ、sshd ジェイルが適切な設定で有効になっています。これはファイル /etc/fail2ban/jail.d/defaults-debian.conf で行われます。それがデフォルトで動作する唯一のジェイルです。他のジェイルはシステム管理者によって有効にする必要があります。

したがって、SSHログインのみを監視し、不正行為をする侵入者を禁止したいだけの場合、追加の設定は必要ありません。

残念ながら、Debian 12では、fail2banはデフォルト設定では機能しない可能性があります。Debian 12ではrsyslogパッケージがオプションとしてマークされているため、インストールされていない場合があり、そのためログはjournaldのみに収集されます。 [wiki.debian.org/Rsyslog]

ISPConfigシステムではfail2banが機能します。なぜなら、ISPConfigの自動インストーラーがrsyslogをインストールし、ISPConfigのパーフェクトサーバーチュートリアルがrsyslogのインストールを指示するからです。

rsyslogを使用すると、ログファイルは/var/log/ディレクトリに表示されるため、fail2banのデフォルト設定がログファイルを見つけることができます。rsyslogがインストールされていない場合、fail2banの設定を変更してsystemdジャーナルからログを読み取る必要があります。jail.localのデフォルトセクションにbackend=systemdを追加してください。

[DEFAULT]
backend = systemd

刑務所を可能にする

ドキュメントでは、すべての独自の変更を.localファイルに配置することを推奨しています。これにより、配布によって提供されるファイルがアップグレードまたはメンテイナーによって変更されたときの問題を回避できます。[ファイル /usr/share/doc/fail2ban/README.Debian.gz を読んでください]。

例として、pure-ftpdジャイルを有効にするには、/etc/fail2ban/jail.localファイルに行を追加します(ファイルがまだ存在しない場合は作成してください)

[pure-ftpd]
enabled = true

四角い括弧内の拘置所名は、その拘置所の設定セクションの開始を示します。

変更が完了したら、コマンドを使って構成ファイルを強制的に再読み込みします。

systemctl reload fail2ban

刑務所は現在稼働しているはずで、fail2ban-clientを使って確認できます。

root@posti:/etc/fail2ban# fail2ban-client status pure-ftpd
Status for the jail: pure-ftpd
|- Filter
|  |- Currently failed:	0
|  |- Total failed:	106
|  `- File list:	/var/log/syslog
`- Actions
   |- Currently banned:	0
   |- Total banned:	4
   `- Banned IP list:	
root@posti:/etc/fail2ban# 

jail.localにはその監獄のための「enabled」設定のみがあるため、他の設定はすべて配布のデフォルト設定です。通常、これらの値は良好なため、さらなる設定は不要です。必要に応じて、その監獄のためのjail.localセクションには.confファイルで設定された内容をオーバーライドする設定を含めることができます。

この例では、pure-ftpd 獄の findtime、maxretry、および bantime を変更します:

[pure-ftpd]
enabled = true
findtime = 2h
maxretry = 6
bantime = 1d

Fail2ban-clientは時間を秒で表示しますが、設定ファイルには、36000秒の代わりに10hのように、より簡単な形式で時間を入力することができます。man jail.confの「時間の省略形式」章では、ユーザーフレンドリーな時間入力形式について説明しています。

fail2ban-clientには、ユーザーフレンドリーな時間形式から秒数に変換するオプションがあります。

fail2ban-client --str2sec 1d3h7m
97620

ログを追ってください

どの拘置所を起動すべきかを決定するには、ホスト上で実行されているサービスによって作成されたログを確認します。ログの要約を作成するツール、例えばlogwatchやpflogsummのようなものが役立ちます。生のログを読むのは時間がかかり、面倒です。

ホスト上で実行されているサービスのために利用可能な刑務所があるか確認してください。おそらく、jail.confを読む必要があります。

ログに興味深いことや心配なことが表示されると、調査の時期です。たとえば、pflogsummは次のような行を含むメール概要を送信しました:

136   unknown[91.224.92.40]: SASL LOGIN authentication failed: UGFzc3...
136   hostname srv-91-224-92-40.serveroffer.net does not resolve to a...
123   unknown[193.32.162.23]: SASL LOGIN authentication failed: UGFzc...
123   hostname mail.whatami.co does not resolve to address 193.32.162.23

それは、IP 91.224.92.40が136回メールにログインするのに失敗し、別の類似のケースもあったことを示しています。Fail2banはこれほど多くの試行を防ぐべきでした。なぜそれが起こらなかったのかを確認するには、fail2banのログを調べてください。

root@posti:/etc/apt/apt.conf.d# grep 91.224.92.40 /var/log/fail2ban.log | head
2024-02-18 00:01:38,718 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:01:38
2024-02-18 00:11:50,261 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:11:50
2024-02-18 00:21:54,337 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:21:54
2024-02-18 00:32:14,232 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:32:14
2024-02-18 00:42:37,921 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:42:37
2024-02-18 00:53:06,796 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 00:53:06
2024-02-18 01:03:35,293 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:03:35
2024-02-18 01:14:03,765 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:14:03
2024-02-18 01:24:24,628 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:24:24
2024-02-18 01:34:43,876 fail2ban.filter         [996]: INFO    [postfix-sasl] Found 91.224.92.40 - 2024-02-18 01:34:43
root@posti:/etc/apt/apt.conf.d#

そのIPは約10分間隔で接続を試み、fail2banのjail postfix-saslがそれを検出します。

そのIPがホストの正当なユーザーに属する可能性があるかどうかを調べるのは良い考えです。正当なユーザーは旧パスワードを持っているスマートフォンや他のデバイスから定期的に接続しているかもしれません。私はgeoiplookupを使用していますが、これによりIPがどの国から来ているかが表示されます。私のユーザーは自国内にいるため、外国のユーザーは悪意のある行動をとる傾向があります。geoiplookupはDebianパッケージのgeoip-databaseとgeoip-binから来ています。

geoiplookup 91.224.92.40
GeoIP Country Edition: LT, Lithuania

IPが禁止されなかった理由を調べるため、その監獄のfindtimeを調べてください。

root@posti:/etc/apt/apt.conf.d# fail2ban-client get postfix-sasl findtime
600
root@posti:/etc/apt/apt.conf.d#

最近、これらの遅い攻撃を見かけました。加害者は、フェインタイムが10分であることを知っているため、より長い間隔でログインを試みることで禁止されないようにしています。この方法は今回機能しました。失敗したログインが禁止を引き起こすようにするには、例えば、刑務所のフェインタイムを10時間に増やします。[postfix-sasl] セクションの jail.local ファイルに追加してください:

findtime = 10h

その後、systemctl reload fail2banを実行すると、監獄のfindtimeが長くなります。

root@posti:/etc/fail2ban# fail2ban-client get postfix-sasl findtime
36000
root@posti:/etc/fail2ban#

侵入者が侵入しようとする別の方法は、しつこくなることです。たとえ侵入者が禁止されていても、禁止が終了するのを待ってパスワードを推測し続けます。禁止時間を長くすることはできますが、それは本物のユーザーに問題を引き起こす可能性があり、パスワードを間違えて入力すると、禁止時間が終わるまでアカウントにアクセスできなくなります。再犯者に対する牢獄があり、これを再犯と呼びます。これは、fail2banログ内のIPに対する繰り返しの禁止を確認し、例えば1週間など長期間禁止することによって機能します。

以下のリストはログウォッチレポートからのものです。

--------------------- pam_unix Begin ------------------------ 

 sshd:

    Authentication Failures:

       unknown (212.70.149.150): 59 Time(s)

ログファイルでそのIPを検索すると、次のように表示されます:

2024-02-21 03:42:39,121 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 03:42:38
2024-02-21 03:42:39,508 fail2ban.actions        [895]: NOTICE  [sshd] Ban 212.70.149.150
2024-02-21 03:52:38,386 fail2ban.actions        [895]: NOTICE  [sshd] Unban 212.70.149.150
2024-02-21 03:54:33,560 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 03:54:33
2024-02-21 03:54:35,364 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 03:54:35
2024-02-21 04:00:37,017 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:00:36
2024-02-21 04:00:39,021 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:00:38
2024-02-21 04:06:43,036 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:06:42
2024-02-21 04:06:45,039 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:06:44
2024-02-21 04:06:45,426 fail2ban.actions        [895]: NOTICE  [sshd] Ban 212.70.149.150
2024-02-21 04:16:44,302 fail2ban.actions        [895]: NOTICE  [sshd] Unban 212.70.149.150
2024-02-21 04:19:04,868 fail2ban.filter         [895]: INFO    [sshd] Found 212.70.149.150 - 2024-02-21 04:19:04

Fail2banは意図した通りに機能し、不正なログインを見つけて10分間の禁止を発行します。この禁止期間中は、違反者はこのホストへのアクセスを禁じられますが、禁止が解除されると再びアクセスできるようになります。これは深刻な侵入試みのケースのようです。その対策として、低い最大試行回数と長い禁止時間を設定した再犯者用の監獄を有効にすることです。

私は短い初期禁止期間、例えば10分を使用するのが好きです。本物のユーザーが禁止された場合、その時間を待つだけで、希望的にはその時間を利用して正しいパスワードを見つけて再試行します。同じ日に再度禁止された人は、1週間禁止されます。再犯者の拘留に関するデフォルト値はファイル jail.conf にあります。禁止時間は1週間、発見時間は1日で、私には問題ないように思えます。しかし、再試行回数を2に設定したので、違反者はより早く禁止されます。私はファイル jail.local に追加しました:

[recidive]
enabled = true
maxretry = 2

私の意見では、1週間を超える禁止措置は価値がありません。最終的に、古いIPアドレスはどこでも禁止されるか、ブラックリストに載せられるため、違反者は新しいIPを取得します。その古いIPは、以前の所有者の悪事のために罰せられるべきではない無実の新しいインターネットユーザーに与えられます。

トラブルシューティング

OSを起動した後、またはfail2banの状態が再起動されると、禁止措置は復元されるため、禁止はbantimeが経過するまで続きます。そのため、テストやトラブルシューティングには再起動が含まれることがあります。

設定をテストするために、テストオプションがあります。

fail2ban-server --test

IPが禁止されているかどうかを確認するために、最近のバージョンのfail2banが可能です。

fail2ban-client banned 43.131.9.186
[['recidive']]

このコマンドは、指定されたIPが現在禁止されている監獄のリストを表示します。

古いバージョンのfail2banにはそのコマンドがありません。各監獄(jail)を一つずつテストするには、次のように行うことができます:

fail2ban-client status recidive | tr " " "\n" | grep 43.163.219.232
43.163.219.232

出力にIPが表示される場合、それは禁止されたIP番号のリストに含まれていました。trコマンドは禁止されたIP番号のリスト(それは1つの長い行です)を1行ごとのIPに分割するためにあります。

特定のIPで何が起こっているかを見るには、fail2ban.logで調べてください:

root@posti:/etc/mysql# grep 43.131.9.186 /var/log/fail2ban.log | cut --characters=-80

2024-03-06 09:00:40,295 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:02:53,954 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:02:55,958 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:04:34,193 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:04:36,195 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:04:36,388 fail2ban.actions [3574846]: NOTICE  [sshd] Ban 43
2024-03-06 09:04:36,626 fail2ban.filter  [3574846]: INFO    [recidive] Fo
2024-03-06 09:14:35,180 fail2ban.actions [3574846]: NOTICE  [sshd] Unban
2024-03-06 09:15:10,073 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:16:55,919 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:16:58,522 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:18:44,972 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:20:30,018 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:20:30,499 fail2ban.actions [3574846]: NOTICE  [sshd] Ban 43
2024-03-06 09:20:30,620 fail2ban.filter  [3574846]: INFO    [recidive] Fo
2024-03-06 09:20:30,899 fail2ban.actions [3574846]: NOTICE  [recidive] Ba
2024-03-06 09:20:32,021 fail2ban.filter  [3574846]: INFO    [sshd] Found
2024-03-06 09:30:29,289 fail2ban.actions [3574846]: NOTICE  [sshd] Unban

fail2banの設定の詳細なダンプは、確認のための設定を示しています:

fail2ban-client -vvv -d

自己のIPアドレスをホワイトリストに登録すること

もしかしたらあなた自身のホストが禁止されるか、あるいは外国のホストがたとえ悪い行動をしても禁止されないようにしたいのかもしれません。その IP 番号はホワイトリストに追加できます。デフォルトでは、何もホワイトリストには追加されていません。これを確認するには:

root@posti:~# fail2ban-client get sshd ignoreip
No IP address/network is ignored
root@posti:~

ignoreip設定は各jailセクションで設定できますが、この設定はすべてのjailに影響を与えるべきなので、DEFAULTセクションで設定する方が良いでしょう。自分のホストが禁止されないように、内部サブネットにignoreを設定するのが最も良いかもしれません。以下はjail.localの始まりからのものです:

[DEFAULT]
ignoreip = 92.237.123.96/27

デフォルトセクションには、すべての監獄に影響を与える他の設定を持つことができます。たとえば、findtime=10hをそこに追加することができます。

手動で禁止する

禁止を設定することで何が起こるかをテストするには、手動で禁止を設定します。誤って自分を禁止した場合に最終的に戻ることができるように、短い禁止時間のある監獄で最初にテストしてください。例えば

fail2ban-client set sshd banip 8.8.4.4</>

もしあるIPが悪い行動をとっているが、fail2banにそれを検出させて禁止措置を取れない場合、recidive jailで手動で禁止措置を設定すると、そのIPは1週間排除されます。

fail2ban-client set recidive banip 8.8.4.4

CIDR表記を使用したサブネットの禁止:

fail2ban-client set recidive banip 5.188.87.0/24

手動での禁止解除

禁止を解除することは可能ですが、悪い行動が続く場合、IPは再び禁止されることになることを考慮してください。ですので、何が起こっているのかを調べ(例えば、ログを読むことで)、悪い行動を修正する必要があります。

fail2ban-client set recidive unbanip 8.8.4.4

IPは複数のジャイルで禁止されている可能性があります。すべてのジャイルでIPを解除するには、以下を使用してください。

fail2ban-client unban 8.8.4.4

しかし、私はほとんどそれをする必要がありません。私は10分のバンタイムがありますが、再逮捕の刑務所は1週間ですので、再逮捕の刑務所からだけIPの使用禁止を解除します。他の刑務所はすでに期限が切れています。再逮捕の刑務所を使用しない場合、IPは複数の刑務所で同時に禁止される可能性があるため、これは便利です。

すべての刑務所からすべてのIPアドレスの禁止を解除するには

fail2ban-client unban --all

結論

Fail2banはパスワードの推測をより困難にしますが、クラッカーがホストにアクセスしようとするのを完全に防ぐわけではありません。SSHの場合、SSHキーの使用を強制することで、パスワードによるログインを防ぐことができ、さらに保護を提供します。他のサービスについては、パスワードだけが知られている場合、マルチファクター認証がログインを防ぎます。

関連記事: