Last-modified: 2011-12-26 (月) 01:24:45
iptables/SYN Flood対策をしたい

概要

SYN Flood攻撃への対策をとります。


SYN Flood攻撃は、TCP接続開始要求であるSYNパケットを利用した、攻撃手法です。
SYNパケットを大量に送り付け、SYN/ACKパケットを無視することで、対象サーバに無駄なリソースを消費させ、レスポンスの低下や、最悪の場合はダウンを誘発します。
発信元IPアドレスは偽装されているので、攻撃者は大量のSYN/ACKパケットを無視する必要もありません。

方法1 - 一定時間内に大量の要求が来た場合に破棄する

  1. 1秒あたり10回以上もしくは、持ち点20点以上になると、ログを書いて破棄するルールです。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
      6
      7
      8
    
    -
    !
     
     
     
     
    -
    !
    
    # ***SYNFLOOD攻撃対策用チェイン***
    iptables -N drop_synflood
    iptables -A drop_synflood -m limit --limit 10/s --limit-burst 20 -j RETURN
    iptables -A drop_synflood -j LOG --log-prefix "SYNFLOOD: " -m limit --limit 1/s --limit-burst 10
    iptables -A drop_synflood -j DROP
     
    # SYN FLOOD攻撃かをチェック
    iptables -A INPUT -p tcp --syn -j drop_synflood

方法2 - SYN cookiesを有効にする

SYN cookiesを有効にすると、SYN Flood状態となった場合に、リソースを割り当てずにSYN/ACKパケットを返すようになります。リソースはACKが帰ってきた時点で確保します。
SYN/ACKパケットを送る際、IPアドレスなどの情報を一方向ハッシュ関数でハッシュ化した値などから生成したTCPシーケンス番号を埋め込むので、IP偽装した攻撃者は正規のACKを送れません。

  1. 「/etc/sysctl.conf」を開きます。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
    
    -
    |
    |
    |
    !
    
    # SYN Cookies有効(SYN Flood対策)
    # ここで有効にしても常に機能しているわけではなく、必要になったときに動くらしい
    # これが動いていると正規の通信で3ウェイハンドシェイクの3パケット目が未達の場合
    # 再送が行われず問題になることがあるらしい
    net.ipv4.tcp_syncookies=1
  2. 反映させます。
    Everything is expanded.Everything is shortened.
      1
      2
      3
      4
      5
    
    -
    !
     
    -
    !
    
    # 起動中に反映
    sysctl -p
     
    # もしくは再起動
    shutdown -r now

検証時の環境

参考