Wyświetlanie wszystkich reguł iptables

144

Czy istnieje sposób na iptablesbardziej szczegółowe przeglądanie reguł?

Ostatnio dodałem maskaradę do szeregu adresów IP:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
service iptables save
service iptables restart

Co zrobiło, co chcę, ale kiedy używam:

iptables -L

Otrzymuję takie same wyniki, jak zwykle:

Chain INPUT (policy ACCEPT)
target    prot opt source        destination

Chain FORWARD (policy ACCEPT)
target    prot opt source        destination

Chain OUTPUT (policy ACCEPT)
target    prot opt source        destination

Jak mogę zobaczyć reguły, w tym te, które dodałem? (system to CentOS 6)

TheLovelySausage
źródło

Odpowiedzi:

116

Podczas używania -L, --listopcję do listy aktualnych reguł zapory, trzeba także określić odpowiednią tabelę Netfilter (jeden z filter, nat, mangle, rawlub security). Tak więc, jeśli dodaliśmy regułę dla nattabeli, należy wyraźnie określić tę tabelę przy użyciu -t, --tableopcję:

iptables --table nat --list

Lub za pomocą krótkiego formularza opcji:

iptables -t nat -L

Jeśli nie określisz konkretnej tabeli, filtertabela będzie używana jako domyślna.


Dla szybszych wyników, może być przydatna również obejmować -n, --numericmożliwość wydrukowania numerycznych adresów IP zamiast nazw hostów, unikając w ten sposób konieczności oczekiwania na wyszukiwania wstecznego DNS.

Można uzyskać jeszcze więcej informacji o tym -v, --verboseopcję.

Anthony Geoghegan
źródło
113

iptableskontroluje pięć różnych tabel: filter, nat, mangle, rawi security. W danym wywołaniu iptableswyświetla lub modyfikuje tylko jedną z tych tabel, określoną przez argument opcji -t(domyślnie to filter). Aby zobaczyć pełny stan zapory, musisz wywoływać kolejno iptableskażdą tabelę.

Ponadto, aby uzyskać dokładną reprezentację reguł, musisz przekazać tę opcję -v. W przeciwnym razie niektóre ważne kryteria są pomijane w danych wyjściowych, takie jak interfejs w regułach filtrowania (np. Reguła mówiąca „akceptuj wszystko” i reguła mówiąca „akceptuj wszystko w interfejsie sprzężenia zwrotnego” można tylko odróżnić -v).

Tak więc, aby uzyskać pełną prezentację reguł filtru sieciowego, potrzebujesz

iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security

Alternatywnie możesz wywołać iptables-saveprogram, który wyświetla wszystkie reguły we wszystkich tabelach w formacie, który można przeanalizować iptables-restore. Ten format jest także w miarę czytelny dla ludzi (jest prawie jak seria wywołań iptablespolecenia, aby zbudować tabelę).

Gilles
źródło
56

iptables -Srobi dla mnie lewę. Wydaje się, że zawiera listę wszystkich aktywnych reguł, nawet gdy usługa jest wyłączona.

Ze strony podręcznika:

-S, --list-rules [łańcuch] Wydrukuj wszystkie reguły w wybranym łańcuchu. Jeśli nie zostanie wybrany żaden łańcuch, wszystkie łańcuchy zostaną wydrukowane jak iptables-save. Jak każda inna komenda iptables, ma ona zastosowanie do określonej tabeli (domyślnym filtrem).

Cameron
źródło
To jest naprawdę odpowiedź KWL, zauważyłem również, że status / sbin / service iptables daje podobny wynik
TheLovelySausage
6
+1. Na stronie podręcznika nie pojawia się „wydaje się”: „-S, wydrukuj wszystkie reguły w wybranym łańcuchu. Jeśli nie zostanie wybrany żaden łańcuch, wszystkie łańcuchy zostaną wydrukowane jak iptables-save”. Tego zwykle potrzebuję.
Mike S,
3
nie uważam, że tak jest. iptables -Snie pokazuje wszystkich moich zasad nat, które widzę, gdy uruchamiamiptables -L -t nat
Mulllhausen
1
@ MikeS Na stronie podręcznika, OBA polecenia działają tylko na podanej tabeli, domyślnie filtruj. „Jak każda inna komenda iptables, ma ona zastosowanie do określonej tabeli (domyślnym filtrem).” Sformułowania w dokumentacji są kopiowane prawie identycznie dla -S i -L, różnią się one tylko formatowaniem wyjścia, a nie drukowanymi regułami. Dotyczy to przynajmniej Ubuntu 16.04, który w moim systemie to iptables v1.6.0.
Scott,
Zgadzam się z @mulllhausen tutaj. Potrzebowałem „sudo iptables --table nat --list”, aby wyświetlić reguły tabeli nat. sama flaga „-S” ich nie pokazała.
Robert Oschler,
15

To, co robię, to wykonać iptables-save > iptables_bckp, spowoduje to utworzenie kopii zapasowej wszystkich warstw, a następnie edycję pliku i przywrócenie iptablesiptables-restore < iptables_bckp

# iptables-save > iptables_bckp
# vim iptables_bckp
# iptables-restore < iptables_bckp

Możesz wykonać podwójną kopię zapasową, aby zmodyfikować jedną z nich bez utraty poprzednich iptables.

To osobista praktyka, nie mówię, że to najlepszy sposób, ale dla mnie działa świetnie.

Spróbuj

tachomi
źródło
Jest to jedyna realistyczna odpowiedź, jaką do tej pory znalazłem, która faktycznie zrzuca wszystkie tabele.
Chris Harrington
4

iptablesPolecenie wymaga również określenie tabeli poza tym to domyślne filtrowanie tabeli. Więc spróbuj:

iptables -t nat -L
użytkownik425
źródło
1

Możesz użyć:

# lsmod | grep ip_tables
ip_tables              13193  4 iptable_raw,iptable_mangle,iptable_nat,iptable_filter

Aby znaleźć wszystkie tabele i wyświetlić określoną regułę w tabeli.

Tur Le
źródło
1

Jeśli to naprawdę pomoże, możesz napisać skrypt bash i umieścić go w folderze, do którego odwołuje się twoja ścieżka, lub odwoływać się do niego przez alias w pliku ~ / .bashrc.

AllRules.sh

#!/bin/bash

 echo "Filter table:"
 iptables -t filter -vL

 echo "Nat table:"
 iptables -t nat -vL

 echo "Mangle table:"
 iptables -t mangle -vL

 echo "Raw table:"
 iptables -t raw -vL

 echo "Security table:"
 iptables -t security -vL

 echo 
 echo "All rules in all tables printed"

Pamiętaj, aby dać swojemu nowemu skryptowi bash uprawnienia do wykonywania za pomocą chmod

Jeśli uprawnienie jest problemem, być może będziesz musiał dodać sudo przed wszystkimi iptablespoleceniami.

ob1
źródło
0
iptables -vnxL
iptables -vnxL -tnat

ewentualnie dodatkowo, chociaż są one bardzo rzadko używane:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
sjas
źródło