我想在虚拟机主机上保留某些端口号以供虚拟机自己使用。
是否存在一种机制,主机可以通过在列表中查找或根据预设规则检查这些端口,从而排除这些端口分配给与虚拟机无关的进程?
如果其他软件未与主机核实就请求某个端口,它会发现该端口已被阻止,就像正在使用中一样。
虚拟机本身也是在主机上运行的软件,所以我猜它们本身可能会被阻止,因此它应该更像是一个为虚拟机管理器用来分配这些端口的某些特定实用程序保留某些端口的系统。
它也可能与 Docker 容器相关。
更新:虚拟机与主机共享 IP 地址,并且需要将一些传入端口转发到虚拟机或容器上运行的服务。我不知道是否需要保留传出端口,除非它们会干扰侦听服务。我猜 iptables 规则可以区分它们,或者不能。
当然,使用 seccomp 或一般的 Linux 安全模块(如 apparmor 或 SELinux),您可以设置规则谁可以打开哪个端口。
我工作过的组织使用应用程序开发团队之间达成的协议来指定每个应用程序使用的 TCP 端口号。服务器操作系统不强制执行端口->应用程序位置映射,应用程序配置只是按照协议编写的。协议的文档通常是 wiki 页面,有时是开发团队使用的任何代码文档系统中的文档。
这是因为普通 Linux(即没有 SELinux 或 Apparmor 安全系统的 Linux)没有指定特定应用程序使用的端口并阻止其他应用程序绑定/监听端口的机制。
您无法避免在多个应用程序和多个服务器之间协调端口所涉及的智力负担。您唯一的选择是您是否愿意花时间/精力配置 Linux 提供的安全层,还是花时间/精力协调开发团队。