Antworten:
Verwenden Sie im Allgemeinen 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 die Benutzer nicht sehen sollen.
Normalerweise sollten alle Regeln für Verbindungen in Ihrem LAN REJECT verwenden. Im Internet werden Verbindungen aus dem Internet mit Ausnahme von ident auf bestimmten Servern normalerweise DROPPED.
Bei Verwendung von DROP wird die Verbindung anscheinend zu einer nicht besetzten IP-Adresse hergestellt. Scanner können festlegen, dass Adressen, die nicht belegt sind, nicht weiter durchsucht werden. Da NAT verwendet werden kann, um eine Verbindung auf der Firewall umzuleiten, weist das Vorhandensein eines bekannten Dienstes nicht unbedingt auf das Vorhandensein eines Servers auf einer Adresse hin.
Ident sollte an jede Adresse weitergegeben oder abgelehnt werden, die den SMTP-Dienst bereitstellt. Die Verwendung von Ident-Lookups durch SMTP-Serves wurde jedoch nicht mehr verwendet. Es gibt Chat-Protokolle, die sich auch auf einen funktionierenden Identitätsdienst stützen.
BEARBEITEN: Bei Verwendung von DROP-Regeln: - UDP-Pakete werden verworfen, und das Verhalten entspricht dem einer Verbindung mit einem nicht Firewall-fähigen Port ohne Dienst. - TCP-Pakete geben ein ACK / RST zurück. Dies entspricht der Antwort, mit der ein offener Port ohne Dienst antwortet. Einige Router antworten mit und ACK / RST im Namen von Servern, die außer Betrieb sind.
Bei Verwendung von REJECT-Regeln wird ein ICMP-Paket gesendet, das angibt, dass der Port nicht verfügbar ist.
Der Unterschied besteht darin, dass das REJECT-Ziel eine Ablehnungsantwort an die Quelle sendet, während das DROP-Ziel nichts sendet.
Dies kann zB für den Ident-Dienst hilfreich sein. Wenn Sie REJECT verwenden, müssen die Clients nicht auf eine Zeitüberschreitung warten.
Weitere Informationen hierzu: http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
Normalerweise möchten Sie Sonden von Angreifern zu bestimmten Ports ignorieren , mit denen Sie "Verbindung abgelehnt" nicht zurücksenden möchten. "Verbindung abgelehnt" bedeutet: "Es ist ein Server hier" und möglicherweise werden mehr Informationen preisgegeben, wohingegen das Verwerfen eines Pakets keine Hinweise auf Softwareversionen, mögliche Schwachstellen oder sogar die Tatsache gibt, dass ein Server Ihre IP abhört.
Dies ist einer der Hauptgründe für die Verwendung von DROP anstelle von REJECT.
Ich sehe hier viele widersprüchliche Antworten und dies ist der erste Artikel in Google mit den richtigen Keywords. Hier ist die richtige Erklärung.
Es ist ganz einfach:
DROP macht gar nichts mit dem Paket. Es wird nicht an einen Host weitergeleitet, es wird nicht beantwortet. Die Manpage von IPtables sagt, dass es das Paket auf den Boden fallen lässt, dh es macht nichts mit dem Paket.
REJECT unterscheidet sich von DROP dadurch, dass es ein Paket zurücksendet, die Antwort jedoch so ist, als ob sich ein Server auf der IP befindet, der Port jedoch nicht empfangsbereit ist. IPtables sendet ein RST / ACK, wenn TCP oder UDP einen nicht erreichbaren ICMP-Zielport hat.
Wenn Sie versuchen, die Existenz Ihrer Maschine vollständig zu verbergen, -j DROP
ist dies angemessen. Sie können dies beispielsweise verwenden, um eine Blacklist zu implementieren.
Wenn Sie versuchen, die Tatsache zu verbergen, dass ein Port geöffnet ist, sollten Sie das Verhalten nachahmen, das auftreten würde, wenn der Port nicht geöffnet wäre:
-p tcp -j REJECT --reject-with tcp-reset
-p udp -j REJECT --reject-with icmp-port-unreachable
Wenn ein Port-Scanner feststellt, dass einige Ports Pakete verwerfen, die meisten jedoch ablehnen, kann er davon ausgehen, dass sich die verworfenen Pakete an offenen, aber versteckten Ports befinden.
Trotz vieler richtiger Antworten nur meine zwei Cent:
Hier ist ein kurzer PoC FW.IDS-DROP-vs-REJECT von mir zu dem Thema bezüglich der Regeln für Ban-Systeme (Firewall, IDS, etc).
Kurz:
DROP
kann für wiederkehrende Eindringlinge verwendet werden, wenn alle Ports gesperrt sind (so sieht es aus, als wäre der Server auf der Eindringlingseite ausgefallen)REJECT --reject-with tcp-reset
ist die beste Wahl für das Sperren mehrerer Ports, da es sich anscheinend wie ein wirklich geschlossener Port verhältDROP
und REJECT
(ohne tcp-reset
) dem Eindringling ein "Signal" geben, dass etwas Blockierendes vorhanden ist (was ihn dazu anregen könnte, den "Angriff" fortzusetzen, in der Hoffnung, die erforderlichen Daten bereitzustellen) irgendwann)Ja, die Verwendung von DROP ist sinnlos. Verwende REJECT.
Auch wenn die Regel "DROP" lautet, antwortet das System auf eine eingehende SYN mit einem TCP-RST / ACK. Dies ist das Standardverhalten für Ports, an denen keine Dienste ausgeführt werden. (tcpdump et al. protokollieren dies nicht.)
Wenn ein Dienst ausgeführt wird, wird die SYN mit TCP SYN / ACK erfüllt.
Da der DROP nicht wie gewohnt mit einem TCP-SYN / ACK reagiert, sondern mit einem RST / ACK, wird Ihre DROP-Regel für Ihre Firewall werben, und Port-Scanner werden wissen, dass Sie eine Firewall verwenden, und Sie werden möglicherweise weiterhin in die Hoffnung getrieben Ihre Firewall zu fangen.
Dies ist nun nmap kann zum Beispiel "gefiltert" anstatt "geschlossen" 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 die einzige "unsichtbare" Firewall-Konfiguration eine, bei der sich ein dediziertes Gerät zwischen Ihren Geräten befindet und Ports nur selektiv weiterleitet.
Wenn Sie sich wirklich mit den grundlegenden Scannern herumschlagen möchten, können Sie TCP-Verbindungen TARPITIEREN, wodurch das TCP-Fenster auf 0 gesetzt wird, sodass keine Daten übertragen werden können, nachdem die Verbindung geöffnet wurde. Dabei werden Anforderungen zum Schließen der Verbindung ignoriert, sodass der Scanner warten muss für die Verbindung Timeout auftreten, wenn es sicher sein will. Für einen Angreifer ist es jedoch trivial, dies zu erkennen und seine Auszeit zu verkürzen.
Alles in allem ist es wahrscheinlich das Beste, wenn Sie REJECT verwenden - oder ein dediziertes Port-Weiterleitungsgerät zwischen Ihrem Server und dem Internet einrichten.
Oder führen Sie einfach Dienste auf Ihren mit dem Internet verbundenen Computern aus, für die keine Firewall erforderlich ist.
Im Allgemeinen ist REJECT für Webserver am besten geeignet, da jeder Dienst, der versucht, darauf zuzugreifen (wahrscheinlich meistens auch Sie), schnell eine Antwort erhält und Benutzer oder andere Dienste nicht darauf warten müssen, sich zu fragen, ob ein Netzwerkausfall vorliegt.
DROP
die eine ausstellen wird SYN/ACK
? Ich habe das nie auf meinen Maschinen gesehen.
DROP
a zurückgegeben wird, nicht unterstützt SYN/ACK
. Auch ich habe dieses Verhalten unter keiner Version von gesehen iptables
. Wenn Sie eine Quelle haben, die Ihre Behauptung unterstützt, wäre es am nützlichsten, sie zu sehen. Mit Sicherheit stützen die Paket-Dumps, die ich gerade gemacht habe, Ihren Anspruch nicht.