CentOS 7.概要:パート4:DDoS TCP SYNフラッド攻撃の緩和。 クラウドで無料でテスト

CentOS 7レビューの第1部では、Cent OS 7でのLinuxコンテナーのサポートについて説明しました 。第2部では、 ID管理について説明しました。 レビューの第3部では、NFSネットワークファイルシステムとその環境について触れまし 。 この記事では、DDoS TCP SYN Flood攻撃の緩和について説明します。 投稿の最後に、Infobox クラウドVPSでの無料のCentOS 7テストへのリンクがあります。







DDoS(Distributed Denial of Service)攻撃は、ビジネスがインターネットにますます依存するようになっているため、より頻繁になっています。 DDoSの最も一般的なタイプの1つはSYN Floodです。 これは、エンドホストに対する主な攻撃であり、サーバーを破壊します。 その結果、サーバーは着信要求を正しく処理できません。



説明したセキュリティメカニズムはCentOS 7で使用できますが、デフォルトでは有効になっていないことに注意することが重要です。



SYNフラッドがコアにとって苦痛な理由



LinuxカーネルのTCPスケーラビリティの主な問題は、1秒間に作成できる新しい接続の数です。 これは、「リッスン」状態のソケットのロックを指します。 Estabilished(Installed)接続は非常にうまくスケーリングします。 「リッスン」のロック状態は、SYNパケットだけでなく、「SYN-ACK」および「ACK」(TCPのトリプルハンドシェイクパケット)の初期接続用の他のパケットでも発生します。 フラッド攻撃のシナリオでは、ソケットが「リッスン」状態に入り、新しい着信接続をブロックする前に、偽の接続試行をフィルタリングするメカニズムが必要です。



Conntrackフィルタリングの基本



Netfilterの接続追跡システム(conntrack)を使用すると、ブロッキングリッスンステートをトリガーする前に、誤ったSYN-ACKおよびACKパケットのフィルター処理を開始できます。 これは長い間可能でしたが、デフォルトでは有効になっていませんでした。



次の2つのコマンドが役立ちます。

iptables -A INPUT -m state --state INVALID -j DROP /sbin/sysctl -w net/netfilter/nf_conntrack_tcp_loose=0
      
      





iptablesのルールは、接続追跡システムが「無効」として分類し、既知の接続状態の一部ではないパケットをキャッチします。



sysctlを設定すると、接続追跡システムの分類がより厳格になり、ACK –フラッド攻撃を回避するのに役立ちます。



パフォーマンスはどうですか?



その結果、SYN – ACKおよびACKに基づく攻撃の影響を20倍削減します。



NetfilterのConntrackは、低速であることで評判が悪いですが、テクノロジーの出現後初めてでした。 現在、優れたスケーラビリティを提供し、非常に高速です。 Conntrackはロックなしで動作し、既存の接続にRCU (コピーによる更新)を使用します。



本質的に、これはSYNを除くすべてのフラッドTCPパケットからの問題を防ぎます。



なぜこれはSYNフラッドで機能しないのですか?



Conntrackには、SYNフラッドによる接続の作成(または削除)に関して発生するスケーラビリティの問題(「リッスン」ロックに似ています)があります。



contrack SYNが構成された後でも、パケットがソケットに送信され、「リッスン」ロックが発生します。 この攻撃の軽減手法は、SYN Cookieを送信し、SYN – ACKが見えるまでステータスの作成を防ぐことです。



残念ながら、SYN Cookieは同じ「リッスン」ロックの下で送信されるため、この緩和策はスケーラビリティの問題を解決しません。 後で、この制限を回避する方法について説明します。



CentOS 7の新機能



Netfilter Workshop 2013では、「ネットワーク対策」のアイデアが提案されました。 これにより、SYNPROXY iptablesモジュールとそれに対応するNetfilterコアの変更が生まれました。 この機能は、CentOS 7で利用できるようになりました。



SYNPROXYモジュールは、2つのスケーラビリティの問題を解決するように設計されています。 まず、SYN Cookieと並行して動作します。 次に、SYN – ACKパケットを受信するまでconntrackを作成しません。これにより、conntrackは新しい接続をブロックしません。



SYNPROXYは、ローカルホストで使用することも、ファイアウォールの背後にある他のホストを保護することもできます。 最初の接続が確立されると、conntrackはすべての必要な変換を処理します(NATコードの一部を再利用します)。



localhostへの接続のテストでは、SYN攻撃を軽減するためにパフォーマンスが10倍向上することが示されました。



SYNPROXYセットアップ



SYNPROXYの構成は、ガイドなしでは非常に複雑になる場合があります。 この記事では必要な手順について説明しますが、 0スクリプトを使用して構成を簡素化できます。



この例を使用して、ポート80でWebサーバーを保護できます。



ステップ1


保護する接続がSYNパケットのconntrackを作成しないようにしてください。

 iptables -t raw -I PREROUTING -i $DEV -p tcp -m tcp --syn --dport $PORT -j CT --notrack
      
      





ステップ2


より厳密なconntrackをオンにします。 不正なACKパケットに対しては、無効なステータスを持つ必要があります。

 /sbin/sysctl -w net/netfilter/nf_conntrack_tcp_loose=0
      
      





ステップ3


ここで、これらのパケットを処理し、SYNPROXYモジュールに直接渡す必要があります。 これを行うには、トリプルハンドシェイクからのACKを含むパケットに対してUNTRACKED SYNおよびINVALID処理ルールを使用します(その他のルールは単純にこのルールを通過します)。

 iptables -A INPUT -i $DEV -p tcp -m tcp --dport $PORT -m state --state INVALID,UNTRACKED -j SYNPROXY --sack-perm --timestamp --wscale 7 --mss 1460
      
      





ステップ4


SYNPROXYにある無効な状態のパケットをキャッチし、破棄します。 これにより、SYN – ACKフラッドが防止されます。

 iptables -A INPUT -m state --state INVALID -j DROP
      
      





ステップ5


TCPタイムスタンプを必ず有効にしてください。 SYN CookieはこのTCPフィールドを使用します。

 /sbin/sysctl -w net/ipv4/tcp_timestamps=1
      
      





ステップ6


使用中のサイトがある場合は、conntrackを構成して、64,000接続の制限を増やすことをお勧めします。 また、conntrackハッシュのサイズを増やします。 これはパフォーマンスにとって非常に重要です。

 echo 1000000 > /sys/module/nf_conntrack/parameters/hashsize /sbin/sysctl -w net/netfilter/nf_conntrack_max=2000000
      
      





サイトに関連する制限値を設定し、そのメモリ使用量を計算する必要があります。 たとえば、288バイトの時点で2,000,000レコード=最大576 MBの潜在的なメモリ使用量。 ハッシュの場合、ハッシュテーブルの各ヘッドは、100万レコードあたり8バイト= 8 MBの固定割り当てメモリのみを占有します(キャッシュ値を選択するときのCPUキャッシュL3のサイズを覚えておいてください)。 ホストで使用されているプロセッサを確認するには、次のコマンドを使用します。

 cat /proc/cpuinfo
      
      







SYNPROXYの使用に関する考慮事項



SYNPROXYをオンにしても、気付かないことがあります。 エンドホストが必要とする接続の追加構成により、接続のセットアップが遅くなります。 エンドホストがローカルの場合、すべてが非常に迅速に行われ、実際には遅延は追加されません。



SYNPROXYモジュールのパラメーターはTCPオプションに対応している必要があり、TCP接続がプロキシされるエンドホストでサポートされている必要があります。 検出と設定はルールに基づいて手動で行われます(便利なツールは「nfsynproxy」です-iptables 1.4.21リリースの一部)。 残念ながら、これはモジュールをDHCPファイアウォールに単純に展開できないことを意味します。



将来、エンドホストのTCPオプションを自動検出する計画があります。 Red Hatバグトラッカーの機能投票してください



記事の準備に使用されたソース:

TCP SYNフラッド攻撃の軽減

公式RedHatブログ

RedHatナレッジベース

CentOS公式ブログ



クラウドでCentOS 7をお試しください


特に読者のために、アムステルダムのInfobox クラウドVPSでCentOS 7を試す機会を提供しました。 このリンクで15日間の試用版を登録します。 試用版よりも多くのテスト用リソースが必要な場合-trukhinyuri@infoboxcloud.comに連絡してください



All Articles