Frage REJECT vs DROP bei der Verwendung von iptables


Gibt es einen Grund, warum ich das haben möchte?

iptables -A INPUT -j REJECT

anstatt

iptables -A INPUT -j DROP

80
2017-07-04 09:49


Ursprung




Antworten:


Als allgemeine Regel verwenden Sie REJECT, wenn Sie möchten, dass das andere Ende weiß, dass der Port nicht erreichbar ist. Verwenden Sie DROP für Verbindungen zu Hosts, die nicht angezeigt werden sollen.

Normalerweise sollten alle Regeln für Verbindungen innerhalb Ihres LAN REJECT verwenden. Für das Internet, mit Ausnahme von ident auf bestimmten Servern, werden Verbindungen aus dem Internet normalerweise DROPPED.

Bei Verwendung von DROP scheint die Verbindung zu einer nicht belegten IP-Adresse zu stehen. Die Scanner können wählen, die Adressen, die unbesetzt erscheinen, nicht weiter zu scannen. Da NAT zum Umleiten einer Verbindung auf der Firewall verwendet werden kann, weist die Existenz eines bekannten Dienstes nicht unbedingt auf die Existenz eines Servers auf einer Adresse hin.

Ident sollte an jede Adresse, die den SMTP-Dienst bereitstellt, weitergeleitet oder abgelehnt werden. Die Verwendung von Ident-Lookups durch SMTP-Server wurde jedoch nicht mehr verwendet. Es gibt Chat-Protokolle, die ebenfalls auf einen funktionierenden Ident-Dienst angewiesen sind.

BEARBEITEN: Wenn DROP-Regeln verwendet werden:  - UDP-Pakete werden gelöscht und das Verhalten ist das gleiche wie die Verbindung zu einem nicht umgelagerten Port ohne Dienst.  - TCP-Pakete geben eine ACK / RST zurück, die die gleiche Antwort ist, mit der ein offener Port antwortet, auf den kein Dienst läuft. Einige Router antworten mit und ACK / RST im Namen von ausgefallenen Servern.

Wenn REJECT-Regeln verwendet werden, wird ein ICMP-Paket gesendet, das angibt, dass der Port nicht verfügbar ist.


72
2017-07-04 16:40



Das ist nicht wahr. Selbst wenn die Regel "DROP" sagt, antwortet das System immer noch auf das eingehende Paket mit einem TCP SYN / ACK, als ob es geöffnet wäre. Um ein Paket wirklich fallen zu lassen, muss das System mit einer TCP RST / ACK antworten - für die es keine Firewall-Regel gibt. Daher ist das beste Firewall-Setup ein Setup, bei dem nur ausgewählte Ports weitergeleitet werden. Ihre DROP-Regel wird Ihre Firewall ankündigen, und Port-Scanner werden wissen, dass Sie etwas firewasieren und Sie weiterhin in der Hoffnung hämmern, Ihre Firewall herunterzufangen. - Dagelf
@Dagelf Siehe meine Bearbeitung. Der RST / ACK zeigt den Scannern nicht an, dass Sie irgendetwas firewalling sind. Während einige Hacker weiterhin nach dieser Antwort suchen können, sollte dies darauf basieren, dass Sie Ihre Dienste und nicht die Firewall-Antwort kennen. Es hat definitiv die Anzahl und Länge der Scans, die ich erlebe, fallen lassen. - BillThor
Mein Punkt ist, dass es von außen feststellbar ist, ob Sie etwas fran- zieren oder nicht, weil Ihr TCP-Stack sich anders verhält, wenn Sie DROP betreiben, als wenn Sie gar keinen Dienst betreiben! - Dagelf
Es ändert nichts an der Tatsache, dass Botnetze die Differenz ausnutzen und Ihre Ports als Konsequenz überwachen. - Dagelf
@Dagelf Woher bekommen Sie die Information, dass DROP eine Antwort sendet? Das sind große Neuigkeiten und laufen allem zuwider, was ich beobachtet und erfahren habe. Haben Sie einen Link zu der Dokumentation, die dieses Verhalten beschreibt? - Score_Under


Der Unterschied besteht darin, dass das REJECT-Ziel eine Zurückweisungsantwort an die Quelle sendet, während das DROP-Ziel nichts sendet.

Dies kann z.B. für den Ident-Dienst. Wenn Sie REJECT verwenden, müssen die Clients nicht auf Timeout warten.

Mehr dazu: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


25
2017-07-04 09:59



Das DROP-Ziel sendet nichts. Überprüfen Sie meinen Kommentar zu der akzeptierten Antwort und recherchieren Sie das Thema selbst, wenn Sie an den Details interessiert sind! - Dagelf


Normalerweise möchten Sie ignorieren Probes von Angreifern zu bestimmten Ports, mit denen ich meine, dass Sie nicht 'Verbindung abgelehnt' zurücksenden wollen. "Verbindung abgelehnt" bedeutet: "Es gibt einen Server hier" und gibt möglicherweise mehr Informationen preis, während das Löschen eines Pakets keine Hinweise auf Softwareversionen, mögliche Sicherheitslücken oder sogar die Tatsache gibt, dass ein Server auf Ihrer IP-Adresse zuhört.

Dies ist einer der Hauptgründe, DROP anstelle von REJECT zu verwenden.


8
2017-07-04 13:09



Ohne iptables-Regeln wird für einen geschlossenen Port standardmäßig REJECT verwendet. Wenn Sie jeden Port ablegen, ist es eine gute Alternative (Ihr Host erscheint nicht), aber wenn Sie nur bestimmte Ports ablegen, geben Sie ihnen tatsächlich mehr Informationen als REJECT. Wenn jemand eine pauschale Sonde wie nmap verwendet, erscheinen bestimmte Ports, die Pakete löschen, als "gefiltert", was bedeutet, dass sie wissen, dass Sie dort einen Dienst haben, den Sie verstecken. - Raptor007


Ich sehe viele widersprüchliche Antworten hier und dies ist der erste Artikel in Google mit den richtigen Keywords; Hier ist die richtige Erklärung.
Es ist einfach:

DROP macht überhaupt nichts mit dem Paket. Es wird nicht an einen Host weitergeleitet, es wird nicht beantwortet. Die Manpage von IPtables sagt, dass sie das Paket auf dem Boden fallen lässt, d. H. Es tut nichts mit dem Paket.

REJECT unterscheidet sich von DROP dadurch, dass es ein Paket zurücksendet, aber die Antwort ist so, als ob ein Server sich auf der IP befindet, aber den Port nicht in einem Empfangszustand hat. IPtables senden bei TCP einen RST / ACK oder bei UDP einen ICMP-Zielport, der nicht erreichbar ist.


6
2018-01-11 12:29



+1 von mir, aber die Antworten stimmen nicht wirklich überein. Sie sind mir alle einig, soweit ich das beurteilen kann, außer für Dagelf - der sich geirrt hat. - MadHatter
Okay, hier ist ein kleiner Trick für dich: Mach einen "nmap localhost". Wählen Sie nun einen Port, der nicht "offen" ist ... und fügen Sie eine Regel hinzu, die "nichts tut", zB: "iptables -I INPUT -p tcp --dport 888 -j DROP". Jetzt "nmap localhost" erneut. Was siehst du? ... - Dagelf


Wenn du versuchst, die Existenz deiner Maschine komplett zu verstecken, -j DROPIst angemessen. Zum Beispiel könnten Sie damit eine Blacklist implementieren.

Wenn Sie versuchen, die Tatsache zu verbergen, dass ein Port offen ist, sollten Sie das Verhalten nachahmen, das auftreten würde, wenn der Port nicht geöffnet wäre:

  • TCP: -p tcp -j REJECT --reject-with tcp-reset
  • UDP: -p udp -j REJECT --reject-with icmp-port-unreachable

Wenn ein Portscanner erkennt, dass einige Ports Pakete ablehnen, während die meisten ablehnen, kann davon ausgegangen werden, dass sich die gelöschten Pakete in Ports befinden, die zwar offen, aber nicht sichtbar sind.


3
2017-08-13 01:29



Was passiert, wenn Sie ein paar Ports (d. H. 22, 25, 53, 80, 443) öffnen und dann alles andere löschen? Ob nun MySQL, PostgreSQL, SQLite oder Cassandra läuft ... der Scanner kann es nicht sagen, oder? - Alexis Wilke
@AlexisWilke In diesem Fall besteht die einzige zusätzliche Information, die Sie dem Portscanner geben, darin, dass Sie eine Firewall mit einer Standard-DROP-Richtlinie installiert haben. - Raptor007


Trotz vieler richtiger Antworten, nur meine zwei Cent:

Hier ist ein kurzes PoC FW.IDS-DROP-vs-REJECT von mir zum Thema bezüglich der Regeln für Ban-System (Firewall, IDS, etc.).

Kurz:

  • DROP kann für Rückfall-Eindringlinge verwendet werden, wenn alle Ports gesperrt werden (sieht so aus, als wäre der Server auf der Eindringlingseite)
  • REJECT --reject-with tcp-reset ist die beste Wahl für Multi-Port-Verbot, weil es sich wie ein echter geschlossener Port zu verhalten scheint
  • wenn einige Ports antworten (Eindringling weiß, dass der Host lebt), DROP und REJECT (ohne tcp-reset) gibt dem Eindringling ein "Signal", dass etwas blockiert ist (das könnte ihn dazu anregen, den "Angriff" fortzusetzen, in der Hoffnung, die erforderlichen Daten irgendwann zu liefern)

0
2017-09-20 16:49





Ja, die Verwendung von DROP ist sinnlos. Verwenden Sie REJECT.

Selbst wenn die Regel "DROP" sagt, antwortet das System immer noch auf ein eingehendes SYN mit einer TCP RST / ACK - das ist das Standardverhalten für Ports ohne laufende Dienste. (tcpdump et al protokolliert dies nicht.)

Wenn ein Dienst ausgeführt wird, ist das SYN mit TCP SYN / ACK erfüllt.

Da der DROP nicht wie üblich mit einem TCP SYN / ACK, sondern mit einem RST / ACK reagiert, wird Ihre DROP-Regel Ihre Firewall ankündigen und Port-Scanner werden wissen, dass Sie etwas firewasieren und Sie vielleicht in den Hoffnungen hämmern deine Firewall abzufangen.

Dies ist jetzt nmap kann "gefiltert" anstelle von "geschlossen" zum Beispiel melden:

$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT     STATE SERVICE
21/tcp   open  ftp
53/tcp   open  domain
80/tcp   open  http
1111/tcp filtered lmsocialserver

Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds

$ iptables -D INPUT 1

Daher ist das einzige "unsichtbare" Firewall-Setup ein Setup, bei dem sich ein dediziertes Gerät zwischen Ihren Geräten befindet und nur selektiv Ports weiterleitet.

Wenn Sie sich wirklich mit den grundlegenden Scannern beschäftigen möchten, können Sie TCP-Verbindungen TARPIT, die das TCP-Fenster auf 0 setzt, so dass keine Daten nach dem Öffnen der Verbindung übertragen werden können, ignorieren Anforderungen zum Schließen der Verbindung, was bedeutet, dass der Scanner warten muss für die Verbindung Zeitüberschreitung auftreten, wenn es sicher sein will. Aber es ist trivial für einen Angreifer, dies zu erkennen und seine Auszeit sehr kurz zu machen.

Alles in allem ist es wahrscheinlich am besten, wenn Sie nur REJECT verwenden oder ein dediziertes Port-Forwarding-Gerät zwischen Ihrem Server und dem Internet platzieren.

Oder führen Sie nur Dienste auf Ihren internetbezogenen Computern aus, die keine Firewalls erfordern.

Im Allgemeinen ist REJECT am besten für Webserver geeignet, da jeder Dienst, der versucht, auf sie zuzugreifen (wahrscheinlich meistens), schnell eine Antwort erhält und Benutzer oder andere Dienste nicht warten müssen, wenn sie sich fragen, ob es einen Netzwerkausfall gibt.


-3



Diese Antwort ist falsch. Mit tcpdump kann leicht angezeigt werden, dass die DROP-Regel dazu führt, dass das System KEINE Antwort sendet - wie zu erwarten ist. Und Ihre Aussage "Um wirklich ein Paket fallen zu lassen, muss das System mit einem TCP RST / ACK antworten" macht keinen Sinn, da das Beantworten von irgendetwas offensichtlich nicht "wirklich ein Paket fallen lässt". Wenn Sie ein Paket wirklich "fallenlassen", antworten Sie einfach nicht und dies ist nachweislich der Effekt der DROP-Regel. - Juliane Holzt
Könnten Sie eine Quelle für die Behauptung liefern, dass DROP wird ein SYN/ACK? Ich habe das nie auf meinen Maschinen gesehen. - motobói
@Dagelf Ihr Artikel sagt "DROP (alias DENY, BLACKHOLE) Verhindern, dass ein Paket übergeben wird. Senden Sie keine Antwort." - JeanT
Es sendet nicht die normale Antwort, aber es sendet, wie erläutert, unabhängig. - Dagelf
Das Dokument, das Sie verlinken, sagt "DROP ... Senden Sie keine Antwort"Und, soweit ich das beurteilen kann, unterstützen Sie nicht Ihre Behauptung, dass DROP gibt a zurück SYN/ACK. Auch ich habe dieses Verhalten unter keiner Version von iptables. Wenn Sie eine Quelle haben, die Ihren Anspruch unterstützt, wäre es am nützlichsten, sie zu sehen. Sicherlich, die Paket-Dumps, die ich gerade gemacht habe, unterstützen deine Behauptung nicht. - MadHatter