- PR -

iptables の RETURN の使い方

投稿者投稿内容
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 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 ]
cn009
ベテラン
会議室デビュー日: 2004/05/13
投稿数: 72
投稿日時: 2004-06-10 23:07
引用:

なぜ残りのルールで評価されないのでしょうか?
ユーザ定義チェインは必ずRETURNにするということですか?



ACCEPT、DROP、REJECTの組み込みターゲットはパケットのチェックを終了して、
指定された動作(ACCEPTなら通過、DROPなら破棄、REJECTは破棄してICMPを返す)を行うので
それ以降のルールで評価されることはありません。
ユーザ定義チェインでも、そのパケットの扱いを決めてしまって良いならRETURNしなくてもいいです。
「残りのルールで評価されなくて『困る』」と言ったのは間違いです。
変なパケットならユーザ定義チェインの中でも即DROPですね。

引用:

iptables -A stealth-scan -m limit --limit 1000/s --limit-burst 5 -j ?????
iptables -A stealth-scan -j LOG --log-prefix "### Stealth scan ###"



?????を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コマンドだけで決まるのではなく、
そのパケットがどのルールで評価されたかで決まります。
coolkun
ベテラン
会議室デビュー日: 2003/11/18
投稿数: 70
投稿日時: 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 ]
coolkun
ベテラン
会議室デビュー日: 2003/11/18
投稿数: 70
投稿日時: 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 ]
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-06-11 21:04
引用:
coolkunさんの書き込み (2004-06-11 14:45) より:

>ppp0 にフォワード対象アドレス宛てに ICMP echo-request が来た場合
そのパケットはどう流れると思いますか ?

については、

(2)で許容量を超える場合、パケットは 6 - 2 - 3 - 4 と流れ捨てられます。
(2)で許容量を超えない場合は、6 - 2 - 10 - 12 - 13 と流れ受け入れます。



前者は当たりです。
後者は惜しい、6 - 2 - 11 - 15 です。
FORWARD チェインなので。


引用:
>この例の趣旨から考えて (2) と ( のターゲットは RETURN が適当だと思います。

今、気がついたんですけど、(2) の方は、ACCEPT でも RETURN でも同じことですね。

後の方に、

# ICMP
iptables -A INPUT -p icmp -j ACCEPT

という設定があるので。その場合は、

(2)で許容量を超えない場合は、5 - 2 と流れ受け入れます。

というふうになるんですよね。



結果的に、そうなりますね。

cn009
ベテラン
会議室デビュー日: 2004/05/13
投稿数: 72
投稿日時: 2004-06-12 21:53
引用:

>iptables -A stealth-scan -j DROP
が行いたい設定ではないでしょうか?

については、私も迷っているところなのですが、
某会社のファイアーウォールの設定で、ICM DOS攻撃対策はログを取り、破棄する。
Stealth Scan対策、SYN flood/Port Scan対策ではログを取るだけ。
となっていたので、Stealth Scan対策、SYN flood/Port Scan対策の場合は破棄をしない方がいいのかと。。



Stealth Scanと呼ばれるものは様々なので一概には扱えません。
ただRSTフラグがオンでACKフラグがオフのパケットは通常ではありえないので、
DROPで構わないと思います。

それよりも、LOGのルールにlimitかけた方が良いですよ、というのが言いたかったんです。
特にDoS対策の方はlimitかけるべきです。
ログファイルへの書き込みが大量に発生してそれこそ攻撃者を助けることになります。
対策を取ろうとしても、コンソールにログが怒涛のごとく流れていて、
手が付けられないと思いますよ。

ポートスキャンやDoSはiplog等のロギングツールを使った方が良いと思います。
coolkun
ベテラン
会議室デビュー日: 2003/11/18
投稿数: 70
投稿日時: 2004-06-17 10:38
はしもとさんへ

あ、すみません、もう一つ質問させて下さい。

>ppp0 の自アドレス宛てにポートスキャンされた場合。
(8) で許容量を超える場合は、5 - 10 - 8 - 9 - 12 - 13 - 14 と流れ
INPUT チェインのポリシーに従い捨てられます。

とありましたが、
この場合、(9)と(14)の二箇所でログがとられているということですよね。

本当は一箇所でとった方がいいですよね。
でも、二箇所でログをとることになってもやむをえないですか?

何か良い方法はありますか?

[ メッセージ編集済み 編集者: coolkun 編集日時 2004-06-17 10:40 ]
はしもと
大ベテラン
会議室デビュー日: 2003/02/05
投稿数: 182
投稿日時: 2004-06-17 11:27
引用:
coolkunさんの書き込み (2004-06-17 10:38) より:

本当は一箇所でとった方がいいですよね。
でも、二箇所でログをとることになってもやむをえないですか?

何か良い方法はありますか?



どのようにログを取るかは設定しだいです。
なぜ、一箇所でログをとる方が良いと思いますか ?
必要なら 10 箇所でログをとっても良いし、
必要無いならログを取らなくても良いと思います。

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