NamedのFail2banルールを作成する

NamedのFail2banルールを作成する

私は、過去に本当に神経質になったため、長い間欠けていると思われる Fail2ban のルールを作成しようとしているので、それを世界に提出するつもりです :-)

何が行われましたか?

  1. fail2ban/filter/named-antispam.conf の下にすでにファイルが作成されています

  2. コンテンツで作成
    #cat filter.d/named-antispam.conf
    [Definition]
    prefregex = ([a-zA-Z][a-zA-Z][a-zA-Z])\s([0-9]|[0-9][0-9])\s([0-9][0-9]):([0-9][0-9]:[0-9][0-9])
    failregex = ^rate limit drop all response to <HOST>$

および jail.conf

#Disabled for Writing this Articel
[named-antispam]
enabled = false
filter = named-antispam
logpath  = /var/log/named/rate.log
bantime      = 2628000
maxretry     = 30
findtime     = 60
  1. fail2ban を有効にしてデバッグに設定すると何が起こるか確認しました。

2021-01-26 11:25:19,461 fail2ban.filterpyinotify[14180]: DEBUG   Event queue size: 16
2021-01-26 11:25:19,462 fail2ban.filterpyinotify[14180]: DEBUG   <_RawEvent cookie=0 mask=0x2 name='' wd=2 >

ルールを無効にすると、そのエラーなしでデバッグを設定できます。そのため、私には理解できない何らかのエラーがあるように思われ、ここで質問しています。最後に、ログには多くのエントリがありますが、fail2banは気にしません。

答え1

基本的に何が問題なのかを示しておらず、さらに、フィルターでキャッチしたいメッセージを含むログの抜粋も、fail2ban-regex -vフィルターで何を見つけるかの試みも示されていません。

メッセージは次のようになると思います:

Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24

ここで注意すべき点が 2 つあります。まず、IP はクライアントの後にあり (ここ192.0.2.100)、最後にサブネットがあります (IP/CIDR 表記、ここ192.0.2.0/24)。

サブネットを禁止したい場合 (fail2ban と選択した banaction がサブネットを禁止できる場合)、バージョンに応じて以下を使用できます。

次のいずれかです (fail2ban がサポートしている場合<SUBNET>):

failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>

またはこれ:

failregex = ^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)

サブネットの代わりに IP を禁止することもできます。その場合は、次のいずれかを使用します。

failregex = ^\s*\S+\s+named(?:\[\d+\])?: client <ADDR>[^:]*: rate limit drop all response

fail2ban-regexたとえば、次のようにして確認することもできます。

msg='Jan 26 14:00:10 srv named[26403]: client 192.0.2.100#21324 (example.com): rate limit drop all response to 192.0.2.0/24'
fail2ban-regex "$msg" '^\s*\S+\s+named(?:\[\d+\])?: [^:]+: rate limit drop all response to <SUBNET>'
...
Lines: 1 lines, 0 ignored, 1 matched, 0 missed

または、ログファイルでフィルターをテストするには、次のようにします。

fail2ban-regex /var/log/named/rate.log named-antispam

prefregexとに関してはfailregex、それらは単に正しくありません。prefregexもfailregexもタイムスタンプが一致する部分を含む必要はありません。datepattern(ハウツーについては、ウィキまたはマニュアル、 を含む: 注: は、処理 (指定されている場合)failregex後にメッセージの残りの部分に適用されますprefregex。これは、処理後に実行されますdatepattern(これにより、最適なパターンに一致するタイムスタンプの文字列がメッセージから切り取られます)。

またprefregex、何らかの事前フィルタリングが必要な場合、たとえば、複数の failregex がある場合にも意味があります (そのような正規表現は、指定されている場合は、行全体、または と で囲まれた一致する RE の一部に適用されます) <F-CONTENT></F-CONTENT>事前フィルタリングが期待されない場合は、prefregexほとんど意味がありません。

とにかく、何らかの理由でそれが必要な場合は、次のようになります。

prefregex = ^\s*\S+\s+named(?:\[\d+\])?: <F-CONTENT>.+</F-CONTENT>$ 

failregex = ^[^:]+: rate limit drop all response to <SUBNET>
#failregex = ^[^:]+: rate limit drop all response to (?:<F-IP4>\d+\.\S+</F-IP4>|<F-IP6>\w+\:\S+</F-IP6>)
#failregex = ^client <ADDR>[^:]*: rate limit drop all response

関連情報