- - PR -
SynFlood 対策の iptables 設定
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-28 09:30
初めて投稿させていただきます。
kozuと申します。 今回ご相談させていただきたいのは、SynFlood 対策の iptables 設定についてです。 最近、中国からの SynFlood 攻撃が酷いので、iptables 設定を行う事にしました。 ○利用環境 ・Debian/Etch(3.1) ・2.6.8-2-386 ・iptables 設置対象のサーバーは、INPUT & FORWARD の両方を必要とする環境である。 ・iptables のテンプレは、iptalbes コマンドから設定した後に、iptables-save から採取したものを使う。 しかし、外部ファイルを使った設定の中でも、iptables-save から採取した設定例が少ないように感じられて、自分の設定が正しいのかどうかが不安です。 お手数ですが、私の設定をご査収頂く事は可能でしょうか。 よろしくお願い致します。 ○実現したい事 ・最低限許可したい通信のみを通す ・SynFlood対策として、SYN,RST,ACK SYN が1秒間に4回連続でアクセスがあるとブロックする。 ○実際の設定 # Generated by iptables-save v1.2.11 on Sat Apr 28 09:28:49 2007 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] UTPUT ACCEPT [1038:337286] :syn-flood - [0:0] -A INPUT -i eth1 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j syn-flood -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -p udp -m udp --dport 53 -j ACCEPT <上記と同様のプロトコル関連の設定は略してあります> -A INPUT -i lo -j ACCEPT -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -j LOG --log-prefix "[IPTABLES INPUT] : " --log-tcp-options --log-ip-options -A INPUT -j DROP -A FORWARD -i eth1 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j syn-flood -A FORWARD -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -p tcp -m tcp --dport 25 -j ACCEPT <上記と同様のプロトコル関連の設定は略してあります> -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -j LOG --log-prefix "[IPTABLES FORWARD] : " --log-tcp-options --log-ip-options -A FORWARD -j DROP -A syn-flood -m limit --limit 1/sec --limit-burst 4 -j RETURN -A syn-flood -j LOG --log-prefix "[IPTABLES SYN-FLOOD]" --log-tcp-options --log-ip-options -A syn-flood -j DROP COMMIT | ||||||||
|
投稿日時: 2007-04-29 16:56
1秒間に4回連続でアクセスがあるとブロックするなら --limit 3/s --limit-burst 3 ではないですか ? | ||||||||
|
投稿日時: 2007-04-30 13:21
ご回答ありがとうございます。 ご指摘の項目については、下記の man を読んだ上で、limit で指定した時間の間に limit-burst の制限回数を超えると、指定したアクションが起こると解釈していました。(英語自体が得意ではないので、誤訳からの理解があるかもしれず、多少自身は無いのですが。。) 従って、私の設定であれば、1秒間に4回、言い換えれば3秒間に12回とも言えると理解しております。 それでいて、もし [--limit 3/s --limit-burst 3] で設定したのであれば、3秒間に3回(1秒間平均換算であれば1回) になると考えておりました。 もし私の理解が間違っているのであれば、[--limit (x)/s --limit-burst (y)] の意味についてご教授頂ければ幸いです。 (なお、limit-burst 4というのは少なすぎた事が検証で分かりましたので、15にした上で運用しております) それでは、よろしくお願いします。 dstlimit This module allows you to limit the packet per second (pps) rate on a per destination IP or per destination port base. As opposed to the `limit' match, every destination ip / destination port has it's own limit. --dstlimit avg Maximum average match rate (packets per second unless followed by /sec /minute /hour /day postfixes). --dstlimit-mode mode The limiting hashmode. Is the specified limit per dstip, dstip-dstport tuple, srcip-dstip tuple, or per srcipdstip-dstport tuple. --dstlimit-name name Name for /proc/net/ipt_dstlimit/* file entry [--dstlimit-burst burst] Number of packets to match in a burst. Default: 5 [--dstlimit-htable-size size] Number of buckets in the hashtable [--dstlimit-htable-max max] Maximum number of entries in the hashtable [--dstlimit-htable-gcinterval interval] Interval between garbage collection runs of the hashtable (in miliseconds). Default is 1000 (1 second). [--dstlimit-htable-expire time After which time are idle entries expired from hashtable (in miliseconds)? Default is 10000 (10 seconds). [ メッセージ編集済み 編集者: kozu 編集日時 2007-04-30 13:22 ] | ||||||||
|
投稿日時: 2007-04-30 16:54
こんにちは
--limit X/s --limit-burst Y 間違っているかも知れませんが、私は Xは単位時間にロックを回復する数量 Yは突発的な要求のためのマージンと解釈してます。 --limit 10/min --limit-burst 5 とした場合 6秒に一度のアクセスならロックが回復していますが それを上回るアクセスが突発的にあった場合に5個まで受け付ける 30(60/10*5)秒で全部回復する。 多分これで解釈はあっているはず。 --limit 10/min --limit-burst 1 だったら1分間に10回アクセス可能だけど6秒毎以上の速度だとロックされるはず あとは実験してみてください。 | ||||||||
|
投稿日時: 2007-04-30 20:54
ご回答ありがとうございます。
limit-burst については実験して試してみるのが一番のようですね。 さっそく、機会を見計らって検証をしてみたいと思います。 また、limit-burst 以外には不備が無さそうなので、これで運用してみたいと思います。 回答して下さいました皆様方、本当にありがとうございました。 | ||||||||
|
投稿日時: 2007-05-01 11:57
私も勘違いしてるかもしれないので自分の認識も書いてみます。
--limit X/s --limit-burst Y 最初リミットカウントは 0 。 パケットがこのルールに来たら、Y >= リミットカウント+1 なら リミットカウントを 1 増やしてマッチとなる。 これとは別に limit で指定した間隔でリミットカウントが 0 になるまで 1 づつ減らす。 です。 [ メッセージ編集済み 編集者: はしもと 編集日時 2007-05-01 12:10 ] |
1