Fessのフォームログイン制限とプロキシ越しのIP記録を確認する

Fessの通常のログインフォームにも、v2ログインAPIと同じ試行制限を適用する変更が入りました。PR #3675に加え、ログのIPを信頼済みプロキシの規則へ合わせる #3673、複数行のX-Forwarded-Forを読む #3680、SPNEGO Basicの名前表記をまとめるプラグインの #10を整理します。

フォームとAPIが同じ試行枠を使う

POST /login/loginは、POST /api/v2/auth/loginと同じLoginRateLimiterを使うようになります。IP枠は試行時、ユーザー枠は認証失敗時に使い、制限を超えるとログインエラーとして扱います。フォーム専用に新しい設定を追加するわけではありません。

設定初期値
theme.api.login.rate.limit.per.ip.per.minute10
theme.api.login.rate.limit.per.user.per.minute5
theme.api.login.lockout.seconds900
theme.api.login.rate.limit.max.entries100000

ユーザー枠は「IPとユーザー名」の組み合わせです。フォームで5回失敗すると、同じ組み合わせのv2ログインにも影響します。ログイン成功時はそのユーザーの失敗と、その試行が使ったIP枠1件分を戻し、別ユーザーへの失敗までリセットしません。以前の記事「Fessのログイン成功後もIP単位の試行制限を維持する」に対し、今回は通常フォームへ適用範囲が広がる点が違いです。

監査ログ・検索ログのIPが変わる条件

rate.limit.trusted.proxiesの初期値は127.0.0.1,::1です。修正後は監査ログのipと検索ログのclientIpも、試行制限と同じ規則でクライアントIPを求めます。信頼対象に含まれないリバースプロキシ経由では、転送ヘッダーではなくプロキシのアドレスが記録されます。

実際にFessへ接続するプロキシのアドレスを確認し、管理下のプロキシだけを信頼対象へ追加します。設定反映後は直接アクセスとプロキシ経由の両方で、ログへ記録されるIPを確認します。NATなどで複数利用者が1つのIPに見える場合、試行枠を共有することにも注意します。

X-Forwarded-Forが複数のヘッダー行で届く場合は、すべてを受信順に連結して右側から信頼関係をたどります。最初の1行だけを使う動作を直すもので、任意のクライアントが送る転送ヘッダーを無条件で信じる変更ではありません。

SPNEGOのBasicフォールバック

SPNEGOプラグインでBasicフォールバックを有効にしている場合は、alice・ALICE・alice@REALM・DOMAIN\aliceといった同一アカウントの表記を正規化し、同じ失敗枠で数えます。ドメイン接頭辞とrealm接尾辞を除き小文字にする処理で、別のアカウントの枠まで統合しません。Basicを新しく有効化する手順ではありません。

関連PR

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です