Neue iptables-Regeln wirken sich nur auf neu gestartete Prozesse aus

Neue iptables-Regeln wirken sich nur auf neu gestartete Prozesse aus

Gibt es eine Möglichkeit, die Iptables-Regeln zu aktualisieren, um eine Verbindung zu blockieren, ohne sie neu starten zu müssen?

Hier ist ein Beispiel für das Verhalten, das ich vermeiden möchte:

On shell#1: I start a ping command 8.8.8.8
On shell#2: I block ping command with iptables rules.
On shell#1: The ping command is still working and I get replies from 8.8.8.8, 
            but if I end the ping command and I restart it, now it will not work.

Ich würde gerne wissen, ob es eine Möglichkeit gibt, den Ping-Befehl zu blockieren, ohne ihn neu starten zu müssen.

Antwort1

1) Was Sie fragen, ist die einfachste Möglichkeit, um iptableszu arbeiten - blockieren Sie den gesamten Verkehr zu einem Ziel unabhängig vom Verbindungsstatus, sodass bestehende Verbindungen eine Zeitüberschreitung erfahren. In Ihrem Beispiel

iptables -I OUTPUT -d 8.8.8.8 -j DROP

blockiert sofort UDP- (DNS), ICMP- (Ping) und TCP-Pakete, die 8.8.8.8 erreichen. Das scheint also Ihre Antwort zu sein. Wenn Sie das beschriebene Verhalten feststellen, posten Sie die von Ihnen verwendete iptables-Befehlszeile.

2) Wenn Sie das andere Verhalten wünschen, also bestehende Verbindungen aufrechtzuerhalten, bis der Prozess neu gestartet wird, haben Sie folgende Möglichkeiten:

iptables -I OUTPUT -d 8.8.8.8 -m state --state NEW -j DROP

oder

iptables -I OUTPUT -d 8.8.8.8 -p tcp --syn -j REJECT

3) Im fortgeschrittenen Fall, in dem Sie eine bestehende TCP-Verbindung tatsächlich so schnell wie möglich schließen möchten, anstatt sie zu blockieren und sie ablaufen zu lassen, könnten Sie vielleicht etwas -j REJECT --reject-with tcp-resetin den Eingabe- und Ausgabeketten basieren oder tcpkilleinige Sekunden lang laufen lassen. Dies ist schwierig, und in fast allen Fällen möchten Sie die Verbindung mit Lösung 1) trennen.

verwandte Informationen