Linux サーバで、
- SYN-RECV が大量に溜まっている
- 新規接続が遅い
- サーバ負荷が上がっている
この状態を見ると、
「SYN flood 攻撃では?」
と疑いがちです。
しかし実際には、
正当な高負荷と SYN flood はまったく別物
であり、見誤ると
- 無駄な遮断
- サービス停止
につながります。
本記事では、
- SYN flood の特徴
- 通常負荷との違い
- 実務的な見分け方
を段階的に整理します。
目次
SYN flood とは何か
SYN flood は、
- SYN を大量送信
- ACK を返さない
ことで
サーバの半接続キューを枯渇させる攻撃
です。
結果として、
- SYN-RECV が減らない
- 新規接続が受け付けられない
状態になります。
見分けの最重要ポイント
結論から言うと、
「ACK が返っているかどうか」
が最大の判断軸です。
判断指標①:SYN-RECV の挙動
確認コマンド
ss -ant | grep SYN-RECV | wc -l
正常負荷の場合
- 増えるが時間とともに減る
- ピーク後に落ち着く
SYN flood の場合
- 常時大量
- 減らない
判断指標②:再送(retransmission)の有無
確認コマンド
netstat -s | grep -i retrans
読み取り
- 正常負荷:再送はほぼ増えない
- SYN flood:再送が増え続ける
SYN-ACK が返らず再送されていることを示します。
判断指標③:接続元IPの分布
確認コマンド
ss -ant | grep SYN-RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
判断
- 特定IPに偏る → 攻撃疑い
- 広範囲に分散 → 正常負荷の可能性
判断指標④:CPU / softirq の状態
確認コマンド
mpstat -P ALL
読み取り
- SYN flood:softirq が異常に高い
- 正常負荷:CPU 使用率が徐々に上昇
判断指標⑤:アプリケーションログ
以下を確認します。
- accept エラー
- connection timeout
ログが出ない=攻撃とは限らない点に注意します。
対処を分ける判断表
| 指標 | 正常負荷 | SYN flood |
|---|---|---|
| SYN-RECV | 一時的 | 常時大量 |
| 再送 | 少ない | 多い |
| 送信元IP | 分散 | 偏り・ランダム |
| softirq | 通常 | 異常高 |
やってはいけない誤対応
- 即座に tcp_max_syn_backlog を増やす
- 根拠なく IP を遮断
- アプリ側を疑わない
正しい初動対応
- 指標を確認して分類
- 攻撃疑いなら FW / LB 側で制御
- 正常負荷ならアプリ / キャパシティ見直し
「解決した」と判断する基準
- SYN-RECV が自然に減る
- 新規接続が正常化
- 再送が増え続けない
まとめ
- SYN flood は挙動で見分ける
- SYN-RECV の「減らなさ」が重要
- 誤対応が一番のリスク
SYN flood かどうか迷ったら、
「ACK が返っているか」を軸に判断
これが最短で安全な見分け方です。
あわせて読みたい


net.ipv4.tcp_max_syn_backlog を触る前の判断基準
Linux のネットワークチューニングで、 SYN-RECV が溜まっている 接続が遅い・不安定 といった状況を見ると、 tcp_max_syn_backlog を増やせば解決するのでは? と考え…
あわせて読みたい


Linuxでacceptキューが溢れる時の見方
Linux サーバで、 接続が遅い ときどき接続エラーが出る SYN-RECV が溜まっている といった状況を見ると、 acceptキューが溢れているのでは? と疑うことになります。 …
あわせて読みたい


tcp_wmem / tcp_rmem を変更すべき具体条件
Linux のネットワークチューニングで必ず話題に上がるのが、 tcp_wmem tcp_rmem ですが、 とりあえず増やす 高速化するらしいから変更する という対応は ほぼ失敗します…
