Фильтрация пакетов с помощью iptables на интерфейсе tap

Фильтрация пакетов с помощью iptables на интерфейсе tap

Я пытаюсь написать правила брандмауэра, чтобы запретить гостевой машине доступ в интернет. Сервер (Ubuntu server 22.0, использующий KVM) имеет физическое соединение (enp34s0), которое подключено к маршрутизатору, интерфейс моста (br0), а гость использует устройство tap (vnet0), которое подключено к той же сети с br0. Ни одно правило, которое я пытался применить к vnet0, не сработало.

Например, я попытался запретить ping с помощью следующих команд: 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

все еще могу отправлять пинги с/на гостя. (также пробовал с -p tcp --dport 443, чтобы предотвратить https) Я что-то делаю не так? Не могу понять, связано ли это с тем, что это TAP-устройство, и не нашел ничего похожего в Интернете..

решение1

Если вы добавите правило ведения журнала в свою FORWARDтаблицу для захвата любого трафика ICMP...

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

...вы увидите, что входным интерфейсом является мост, а не устройство TAP:

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 

Это значит, что ваши правила -i vnet0никогда не совпадут.

Вы можете увидеть устройство TAP в PHYSINатрибуте. Мы можем сопоставить это с помощью physdevмодуля, например:

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

(Также есть параметр --physdev-out, если вам нужно сопоставить трафик в другом направлении.)

Связанный контент