web-dev-qa-db-ja.com

ICMPをブロックしないのはなぜですか?

CentOS 5.3システムでiptablesのセットアップがほぼ完了していると思います。これが私のスクリプトです...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP

コンテキストでは、このマシンはVirtual Private Server Webアプリホストです。

前の質問 で、Lee Bは「ICMPをもう少しロックダウンする」べきだと言った。なぜそれを完全にブロックしないのですか?私がそれをしたらどうなりますか(どんな悪いことが起こりますか)?

ICMPをブロックする必要がない場合、それをさらにロックダウンするにはどうすればよいですか?

53
Agvorth

ICMPは、「traceroute」や「​​ping」以上の方法です。これは、DNSサーバー(ポート到達不能)を実行するときのフィードバックに使用されます。これは、最新のDNSサーバーでは、実際に別のマシンを選択してクエリを高速化するのに役立ちます。

ICMPは、前述のとおり、パスMTUの検出にも使用されます。 TCP送信するパケットにOSが "DF"(フラグメント化しない)を設定している可能性があります。パスに沿った何かが処理に失敗した場合、ICMPの "フラグメンテーションが必要"なパケットが返されることが期待されますそのサイズのパケット。すべてのICMPをブロックする場合、マシンは他のフォールバックメカニズムを使用する必要があります。これは、基本的にタイムアウトを使用してPMTUの「ブラックホール」を検出し、正しく最適化されません。

さらに、ICMPをブロックする理由を自問する必要があります。ここで具体的に何を防止しようとしていますか? ICMPの使用目的がよく分からないのは明らかですが、これはかなり一般的です。私はあなたが完全に理解していないものをブロックすることに非常に慎重になるでしょう。

これについてさらに理解を深めるために、一般的なファイアウォールの本の多くは「ICMPをブロックする」と述べています。作成者がRFCを読んだことがないか、そのようなアドバイスに関する問題を解決しなければならなかったことは明らかです。すべてのICMPをブロックすることは悪いアドバイスです。

今、それを制限するレートも傷つけることができます。マシンがビジーの場合、またはビジーでない場合でも、大量のICMPトラフィックを取得できます。私のWebサーバーは、おそらく1分あたり約10〜100のICMPパケットを取得します。そのほとんどはPMTU検出です。誰かが何らかのタイプのICMPパケットでサーバーを攻撃することを選択した場合でも、それはそれほど大きな問題ではありません。マシンが1つでも受け入れる場合TCP接続(ssh、http、メールなど))は、ICMPが誤解されているよりも大きな攻撃ベクトルである可能性があります。

118
Michael Graff

ICMPは、さまざまな診断(ping、tracerouteなど)およびネットワーク制御(PMTU検出など)機能に使用されます。 ICMPの無差別なブロックは他の人々にあらゆる種類の胸焼けを引き起こします。自分が何をしているかを正確に知らない限り、それをそのままにしておくべきです。

26
womble

上で述べたように、なぜ人々がICMPを計測するのか私には理解できませんでした。ホストが十分に簡単に稼働しているかどうか、DOSとして使用できないほど十分に制限されている限り、私はそれをブロックする説得力のある理由を聞いたことがありません。 (誰かが理由を考え出すことができる場合は投稿してください)

15
Antitribu

dOS攻撃として使用できないように、icmpを制限することもできます。しかし、ping、mtr(Windowsの同等機能を忘れた)、traceroute(tracert)など、icmpを使用するトラブルシューティングツールが多すぎます。それらを完全にドロップするのは愚かです。どのポートでもTelnetを実行できない場合でも、インスタンスが起動しているかどうかを確認するのに適しています。

--limit 10/second
8
xenoterracide

セキュリティ理論が示唆するものの精神に沿った、別の視点があります。他のポスターは、セキュリティ慣行がしばしば熱狂的すぎるのは正しいですが、その多くには良い根拠があります。

セキュリティ理論では、一般に、必要なものだけを有効にするというものです。攻撃者は他のこと(たとえばping応答など)を使用して、システムをスコープアウトしたり、まだ発見されていない脆弱性に対する攻撃ベクトルとして使用したりすることができます。

それでは、ICMPメッセージタイプを見て、システムの通常の適切な動作に何が必要ですか?

  • エコー応答(ping)-それほど多くない
  • 目的地に到達できません-ここにたくさんの役立つ情報があります。これを無効にすると、一部のクライアントのサーバーへのアクセスが中断されます。
  • ソースクエンチ-1995年以降非推奨であり、明らかに(遅くとも)2005年以降、ホスト実装から削除されています。tools.ietf.org/html/rfc6633#section-1。
  • リダイレクト-ほとんど間違いなく
  • ルーターアドバタイズメントと請求-ルートを静的に構成する場合は不要で、DoSに使用できます。あなたがそれを必要とすることを知らない限り私はそれをブロックします、そしてあなたがそれを必要とするならば、おそらく既知の可能性のあるルーターからの情報のみを受け入れるルールをコーディングします。
  • ttlを超えました-tracerouteだけでなく、トラフィックが宛先に到達していないことを示します

...等々。これを本当に理解したい場合は、さまざまなICMPタイプとその用途について学びます。 ウィキペディアの記事 が出発点として最適です。

実際には、醜いのはリダイレクトです。すばやく便利なことをしたいだけなら、それをブロックして残りを許可します。

IPtables接続追跡により、アクティブな接続に適切な戻りICMPパケットが許可されることを付け加えます。したがって、conntrackを実行している場合は、(ルールセットでICMPをブロックする前に)RELATEDパケットを受け入れている限り、ほとんどのICMPインバウンドをブロックできるはずです。

6
Dan Pritts

ネットワーク接続の問題を解決するための便利な診断ツールです。

また、ネットワーク上のよりも小さいMTUを使用するインターネット上の他の場所で接続を使用することもできます。大きすぎて断片化できない場所にパケットを送信しようとすると、デバイスはパケットをドロップし、ICMPフラグメンテーションに必要なパケットを送信者に送り返します。すべてのICMPパケットをドロップすると、それらが失われ、ネットワーク上で奇妙なことが起こります。

本当の質問は、「なぜICMPをブロックするのか」です。あなたは何を得るのですか?国境や大切な資産の前に適切なフィルタリングルールを用意してください。

4
chris

pingは素晴らしい診断ツールです。いつかそれがあったらいいのにと思うでしょう。私はこれらを使用しています:

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

スロットルすることもできます。

3
neoice

今日では、サーバー側でICMPパケットを制限することでさえ、DDoS攻撃に頭痛の種となる可能性があります。攻撃は、主に1つのサーバーに巨大なウィンドウのICMP要求を送信することによって行われます。サーバーがそれぞれに応答しようとすると、どうなるでしょうか。

チームスピークサーバーが毎日不正なパケットを取得するという主なことは、2か月の間に「空き時間」があった数日でした。私たちが行ったことは、完全に無効化/ブロックされたICMP応答です。サーバーにDNSサーバーがなく、NTP=サーバー、メールサーバー、FTPサーバーがなく、Apacheとteamspeakが2つだけです。すべてのポートsshもブロックし、2つのポートのみを開いたままにする予定です。現在、21k(!)の恒久的な禁止があります。

攻撃者は主にICMPトンネリングを使用し、サーバー管理者と話し合った本当に興味深いログ行はほとんどなく、攻撃者はサーバーICMPリクエストをオンにしていると述べたため、攻撃者はそれを使用して攻撃をトンネルし、攻撃しました。奇妙に聞こえますが、それは本当です。

サーバーの診断が不要で、リクエストを完全にブロックしたり、大きなウィンドウをドロップするようにフィルタリングしたりできる場合は、それを実行します。また、完全にブロックすることをお勧めします。中国、韓国、タイ、トルコは、IPアドレスの大部分がそこから取得されているためです。私はこれらの国の全体のinetnumリストを持っていましたが、ほぼ毎日、そこからいくつかの新しいリストがあります。

同意しない場合は、私が何をすべきかを言います-しないでください。そのような単純な。幸運を

2

少なくとも、ICMPタイプ3(宛先到達不能)、4(ソース抑制)、および11(時間超過)を通過できるようにする必要があります。これらのタイプはすべて、ネットワークの問題に対処するために使用され、フィルタリングしないでください。

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(ソースクエンチタイプは現在非推奨ですが、これをオープンにしても問題はありません)

0
tvs