- - PR -
iptables の RETURN の使い方
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-10 22:13
# ICMP DoS攻撃 対策
(1)iptables -N icmp-dos (2)iptables -A icmp-dos -m limit --limit 16/s --limit-burst 5 -j RETURN (3)iptables -A icmp-dos -j LOG --log-prefix "### ICMP DoS攻撃 ###" (4)iptables -A icmp-dos -j DROP (5)iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j icmp-dos (6)iptables -A FORWARD -i ppp0 -p icmp --icmp-type echo-request -j icmp-dos # Stealth scan 対策 (7)iptables -N stealth-scan (8)iptables -A stealth-scan -m limit --limit 1000/s --limit-burst 5 -j RETURN (9)iptables -A stealth-scan -j LOG --log-prefix "### Stealth scan ###" (10)iptables -A INPUT -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j stealth-scan (11)iptables -A FORWARD -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j stealth-scan # ローカルループバック (12)iptables -A INPUT -i lo -j ACCEPT # ICMP (13)iptables -A INPUT -p icmp -j ACCEPT # -------------- 略 ------------------- # DROP LOG INPUT (14)iptables -A INPUT -j LOG --log-prefix "# DROP LOG INPUT #" # DROP LOG FORWARD (15)iptables -A FORWARD -j LOG --log-prefix "# DROP LOG FORWARD #" limit 拡張は指定した許容量以下のパケットにマッチします。 この例の趣旨から考えて (2) と (8) のターゲットは RETURN が適当だと思います。 ppp0 の自アドレス宛てに ICMP echo-request パケットが来た場合。 (2)で許容量を超える場合、パケットは 5 - 2 - 3 - 4 と流れ捨てられます。 (2)で許容量を超えない場合は、5 - 2 - 10 - 12 - 13 と流れ受け入れます。 ppp0 の自アドレス宛てにポートスキャンされた場合。 (8) で許容量を超える場合は、5 - 10 - 8 - 9 - 12 - 13 - 14 と流れ INPUT チェインのポリシーに従い捨てられます。 ただし「略」の部分にマッチするルールがあり、-j ACCEPT としていたら 受け入れてしまいます。 (8) で許容量を超えない場合は、5 - 10 - 8 - 12 - 13 - 14 と流れ、 INPUT チェインのポリシーに従い捨てられます。 ppp0 にフォワード対象アドレス宛てに ICMP echo-request が来た場合 そのパケットはどう流れると思いますか ? [ メッセージ編集済み 編集者: はしもと 編集日時 2004-06-10 22:14 ] | ||||||||
|
投稿日時: 2004-06-10 23:07
ACCEPT、DROP、REJECTの組み込みターゲットはパケットのチェックを終了して、 指定された動作(ACCEPTなら通過、DROPなら破棄、REJECTは破棄してICMPを返す)を行うので それ以降のルールで評価されることはありません。 ユーザ定義チェインでも、そのパケットの扱いを決めてしまって良いならRETURNしなくてもいいです。 「残りのルールで評価されなくて『困る』」と言ったのは間違いです。 変なパケットならユーザ定義チェインの中でも即DROPですね。
?????をACCEPTとすると、そのパケットは後のルールで評価されずに 必ず通過させることになりますが、それが行いたい動作なのですか? ACCEPTとしても、RETURNとしても、この設定では平均1000パケット/秒「以下」の場合にしか?????のターゲットが呼び出されません。 それ以外の場合はLOGターゲットにマッチします。 iptables -A stealth-scan -m limit --limit 1000/s -j LOG --log-prefix "### Stealth scan ###" iptables -A stealth-scan -j DROP が行いたい設定ではないでしょうか? > iptables -A INPUT -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j stealth-scan で、stealth-scanチェインを呼び出すルールをINPUTチェインの最後に付け加えています。 パケットがこのルールにマッチした場合にstealth-scanチェインが呼び出され、呼び出し元はINPUTチェインということになります。 > iptables -A FORWARD -i ppp0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j stealth-scan パケットがこのルールにマッチしてstealth-scanチェインが呼び出された場合は、呼び出し元はFORWARDチェインになります。 呼び出し元チェインはiptablesコマンドだけで決まるのではなく、 そのパケットがどのルールで評価されたかで決まります。 | ||||||||
|
投稿日時: 2004-06-11 14:45
はしもとさんへ
わかりやすい説明ありがとうございました。 パケットの流れがよくわかりました。 そうすると、 >ppp0 にフォワード対象アドレス宛てに ICMP echo-request が来た場合 そのパケットはどう流れると思いますか ? については、 (2)で許容量を超える場合、パケットは 6 - 2 - 3 - 4 と流れ捨てられます。 (2)で許容量を超えない場合は、6 - 2 - 10 - 12 - 13 と流れ受け入れます。 ということですね。 ----追加----- >この例の趣旨から考えて (2) と (8) のターゲットは RETURN が適当だと思います。 今、気がついたんですけど、(2) の方は、ACCEPT でも RETURN でも同じことですね。 後の方に、 # ICMP iptables -A INPUT -p icmp -j ACCEPT という設定があるので。その場合は、 (2)で許容量を超えない場合は、5 - 2 と流れ受け入れます。 というふうになるんですよね。 [ メッセージ編集済み 編集者: coolkun 編集日時 2004-06-11 15:44 ] | ||||||||
|
投稿日時: 2004-06-11 14:46
cn009さんへ
やっと理解してきました。ありがとうございます。 >?????をACCEPTとすると、そのパケットは後のルールで評価されずに 必ず通過させることになります ということは、 # ICMP DoS攻撃 対策 @iptables -N icmp-dos Aiptables -A icmp-dos -m limit --limit 16/s --limit-burst 5 -j ACCEPT Biptables -A icmp-dos -j LOG --log-prefix "### ICMP DoS攻撃 ###" Ciptables -A icmp-dos -j DROP Diptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j icmp-dos Eiptables -A FORWARD -i ppp0 -p icmp --icmp-type echo-request -j icmp-dos # ICMP Fiptables -A INPUT -p icmp -j DROP の設定であった場合に、 ppp0 の自アドレス宛てに ICMP echo-request パケットが来た場合 Aで許容量を超えた場合は、パケットは 5 - 2 - 3 - 4 と流れ捨てられる。 Aで許容量を超えない場合は、5 - 2 と流れ受け入れる。 Aiptables -A icmp-dos -m limit --limit 16/s --limit-burst 5 -j RETURN であれば、 ppp0 の自アドレス宛てに ICMP echo-request パケットが来た場合 Aで許容量を超えた場合は、パケットは 5 - 2 - 3 - 4 と流れ捨てられる。 Aで許容量を超えない場合は、5 - 2 - 7 と流れ捨てられる。 という訳ですね。 >iptables -A stealth-scan -j DROP が行いたい設定ではないでしょうか? については、私も迷っているところなのですが、 某会社のファイアーウォールの設定で、ICM DOS攻撃対策はログを取り、破棄する。 Stealth Scan対策、SYN flood/Port Scan対策ではログを取るだけ。 となっていたので、Stealth Scan対策、SYN flood/Port Scan対策の場合は破棄をしない方がいいのかと。。 でもこれでは、その後の設定で、 iptables -A INPUT -i ppp0 -p tcp -d ***.***.**.***/32 --dport 80 -j ACCEPT のようにWEBやSMTP、DNSの設定があった場合、 25、80、53番ポート宛てのPort Scan(RSTフラグつきのtcpパケットなど)などは通していまうということになってしまいますね。 やっぱり、iptables -A stealth-scan -j DROP とやった方がいいでしょうか? [ メッセージ編集済み 編集者: coolkun 編集日時 2004-06-11 15:48 ] | ||||||||
|
投稿日時: 2004-06-11 21:04
前者は当たりです。 後者は惜しい、6 - 2 - 11 - 15 です。 FORWARD チェインなので。
結果的に、そうなりますね。 | ||||||||
|
投稿日時: 2004-06-12 21:53
Stealth Scanと呼ばれるものは様々なので一概には扱えません。 ただRSTフラグがオンでACKフラグがオフのパケットは通常ではありえないので、 DROPで構わないと思います。 それよりも、LOGのルールにlimitかけた方が良いですよ、というのが言いたかったんです。 特にDoS対策の方はlimitかけるべきです。 ログファイルへの書き込みが大量に発生してそれこそ攻撃者を助けることになります。 対策を取ろうとしても、コンソールにログが怒涛のごとく流れていて、 手が付けられないと思いますよ。 ポートスキャンやDoSはiplog等のロギングツールを使った方が良いと思います。 | ||||||||
|
投稿日時: 2004-06-17 10:38
はしもとさんへ
あ、すみません、もう一つ質問させて下さい。 >ppp0 の自アドレス宛てにポートスキャンされた場合。 (8) で許容量を超える場合は、5 - 10 - 8 - 9 - 12 - 13 - 14 と流れ INPUT チェインのポリシーに従い捨てられます。 とありましたが、 この場合、(9)と(14)の二箇所でログがとられているということですよね。 本当は一箇所でとった方がいいですよね。 でも、二箇所でログをとることになってもやむをえないですか? 何か良い方法はありますか? [ メッセージ編集済み 編集者: coolkun 編集日時 2004-06-17 10:40 ] | ||||||||
|
投稿日時: 2004-06-17 11:27
どのようにログを取るかは設定しだいです。 なぜ、一箇所でログをとる方が良いと思いますか ? 必要なら 10 箇所でログをとっても良いし、 必要無いならログを取らなくても良いと思います。 |