Я пытаюсь написать правила брандмауэра, чтобы запретить гостевой машине доступ в интернет. Сервер (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, если вам нужно сопоставить трафик в другом направлении.)