dポイントプレゼントキャンペーン実施中!

ファイアウォールとしてping of deathの設定をしたいのですが、どのように記述したらよいでしょうか?
1秒間に1回 バースト5にし、ログをとり、破棄したいです。

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j LOG --log-prefix "ping-death"
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

これでよろしいのでしょうか?

A 回答 (6件)

#5です。


自分もちょっと混乱しています^ ^;;
少なくとも#4でちょっと誤りと補足があります。

Ping of DeathはIPヘッダ20バイト+ICMPヘッダ8バイトを引いた65,507がIPパケットの最大なのに
それ以上のICMPデータをつけたICMPパケットを送ることが出来ることで
フラグメントオフセット値+サイズで16ビット値のオーバーフローを狙うものでした。

自分も試していないので(通常のpingだと65,508バイト以上が送れない)ちょっとわかりませんが、
確かにデータサイズはIPパケット長以上になるかもしれませんが、
実際には0xffffが入るのではないでしょうか?
#65,507バイトの正常なPingも止まってしまいますが...

もともと勘違いしているかもしれません。
すみません、もうちょっと調べてみます。
    • good
    • 0
この回答へのお礼

ご協力、ありがとうございました。
参考にさせて頂きます。

お礼日時:2004/06/02 17:16

#4補足より


>65,535バイト以上のICMPエコーは、設定できないようですが。。
>
IPヘッダーのパケット長は16ビットで表現しているので最大値が65,535なのです。
つまり、IPパケットの最大値が65,535バイトということになり、
それより大きいICMPパケットというのは存在しないということですね。
Ping of Death攻撃自体が、IPヘッダ20バイトを引いた65,507より大きなICMPパケット(65,508~65,535バイト)
によってクラッシュが引き起こされる可能性があるといった攻撃になります。
    • good
    • 0

#3補足より


># Fragment(外部からのフラグメントしたパケットはログをとり、破棄する)
>
単純にフラグメントされたパケットを破棄してしまっては、
フラグメントされた通常のパケットもdropされてしまいます。

やはりICMPのパケット長チェックが妥当なような気がしますが...。

この回答への補足

kanop_98さんに紹介して頂いたアドレスを見ると、
http://www.geocities.co.jp/SiliconValley-Cuperti …

85 バイトよりでかい ping のパケットを破棄する場合、
iptables -A INPUT -p icmp --icmp-type echo-request -m length\ --length 85:0xffff -j DROP
--length length[:length]
値あるいは範囲でもいい(混在も可)
値の最小値は 0 最大値は 65535

とありましたが、最大値は 65535 ということは、

>ping of death は65,535(データ部65,507)バイト以上のICMPエコーに対する脆弱性からくるものなので

とあるので、65,535バイト以上のICMPエコーは、設定できないようですが。。

補足日時:2004/01/19 17:22
    • good
    • 0

#2補足より


>結局、いろいろなサイトを参考に下記のようにしてみました。いかがでしょうか?
>
># Ping of death
>iptables -N ping-death
>iptables -A ping-death -m limit --limit 1/s -j ACCEPT
>iptables -A ping-death -j LOG --log-prefix "### Ping of death ###"
>iptables -A ping-death -j DROP
>iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j ping-death
>iptables -A FORWARD -i ppp0 -p icmp --icmp-type echo-request -j ping-death
>

このルールだと、1秒間に5回以上のType8のicmpは止めれますが、(ping floodには対応できる)
Ping of Deathはフラグメント化されたIPパケットになるので、対応できないのではないでしょうか?
(断片パケットはicmpパケットとして認識されない)

やはりLength指定でパケットサイズを見るしか無いかと思います。

この回答への補足

そしたら、下記のような設定があったのですが、いかがですか?

# Fragment(外部からのフラグメントしたパケットはログをとり、破棄する)
iptables -N fragment
iptables -A fragment -j LOG --log-prefix "### Fragment ###"
iptables -A fragment -j DROP
iptables -A INPUT -f -i ppp0 -j fragment
iptables -A FORWARD -f -i ppp0 -j fragment

http://www.kkoba.com/linuxrouter/iptables.shtml

補足日時:2004/01/14 18:27
    • good
    • 0

その後気づいたのですが、そもそもping of Deathを引っかけるなら


「length」モジュールでパケット長をある程度指定すればいいのではないでしょうか?
例はこちら
http://www.geocities.co.jp/SiliconValley-Cuperti …

で、#1補足より
>>-m limitに「--limit-burst 5」が足りないですね。
>
>デフォルトが5なので、記述しなくていいのではないでしょうか?
>
ありゃりゃ、その通りです。すみませんでした。


>1秒ごとに10個のicmpパケットが届いた場合、最初は5個のパケットを受け取り、
>
マッチするのは「1秒間に5個のecho-request(type 8)のICMPパケットが来た場合」
かと思います。

>RETURN やiptables -N を使用して設定している人もいるのですが、
>いまいち使い方が分からないのですが、教えて頂けますか?
>
自分もそれほど詳しくないので、参考サイトを記載させていただきます。

で、まずはmanでしょうか。
http://www.linux.or.jp/JM/html/iptables/man8/ipt …

設定については、こことかはどうでしょうか?
http://tlec.linux.or.jp/docs/iptables.html

この回答への補足

>「length」モジュールでパケット長をある程度指定すればいいのではないでしょうか?

ますます混乱しそうなのでやめときます。

結局、いろいろなサイトを参考に下記のようにしてみました。いかがでしょうか?

# Ping of death
iptables -N ping-death
iptables -A ping-death -m limit --limit 1/s -j ACCEPT
iptables -A ping-death -j LOG --log-prefix "### Ping of death ###"
iptables -A ping-death -j DROP
iptables -A INPUT -i ppp0 -p icmp --icmp-type echo-request -j ping-death
iptables -A FORWARD -i ppp0 -p icmp --icmp-type echo-request -j ping-death

補足日時:2004/01/13 19:25
    • good
    • 0

#@IT会議室でも同じ質問が出ていましたが...^ ^;



>1秒間に1回 バースト5にし
>
ということであれば、
-m limitに「--limit-burst 5」が足りないですね。
しかも"ACCEPT"になっているようですが...。

厳密にはping of death は65,535(データ部65,507)バイト以上のICMPエコーに対する脆弱性からくるものなので
このルールでは違うものも引っかかる可能性がありますね。
(少なくともping of deathは引っかかるので大丈夫ですが)

この回答への補足

>-m limitに「--limit-burst 5」が足りないですね。

デフォルトが5なので、記述しなくていいのではないでしょうか?

>しかも"ACCEPT"になっているようですが...。

あ、すみません。デフォルトポリシーは、
iptables -P INPUT DROP
になっています。

上記の私の記述では、

1秒ごとに10個のicmpパケットが届いた場合、最初は5個のパケットを受け取り、その後、1秒ごとにバーストが1個づつ回復し、パケットを1個づつ受け取るように設定され、その通過したパケットのログをとった上で、破棄する

というふうになっていますでしょうか?
通常はどのように記述するのが一番、良いですか?

RETURN やiptables -N を使用して設定している人もいるのですが、いまいち使い方が分からないのですが、教えて頂けますか?

補足日時:2004/01/05 16:05
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!