Jak mogę ustawić określony zestaw reguł iptables na stałe?

42

Czy istnieje „najlepsza praktyka” lub standard, który utrwala kilka reguł iptables? Mam na myśli: automatycznie stosowane przy ponownym uruchomieniu systemu?

Używam VPS z Ubuntu Server 10.04 LTS (Lucid Lynx).

Dziękuję Ci.

DUŻA EDYCJA: Nie chcę, aby ŻADNA reguła była utrwalana (podobnie jak iptables-persistentpakiet). Chcę, aby tylko mój własny zestaw został ponownie załadowany ... jeśli inne reguły zostaną dodane przez uruchomienie iptables, należy je odrzucić ...

J. Bruni
źródło

Odpowiedzi:

51

Najprostszą metodą jest użycie iptables-save i iptables-restore, aby zapisać aktualnie zdefiniowane reguły iptables do pliku i (ponownie) załadować je (np. Przy ponownym uruchomieniu).

Na przykład uciekłbyś

sudo iptables-save | sudo tee /etc/iptables.conf

aby zapisać bieżące reguły iptables w, /etc/iptables.confa następnie wstawić te linie w /etc/rc.local:

# Load iptables rules from this file
iptables-restore < /etc/iptables.conf
Riccardo Murri
źródło
2
+1 Twoja odpowiedź jest idealna na moje oryginalne pytanie. Uświadomiłem sobie również, czego naprawdę chcę, więc musiałem zmienić pytanie z „Jak mogę ustawić reguły iptables na stałe?”. na „Jak mogę ustawić określony zestaw reguł iptables na stałe?”
J. Bruni
Jeśli możesz, zrób trochę edycji swojej odpowiedzi, aby odzwierciedlić zmianę w pytaniu ... Z przyjemnością to zaakceptuję! Muszę użyć iptables-saveraz i zawsze ładować ponownie (iptables-restore na /etc/rc.local brzmi dobrze).
J. Bruni
1
Jeśli otrzymujesz permission deniedkiedy spróbujesz użyć >wtedy to przepełnienie stosu odpowiedź będzie przydatna.
David Tuite
2
Użyj sudo sh -c "iptables-save > /etc/iptables.conf"zamiastsudo iptables-save > /etc/iptables.conf
Rajat Gupta
31

Szybka aktualizacja tego, ponieważ możesz teraz używać 12.04 i jest lepiej.

iptables-persistentPakiet teraz rozwiązuje ten problem. Żeby zainstalować,

sudo apt-get install iptables-persistent

Reguły zdefiniowane podczas instalowania pakietu są zapisywane i używane przy każdym kolejnym uruchomieniu. Załadowane nowe reguły są odrzucane przy ponownym uruchomieniu.

Plik konfiguracyjny jeśli ma potrzeby ich zmiany (raz iptables-persistentjest zainstalowany) jest /etc/iptables/rules.v4albo /etc/iptables/rules.v6dla IPv4 i IPv6 iptables odpowiednio.

użytkownik172020
źródło
Jeśli dokonasz edycji w /etc/iptables/rules.v4, jak możesz ją zastosować [oficjalnie]? Obecnie robięsudo iptables-restore < /etc/iptables/rules.v4
Bruno Bronosky
24

Lepiej niż /etc/rc.localdodać wiersz /etc/network/interfacespo zapisaniu reguł iptable, takich jak ten

post-up iptables-restore < /etc/iptables.up.rules

lub tak samo jest umieścić plik w środku /etc/network/if-down.d/lub /etc/network/if-post-down.d/lub /etc/network/if-pre-up.d/lub /etc/network/if-up.d/.

Kreker
źródło
1
@Kreker: wyjaśnij, w jaki sposób Twoje podejście jest lepsze niż wykonanie skryptu przywracającego rc.local? czy inne podejście nie działa w niektórych przypadkach?
Rajat Gupta
2
Dodanie go do konfiguracji sieci powoduje jego ponowne załadowanie po uruchomieniu polecenia „service network restart”. Nie ogranicza się to do uruchamiania systemu.
K. Darien Freeheart
4
Dlaczego jeden post-up iptables-przywraca, gdy interfejs się psuje?
alphadogg