Ich fange gerade mit Iptables an und bin auf etwas gestoßen, das ich nicht wirklich verstehe.
Zu Ihrer Information, ich habe die Anweisungen von Ubuntu Wikis IptablesHowTo befolgt .
Die Nat- und Mangle-Tabellen sind leer, ich arbeite gerade nur mit der Filtertabelle.
Das Problem
Wenn ich die folgenden iptables-Regeln hinzufüge:
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP
... dann habe ich immer noch Zugriff auf meinen Computer über ssh, aber die Ausführung aller iptables-Befehle dauert ungefähr ein oder zwei Minuten. Es ist kein DNS-Problem, -n
ändert es nicht.
Die Lösung
Wenn ich die Tabelle spüle und stattdessen diese drei Regeln hinzufüge, funktioniert alles einwandfrei:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP
Kann mir jemand erklären, warum die erste Regel so große Auswirkungen auf iptables hat? Ich verstehe, dass etablierte Sitzungen Datenverkehr empfangen können, aber warum brauche ich ihn, wenn ssh geöffnet ist?
sudo
DNS-Suchvorgänge durchgeführt. Wenn diese blockiert sind, ist der Befehl langsam. Sind all Ihren andereniptables
Befehlen ein Präfix vorangestelltsudo
?sudo strace …
(von einer Root-Shell) aus, um zu sehen, worauf es blockiert.Antworten:
Es wird eine DNS-Suche durchgeführt. Da die Antwort blockiert ist, dauert es eine Weile, bis eine Zeitüberschreitung auftritt.
Versuchen Sie, iptables -n ... auszuführen, um die DNS-Suche zu verhindern.
Der Conntrack ermöglicht den Empfang von Verbindungen über den kurzlebigen Port, der für Antworten auf Anforderungen erstellt wurde, die von Ihrem Computer initiiert wurden (in diesem Fall die DNS-Anforderung). Ohne ESTABLISHED- oder RELATED-Verbindungen zuzulassen, werden sogar Antworten auf Ihre Anfragen blockiert.
EG: Wenn Sie versuchen, eine Website aufzurufen, wird die Antwort der Website blockiert, obwohl Sie die Anfrage für die Website senden können.
quelle
Mit
Ihr Computer verwirft jedes eingehende Paket, es sei denn, es kommt vom SSH-Port. Es ist eine gute Idee, wenn diese Maschine nur über SSH kommunizieren soll. Andernfalls müssen Sie hinzufügen
Dadurch stellen Sie sicher, dass Sie eine Verbindung zu einem Webserver herstellen, anstatt von jemandem eine Verbindung herzustellen.
quelle
-m conntrack
Sie eine weitere "Chance" haben, dass die Pakete akzeptiert werden, bevor sie sicher verworfen werden. Auf dem Client-Computer müssen Sie haben,iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
wenn Sie eine Antwort sehen möchten. Auf der Serverseite lassen Sie einfach die eingehende SSH-Verbindung zu und trennen Sie alles andere (wenn der Server nur als SSH-Verbindung fungiert). Hoffe alles ist klar.