阻止在 KVM 上运行的某些虚拟机上的某些端口

阻止在 KVM 上运行的某些虚拟机上的某些端口

我在 KVM 主机上运行了 2 个虚拟机。我在其中一个上运行 Web 服务器,另一个用于实验 - 基本上就是在其上使用 ssh。

我想阻止 Web 服务器 VM 上除端口 80 之外的所有端口上的所有传入连接,并且想阻止除我在其他 VM 上用于 ssh 的特定端口之外的所有端口。

我知道我可以在虚拟机上使用 iptables。但我想使用 KVM 主机来做到这一点。我想这样做有两个主要原因,

  • 展望未来,我可能会将虚拟机交给其他人。
  • 我可能会添加更多虚拟机,并希望控制来自虚拟机外部的访问,而不依赖虚拟机的用户来处理它。

我从来没有这样做过,只是在尝试一些东西。我一直在virsh关注这里

我正在尝试这个The network filter driver部分。

我使用下面的 xml 创建了一条规则来阻止 0 到 1023 之间的所有 tcp 端口,

<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改为dstportstartsrcportend改为dstportend

但我仍然能够通过端口 22 连接到两个虚拟机。

答案1

我认为您想要过滤目标端口而不是源端口,因此应该使用dstportstart/dstportstop来过滤传入的连接。

相关内容