Dlaczego usługa trwała Iptables nie zapisuje moich zmian?

18

Wykonałem ten samouczek, aby skonfigurować reguły IP na Ubuntu 12.04. Wszystko działało poprawnie podczas instalacji - ale teraz wprowadziłem zmiany w zaporze, które nie utrzymują się po ponownym uruchomieniu. Nie rozumiem, dlaczego tak jest. Oto demonstracja tego, jak korzystam z iptables-persistent. Co ja robię źle?

$ 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
bernie2436
źródło
Zauważam, że iptables -D INPUTnie ma tej reguły sudo, czy na pewno zgłasza ona sukces? Czy zachowanie zmienia się, jeśli uruchomisz je w sobie sudo?
Bratchley,

Odpowiedzi:

41

iptables-persistentnie działa w ten sposób. Ponowne uruchomienie iptables-persistent„usługi” nie przechwytuje bieżącego stanu iptables i nie zapisuje go; wystarczy przywrócić reguły iptables, które zostały zapisane podczas ostatniej konfiguracji pakietu.

Aby skonfigurować iptables-persistent, musisz powiedzieć o swoim obecnym zestawie reguł iptables.

Jednym ze sposobów osiągnięcia tego jest:

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

Lub, równoważnie, iptables-persistentpakiet zapewnia również:

dpkg-reconfigure iptables-persistent

(Musisz odpowiedzieć „tak” na pytania dotyczące tego, czy zapisać reguły).

Następnie, przy następnym iptables-persistenturuchomieniu / ponownym uruchomieniu, oczekiwane zestawy reguł iptables zostaną załadowane.

Steven Monday
źródło
9

Bardzo prostym sposobem zapisania bieżących reguł iptables jest użycie polecenia:

sudo service netfilter-persistent save

Korzystając z powyższego, który działa przynajmniej w Ubuntu po zainstalowaniu pakietu netfilter-persistent(i iptables-persistent), nie trzeba ręcznie uruchamiać poleceń iptables ani ponownie konfigurować pakietu (jak sugeruje to nawet zaakceptowana odpowiedź powyżej).

OpenITeX
źródło
Czy to sudo service netfilter-persistent saveczy sudo service netfilter-persistent save .? (Kropka na końcu.)
Dziękujemy za zwrócenie uwagi, że poprawnym poleceniem jest bez kropki na końcu linii. Poprawiłem odpowiednio odpowiedź.
OpenITeX,
3
$ iptables ... DROP //command successfully drops the rule
$ sudo iptables -L   //shows rule has been deleted

Nie to DROPoznacza lub nie działa. Od man iptables:

... wartości specjalne ACCEPT, DROP, QUEUE lub RETURN. AKCEPTUJ oznacza przepuszczenie pakietu. DROP oznacza upuszczenie pakietu na podłogę. KOLEJKA oznacza ...

Więc dodałeś nową regułę. Może skutecznie zastępować dowolną liczbę innych reguł, ale reguły te nadal istnieją.

Podczas sprawdzania takich rzeczy (twoich iptables -Lwyników) wolałbym je grep "string unique to this rule"raczej karmić niż używać twoich oczu. Jest to łatwiejsze i szybsze, a także mniej podatne na błędy.

iptables -L | grep "some unique string"

Jeśli chcesz usunąć regułę, użyj -Dprzełącznika; strona podręcznika opisuje dwie formy:

-D, --usunięcie specyfikacji reguły łańcucha

-D, - usuń łańcuch reguł

Usuń jedną lub więcej reguł z wybranego łańcucha. Istnieją dwie wersje tego polecenia: regułę można określić jako liczbę w łańcuchu (zaczynając od 1 dla pierwszej reguły) lub regułę pasującą.

Złotowłosa
źródło
przepraszam, to było niejasne. Korzystam z opcji -D, aby ZROBIĆ regułę. Zobacz zmianę powyżej
bernie2436
3
-Doznacza „usuń”, a nie „DROP” Użycie terminu „DROP” oznacza coś innego niż cel skoku podczas mówienia, co iptablesjest mylące jak diabli.
Bratchley,
1

Jak wyjaśniono w @ steven-poniedziałek , możesz zapisać zestaw reguł samodzielnie we właściwym katalogu (mianowicie:) /etc/iptables/rules.v{4,6}.

Jednak @OpenITeX ma rację: lepsze jest wywoływanie saveakcji service netfilter-persistent.

Na dzień dzisiejszy (w 18.10) iptables-save jest wbudowany, ale nieiptables-persistent jest zainstalowany. Stąd katalog wtyczek wywoływany przez jest pusty, a usługa wypisuje, że zestaw reguł został zapisany, a nie był.service netfilter-persistent

TLDR: zainstaluj iptables-persistenti sprawdź, czy katalog /usr/share/netfilter-persistent/plugins.dwtyczek zawiera wtyczki.


Oto jak to wymyśliłem:

$ 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 $?
    ;;

Następnie sprawdź /usr/sbin/netfilter-persistentskrypt, zauważ, że wywołuje on zewnętrzne skrypty:

$ 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}
    ;;

Potem zauważyłem, że /usr/share/netfilter-persistent/plugins.dbyło puste.

Aif
źródło
1

Zainstaluj iptables-persistent:

sudo apt install iptables-persistent

zapisz reguły po dokonaniu pożądanych zmian:

sudo netfilter-persistent save
Zack A.
źródło