it-swarm.com.de

Warum speichert der dauerhafte Iptables-Dienst meine Änderungen nicht?

Ich folgte dem Tutorial this , um IP-Regeln für Ubuntu 12.04 einzurichten. Beim Setup hat alles gut funktioniert - aber jetzt habe ich Änderungen an der Firewall vorgenommen, die beim Neustart nicht bestehen bleiben. Ich verstehe nicht, warum das so ist. Hier ist eine Demonstration, wie ich iptables-persistent verwende. Was mache ich falsch?

$ Sudo service iptables-persistent start
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...   

$ Sudo iptables -L   //shows a certain rule
$ iptables -D INPUT ... //command successfully drops the rule
$ Sudo iptables -L   //shows rule has been deleted

 $ Sudo service iptables-persistent restart
 * Loading iptables rules...                                                                                             *  IPv4...                                                                                                              *  IPv6...                                                                                                      [ OK ] 
 $ Sudo iptables -L  //rule is back
20
bernie2436

iptables-persistent funktioniert so nicht. Neustart des iptables-persistent "service" erfasst nicht den aktuellen Status der iptables und speichert ihn; Alles, was es tut, ist die Wiederherstellung der iptables-Regeln, die bei der letzten Konfiguration des Pakets gespeichert wurden.

Konfigurieren iptables-persistent, müssen Sie es über Ihren aktuellen iptables-Regelsatz erzählen.

Ein Weg, dies zu erreichen, ist wie folgt:

iptables-save >/etc/iptables/rules.v4
ip6tables-save >/etc/iptables/rules.v6

Oder gleichwertig das iptables-persistent Paket bietet auch Folgendes:

dpkg-reconfigure iptables-persistent

(Sie müssen die Fragen zum Speichern der Regeln mit Ja beantworten.)

Danach das nächste Mal iptables-persistent wird gestartet/neu gestartet, die erwarteten iptables-Regelsätze werden geladen.

42
Steven Monday

Ein sehr einfacher Weg, um die aktuellen iptables-Regeln zu speichern, ist die Verwendung des folgenden Befehls:

Sudo service netfilter-persistent save

Mit den oben genannten Funktionen, die zumindest in Ubuntu nach der Installation des Pakets netfilter-persistent (Und iptables-persistent) Funktionieren, müssen die iptables-Befehle nicht manuell ausgeführt oder das Paket neu konfiguriert werden (wie von sogar vorgeschlagen) die oben akzeptierte Antwort).

9
OpenITeX
$ iptables ... DROP //command successfully drops the rule
$ Sudo iptables -L   //shows rule has been deleted

Das ist nicht das, was DROP bedeutet oder tut. Von man iptables:

... die Sonderwerte ACCEPT, DROP, QUEUE oder RETURN. AKZEPTIEREN bedeutet, das Paket durchzulassen. DROP bedeutet , um das Paket auf den Boden fallen zu lassen. QUEUE bedeutet ...

Sie haben also eine neue Regel hinzugefügt. Es kann effektiv eine beliebige Anzahl anderer Regeln ersetzen, aber diese Regeln existieren immer noch.

Wenn Sie solche Dinge überprüfen (Ihr iptables -L Ausgabe), ich würde es aber füttern grep "string unique to this rule" anstatt deine Augen zu benutzen. Dies ist einfacher und schneller und weniger fehleranfällig.

iptables -L | grep "some unique string"

Wenn Sie eine Regel löschen möchten, verwenden Sie -D Schalter; Die Manpage beschreibt zwei Formen davon:

-D, --Kettenregelspezifikation löschen

-D, - Kette Rulenum löschen

Löschen Sie eine oder mehrere Regeln aus der ausgewählten Kette. Es gibt zwei Versionen dieses Befehls: Die Regel kann als Zahl in der Kette (beginnend mit 1 für die erste Regel) oder als übereinstimmende Regel angegeben werden.

3
goldilocks

Installieren Sie iptables-persistent:

Sudo apt install iptables-persistent

speichern Sie die Regeln, nachdem Sie die gewünschten Änderungen vorgenommen haben:

Sudo netfilter-persistent save
2
Zack A

Wie durch @ steven-monday erklärt, können Sie Ihren Regelsatz selbst im richtigen Verzeichnis speichern (nämlich: /etc/iptables/rules.v{4,6}).

@ OpenITeX ist jedoch richtig: Das Aufrufen der Aktion save von service netfilter-persistent Ist besser.

Ab heute (in 18.10) ist iptables-save integriert, aber iptables-persistent Ist nicht installiert. Daher ist das von service netfilter-persistent Aufgerufene Plugin-Verzeichnis leer, und der Dienst druckt aus, dass der Regelsatz gespeichert wurde, während dies nicht der Fall war.

TLDR: Installieren Sie iptables-persistent Und überprüfen Sie, ob das Plugin-Verzeichnis /usr/share/netfilter-persistent/plugins.d Plugins enthält.


So habe ich das herausgefunden:

$ cat /etc/init.d/netfilter-persistent 
...
case "$1" in
...
save)
    log_action_begin_msg "Saving netfilter rules"
    /usr/sbin/netfilter-persistent save
    log_action_end_msg $?
    ;;

Überprüfen Sie dann das Skript /usr/sbin/netfilter-persistent Und beachten Sie, dass es externe Skripte aufruft:

$ cat /usr/sbin/netfilter-persistent
...
PLUGINS=/usr/share/netfilter-persistent/plugins.d
...
run_plugins () {
    if [ -d ${PLUGINS} ]; then
        run-parts -v -a ${1} ${PLUGINS}
    fi
}

case $1 in
start|save|flush)
    run_plugins ${1}
    ;;

Dann bemerkte ich, dass /usr/share/netfilter-persistent/plugins.d Leer war.

1
Aif