ファイアウォールとして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件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
#5です。
自分もちょっと混乱しています^ ^;;
少なくとも#4でちょっと誤りと補足があります。
Ping of DeathはIPヘッダ20バイト+ICMPヘッダ8バイトを引いた65,507がIPパケットの最大なのに
それ以上のICMPデータをつけたICMPパケットを送ることが出来ることで
フラグメントオフセット値+サイズで16ビット値のオーバーフローを狙うものでした。
自分も試していないので(通常のpingだと65,508バイト以上が送れない)ちょっとわかりませんが、
確かにデータサイズはIPパケット長以上になるかもしれませんが、
実際には0xffffが入るのではないでしょうか?
#65,507バイトの正常なPingも止まってしまいますが...
もともと勘違いしているかもしれません。
すみません、もうちょっと調べてみます。
No.5
- 回答日時:
#4補足より
>65,535バイト以上のICMPエコーは、設定できないようですが。。
>
IPヘッダーのパケット長は16ビットで表現しているので最大値が65,535なのです。
つまり、IPパケットの最大値が65,535バイトということになり、
それより大きいICMPパケットというのは存在しないということですね。
Ping of Death攻撃自体が、IPヘッダ20バイトを引いた65,507より大きなICMPパケット(65,508~65,535バイト)
によってクラッシュが引き起こされる可能性があるといった攻撃になります。
No.4
- 回答日時:
#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エコーは、設定できないようですが。。
No.3
- 回答日時:
#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
No.2
- 回答日時:
その後気づいたのですが、そもそも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
No.1
- 回答日時:
#@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 を使用して設定している人もいるのですが、いまいち使い方が分からないのですが、教えて頂けますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイアウォールは必要?hosts...
-
SAMBAの設定に付いて
-
「DNSサーバーを自動的に取得す...
-
同一のホスト名で何か問題があ...
-
エクセルで#N/Aを含めた平均値...
-
DNSサーバを設定したのですがns...
-
postfix smtpサーバーリレーがT...
-
パスワード設定していないユー...
-
[postfix]aliasesでphp呼び出し
-
エラーメールで"too many hops"...
-
リモートデスクトップ接続でパ...
-
Sendmailで受信出来てない?ネ...
-
MACアドレス 00:E0:C3 SAKAI って
-
iPadの受信メールが消える
-
ssl_request_logの必要性について
-
Linuxで輝度を下げる方法を教え...
-
SFTPで仮想サーバに接続できません
-
WSUSインストール時に設定ウィ...
-
docker pullのエラー
-
サーバルームの空気を換気したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイアウォールは必要?hosts...
-
iptablesにてRDPが通らない。
-
RH-Firewall-1-INPUTとは?
-
iptablesの設定がうまく反映さ...
-
scpコマンドでサーバー間のファ...
-
UDPパケットのバッファサイズ変...
-
CentOS7firewall-cmdでESP許可
-
iptablesのデフォルトの設定(#...
-
サーバーでポート587番が開放で...
-
ネットワーク通信
-
iptablesによるルーティング
-
RedHat9 Linux のDNSサーバ...
-
ファイヤーウォールとIP tables...
-
iptablesのログ記述について
-
CentOS6.5のiptablesについて
-
iptablesを使ってルーターを作...
-
iptablesが起動しない!?
-
サイレント変異とミスセンス変...
-
iptablesでFTPのパッシブモード...
-
パスワード設定していないユー...
おすすめ情報