Fail2ban は postfix/smtps/smtpd を禁止しません

Fail2ban は postfix/smtps/smtpd を禁止しません

Ubuntu 20.04 サーバーを所有していますが、毎日同じ IP から何百もの SMTP AUTH 要求を postfix サーバーで受信しています。fail2ban をインストールしていますが、皮肉なことに IP を禁止できません。

私の/etc/fail2ban/jail.localファイルは次のとおりです (<snip> で区切られた部分は個人用 IP とビジネス用 IP です):

[postfix-flood-attack]
enabled  = true
bantime  = 1h
filter   = postfix-flood-attack
action   = iptables-multiport[name=postfix, port="http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve", protocol=tcp]
logpath  = /var/log/mail.log
ignoreip = <snip> 127.0.0.1/8
maxretry = 3

[postfix]
enabled = true
maxretry = 3
bantime = 1h
filter = postfix[mode=aggressive]
logpath = /var/log/mail.log
ignoreip = <snip> 127.0.0.1/8

[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
filter = dovecot
logpath = /var/log/mail.log
maxretry  = 3
ignoreip = <snip> 127.0.01/8

問題の刑務所はpostfix-flood-attackこのチュートリアルの下部ファイルは次/etc/fail2ban/filter.d/postfix-flood-attack.confの通りです:

[Definition]
failregex = lost connection after AUTH from (.*)\[<HOST>\]
ignoreregex =

私のログメッセージは次のようになります

Aug 15 13:54:45 ikana postfix/smtps/smtpd[268729]: connect from unknown[193.35.48.18]
Aug 15 13:54:46 ikana postfix/smtps/smtpd[268729]: Anonymous TLS connection established from unknown[193.35.48.18]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Aug 15 13:54:50 ikana postfix/smtps/smtpd[268729]: warning: unknown[193.35.48.18]: SASL PLAIN authentication failed:
Aug 15 13:54:50 ikana postfix/smtps/smtpd[268729]: lost connection after AUTH from unknown[193.35.48.18]
Aug 15 13:54:50 ikana postfix/smtps/smtpd[268729]: disconnect from unknown[193.35.48.18] ehlo=1 auth=0/1 commands=1/2
Aug 15 13:54:50 ikana postfix/smtps/smtpd[268729]: connect from unknown[193.35.48.18]
Aug 15 13:54:51 ikana postfix/smtps/smtpd[268729]: Anonymous TLS connection established from unknown[193.35.48.18]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Aug 15 13:54:57 ikana postfix/smtps/smtpd[268729]: lost connection after AUTH from unknown[193.35.48.18]
Aug 15 13:54:57 ikana postfix/smtps/smtpd[268729]: disconnect from unknown[193.35.48.18] ehlo=1 auth=0/1 commands=1/2
Aug 15 13:54:57 ikana postfix/smtps/smtpd[268729]: connect from unknown[193.35.48.18]
Aug 15 13:54:58 ikana postfix/smtps/smtpd[268729]: Anonymous TLS connection established from unknown[193.35.48.18]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Aug 15 13:55:04 ikana postfix/smtps/smtpd[268729]: lost connection after AUTH from unknown[193.35.48.18]
Aug 15 13:55:04 ikana postfix/smtps/smtpd[268729]: disconnect from unknown[193.35.48.18] ehlo=1 auth=0/1 commands=1/2
Aug 15 13:55:04 ikana postfix/smtps/smtpd[268734]: connect from unknown[193.35.48.18]
Aug 15 13:55:05 ikana postfix/smtps/smtpd[268734]: Anonymous TLS connection established from unknown[193.35.48.18]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
Aug 15 13:55:09 ikana postfix/smtps/smtpd[268734]: warning: unknown[193.35.48.18]: SASL PLAIN authentication failed:
Aug 15 13:55:09 ikana postfix/smtps/smtpd[268734]: lost connection after AUTH from unknown[193.35.48.18]
Aug 15 13:55:09 ikana postfix/smtps/smtpd[268734]: disconnect from unknown[193.35.48.18] ehlo=1 auth=0/1 commands=1/2

によるとfail2ban-regex、これは動作するはずですが、IP は禁止されていません。コマンドの出力は次のとおりfail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/postfix-flood-attack.confです。

Running tests
=============

Use   failregex filter file : postfix-flood-attack, basedir: /etc/fail2ban
Use         log file : /var/log/mail.log
Use         encoding : UTF-8


Results
=======

Failregex: 5356 total
|-  #) [# of hits] regular expression
|   1) [5356] lost connection after AUTH from (.*)\[<HOST>\]
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [37949] {^LN-BEG}(?:DAY )?MON Day %k:Minute:Second(?:\.Microseconds)?(?: ExYear)?
`-

Lines: 37949 lines, 0 ignored, 5356 matched, 32593 missed
[processed in 1.43 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 32593 lines

したがって、5,356 件のログが一致し、いずれも禁止されません。デフォルトの 10 分間の検索時間内に、通常 8 回の試行が行われます。オプションを使用したスニペットには、-vタイムfail2ban-regexスタンプ付きの次の一致が表示されます。

...
193.35.48.18  Thu Aug 15 13:50:55 2019
193.35.48.18  Thu Aug 15 13:51:02 2019
193.35.48.18  Thu Aug 15 13:51:10 2019
193.35.48.18  Thu Aug 15 13:51:15 2019
193.35.48.18  Thu Aug 15 13:54:50 2019
193.35.48.18  Thu Aug 15 13:54:57 2019
193.35.48.18  Thu Aug 15 13:55:04 2019
193.35.48.18  Thu Aug 15 13:55:09 2019
193.35.48.18  Thu Aug 15 13:58:40 2019
193.35.48.18  Thu Aug 15 13:58:48 2019
193.35.48.18  Thu Aug 15 13:58:54 2019
193.35.48.18  Thu Aug 15 13:58:59 2019
...

答え1

設定は良さそうですが、出力には注目すべき重要な詳細が1つありますfail2ban-regex。日付が2019年からであると判断されたのです。質問のログを見ると、最初はかなり馬鹿げているように思えました。これはfail2banの既知の問題であることが判明しました。TZ問題特定のタイムゾーンを使用するようにサーバーを設定したら、正しく有効にするために、一連のサービスを再起動するか、システム全体を再起動する必要があります。どれくらい経ったかは覚えていませんが、タイムゾーンを設定してからサーバーを再起動したことがないと思います。

経由で syslog サービスを再起動するとsystemctl restart syslog、fail2ban は正しいタイムゾーンでログ行を認識しました。

Fail2ban は、設定された検索時間内のログ メッセージをすぐに認識し、数日間サーバーを悩ませていた IP を禁止しました。Fail2ban は、fail2ban-server の起動後にマシンに設定されたものを使用するのではなく、syslog にタイムゾーン情報を要求しているようです。

これが同様の問題を抱えている他の人の助けになれば幸いです。

答え2

fail2banがそれらの日付を2019年であると想定する原因となった曖昧さは、標準の日付フォーマットを使用すると発生しません。この問題を完全に回避するには、ISO 8601 を使用- 2020 年には、下位互換性のあるログ形式に固執する正当な理由はなくなる可能性があります。

また、Ubuntu では、fail2ban に systemd ジャーナルを直接使用するように指示することで、日付のフォーマット/解析を完全にスキップできる可能性があります。これにより、タイムゾーン情報なしでエポックからの単純なオフセットが提供されます (ローカル jail 構成のブロックbackend = systemdで試してください[DEFAULT])。

関連情報