Warum nicht ICMP blockieren?


53

Ich glaube, ich habe fast mein iptables-Setup auf meinem CentOS 5.3-System abgeschlossen. Hier ist mein Drehbuch ...

# 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

Für den Kontext ist dieser Computer ein Virtual Private Server-Webanwendungshost.

In einer früheren Frage sagte Lee B, dass ich "ICMP ein bisschen mehr sperren sollte". Warum nicht einfach alles blockieren? Was würde passieren, wenn ich das tun würde (was für eine schlechte Sache würde passieren)?

Wenn ich ICMP nicht blockieren muss, wie kann ich es dann weiter blockieren?


4
iptables -A INPUT -j DROP <falsch (Meinung) Sie sollten die Richtlinie auf iptables -P INPUT DROP setzen, was im Grunde der Einstellung einer Standardeinstellung entspricht. DENY BY DEFAULT.
Xenoterracid

2
Finde heraus, warum es eine schlechte Idee ist, icmp zu blockieren: security.stackexchange.com/a/22713/485
Rory Alsop

Antworten:


117

ICMP ist weit mehr als "traceroute" und "ping". Es wird für die Rückmeldung verwendet, wenn Sie einen DNS-Server (nicht erreichbarer Port) ausführen, der in einem modernen DNS-Server möglicherweise dazu beiträgt, einen anderen Computer auszuwählen, der schneller abgefragt werden soll.

Wie oben erwähnt, wird ICMP auch für die Pfad-MTU-Erkennung verwendet. Möglicherweise setzt Ihr Betriebssystem "DF" (Don't Fragment) auf die von ihm gesendeten TCP-Pakete. Es wird erwartet, dass ein ICMP-Paket mit dem Status "Fragmentierung erforderlich" zurückgegeben wird, wenn auf dem Pfad etwas nicht mit dieser Paketgröße zurechtkommt. Wenn Sie alles ICMP blockieren, muss Ihr Computer andere Fallback-Mechanismen verwenden, die im Grunde genommen eine Zeitüberschreitung verwenden, um ein PMTU- "Schwarzes Loch" zu erkennen, und die niemals korrekt optimiert werden.

Außerdem sollten Sie sich fragen, warum Sie ICMP blockieren möchten. Was genau versuchst du hier zu verhindern? Es ist ziemlich klar, dass Sie nicht verstehen, wofür ICMP verwendet wird, was ziemlich häufig vorkommt. Ich würde äußerst vorsichtig sein, wenn ich etwas blockiere, das Sie nicht vollständig verstehen.

Um es noch schwieriger zu machen, dies zu lernen, sagen viele gängige Firewall-Bücher "Block ICMP" - es ist klar, dass ihre Autoren nie einen RFC gelesen haben oder Probleme im Zusammenhang mit solchen Ratschlägen lösen mussten. Es ist ein schlechter Rat, alles ICMP zu blockieren.

Jetzt kann die Geschwindigkeitsbegrenzung auch weh tun. Wenn Ihr Computer ausgelastet ist oder auch nicht, können Sie eine gute Menge an ICMP-Datenverkehr abrufen. Mein Webserver erhält wahrscheinlich ungefähr 10-100 ICMP-Pakete pro Minute, von denen der größte Teil PMTU-Erkennung ist. Selbst wenn sich jemand dazu entschlossen hat, meinen Server mit ICMP-Paketen eines Typs anzugreifen, ist das keine so große Sache. Wenn Ihr Computer auch nur eine TCP-Verbindung (ssh, http, mail usw.) akzeptiert, ist dies wahrscheinlich ein größerer Angriffsvektor als missverstandenes ICMP jemals sein wird.


4
Hätte es nicht besser sagen können. +1
Massimo

9
Es gibt eine Art von ICMP, die den Typ schädigen kannredirect . Dies ist der einzige ICMP-Typ, den Sie jemals blockieren sollten.
Hubert Kario

2
@Hubert es wäre sehr hilfreich, wenn du auf mehr ratschläge zum blockieren der verlinken könntest redirect. Ich verstehe jetzt, dass ich darüber nachdenken sollte, aber es geht mir nicht besser - ich kann mich immer noch nicht so oder so entscheiden :) Ist es ein Risiko oder nicht?
RomanSt

Die ICMP-Umleitungsnachricht teilt dem Host mit (Router sollten sie niemals akzeptieren), dass dieses oder jenes Subnetz oder Host an einem anderen Gateway verfügbar ist (normalerweise von einem schnelleren Router). Zumindest sagt das RFC1122.
Hubert Kario

2
Ich glaube, dass Weiterleitungen unter Linux standardmäßig ignoriert werden. Aber ja, besser, das zu filtern.
Fox

26

ICMP wird für eine Reihe von Diagnosefunktionen (z. B. Ping, Traceroute) und Netzwerksteuerungsfunktionen (z. B. PMTU-Erkennung) verwendet. Das wahllose Blockieren von ICMP verursacht bei anderen Menschen Sodbrennen. Wenn Sie nicht genau wissen, was Sie tun, sollten Sie es in Ruhe lassen.


14

Ich habe nie verstanden, warum Menschen ICMP takten, wie oben gesagt, dass es nur für Sie und andere Kopfschmerzen verursacht. Sie können feststellen, ob ein Host problemlos verfügbar ist und solange er nicht als DOS verwendet werden kann, habe ich noch nie zwingende Gründe gehört, ihn zu blockieren. (Wenn jemand einen Grund finden kann, bitte posten)


5
Es gehört zum Kult der Informationssicherheit. Sicherheitsleute haben das Gefühl, dass sie die Dinge nicht rechtfertigen müssen, weil bloße Sterbliche die Auswirkungen auf die Sicherheit unmöglich verstehen können. Auf der anderen Seite können Netzwerk- und Systemadministrator-Kopfschmerzen auf einfache Faulheit zurückgeführt werden. Wenn die Administratoren wüssten, was los ist, würden die Dinge nie kaputt gehen ...
duffbeer703

Es erscheint mir nur seltsam, Diagnosewerkzeuge im Wesentlichen deswegen abzutöten. Die Informationen, an denen ein Angreifer interessiert wäre, könnten wahrscheinlich abgeleitet werden, vorausgesetzt, Sie haben einen anderen Dienst, der überhaupt auf dem Computer ausgeführt wird. Dein Recht; es scheint sehr "kultig" zu sein, frag nicht einfach.
Antitribu

6
Ich habe nie verstanden, warum Autoren von Firewall-Büchern anscheinend völlig vermissen, dass ICMP weit mehr als "Ping" und "Traceroute" ist, und dennoch sagen Bücher und Blogs und HOW-TOs alle "ICMP blockieren".
Michael Graff

1
Ebenen und Ebenen davon, Ihre Antwort wurde richtig abgestimmt, gut ausgedrückt. Meistens weiß ich, wenn es blockiert ist, kann man nie genau sagen, was mit intermittierenden Dingen falsch läuft, besonders wenn mehrere ICMP-Blöcke auf dem Weg sind.
Antitribu

8

Sie könnten einfach versuchen, icmp so einzuschränken, dass es nicht als DOS-Angriff verwendet werden kann. Aber es gibt viel zu viele Tools zur Fehlerbehebung wie ping, mtr (ich vergesse Windows-Äquivalent), traceroute (tracert), die icmp verwenden. Sie komplett fallen zu lassen ist einfach töricht. Dies ist eine gute Möglichkeit, um zu überprüfen, ob Ihre Instanz aktiv ist, obwohl Sie über keine Ports telnet können.

--limit 10/second
Ihrer ICMP-Regel (n) ist wahrscheinlich eine angemessene Grenze, wenn man bedenkt, wie viel ein Computer tatsächlich verarbeiten kann.


6

Hier ist eine alternative Sichtweise im Sinne der Sicherheitstheorie. Andere Plakate haben Recht, dass die Sicherheitspraxis oft übereifrig ist, aber es gibt eine gute Grundlage für viele davon.

Die Sicherheitstheorie besagt im Allgemeinen, dass Sie nur das aktivieren, was Sie benötigen. Andere Dinge (die nützlich sein können, z. B. Ping-Antworten) können von einem Angreifer verwendet werden, um Ihr System zu untersuchen, oder möglicherweise als Angriffsmethode für eine noch nicht entdeckte Sicherheitsanfälligkeit.

Wenn Sie sich die ICMP-Nachrichtentypen ansehen, was BRAUCHEN Sie dann für einen normalen, ordnungsgemäßen Betrieb Ihres Systems?

  • Echoantwort (Ping) - nicht so sehr
  • Ziel nicht erreichbar - viele nützliche Informationen hier. Wenn Sie dies deaktivieren, wird für einige Clients der Zugriff auf Ihren Server unterbrochen.
  • source quench - seit 1995 veraltet und anscheinend seit (spätestens) 2005 aus den Host-Implementierungen entfernt. tools.ietf.org/html/rfc6633#section-1.
  • umleiten - mit ziemlicher Sicherheit nicht
  • Router Advertisement & Solicitation - keine Notwendigkeit, wenn Sie Ihre Routen statisch konfigurieren und für DoS verwendet werden könnten. Ich würde es blockieren, es sei denn, Sie wissen, dass Sie es benötigen, und wenn Sie es benötigen, codieren Sie möglicherweise eine Regel, um Informationen nur von den möglichen bekannten Routern zu akzeptieren.
  • ttl übertroffen - nicht nur für Traceroute, sondern meldet Ihnen, dass Ihr Verkehr nicht zum Ziel gelangt

...und so weiter. Wenn Sie dies wirklich verstehen möchten, informieren Sie sich über die verschiedenen ICMP-Typen und deren Zweck. Der Wikipedia-Artikel ist ein guter Ausgangspunkt.

In der Praxis ist der wirklich hässliche Redirect; Wenn Sie einfach etwas schnelles und nützliches tun möchten, blockieren Sie dies und lassen Sie den Rest zu.

Ich würde hinzufügen, dass die IPtables-Verbindungsverfolgung die entsprechenden ICMP-Rückgabepakete für aktive Verbindungen ermöglicht. Wenn Sie conntrack ausführen, sollten Sie in der Lage sein, die meisten eingehenden ICMP-Nachrichten zu blockieren, solange Sie RELATED-Pakete akzeptieren (bevor Sie ICMP in Ihrem Regelsatz blockieren).


2
Eigentlich ist Source Quench seit 1995 veraltet und anscheinend seit (spätestens) 2005 von den Host-Implementierungen entfernt :). tools.ietf.org/html/rfc6633#section-1 .
Sourcejedi

Antwort aktualisiert, danke. Wenn ich etwas härter gedacht hätte, hätte ich mich daran erinnert, duh.
Dan Pritts

Ich denke, dass ICMP-PING für die PMTU-Erkennung erforderlich ist (was viele Browser und Tools verwenden). Wenn Sie dies nicht zulassen, sind Sie Ihren Benutzern gegenüber unhöflich. Ping wird auch für viele diagnostische Zwecke verwendet, und die meisten großen Player erlauben es. Außerdem ist es wenig sinnvoll, dies nicht zuzulassen.
Jjmontes

2
Echo (Ping) -Pakete sind für die PMTU-Erkennung nicht erforderlich. Die PMTU-Erkennung erfolgt durch Setzen des DF-Bits (Don't Fragment) für ausgehende Pakete und hängt vom ICMP-Ziel ab, das nicht erreichbar ist - Für die Fragmentierung sind Nachrichten erforderlich, die von Routern mit kleineren Verbindungs-MTUs zurückkommen. Ping ist sicherlich für Diagnosezwecke nützlich, aber es ist auch nützlich für die Netzwerkaufklärung und möglicherweise für DoS. Nach alledem, was Sie und ich wissen, gibt es einen latenten Remote-Root-Fehler im ICMP-Stack unter Linux. Wenn Ihr Standard "Brauche ich das?" Ist, lautet die Antwort "Nein".
Dan Pritts

1
(Beachten Sie, dass ich in der Antwort geschrieben habe, dass das Blockieren von nicht erreichbaren Nachrichten des
Ziels zu Problemen führen wird

4

Es ist ein nützliches Diagnosetool zur Behebung von Netzwerkverbindungsproblemen.

Sie können auch Verbindungen an anderen Stellen im Internet verwenden, die kleinere MTUs als in Ihrem Netzwerk verwenden. Wenn Sie versuchen, ein Paket an einen Ort zu senden, der zu groß ist und nicht fragmentiert werden kann, verwirft das Gerät das Paket und sendet ein für die ICMP-Fragmentierung erforderliches Paket an den Absender zurück. Wenn Sie alle ICMP-Pakete verwerfen, verlieren Sie diese und seltsamen Dinge in Ihrem Netzwerk.

Die eigentliche Frage lautet "Warum ICMP blockieren?" Was hast du davon? Haben Sie einfach gute Filterregeln an Ihrer Grenze und vor Ihrem geschätzten Vermögen.


3

Ping ist ein nettes Diagnosewerkzeug. Sie werden sich wirklich wünschen, dass Sie es eines Tages hätten. Ich benutze diese:

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

Vielleicht möchten Sie auch drosseln.


8
Dies ist aus Gründen, auf die andere hingewiesen haben, absolut unzureichend ( ICMP ist weit mehr als nur Ping ). Sie sollten bestimmte, potenziell schädliche ICMP-Nachrichten selektiv blockieren und andere Kontrollnachrichten ungestört durchlassen.
Voretaq7

2

Heutzutage kann sogar die Beschränkung der ICMP-Pakete auf der Serverseite zu Kopfschmerzen bei DDoS-Angriffen führen. Die meisten Angriffe werden ausgeführt, indem große ICMP-Fensteranforderungen an einen Server gesendet werden. Ratet mal, was passiert, wenn der Server versucht, auf jede dieser Anforderungen zu antworten?

Hauptsache, wir haben einen Teamspeak-Server, der jeden Tag schlechte Pakete bekommt. Es gab ein paar Tage in zwei Monaten, an denen wir etwas "Freizeit" hatten. Wir haben ICMP-Antworten vollständig deaktiviert / blockiert, wir haben keine DNS-Server auf dem Server, keine NTP-Server, keine Mailserver, keine FTP-Server, nur zwei Apache- und Teamspeak-Server. Alle für die Dienste nicht benötigten Ports sind deaktiviert. Wir planen, sogar das SSH zu blockieren und nur zwei Ports offen zu lassen. Heute gibt es 21.000 (!) Dauerhafte Verbote.

Die Situation ist, dass Angreifer hauptsächlich ICMP-Tunnel verwenden und nur wenige wirklich interessante Protokollzeilen mit den Serveradministratoren besprochen wurden. Sie gaben an, dass sie Server-ICMP-Anforderungen haben. Daher haben Angreifer diese verwendet, um den Angriff zu tunneln und uns anzugreifen. Klingt komisch, aber das stimmt.

Wenn Sie keine Diagnose für Ihren Server benötigen und die Anforderungen vollständig blockieren oder filtern können, um beispielsweise große Fenster zu löschen, tun Sie dies. Ich schlage außerdem vor, China, Korea, Thailand und die Türkei vollständig zu blockieren, da die meisten IP-Adressen von dort stammen. Ich hatte eine ganze Reihe von Listen dieser Länder, aber fast jeden Tag kommen einige neue von dort.

Ich sage, was ich tue, wenn Sie nicht einverstanden sind - tun Sie es nicht. So einfach ist das. Viel Glück


0

Sie sollten mindestens zulassen, dass die ICMP-Typen 3 (Ziel nicht erreichbar), 4 (Quell-Quench) und 11 (Zeitüberschreitung) übergeben werden. Alle diese Typen werden zur Behebung von Netzwerkproblemen verwendet und sollten nicht gefiltert werden.

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

(Der Quellentyp ist derzeit veraltet, aber es tut nicht weh, ihn öffnen zu lassen.)


-2

Ich erlaube ICMP-Verkehr vom lokalen Intranet, blockiere ihn vom Internet. Auf diese Weise ist mein Server online so gut wie unsichtbar (er antwortet nur auf einem nicht standardmäßigen SSH-Port).

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

Dies fügt es nach den Standard-Loopback-, eingerichteten, LAN-Whitelist-, VOIP-Provider-Whitelist- und SSH-Port-ACCEPTs ein. Ich erlaube den von mir gewünschten Datenverkehr und versuche dann, den Server für den Rest der Welt unsichtbar zu halten.


1
Ich glaube, ich verstehe, was Sie zu sagen versuchen, aber es korreliert nicht mit den Tabellen, die Sie geschrieben haben. Wenn Sie bestimmte ICMP-Typen löschen, was passiert dann mit diesen nicht angegebenen? Ich würde Default-Allow annehmen, sonst warum einen Block angeben, wenn es intrinsisch wäre. Sie geben dann "Ich erlaube den gewünschten Datenverkehr" an, was "Default-Deny" oder "Default-Drop" bedeuten würde. Im Grunde ist Ihre Antwort inkonsistent und bestenfalls verwirrend.
JM Becker
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.