iptables multiple -d Flags nicht erlaubt

7

Ich versuche, alle meine ausgehenden Verbindungen mithilfe von iptables in einer Datei zu protokollieren.

Das ist meine Regel:

-A OUTPUT ! -o lo ! --destination 127.0.0.1  -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7

Wenn ich jedoch ein anderes IP-Ziel (Multicast) hinzufüge, lautet meine Regel wie folgt:

-A OUTPUT ! -o lo ! --destination 127.0.0.1 ! --destination 239.192.0.0 -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7

Ich erhalte folgende Fehlermeldung:

multiple -d flags not allowed

Meine Frage ist nicht, was der Fehler bedeutet, sondern wie ich mehrere IP-Adressen in meiner Regel ausschließen kann. Die beiden Bedingungen

! --destination 127.0.0.1

und

! --destination 239.192.0.0

schließen sich gegenseitig aus, also wäre es effektiv, zwei Regeln zu haben, als hätte man sie überhaupt nicht (nur schlimmer, da ich fast doppelt so viele Protokolle bekommen würde)

Gibt es also ein "und" Operator?

Tom Macdonald
quelle

Antworten:

9

Bei Problemen dieser Art können Sie neue Ketten definieren und zwischen ihnen springen. Sie können beispielsweise eine Kette hinzufügen LOGGINGund am Anfang dieser Kette die Pakete, die Sie nicht protokollieren möchten, mit der folgenden Aktion abgleichen RETURN:

$ iptables -N LOGGING
$ iptables -A LOGGING -d 127.0.0.0/8 -j RETURN
$ iptables -A LOGGING -d 239.192.0.0/16 -j RETURN
$ iptables -A LOGGING -j LOG 
$ iptables -A OUTPUT -j LOGGING

Auf diese Weise wird alle Pakete durch die kommende OUTPUTKette würden zunächst durch die LOGGINGKette und alles nicht zu sein 127.0.0.0/8und 239.192.0.0/16protokolliert werden würde, dann würde die Kontrolle geht auf die Rückseite OUTPUT.

Andreas Wiese
quelle
3

Ja, aber es funktioniert nicht so, wie Sie es möchten. Von der Manpage:

Es können mehrere Adressen angegeben werden, dies wird jedoch auf mehrere Regeln erweitert (beim Hinzufügen mit -A) oder es werden mehrere Regeln gelöscht (mit -D).

Um dies zu tun, müssen Sie früher in der Kette Regeln hinzufügen, um den Datenverkehr umzuleiten, den Sie nicht protokollieren oder ändern möchten, z

-A OUTPUT -o lo -j ACCEPT
-A OUTPUT --destination 239.192.0.0 -j ACCEPT
-A OUTPUT  -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7
Mikel
quelle
Es sollte möglich sein, 2 Antworten zu akzeptieren. Am Ende habe ich beschlossen, Andreas die Reputationspunkte zu geben. Vielen Dank und eine positive Bewertung!
Tom Macdonald
1
Ich habe auch über diese Antwort nachgedacht, aber der Kettenansatz hat den Vorteil, dass Sie nicht auf mögliche zusätzliche Regeln schließen, die nach der Protokollierung kommen (wahrscheinlich möchten Sie weiter filtern, und wenn Sie ACCEPTeinige Adressen bearbeitet haben, könnte dies zu Problemen führen).
Andreas Wiese
2
Vielen Dank! Andreas 'Antwort ist sauberer, daher ist die Annahme verdient.
Mikel
1

Sie können durch Kommas getrennte Werte mit -doder verwenden -s, um mehrere IPs festzulegen. (Siehe Diskussion unter http://www.gossamer-threads.com/lists/gentoo/user/210361 )

Zum Beispiel Befehl

sudo iptables -A OUTPUT -d 192.168.235.43,192.168.235.46 -j DROP

Filtert den Datenverkehr auf zwei Server.

Alex
quelle
3
Beste Antwort, aber denken Sie daran, dass dies mit '!' Nicht funktioniert.
Nigel Horne