我在 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
改为dstportstart
和srcportend
改为dstportend
。
但我仍然能够通过端口 22 连接到两个虚拟机。
答案1
我认为您想要过滤目标端口而不是源端口,因此应该使用dstportstart
/dstportstop
来过滤传入的连接。