今朝起きてすぐサーバーを確認したところ、突然 CPU 使用率が 99% まで急上昇していることに気づきました。しばらく調査した結果、CC 攻撃を受けていたことが分かりました。ネットワーク接続には大量の SYN 接続が発生しており、すべてのリソースを占有していたため、フロントエンドからウェブサイトを開けない状態になっていました。長い時間をかけて、ようやく解決策を見つけました。それは SYN 接続を遮断することです。これにより、攻撃の大部分を隔絶できます。以下に、私の考え方を共有します。
解決策
SYN 攻撃は TCP/IP プロトコルの 3 ウェイハンドシェイクの原理を利用し、大量の接続確立用ネットワークパケットを送信しますが、実際には接続を確立しません。最終的に、攻撃対象サーバーのネットワークキューがいっぱいになり、通常のユーザーがアクセスできなくなります。
SSH でコマンド sysctl -a | grep syn を実行すると、以下の内容を確認できます。
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
tcp_max_syn_backlogは SYN キューの長さです。tcp_syncookiesは、SYN Cookie 機能を有効にするかどうかを設定するスイッチです。この機能により、一部の SYN 攻撃を防止できます。tcp_synack_retriesとtcp_syn_retriesは、SYN の再試行回数を定義します。
SYN キューの長さを増やすと、接続待ちのネットワーク接続をより多く収容できます。SYN Cookie 機能を有効にすると、一部の SYN 攻撃を阻止できます。再試行回数を減らすことにも、一定の効果があります。
推奨値:
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3
これらのパラメータを設定すると、SYN 接続による CC 攻撃を効果的に隔絶できます。
