ルートレス podman keycloak コンテナのホストでの fail2ban

ルートレス podman keycloak コンテナのホストでの fail2ban

podman 4.4.1 を搭載した Rocky Linux 9.2 で実行しています。内部に keycloak + postgresql を備えた podman Pod があり、ルートレスで実行しています。pod 自体は です--network 'slirp4netns:port_handler=slirp4netns'。keycloak コンテナーは で実行されている--log-driver json-file --log-opt path=/var/log/keycloak.logため、ログ ファイルはホスト システム自体にあります。また、keycloak にアクセスできるようにする traefik プロキシ、traefik の ssl 終了、keycloak 自体の ssl 終了もあります。

これまでのところすべて正常に動作しており、ログインしようとしているユーザーの実際の IP アドレスがログに表示されます。Fail2ban はホスト システムで実行されており、正規表現も機能しており、正しい IP アドレスが禁止されていますが、IP が禁止されているにもかかわらず ( で確認できますfail2ban-client status keycloak)、ユーザーは引き続きログインを送信できます。

/etc/fail2ban/jail.d/keycloak.local

[keycloak]
backend = auto
enabled = true
filter = keycloak
maxretry = 3
bantime = 86400
findtime = 86400
logpath = /var/log/keycloak.log
action = iptables-allports[name=keycloak]

したがって、禁止される前は、iptables は空です。

iptables -n -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

禁止後:

iptables -n -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
f2b-keycloak  tcp  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain f2b-keycloak (1 references)
target     prot opt source               destination         
REJECT     all  --  xx.xx.xx.xx       0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

また、Docker が FORWARD チェーンを使用しているという情報も読んだので、action = iptables-allports[name=keycloak, protocol=all, chain=FORWARD]keycloak jail ファイルで設定しました。iptables には FORWARD チェーンのルールがありましたが、それでも機能しませんでした。デフォルト設定 (INPUT チェーン) を使用した場合と同じ動作です。

ルートレス podman コンテナーが iptables からの IP 禁止に従うようにするにはどうすればよいですか? 何かアイデアはありますか?

答え1

Fail2ban は (デフォルトでは) ファイアウォール レベルで動作し、ファイアウォール レベル自体は IP レベルで動作します。

設定により、すべてのトラフィックは、Keycloak に接続する唯一の IP を持つ外部の Traefik インスタンスによって中継されるため、ファイアウォールはその IP をブロックするか許可することができます。

不正な IP をブロックしたい場合は、Traefik ホストでブロックする必要があります (提供した情報に基づいて)。

答え2

fail2ban と X-Forwarded-For ヘッダーをいじるのは満足のいく解決策ではありません。私は opnsense API アプローチを使用してこれを解決しました。簡単な要約:

  • alias_util および診断ファイアウォール状態エンドポイントの権限を持つユーザー (API キー) を作成しました。
  • ipv4_blacklist外部(詳細)タイプのエイリアスを作成しました
  • ファイアウォールのWANルールを作成し、ソースからのすべてをブロックしましたipv4_blacklist
  • actionbanおよびを使用してKeycloakカスタムアクションを作成しましたactionunban

2 つのコマンドが必要ですactionban:

  1. 指定されたIPをブラックリストに追加するにはapi/firewall/alias_util/add/ipv4_blacklist
  2. を介してアクティブセッションを強制終了しapi/diagnostics/firewall/kill_states、禁止アクションが直ちに有効になります

1 つのコマンドでactionunban十分です。

  1. 指定されたIPを単に削除するapi/firewall/alias_util/delete/ipv4_blacklist

関連情報