Filtern Sie Pakete mit iptables auf einer Tap-Schnittstelle

Filtern Sie Pakete mit iptables auf einer Tap-Schnittstelle

Ich versuche, Firewall-Regeln zu schreiben, um einem Gastcomputer den Internetzugriff zu verwehren. Der Server (Ubuntu Server 22.0, mit KVM) hat eine physische Verbindung (enp34s0), die mit dem Router verbunden ist, eine Bridge-Schnittstelle (br0), und der Gast verwendet ein Tap-Gerät (vnet0), das mit br0 mit demselben Netzwerk verbunden ist. Keine Regel, die ich auf vnet0 anzuwenden versucht habe, hat funktioniert.

Ich habe beispielsweise versucht, Ping mit den folgenden Befehlen zu verhindern: iptables -I FORWARD -i vnet0 -o br0 -p icmp -j DROP iptables -I FORWARD -o vnet0 -i br0 -p icmp -j DROP iptables -I FORWARD -i vnet0 -o enp34s0 -p icmp -j DROP iptables -I FORWARD -o enp34s0 -i br0 -p icmp -j DROP

Ich kann immer noch Pings vom/zum Gast senden. (habe es auch mit -p tcp --dport 443 versucht, um https zu verhindern) Mache ich etwas falsch? Ich kann nicht herausfinden, ob es damit zusammenhängt, dass es sich um ein TAP-Gerät handelt, und habe im Internet nichts dazu gefunden.

Antwort1

Wenn Sie Ihrer Tabelle eine Protokollierungsregel hinzufügen, FORWARDum jeglichen ICMP-Verkehr zu erfassen ...

iptables -I FORWARD -p icmp -j LOG --log-prefix 'FORWARD_ICMP '

...Sie werden sehen, dass die Eingangsschnittstelle die Brücke ist, nicht das TAP-Gerät:

Sep 09 19:19:20 fizzgig kernel: FORWARD_ICMP IN=virbr0 OUT=wlp0s20f3
PHYSIN=vnet1 MAC=52:54:00:f7:70:2a:52:54:00:18:f8:12:08:00 SRC=192.168.122.210
DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=59668 DF PROTO=ICMP TYPE=8
CODE=0 ID=5 SEQ=1 

Dies bedeutet, dass Ihre Regeln -i vnet0niemals übereinstimmen werden.

Sie können das TAP-Gerät im PHYSINAttribut sehen. Wir können dies mithilfe des physdevModuls wie folgt abgleichen:

iptables -A FORWARD -m physdev --physdev-in vnet1 -j DROP

(Es gibt auch eine --physdev-out-Übereinstimmung, wenn Sie den Datenverkehr in die andere Richtung abgleichen müssen.)

verwandte Informationen