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


53

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アプリホストです。

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

ICMPをブロックしない場合、どうすればICMPをロックダウンできますか?


4
iptables -A INPUT -j DROP <間違っている(意見)ポリシーをiptables -P INPUT DROPに設定する必要があります。これは基本的にデフォルトの設定と同じです。デフォルトで拒否。
ゼノテラサイド2009年

2
icmpをブロックするのが悪い考えである理由を見つけてください:security.stackexchange.com/a/22713/485
ロリーオルソ

回答:


117

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

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

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

これについてさらに学ぶのを難しくするために、多くの一般的なファイアウォールの本は「ICMPをブロックする」と言っています。すべてのICMPをブロックするのは悪いアドバイスです。

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


4
それ以上のことは言えませんでした。+1
マッシモ

9
ある1つの ICMPの種類ができ有害であるredirectタイプが。これは、ブロッキングを検討する必要がある唯一の ICMPタイプです。
ヒューバートカリオ

2
@Hubertをブロックするためのより多くのアドバイスにリンクできれば非常に役立ちますredirect。今、私はそれを検討すべきだと理解していますが、私はましではありません-それでも何らかの方法を決定することはできません:)それはリスクかどうか?
RomanSt

リダイレクトICMPメッセージは、そのようなサブネットまたはホストが別のゲートウェイで利用可能であることを(通常はより高速なルーターによって)ホストに通知します(ルーターはそれらを受け入れてはなりません)。少なくともそれはRFC1122が言うことです。
ヒューバートカリオ

2
Linuxではデフォルトでリダイレクトは無視されると思います。しかし、はい、それをフィルタリングする方が良いです。
フォックス

26

ICMPは、一連の診断(ping、tracerouteなど)およびネットワーク制御(PMTUディスカバリーなど)機能に使用されます。ICMPを無差別にブロックすると、他の人があらゆる種類の胸焼けを引き起こします。自分が何をしているかを正確に把握していない限り、そのままにしておく必要があります。


14

上記で述べたように、人々がICMPをクロックする理由を理解したことはありません。ホストが十分に簡単に起動するかどうかを判断できます。DOSとして使用されないように十分に制限されている限り、ホストをブロックする説得力のある理由は聞いたことがありません。(誰かが理由を思い付くことができるなら、投稿してください)


5
それは情報セキュリティのカルトの一部です。セキュリティの人々は、物事を正当化する必要はないと感じています。なぜなら、単なる人間はセキュリティの影響を理解できない可能性があるからです。一方、ネットワークとシステムの管理者の頭痛は、単純な怠zyに起因する可能性があります。すべての後に管理者が上で何が起こっていたか知っていれば、物事が壊れることはありませんでしょう...
duffbeer703

本質的にそれのために診断ツールを殺すのは奇妙に思えます。マシン上で他のサービスが実行されていると仮定すると、攻撃者が関心を持つ情報が導き出される可能性が高いためです。あなたの右; それは非常に「カルト」であるように見えます、ただ質問してはいけません。
アンティトリブ2009年

6
ファイアウォールの本の著者が、ICMPが「ping」や「traceroute」をはるかに超えていることを完全に見逃しているように見えるのに、書籍やブログ、HOW-TOがすべて「ICMPをブロック」と言っている理由を理解したことがありません。
マイケルグラフ

1
これのレベルとレベル、あなたの答えは正しく投票されました。ほとんどの場合、特に途中で複数のICMPブロックが存在する場合、断続的なことで何が問題になっているのかを完全に知ることはできません。
Antitribu

8

DOS攻撃として使用できないように、icmpを制限してみてください。しかし、ping、mtr(Windowsの同等のものは忘れます)、traceroute(tracert)など、icmpを使用するトラブルシューティングツールが多すぎます。それらを完全に削除するのは愚かです。ポートでtelnetを使用できない場合でも、インスタンスが稼働しているかどうかを確認するのに適した方法です。

--limit 10/second
コンピュータが実際に処理できる量を考えると、icmpルールに対する制限はおそらく適切な制限です。


6

ここに、セキュリティ理論が示唆する精神での別の視点があります。他のポスターは、セキュリティの実践が熱心すぎることが多いことは正しいが、その多くには良い根拠がある。

一般的に、セキュリティ理論では、必要なものだけを有効にします。攻撃者は、他のもの(たとえば、ping応答など)を使用してシステムの範囲を限定したり、未発見の脆弱性に対する攻撃ベクトルとして使用したりできます。

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

  • エコー応答(ping)-それほどではない
  • 宛先に到達できません-ここに役立つ情報がたくさんあります。これを無効にすると、一部のクライアントのサーバーへのアクセスが切断されます。
  • ソースクエンチ-1995年以降廃止され、(少なくとも)2005年以降、ホスト実装から削除されたようです。tools.ietf.org/html/rfc6633#section-1。
  • リダイレクト-ほとんど間違いなく
  • ルーター広告と勧誘-ルートを静的に設定する必要はなく、DoSに使用できます。必要なことがわかっていない限りブロックします。必要な場合は、既知の可能性のあるルーターからのみ情報を受け入れるようにルールをコーディングします。
  • ttl超過-tracerouteだけでなく、トラフィックが宛先に到達していないことを示します

...等々。これを本当に理解したい場合は、さまざまなICMPタイプとその目的について学習してください。Wikipediaの記事は良い出発点です。

実際には、本当にいのはリダイレクトです。何かをすばやく便利にしたい場合は、それをブロックして残りを許可します。

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


2
実際、ソースクエンチは1995年以降廃止され、(少なくとも)2005年以降、ホスト実装から削除されたようです。 tools.ietf.org/html/rfc6633#section-1
sourcejedi

回答が更新されました、ありがとう。少し難しいと思ったら、それを思い出したでしょう。
ダンプリッツ

ICMP PINGはPMTUディスカバリー(多くのブラウザーとツールが使用)に必要だと思います。それを禁止することは、ユーザーに対して無礼であるようなものです。Pingは多くの診断目的にも使用されており、ほとんどの大企業はそれを許可しています。それに、それを拒否することにはほとんど利点がありません。
jjmontes

2
エコー(ping)パケットは、PMTU検出には必要ありません。PMTUディスカバリは、発信パケットにDo n't Fragment(DF)ビットを設定することで行われ、ICMP Destination Unreachable-より小さいリンクMTUを持つルーターから戻ってくるフラグメンテーションに必要なメッセージに依存します。pingは確かに診断の目的には役立ちますが、ネットワークの偵察や潜在的にDoSにも役立ちます。LinuxのICMPスタックに潜在的なリモートルートバグがあることは、皆さんも私も知っています。あなたの標準が「これが必要か」という場合、答えは「いいえ」です。
ダンプリッツ14年

1
(宛先に到達できないメッセージをブロックすると問題が解決することを回答に書きました
。PMTUの

4

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

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

実際の質問は、「ICMPをブロックする理由」です。何が得られますか?国境や大切な資産の前に適切なフィルタリングルールを設定してください。


3

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

調整することもできます。


8
これは、他の人が指摘した理由のためにひどく不適切です(ICMPはpingだけではありません)。特定の、潜在的に有害な ICMPメッセージを選択的にブロックし、他の制御メッセージを無秩序に通過させる必要があります。
voretaq7

2

今日では、サーバー側でICMPパケットを制限することでさえ、DDoS攻撃の頭痛の種になる可能性があります。1つのサーバーに巨大なウィンドウICMPリクエストを送信することにより攻撃が行われ、サーバーが各サーバーに応答しようとしている場合、何が起こるかを推測しますか?

私たちが毎日悪いパケットを受け取るチームピークサーバーを持っていることの主なことは、「フリータイム」があった2か月で数日でした。私たちが行ったことは、ICMP応答を完全に無効化/ブロックし、サーバー上にDNSサーバー、NTPサーバー、メールサーバー、FTPサーバー、apacheおよびteampeakを2つだけ持っていることです。サービスに不要なポートはすべてオフです。sshさえもブロックし、2つのポートのみを開いたままにする予定です。今日、21k(!)の永久禁止があります。

状況は、攻撃者が主にICMPトンネリングを使用しており、サーバー管理者と非常に興味深いログ行がほとんど議論されておらず、サーバーICMP要求がオンになっていると述べているため、攻撃者はそれを使用して攻撃をトンネルし、私たちを攻撃します。奇妙に聞こえますが、それは本当です。

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

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


0

少なくとも、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

(ソースクエンチタイプは現在廃止されていますが、これを開いても問題ありません)


-2

ローカルイントラネットからのICMPトラフィックを許可し、インターネットからブロックします。そうすれば、私のサーバーはほとんどオンラインでは見えなくなります(非標準のSSHポートでのみ応答します)。

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

これにより、標準ループバック、確立済み、LANホワイトリスト、VOIPプロバイダーホワイトリスト、およびSSHポートACCEPTの後に挿入されます。必要なトラフィックを許可し、他の世界からサーバーが見えないように最善を尽くします。


1
私はあなたの言おうとしていることを理解していると思いますが、あなたが書いた表とは相関していません。特定のICMPタイプをドロップした場合、指定されていないものはどうなりますか?Default-Allowと仮定しますが、それ以外の場合、ブロックが固有であるときにブロックを指定します。次に、「必要なトラフィックを許可します」と述べます。これは、デフォルト拒否またはデフォルトドロップを示します。基本的に、答えは一貫性がなく、せいぜい混乱します。
JMベッカー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.