DDoSパケット保護とフィルタリング
1)なぜそれを必要とします
DDoSは、バンド/pps、ステートテーブル、コアCPU/IRQ、接続プール、アプリケーション制限などのリソースの「大規模な劣化」です。目標は、ネットワーク境界上のボリュームを消去し、TCP/IPスタックへのプロトコル異常を中和し、L7上の不要な要求を遮断し、正当なユーザーのSLOを節約することです。
2)攻撃クラス
2.1 L3/L4(容積測定/プロトコル)
容積:UDPの洪水、UDP反射/増幅(DNS/CLDAP/NTP/SSDP/memcached/mDNS)、 GREの洪水。
プロトコル/状態枯渇:SYN洪水、ACK/RST洪水、TCP接続枯渇、ICMP洪水、TCP断片化。
QUIC/UDP機能:false Initial/Retry storms、なりすましソース。
2.2 L7(アプリケーション)
。 。1:高価なルートの背後にあるクエリ、ヘッダーのオーバーサイズ/フィールドの密輸。
HTTP/2:急速な調整、流れ洪水、ヘッダーの洪水、優先順位の乱用。
HTTP/3 (QUIC):接続/スレッド終了なし、初期フラッド。
スローポスト:slowloris/slow-read/slow-POST。
gRPC/WebSocket:無限のストリーム、メッセージ洪水、大きなフレーム。
3)基本的なセキュリティアーキテクチャ
1.Anycast+スクラブ
グローバルにトラフィックをスプレーし、プロバイダのスクラビングセンターを介して駆動(エッジで体積/スプーフィングを遮断)。
2.マルチCDN/マルチエッジ
ドメイン分離(Web、 API、静的)、保護の集約、読み込み負荷のキャッシュ。
3.周囲のローレベルフィルタ
境界ルータ上のACL (RFC1918、 bogon、既知の偽ポート)。
eBPF/XDPを使用して、シグネチャとレートの早期ドロップを可能にします。
4.L7周辺(NGINX/Envoy/WAF)
キーによるRPS圧縮、チャレンジ(captcha/PoW)、キャッシュ、「高価な」パスの優先順位付け。
5.内部安定性
接続プール、キュー、回路/タイムアウト、サービスアイソレーション(隔壁)およびシェダーのオートスケーリング。
4)ネットワーク「バルブ」: すぐにオンにするもの
4.1 Linux sysctl(カーネル/スタック)
bash
TCP SYN flood sysctl -w net. ipv4. tcp_syncookies=1 sysctl -w net. ipv4. tcp_max_syn_backlog=4096 sysctl -w net. ipv4. tcp_synack_retries=3
Conntrack/sysctl -w net tables. netfilter. nf_conntrack_max=262144 sysctl -w net. netfilter. nf_conntrack_tcp_timeout_established=300
ICMP/redirect sysctl -w net. ipv4. icmp_echo_ignore_broadcasts=1 sysctl -w net. ipv4. conf. all. accept_redirects=0 sysctl -w net. ipv4. conf. all. send_redirects=0
sysctl -w net socket resources. core. somaxconn=4096 sysctl -w net. core. netdev_max_backlog=250000 sysctl -w net. core. rmem_max=134217728 sysctl -w net. core. wmem_max=134217728
4.2 nftables:基本的なフィルターとパッケージ上のratelimit
nft table inet filter {
sets {
bogon { type ipv4_addr; flags interval; elements = { 0. 0. 0. 0/8, 10. 0. 0. 0/8, 100. 64. 0. 0/10,
127. 0. 0. 0/8, 169. 254. 0. 0/16, 172. 16. 0. 0/12, 192. 0. 2. 0/24, 192. 168. 0. 0/16, 198. 18. 0. 0/15, 224. 0. 0. 0/4 } }
}
chains {
input {
type filter hook input priority 0; policy drop;
ip saddr @bogon drop ct state established,related accept
UDP amplification ports - limit pps udp dport {53,123,1900,11211,389,1900,5353} limit rate over 2000/second drop
SYN rate-limit tcp flags syn tcp dport {80,443} limit rate over 2000/second drop
ICMP flood ip protocol icmp limit rate 100/second accept
}
}
}
4.3 XDP/eBPF(アイデア)
スプーフィングされたソースを含む早期ドロップパケット(uRPFはルータで歓迎されています)。
ハッシュバケットpps/32 と/24。ソースの動的な「隔離」。
UDPリフレクション:DNS応答のような署名(コンテキスト外でフィルタリング)。
5) UDP増幅: 在庫とブロック
頻繁な反射器/アンプ:DNS(オープンリゾルバ)、NTP(モンリスト)、CLDAP、 SSDP、 mDNS、 Memcached (UDP)、 Chargen。
対策:- UDPサービスを閉じる/制限し、開いているポートを最小化します。
- 周囲では、既知のポートのpps/bitrateを制限します。
- DNS勧告:ネットワーク、RRL (Response Rate Limiting)に対してのみ再帰的で、ANYを最小限に抑えます。
- NTP-信頼できる「ブートストラップ」のみ、公共のための「noquery」。
6) TCP状態の疲労
SYNフラッド:'tcp_syncookies=1'、 'tcp_max_syn_backlog'、 'synack_retries=3'、 ppsでドロップします。
ACK/RST洪水:低レベルの制限、不正なシーケンスのスクリーニング(nftables/ebpf)。
境界線上のConntrack-less:ステートレス署名によってフィルタが可能な状態テーブルを無駄にしないでください。
7) HTTP/2/3とスマートなL7攻撃
HTTP/2急速なリセット:RSTフレームの頻度および開いた流れの数を限って下さい;異常の場合は接続を閉じます。
ストリーム乱用:同時ストリーム、ヘッダーサイズ、最大フレームサイズ。
QUIC/HTTP/3: limit Initial pps、 enable Retry;短いハンドシェイクタイムアウト。
NGINX (フラグメントL 7)
nginx
Header/body constraint client_max_body_size 1m;
large_client_header_buffers 4 8k;
HTTP/2 limits http2_max_concurrent_streams 128;
http2_recv_buffer_size 256k;
Rate limit by IP (example)
limit_req_zone $binary_remote_addr zone=reqs:20m rate=100r/s;
limit_req zone=reqs burst=200 nodelay;
特使(アンチリセットと制限)
yaml http2_protocol_options:
max_concurrent_streams: 128 initial_stream_window_size: 65536 max_outbound_frames: 10000 stream_error_on_invalid_http_messaging: true
8)遅い攻撃とリソース保護
Slowloris/slow-read/slow-POST: 'proxy_request_buffering on'、 low idle-timeout、 minimum acceptable 'read_rate'を有効にします。
リクエストごとに長いパケット間で接続を終了します。
アプリケーション-早読み/本体破棄、JSONサイズ/深さ制限。
9) L7フィルタリング: 誰がより重要ですか-それを通過させます
トラフィック分類:正常(mTLS/JWTパートナー)、登録ユーザー、匿名。
優先順位:「高価な」書き込みルート(預金/結論)-保護、しかし、確認ミス;read-directories-キャッシュ+スロットル。
チャレンジレイヤー:captcha/PoW/JSがピーク時のグレーゾーンのチャレンジ。
10)キャッシュ、合体、劣化
静的/準静的応答のエッジキャッシュ'stale-while-revalidate'。
Request coalescing:プロキシとアプリケーション内の1つのキーに並列リクエストを折りたたみます。
劣化モード:セカンダリ機能(パーソナライゼーション、重いレポート)を無効にし、「軽い」ページを発行します。
11)観測可能性およびテレメトリー
メトリック(POP/ノード/クラスタごと):- L3/L4: 'pps_in/out'、 'bps_in/out'、 'drop_pps {reason}'、 'syn_recv'、 'conntrack_used/limit'、 'xdp_drop_pps'。
- L7: 'requests_total {route}'、 '429_total'、 'challenge_total {type}'、 'h2_rst_rate'、 'slow_req_total'。
- 依存関係:CPU IRQ soft/hard、 NIC queue drop、 run-queue length。
ログ:サンプリングされ、/24, ASN、ポートおよび署名によって集約されます。PIIなし。
トレース:ホワイトリストで有効にし、デバッグ用のクラッシュ展開サンプリング。
12)対応計画(runbook)
1.検出:pps/bps/429/h2_rst_rateしきい値のトリガー。
2.分類:レベル(L3/4/7)、プロトコル(UDP/TCP/h2/h3)、 geo/ASN。
- プロバイダでスクラブ/ブラックホールプロファイルを有効にする
- nftables/ebpfの制限を強化し、
- L7の制限を緩和し、課題を増やします、
- QUIC(初期洪水)の再試行を有効にします。
- 4.コミュニケーション:ステータスページ、パートナー通知テンプレート。
- 5.フォレンジック:PCAPキャプチャ(60〜120秒間)、トップトーカーのASN/ポートをサンプリングします。
- 6.レトロスペクティブ:シグネチャ、しきい値、リフレクターリストを更新します。
13)テストおよびドリル
DDoSドリルのプレイブックを四半期ごとに:合成UDP/HTTPバースト、遅いトラフィック、HTTP/2リセット。
ゲームの日:AnycastはCDN間の切り替え/移行、劣化は「簡単モード」になります。
プロバイダ検証:SLAスクラブ、フィルタオン/オフタイム、最大pps/bps。
14) Antipatterns
容積の攻撃のためのL7-WAFだけに頼って下さい。
縁石のuRPF/ACLおよびconntrack重いフィルタリングヘッドオン無し。
無制限のヘッダー/ボディとピーク時に長いキープアライブ。
Anycast/マルチエッジなしの単一の領域/ROR。
NIC/IRQ/CPUインベントリおよびキュー監視なし。
キャッシュ/結合なし-バックエンド用の余分なRPS。
15) iGaming/Financeの詳細
一時的なピーク(マッチ/ダービー/ロトの描画):POP容量を事前に拡張し、係数の積極的なキャッシュを含む、匿名の人々のためのカナリアチャレンジ。
支払/出力ルート:mTLS、短いタイムアウト、競争力のある限界を持つ独立したエッジプール。0-RTTはありません。
地理政治家:地域の許可ライト、「ホスティング」のASNフィルタリング、高速地理スイッチング。
antifraudとの交差:velocity limitとRisk APIは、DDoSインシデントで「ハード」プロファイルに入ります。
16) Prod Readinessチェックリスト
- Anycastのmulti-edge/CDN;スクラビングチャンネルがチェックされました。
- Border-ACL/uRPF;nftables/ebpf/XDPプロファイル、conntrack-lessフィルタリング。
- Sysctl TCP/SYNチューニング、UDPアンプ・ポートのlimit pps。
- HTTP/2/3制限(ストリーム、フレーム、ヘッダー)、遅い保護、ボディ/ヘッダー制限。
- L7の限界と挑戦;キャッシュと境界上の合体。
- ダッシュボードpps/bps/conntrack/IRQ+L7 RED;異常をh2_rst/429するように警告します。
- Runbook/Playbook、プロバイダの連絡先、ワンクリックでプロファイルを有効にします。
- 教え:バースト、遅い、HTTP/2リセット;レポートおよび記録の改善。
- 支払/クリティカルルート、mTLS、および厳密な制限のためのスプリットプール。
17) TL;DR(ドクター)
保護の層別化:Anycast+スクラビングダンピングボリューム、eBPF/XDP+nftablesカットゴミをスタックに、L7リミット/チャレンジ/キャッシュはSLAを保持します。TCP (SYNクッキー、バックログ)を調整し、UDPアンプを制限し、HTTP/2/3制限を設定し、保護を遅くします。ランブックを持って、それを訓練してください。iGamingの場合-ピーク時に事前にエッジを拡張し、mTLSとハード制限で支払いパスを分離します。