- PR -

SynFlood 対策の iptables 設定

1
投稿者投稿内容
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 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
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2007-04-29 16:56
引用:
kozuさんの書き込み (2007-04-28 09:30) より:
・SynFlood対策として、SYN,RST,ACK SYN が1秒間に4回連続でアクセスがあるとブロックする。
(snip)
-A syn-flood -m limit --limit 1/sec --limit-burst 4 -j RETURN



1秒間に4回連続でアクセスがあるとブロックするなら
--limit 3/s --limit-burst 3 ではないですか ?
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-04-30 13:21
引用:

はしもとさんの書き込み (2007-04-29 16:56) より:
引用:
kozuさんの書き込み (2007-04-28 09:30) より:
・SynFlood対策として、SYN,RST,ACK SYN が1秒間に4回連続でアクセスがあるとブロックする。
(snip)
-A syn-flood -m limit --limit 1/sec --limit-burst 4 -j RETURN



1秒間に4回連続でアクセスがあるとブロックするなら
--limit 3/s --limit-burst 3 ではないですか ?




ご回答ありがとうございます。

ご指摘の項目については、下記の 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 ]
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 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秒毎以上の速度だとロックされるはず

あとは実験してみてください。
kozu
常連さん
会議室デビュー日: 2007/04/28
投稿数: 21
投稿日時: 2007-04-30 20:54
ご回答ありがとうございます。

limit-burst については実験して試してみるのが一番のようですね。
さっそく、機会を見計らって検証をしてみたいと思います。

また、limit-burst 以外には不備が無さそうなので、これで運用してみたいと思います。

回答して下さいました皆様方、本当にありがとうございました。
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2007-05-01 11:57
私も勘違いしてるかもしれないので自分の認識も書いてみます。

--limit X/s --limit-burst Y

最初リミットカウントは 0 。
パケットがこのルールに来たら、Y >= リミットカウント+1 なら
リミットカウントを 1 増やしてマッチとなる。

これとは別に limit で指定した間隔でリミットカウントが
0 になるまで 1 づつ減らす。

です。


[ メッセージ編集済み 編集者: はしもと 編集日時 2007-05-01 12:10 ]
1

スキルアップ/キャリアアップ(JOB@IT)