Quero reservar determinados números de porta em um host de VM para uso pelas próprias VMs.
Existe um mecanismo pelo qual o host pode excluir essas portas de serem alocadas para processos não relacionados às VMs, consultando-as em uma lista ou verificando-as em relação a regras predefinidas?
Se algum outro software solicitar uma porta sem verificar com o host, ele deverá encontrá-la bloqueada, como se estivesse em uso.
As próprias VMs também são softwares em execução no host, então acho que elas podem ser bloqueadas, então deveria ser mais um sistema reservando certas portas para alguns utilitários específicos usados pelo gerenciador de VMs para alocar essas portas.
Também pode ser relevante para contêineres Docker.
Atualização: As VMs compartilham o endereço IP com o host, e algumas portas de entrada precisam ser encaminhadas para serviços em execução nas VMs ou nos contêineres. Não sei se as portas de saída precisam ser reservadas, a menos que interfiram nos serviços de escuta. Acho que as regras do iptables podem distingui-las ou não.
Claro, com o seccomp ou módulos de segurança Linux em geral, como apparmor ou SELinux, você pode definir regras sobre quem pode abrir qual porta.
As organizações onde trabalhei usaram acordos feitos entre equipes de desenvolvimento de aplicativos para designar qual(is) número(s) de porta TCP usado(s) por cada um dos aplicativos. O sistema operacional do servidor não impõe o mapeamento porta->applocation, as configurações do aplicativo são simplesmente escritas para seguir os acordos. A documentação para os acordos geralmente tem sido uma página wiki ou, às vezes, um documento em qualquer sistema de documentação de código que as equipes de desenvolvimento usam.
Isso ocorre porque o Linux simples — ou seja, Linux sem os sistemas de segurança SELinux ou Apparmor — não tem nenhum mecanismo para designar portas para uso por um aplicativo específico e impedir que outros aplicativos vinculem/escutem as portas.
Você não pode evitar o imposto intelectual envolvido na coordenação de portas entre vários aplicativos e vários servidores. A única escolha que você tem é se quer investir seu tempo/esforço na configuração das camadas de segurança fornecidas com o Linux ou investir seu tempo/esforço na coordenação entre suas equipes de desenvolvimento.