概要 #
この記事では、リクエストをブロックするために使用される F5 BIG-IP iRule を移行する方法について説明します。 X-Forwarded-For HTTPヘッダーを RELIANOID 統合された WAF/IPDS(侵入防止・検知システム) ModSecurity/OWASPルールセットに対応しています。
オリジナルのiRuleは、 X-Forwarded-For ヘッダーとHTTPを返す 410 Gone IPアドレスのリストと一致するものが見つかった場合。
オリジナルF5 iRule #
when HTTP_REQUEST { if { [HTTP::header values "X-Forwarded-For"] contains "31.192.108.123" || [HTTP::header values "X-Forwarded-For"] contains "65.103.109.21" || [HTTP::header values "X-Forwarded-For"] contains "193.90.12.87" || [HTTP::header values "X-Forwarded-For"] contains "208.100.0.117" || [HTTP::header values "X-Forwarded-For"] contains "100.113.150.102" || [HTTP::header values "X-Forwarded-For"] contains "176.10.99.200" || [HTTP::header values "X-Forwarded-For"] には "163.172.143.114" が含まれています || [HTTP::header values "X-Forwarded-For"] には "163.172.209.46" が含まれています || [HTTP::header values "X-Forwarded-For"] には "188.138.9.49" が含まれています || [HTTP::header values "X-Forwarded-For"] には "217.23.13.129" が含まれています || [HTTP::header values "X-Forwarded-For"] には "162.247.72.27" が含まれています || [HTTP::header values "X-Forwarded-For"] には "194.67.208.57" が含まれています || [HTTP::header values "X-Forwarded-For"] contains "41.216.186.114" } { HTTP::respond 410 } }
RELIANOID 移行アプローチ #
In RELIANOIDこのロジックは、以下の方法で実装できます。
- WAF/IPDSモジュール
- ModSecurity/OWASPカスタムルール
- 外部IPマッチファイル
この方法は、スクリプト内に複数のIPアドレス比較を埋め込むよりも、拡張性が高く、メンテナンスも容易です。
おすすめ RELIANOID アーキテクチャ #
移行には以下が使用されます。
- X-Forwarded-For HTTPヘッダーの検査
- IPアドレスを含む外部ブラックリストファイル
- ModSecurity/OWASPルールセット演算子を使用した動的IPマッチング
Advantages:
- より簡単なIP管理
- 中央集中型ブラックリスト
- IPアドレスの変更ごとにルールを編集する必要はありません
- スケーラビリティの向上
WAFルール設定 #
以下の ModSecurity/OWASP ルールは、WAF/IPDS モジュール内で Raw モードに設定できます。
SecRule REQUEST_HEADERS:X-Forwarded-For "@ipMatchFromFile /usr/local/relianoid/config/ipds/waf/sets/xff_blacklist.data" "\ id:1001,\ msg:'Custom Match',\ phase:1,\ deny,\ nolog"
ルールの仕組み #
このルールは以下の動作を実行します。
REQUEST_HEADERS:X-Forwarded-ForX-Forwarded-For HTTPヘッダーを読み取ります
@ipMatchFromFileヘッダー値を外部ファイルと比較します。
xff_blacklist.txtブロックされたIPアドレスのリストが含まれています
phase:1リクエストヘッダー処理中に実行されます
deny: 一致するリクエストをブロックします
nolog: 一致したリクエストのログ記録を無効にします
ブラックリストファイル設定 #
ブラックリストファイルを作成します。
/usr/local/relianoid/config/ipds/waf/sets/xff_blacklist.data
内容例:
31.192.108.123 65.103.109.21 193.90.12.87 208.100.0.117 100.113.150.102 176.10.99.200 163.172.143.114 163.172.209.46 188.138.9.49 217.23.13.129 162.247.72.27 194.67.208.57 41.216.186.114
ウェブUI経由でルールを設定する #
IPデータリストを作成する #
セクションに新しい WAF データ ファイルを作成します IPDS > WAF > ファイル IPリストの内容を含む:

ルール条件を作成する #
セクションで新しい WAF ルールセットを作成します IPDS > WAF > ルールセット マッチIP条件を含む:

ファームでルールを有効にする #
ルールセットを有効にし、必要な農場に割り当ててください。

重要な運用上の注意事項 #
ブラックリストファイルを変更するには、以下の要件を満たす必要があります。
- WAFルールの停止
- WAFルールを再開します
これによりルールが再読み込みされ、更新されたIPリストが適用されます。これは、影響を受けるファームで検査されるWAFルールにのみ影響し、ロードバランサーを通過する実際のトラフィックには影響しません。
検証とテスト #
ルールの動作を検証するには、以下のコマンドを使用できます。
curl -k -H "X-Forwarded-For: IP_ADDRESS" https://LB_VIP -v
例:
curl -k -H "X-Forwarded-For: 31.192.108.123" https://192.168.1.100 -v
期待される結果 #
IPアドレスがブラックリストと一致する場合:
- WAFによりリクエストが拒否されました
- HTTPエラー応答が返されました
オプション機能強化:HTTP 410を返す #
元のF5 iRuleは明示的に以下を返します。
HTTP 410 Gone
デフォルトでは、ModSecurity/OWASPルールセットはアクションを拒否し、HTTPを返す可能性があります。 403 Forbidden.
厳密な動作の均一性が求められる場合、ルールは以下のように拡張できます。 410.
例:
SecRule REQUEST_HEADERS:X-Forwarded-For "@ipMatchFromFile /usr/local/relianoid/config/ipds/waf/xff_blacklist.txt" "\ id:1001,\ msg:'Custom Match',\ phase:1,\ deny,\ status:410,\ nolog"
トラブルシューティング #
ルールがトリガーされない #
確認してください:
- ファームでWAF/IPDSが有効になっています
- ルールは正しく読み込まれました
- リクエストにヘッダーが存在します
- ファイル変更後にルールが再起動されました
リクエストはブロックされませんでした #
チェック:
- ファイル内のIPフォーマット
- 余分なスペースや隠し文字はありません
- 正しいファイル権限
ヘッダーがありません #
一部のアップストリームプロキシは送信しない可能性があります X-Forwarded-For検証方法:
curl -k -H "X-Forwarded-For: 1.2.3.4" https://LB_VIP -v
トラブルシューティングにはログ記録が必要です #
一時的に削除する:
ノーログ
これにより、デバッグ目的でModSecurity/OWASPルールセットのログ記録が可能になります。
ベストプラクティス #
- ブラックリストファイルを一元的に管理する
- ブラックリストの更新には自動化を活用する
- ブロックされたIPアドレスを定期的に確認する
- WAFルールファイルを適切な権限で保護する
- 拡張性を考慮すると、ハードコードされたルールよりも外部ファイルを優先する。
製品概要 #
F5 iRules の実行 X-Forwarded-For フィルタリングは効率的に移行できます RELIANOID 統合されたWAF/IPDSモジュールとModSecurityルールを使用します。
このアプローチは以下を実現します:
- 集中型IP管理
- スケーラビリティの向上
- メンテナンスが容易
- ネイティブWAF統合
- スクリプト作成の複雑さを軽減