Lösung 1:
Verwenden Sie als allgemeine Regel 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 niemand sehen soll.
Normalerweise sollten alle Regeln für Verbindungen innerhalb Ihres LANs REJECT verwenden. Für das Internet:Mit Ausnahme von Ident auf bestimmten Servern werden Verbindungen aus dem Internet normalerweise ABGEBROCHEN.
Die Verwendung von DROP lässt die Verbindung zu einer unbesetzten IP-Adresse erscheinen. Scanner können sich dafür entscheiden, Adressen, die unbesetzt erscheinen, nicht weiter zu scannen. Da NAT verwendet werden kann, um eine Verbindung auf der Firewall umzuleiten, weist die Existenz eines bekannten Dienstes nicht unbedingt auf die Existenz eines Servers an einer Adresse hin.
Ident sollte an jeder Adresse übergeben oder abgelehnt werden, die den SMTP-Dienst bereitstellt. 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:Bei Verwendung von DROP-Regeln:- UDP-Pakete werden verworfen und das Verhalten ist dasselbe wie bei einer Verbindung zu einem Port ohne Firewall ohne Dienst. - TCP-Pakete geben ein ACK / RST zurück, was die gleiche Antwort ist wie ein offener Port ohne Service darauf wird mit antworten. Einige Router antworten mit und ACK/RST im Namen von Servern, die ausgefallen sind.
Bei Verwendung von REJECT-Regeln wird ein ICMP-Paket gesendet, das anzeigt, dass der Port nicht verfügbar ist.
Lösung 2:
Der Unterschied besteht darin, dass das REJECT-Ziel eine Ablehnungsantwort an die Quelle sendet, während das DROP-Ziel nichts sendet.
Dies kann z.B. für den Ident-Service. Wenn Sie REJECT verwenden, müssen die Clients nicht auf das Timeout warten.
Mehr dazu:http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
Lösung 3:
Normalerweise möchten Sie ignorieren Sonden von Angreifern an bestimmten Ports, womit ich meine, dass Sie nicht "Verbindung verweigert" zurücksenden wollen. „Verbindung verweigert“ bedeutet:„Hier ist ein Server“ und gibt möglicherweise mehr Informationen preis, während das Verwerfen eines Pakets keine Hinweise auf Softwareversionen, mögliche Schwachstellen oder sogar die Tatsache preisgibt, dass ein Server Ihre IP-Adresse abhört.
Das Obige ist einer der Hauptgründe für die Verwendung von DROP anstelle von REJECT.
Lösung 4:
Ich sehe hier viele widersprüchliche Antworten und da dies der erste Artikel in Google mit den richtigen Schlüsselwörtern ist; 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 es das Paket auf den Boden fallen lässt, dh es macht nichts mit dem Paket.
REJECT unterscheidet sich von DROP darin, dass es ein Paket zurücksendet, aber die Antwort ist so, als ob sich ein Server auf der IP befindet, aber den Port nicht in einem lauschenden Zustand hat. IPtables sendet ein RST/ACK im Falle von TCP oder mit UDP, wenn ein ICMP-Zielport nicht erreichbar ist.
Lösung 5:
Wenn Sie versuchen, die Existenz Ihrer Maschine vollständig zu verbergen, -j DROP
Ist angemessen. Sie können dies beispielsweise verwenden, um eine schwarze Liste zu 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 offen wäre:
- TCP:
-p tcp -j REJECT --reject-with tcp-reset
- UDP:
-p udp -j REJECT --reject-with icmp-port-unreachable
Wenn ein Port-Scanner sieht, dass einige Ports Pakete verwerfen, während die meisten sie ablehnen, kann er davon ausgehen, dass die verworfenen Pakete auf offenen, aber verborgenen Ports liegen.