Блокировка определенных портов на определенных виртуальных машинах, работающих на 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 фильтровать входящие соединения.

Другие вопросы по тегам