IP を永久禁止する場合の fail2ban の奇妙な動作

IP を永久禁止する場合の fail2ban の奇妙な動作

ドキュメントによると、jail bantime を負の値に設定すると、永久禁止になるはずです。ただし、これを行うと、bantime を正の整数に設定した場合と比較して、次の動作が変わります。

1) ipset listfail2ban-sshdハッシュテーブルが表示されない

2)firewall-cmd --direct --get-all-rules空です

3) は/var/log/fail2ban.log1行になります。興味深いエントリ

sshd[25772]: 93.174.89.88 ポート 37477 からの無効なユーザー ubuntu'、'ip': '93.174.89.88'、'ipmatches': 0x7f4588f9dc08>、'ipfailures': 0x7f4588f9daa0>、'time': 1536301842.088076、'failures': 1443、'ipjailfailures': 0x7f4588f9dd70>})': 93.174.89.88 の禁止中にエラーが発生しました

4) は/var/log/messages次の通り

firewalld[916]: 警告: '/usr/sbin/iptables-restore --wait=2 -n' が失敗しました: iptables-restore v1.4.21: set fail2ban-sshd が存在しません。#012#012 行目にエラーが発生しました: 2#012 詳細については、'iptables-restore -h' または 'iptables-restore --help' を試してください。firewalld[916]: エラー: COMMAND_FAILED

期待どおりに動作する唯一のコマンドは ですがfail2ban-client status sshd、禁止されていると表示されている IP は依然として接続を試行します。整数が負になると、何らかの理由で ipset が作成されないことがすべての問題の根本であると思います。

何かアイデアはありますか? また、このコマンドは新しい構成を適用する場合fail2ban-client reloadと同じ効果がありますか?systemctl restart fail2ban.service

私の場合、/etc/fail2ban/jail.d/local.conf

[sshd]
enabled = true
bantime = -1
findtime = 3600
maxretry = 5
action = %(action_)s

答え1

これは、fail2ban の古いバージョンに存在したバグです。その後修正されましたが、Linux ディストリビューションに古いバージョンがまだ含まれている場合は、回避策も必要になる場合があります。

GitHub の問題問題の説明と修正には回避策も含まれています:

これは新しいバージョンでは修正されています。0.9 の場合は、jail 内のアクションで bantime (タイムアウト) パラメータを上書きするだけです (ipset 永続ルールのパラメータ タイムアウトは 0 です)。

[sshd]
bantime = -1
action = %(banaction)s[name=%(__name__)s, bantime=0, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

答え2

ipsetの最小タイムアウトは0、最大タイムアウトは2147483のみです。ipset.netfilter.org/ipset.man.html より

タイムアウト すべてのセット タイプは、セットの作成時およびエントリの追加時にオプションのタイムアウト パラメータをサポートします。create コマンドのタイムアウト パラメータの値は、新しいエントリのデフォルトのタイムアウト値 (秒単位) を意味します。タイムアウト サポートを使用してセットを作成すると、エントリの追加時に同じタイムアウト オプションを使用して、デフォルト以外のタイムアウト値を指定できます。タイムアウト値が 0 の場合、エントリはセットに永続的に追加されます。すでに追加されている要素のタイムアウト値は、-exist オプションを使用して要素を再度追加することで変更できます。可能な最大のタイムアウト値は 2147483 (秒単位) です。

ipset のタイムアウトの作成に使用される値は、conf 値 bantime です。bantime conf 値が -1 であるため、fail2ban の jail の ipset を作成中にシステムでエラーが発生します。これは、基本的にシステムが次のように実行されているため、ipset が作成されないからです。

ipset create fail2ban-sshd hash:ip timeout -1

許容されるタイムアウト値の範囲は 0 ~ 2147483 秒です。その後、fail2ban-sshd という名前の ipset を実行せずに、次のようなものを実行します。

firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

または:

iptables -t filter -I INPUT_direct 1 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

fail2ban-sshd という名前の ipset が作成されていないため、確実に失敗します。-1 bantime を 0 に変更する必要があります。

関連情報