Блокировка определенных портов на определенных виртуальных машинах, работающих на KVM
У меня есть 2 ВМ, работающие на хостах KVM. Я запускаю веб-сервер на одном и использую другой для экспериментов - в основном просто использую на нем ssh.
Я хочу заблокировать все входящие соединения на всех портах, кроме порта 80 на виртуальной машине веб-сервера, и хочу заблокировать все порты, кроме определенного порта, который я использую для ssh на другой виртуальной машине.
Я знаю, что могу использовать iptables на самих виртуальных машинах. Но я хочу сделать это, используя хосты KVM. Я хочу сделать это по 2 основным причинам,
- В будущем я мог бы передать виртуальные машины кому-то еще.
- Возможно, я добавляю больше виртуальных машин и хочу контролировать доступ извне виртуальных машин, а не зависеть от пользователей этих виртуальных машин.
Я никогда не делал этого и пытался что-то сделать. Я смотрел на virsh
отсюда
Я пробовал The network filter driver
часть.
Я создал правило, используя приведенный ниже XML, чтобы заблокировать все порты TCP между 0 и 1023,
<filter name='no-spamming' chain='root'>
<uuid>d217f2d7-5a04-0e01-8b98-ec2743436b74</uuid>
<rule action='drop' direction='in' priority='500'>
<tcp match='yes' srcportstart='0' srcportend='1023'/>
</rule>
</filter>
И тогда я использовал virsh edit
и добавил отмеченную строку в XML.
<interface type='ethernet'>
<mac address='52:54:00:33:b8:c7'/>
<script path='no'/>
<target dev='tap0'/>
<model type='virtio'/>
<filterref filter='no-spamming'/> <-- Added this line
<boot order='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Даже после этого я мог получить доступ к порту 80 на обеих виртуальных машинах.
Может кто-то указать, где я иду не так или предложить альтернативу virsh
что может быть использовано для достижения этого, пожалуйста?
РЕДАКТИРОВАТЬ
Я следовал предложениям в этом ответе и изменил srcportstart
в dstportstart
а также srcportend
в dstportend
,
Но я все еще могу подключиться через ssh к порту 22 для обеих виртуальных машин.
1 ответ
Я думаю, что вы хотите фильтровать порт назначения, а не исходный порт, и поэтому должны использовать dstportstart
/dstportstop
фильтровать входящие соединения.