Anzeigen aller Iptables-Regeln

144

Gibt es eine Möglichkeit, iptablesRegeln detaillierter anzuzeigen ?

Ich habe kürzlich eine Reihe von IP-Adressen um Masquerade erweitert:

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

Was hat getan, was ich will, aber wenn ich benutze:

iptables -L

Ich erhalte die gleiche Ausgabe wie normalerweise:

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

Wie kann ich die Regeln sehen, einschließlich derer, die ich hinzufüge? (System ist CentOS 6)

TheLovelySausage
quelle

Antworten:

116

Bei Verwendung der -L, --listOption , um die aktuellen Firewall - Regeln aufzulisten, müssen Sie auch die entsprechende Netfilter - Tabelle angegeben (eine filter, nat, mangle, rawoder security). Also, wenn Sie eine Regel für die hinzugefügte natTabelle, sollten Sie explizit diese Tabelle angeben , mit der -t, --tableOption:

iptables --table nat --list

Oder verwenden Sie die Optionenkurzform:

iptables -t nat -L

Wenn Sie keine bestimmte Tabelle angeben, wird die filterTabelle als Standard verwendet.


Für schnellere Ergebnisse, kann es sinnvoll sein , auch die einschließen -n, --numericOption numerische IP - Adressen anstelle von Hostnamen zu drucken, wodurch die Notwendigkeit für Reverse - DNS - Lookups zu warten , zu vermeiden.

Sie können auch weitere Informationen erhalten , indem die -v, --verboseOption.

Anthony Geoghegan
quelle
113

iptablessteuert fünf verschiedene Tabellen: filter, nat, mangle, rawund security. Bei einem bestimmten Aufruf wird iptablesnur eine dieser Tabellen angezeigt oder geändert, die durch das Argument der Option angegeben wird -t(standardmäßig auf filter). Um den vollständigen Status der Firewall anzuzeigen, müssen Sie iptablesnacheinander die einzelnen Tabellen aufrufen .

Darüber hinaus müssen Sie die Option übergeben, um eine genaue Darstellung der Regeln zu erhalten -v. Andernfalls werden einige wichtige Kriterien in der Ausgabe ausgelassen, z. B. die Schnittstelle in Filterregeln (z. B. kann nur mit einer Regel unterschieden werden, die "alles akzeptieren" und "alles auf der Loopback-Schnittstelle akzeptieren" sagt -v).

Um also eine vollständige Darstellung der Netzfilterregeln zu erhalten, benötigen Sie

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

Alternativ können Sie das iptables-saveProgramm aufrufen , das alle Regeln in allen Tabellen in einem Format anzeigt, das von analysiert werden kann iptables-restore. Dieses Format ist auch für Menschen einigermaßen lesbar (es ähnelt einer Reihe von Aufrufen des iptablesBefehls zum Erstellen der Tabelle).

Gilles
quelle
56

iptables -Smacht den Trick für mich. Es scheint alle aktiven Regeln aufzulisten, auch wenn der Dienst ausgeschaltet ist.

Von der Manpage:

-S, --list-rules [chain] Gibt alle Regeln in der ausgewählten Kette aus. Wenn keine Kette ausgewählt ist, werden alle Ketten wie iptables-save gedruckt. Wie jeder andere iptables-Befehl gilt er für die angegebene Tabelle (standardmäßig ist filter eingestellt).

Cameron
quelle
Dies ist eine wirklich kwl Antwort, ich habe auch bemerkt, dass / sbin / service iptables Status eine ähnliche Ausgabe gibt
TheLovelySausage
6
+1. Kein "Schein" darüber - aus der Manpage: "-S, Alle Regeln in der ausgewählten Kette drucken. Wenn keine Kette ausgewählt ist, werden alle Ketten wie iptables-save gedruckt." Dies ist die, die ich normalerweise brauche.
Mike S
3
Ich fand das nicht der Fall. iptables -Szeigt nicht alle meine nat-regeln, die ich sehen kann, wenn ich laufeiptables -L -t nat
mulllhausen
1
@MikeS Von der Manpage aus können BEIDE Befehle nur für die angegebene Tabelle ausgeführt werden (standardmäßig filtern). Msgstr "Wie jeder andere iptables - Befehl gilt er für die angegebene Tabelle (Filter ist die Standardeinstellung)." Der Wortlaut in der Dokumentation ist für -S und -L fast identisch kopiert, sie unterscheiden sich nur in der Formatierung der Ausgabe, nicht in den gedruckten Regeln. Dies gilt zumindest für Ubuntu 16.04, das auf meinem System iptables v1.6.0 ist.
Scott
Hier mit @mulllhausen abstimmen. Ich brauchte "sudo iptables --table nat --list", um meine nat-Tabellenregeln anzuzeigen. die "-S" -Flagge selbst zeigte sie nicht.
Robert Oschler
15

Was ich tue, ist auszuführen iptables-save > iptables_bckp, dies würde alle Ebenen sichern, dann die Datei bearbeiten und die Iptables wiederherstelleniptables-restore < iptables_bckp

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

Sie können ein doppeltes Backup erstellen, um eines davon zu ändern, ohne Ihre früheren Iptables zu verlieren.

Dies ist eine persönliche Praxis, ich sage nicht, dass dies der beste Weg ist, aber für mich funktioniert es großartig.

Versuche es

Tachomi
quelle
Dies ist die einzige realistische Antwort, die ich bisher gefunden habe und die tatsächlich auch alle Tabellen löscht.
Chris Harrington
4

Für den iptablesBefehl müssen Sie auch die Tabelle angeben, andernfalls wird standardmäßig die Tabelle gefiltert. Also versuche:

iptables -t nat -L
user425
quelle
1

Sie können verwenden:

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

So finden Sie alle Tabellen und zeigen bestimmte Regeln in der Tabelle an.

Tur Le
quelle
1

Wenn es wirklich hilft, können Sie ein Bash-Skript schreiben und es in einem Ordner ablegen, auf den Ihr Pfad verweist, oder es über einen Alias ​​in der Datei ~ / .bashrc referenzieren.

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"

Denken Sie daran, Ihrem neuen Bash-Skript Ausführungsberechtigungen mit zu erteilen chmod

Wenn die Berechtigung ein Problem darstellt, müssen Sie möglicherweise sudo vor allen iptablesBefehlen hinzufügen .

ob1
quelle
0
iptables -vnxL
iptables -vnxL -tnat

möglicherweise zusätzlich, obwohl diese sehr, sehr selten verwendet werden:

iptables -vnxL -traw
iptables -vnxL -tmangle
iptables -vnxL -tsecuriy
sjas
quelle