Ist es mit iptables möglich, mehrere IP-Bereiche in einer einzigen Regel zu negieren?

Ist es mit iptables möglich, mehrere IP-Bereiche in einer einzigen Regel zu negieren?

Ich möchte alle fremden Verbindungen zu einem Port protokollieren, nicht unsere IP-Blöcke. Für einen einzelnen Bereich sieht die Regel folgendermaßen aus:

-A INPUT ! -s 10.20.0.0/16 -p tcp -m tcp --dport 8443 -m state --state NEW  -j LOG --log-level 1 --log-prefix "New 8443 Connection"

Logischerweise besteht die Idee darin, Verbindungen zum Port nicht zu protokollieren, wenn sie von oder 8443kommen . Gehe ich das Problem mit der falschen Logik für iptables an? Ist das mit iptables überhaupt möglich?10.20.0.0/1610.30.0.0/16

Bitte beachten Sie, dass es sich hierbei nur um Beispiel-IP-Bereiche handelt und nicht um die, für die ich keine Protokolleinträge mehr schreiben möchte.

Antwort1

Sie können ein IPset verwenden:

-A INPUT -p tcp -m tcp --dport 8443 -m set ! --match-set OUR_IP4 src -j LOG

Beachten Sie, dass das IPset mit einem separaten Tool verwaltet werden muss (einschließlich Erstellen/Wiederherstellen beim Booten).

Sie können eine Unterkette verwenden:

-A INPUT -p tcp -m tcp --dport 8443 -j FOOSERVICE

-N FOOSERVICE
-A FOOSERVICE -s 10.20.0.0/16 -j RETURN
-A FOOSERVICE -s 10.30.0.0/16 -j RETURN
-A FOOSERVICE -j LOG --log-prefix "New connection to foo: "
-A FOOSERVICE -j RETURN
   # optional; subchains always return at the end

verwandte Informationen