CentosサーバーでFail2Banを実行しています。 (以下の設定)
私のvar/log/messagesで、本当に変なことに気づきました:
Jun 19 12:09:32 localhost fail2ban.actions: INFO [postfix] 114.43.245.205 already banned
Fail2Banを構成して、禁止されたIPをiptablesに追加しました。
My jail.conf:
[postfix]
enabled = true
filter = postfix
action = iptables
port = smtp,ssmtp
filter = postfix
logpath = /var/log/maillog
bantime = 43200
maxretry = 2
My postfix.conf:
[INCLUDES]
before = common.conf
[Definition]
failregex = reject: RCPT from (.*)\[<Host>\]: 550 5.1.1
reject: RCPT from (.*)\[<Host>\]: 450 4.7.1
reject: RCPT from (.*)\[<Host>\]: 554 5.7.1
reject: RCPT from (.*)\[<Host>\]: (.*)@yahoo.com.tw
ignoreregex =
私の質問は、iptables
で既にブロックされている人がサーバーに接続する方法を教えてください。
ここで他の回答で推奨されている刑務所の刑務所では、問題は解決しませんでした。しかし、私は最終的にこれを修正したので、他の人を助けるためにここに私の方法があります。
Fail2banがブロックするのはTCPデフォルトでのみです。少なくとも私の設定では、ボットがUDP経由でブロックされたポートを試すように戻ってきたときに、「すでに禁止されています」というメッセージが表示されていました。
この問題を解決するには、TCPだけでなく、すべてのプロトコルでポートをブロックするようにFail2banに指示します。 / etc/fail2ban/jail.confと[Init]セクションで/ etcで使用しているすべてのアクションを変更する必要があります。 /fail2ban/action.d/。
これを変える:
# Default protocol
protocol = tcp
に:
# Default protocol
protocol = all
次に、ICMPエコー要求を無効にして、ブロックされたIPがサーバーにアクセスできないようにしました。
次の2行を追加します。
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
その後、fail2ban-client reloadを実行します。ブロックが有効になる前にアクセス試行を2回受けるIPによってスパムされていない限り、これらの「すでに禁止された」メッセージは表示されません。
また、各Jailsでアクションiptables-allportsを使用して、アクセスしようとしたポートではなく、すべての犯罪者のすべてのポートをブロックすることが重要です。さもなければ、それらは別の刑務所を引き起こし、ログで「すでに禁止されている」となるかもしれません。
iptables-save
の出力を見ると、フィルターによって定義されたルールに従ってパケットを評価するようにfail2ban
チェーンが設定されていることがわかります。次に例を示します。
:fail2ban-ssh - [0:0]
-A INPUT -p tcp -A INPUT -p tcp -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A fail2ban-ssh -j RETURN
トラフィックは引き続きサーバーに到達します他のルーティングルールが適用され、トラフィックが拒否される前。 fail2ban
には引き続きこの最初のトラフィックが表示されるため、「すでに禁止されています」というメッセージが表示されます。さらに、再犯者のための特別なフィルターがあります(/etc/fail2ban/filter.d/recidive.conf
):
# Fail2Ban filter for repeat bans
#
# This filter monitors the fail2ban log file, and enables you to add long
# time bans for ip addresses that get banned by fail2ban multiple times.
#
# Reasons to use this: block very persistent attackers for a longer time,
# stop receiving email notifications about the same attacker over and
# over again.
#
# This jail is only useful if you set the 'findtime' and 'bantime' parameters
# in jail.conf to a higher value than the other jails. Also, this jail has its
# drawbacks, namely in that it works only with iptables, or if you use a
# different blocking mechanism for this jail versus others (e.g. hostsdeny
# for most jails, and shorewall for this one).
[INCLUDES]
# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf
[Definition]
_daemon = fail2ban\.server\.actions
# The name of the jail that this filter is used for. In jail.conf, name the
# jail using this filter 'recidive', or change this line!
_jailname = recidive
failregex = ^(%(__prefix_line)s| %(_daemon)s%(__pid_re)s?:\s+)WARNING\s+\[(?!%(_jailname)s\])(?:.*)\]\s+Ban\s+<Host>\s*$
[Init]
journalmatch = _SYSTEMD_UNIT=fail2ban.service PRIORITY=4
# Author: Tom Hendrikx, modifications by Amir Caspi
これは、禁止しているIPアドレスが実際にはサーバーに接続しているクライアントのIPアドレスでない場合に発生します。例えば。サーバーがロードバランサーまたはプロキシの背後にある場合。
最近これを理解するのにかなり時間がかかりました。赤いニシンは、ログがX-Forwarded-For
実際の送信元アドレスの代わりにIPアドレス(私の場合はロードバランサー)。
この場合、問題のあるIPを禁止すると最終的にallトラフィックがブロックされるため、fail2banはあまり役に立ちません。
参照してください https://unix.stackexchange.com/a/525798/22315
"port ="行からポート587が欠落している可能性があります。postfix構成ファイルを確認するか、 "lsof -i:587"を実行して、postfixがそのポートを開くように構成されているかどうかを直接確認できます。
私の質問は、iptablesで既にブロックされている人がサーバーに接続する方法を教えてください。
サーバーに1回だけ接続しましたが、その1つの接続で、存在しない可能性のあるメールボックス(info @ domain.com、sales @ domain.com、tech @ domain.comなど)に複数のメールを配信しようとしました
Xが試行した後にIPが禁止されるように、それらの試行を禁止するようにpostfixフィルターを構成しました。クライアントは既にpostfixから切断されている可能性がありますが、postfixがすべてのメールの処理を完了していない可能性があるため、failfixはpostfixがメールを処理するときに同じクライアントからの別の試行を検出できるため、メッセージアドレスはすでに禁止されています。これは、postfixキューがどのように機能するかによるものです。
私の質問は、iptablesで既にブロックされている人がサーバーに接続するにはどうすればよいですか?
信じられないほど良い質問です。ファイアウォールルールが機能していないかどうかを探していましたが、iptables --list-rules
fail2banが機能する別の本番サーバーと完全に一致しました。
驚異的な解決策は、ポート8080をブロックされたポートに追加することでした。
だから私の状況での修正は、この問題が私のjail.local
:
[JIRA-LOGIN-tcp]
enabled = true
port = http,https,8080
protocol = tcp
filter = JIRA-LOGIN-ERROR
logpath = /var/atlassian/application-data/jira/log/atlassian-jira-security.log
bantime = 600
maxretry = 1
「すでに禁止された」メッセージで自分の問題と解決策を提供したいと思います。あなたが書いたように、攻撃者はすでに禁止されているはずでしたが、私は数分でそれらの何百も持っていました。
始める前に、これが私のシステムです:
ルートサーバーにOpenVPNをインストールしたとき、firewalldをiptablesに切り替えました。それがこの問題を引き起こしたかもしれませんが、それを除けば、私のシステムはほとんど変更されておらず、まったく新しくインストールされていました(Stratoルートサーバーがインストールイメージを提案しました)。
この問題がある場合は、/ etc/fail2ban/jail.d/00-firewalld.confで次のような行を確認してください。
banaction = firewallcmd-ipset
コメントアウトしてからファイルを保存して再起動したfail2ban.service
、fail2banを使用すると、すべてが問題なく動作しました。これ以上メッセージはありません
私は専門家ではありませんが、あなたに正しい答えを提供したいと思っています。問題が解決しない場合は、お知らせください。