Comment exiger de toutes les activités du réseau de passer un pare-feu invité KVM avant d'atteindre l'hôte?

La plupart des informations que j'ai rencontrées ont tendance à configurer un pare-feu KVM à l'aide d'une connection de pont.

D'après ce que je comprends, c'est un risque pour la security si le trafic réseau peut atteindre l'hôte sans d'abord passer le pare-feu.

J'ai vu la NIC principale (eg eth0 ) être définie comme la NIC de la machine virtuelle, mais cela exclut-il que l'hôte n'atteigne l' eth0 ?

L'autre option qui vient à l'esprit est un passage PCI de la NIC, mais j'ai rencontré des problèmes avec la méthode.

Existe-t-il d'autres approches pour requestr au trafic hôte de passer par le pare-feu en premier? Quelle méthode recommandz-vous d'utiliser?

La première idée est de séparer les interfaces utilisées pour append l'access réseau aux machines virtuelles et utilisées pour contrôler l'hôte. Souvent, le troisième set d'interfaces est utilisé pour accéder aux images VM sur une sorte de stockage partagé réseau. Donc, vous disposez idéalement de 6 interfaces: 4 Gigabit Ethernet et 2 de 10 Ethernet Gigiabit.

La deuxième idée est que vous pouvez utiliser différents VLAN 802.1q pour l'hôte et pour les machines virtuelles. J'avais construit un réseau où nous avions des machines virtuelles dans trois VLAN différents, et parfois une VM pouvait participer à plusieurs VLAN (en créant plusieurs NIC virtuelles et en les reliant à plusieurs VLAN différents sur l'hôte)

Le server de notes hadrware ofter possède un BMC, qui est utilisé pour contrôler hors bande de l'hôte. Essentiellement, il s'agit d'un petit ordinateur qui a access aux capteurs de l'ordinateur hôte, il pourrait voir les valeurs (température, ventilateur rpms), allumer / éteindre / réinitialiser l'hôte comme si vous appuyiez sur le button, même si la fonctionnalité IP KVM, etc. adresse réseau seule. Il implique également le protocole IPMI. Il est exposé souvent comme partagé avec LAN1 (c.-à-d. Comme un petit commutateur, pas assez commutateur-hôte et BMC ne pouvait pas communiquer, mais tous deux commuticent avec des périphériques externes) ou une prise ethernet indépendante qui est apathée vers BMC exclusivement. Les systèmes de lames pourraient avoir une ou deux (BMC par cage redondantes) par cage, et non dans chaque server lame.

La configuration sécurisée ressemble à ceci:

bond0 est (eth0, eth1) combiné par LACP, il a une adresse IP dans l'hôte et est utilisé pour contrôler l'hôte.

bond1 est (eth2, eth3) combiné par LACP. Il est divisé avec vlans, c'est-à-dire que l'hôte a des liens1.10, bond1.552 sous-interfaces virtuelles, etc. Il existe des ponts créés: br10 bridges bond1.10 et toutes les interfaces VM côté hôte pour les machines virtuelles qui participent aux liens vlan 10, br552 bridges1.552 et tous les hôtes VM pour vlan 522 et ainsi de suite. Aucune de ces interfaces n'a une adresse IP, de sorte que les machines virtuelles ne peuvent pas communiquer avec l'hôte.

bond2 est (eth4, eth5) combiné et utilisé pour accéder aux images de disque VM via iSCSI, CEPH, pour synchroniser DRBD et ainsi de suite. Il a une IP dans l'hôte, mais est connecté à un réseau de stockage complètement séparé avec ses exigences particulières.

bond0 et bond1 sont recommandés d'être séparés physiquement, pour que les machines virtuelles ne puissent pas seulement communiquer avec l'hôte, mais même pour saturer le réseau de contrôle de l'hôte. Ce réseau est utilisé par exemple pour transférer le contenu de la memory de la machine virtuelle en cas de migration en direct vers un autre hôte, et aucune VM ne peut saturer les performances de ce process.

Même si vous construisez un petit système avec une interface physique pour héberger cinq machines virtuelles et que vous devez combiner la fonctionnalité de bond0 et bond1, vous pourriez avoir l'adresse IP uniquement sur l'interface physique (accessible par défaut ou native vlan) et les sous-interfaces participant aux ponts avec les adaptateurs VM côté hôte, tous marqués. Les machines virtuelles permanentes ne pouvaient pas accéder directement à l'hôte, et un commutateur L2 intelligent et un périphérique de pare-feu séparé ou un commutateur L3 seul pourraient effectuer un routing et un filtrage de trafic inter-vlan.

Étant donné qu'un pont Linux crée une interface réseau correspondante (p. br0 . br0 ) sur l'hôte, je ne pense pas qu'il existe un moyen de rendre le pont complètement inaccessible à partir du operating system hôte. Avec votre exécution de VM de pare-feu, brctl show vous indiquera que les interfaces eth0 et vnet0 sont associées, mais cela fonctionne en fait comme un commutateur trois -port: un port passe à eth0 , on va à vnet0 (la VM) et à un va à l'interface br0 sur l'hôte.

Vous pourriez probablement configurer certaines règles ebtables pour bloquer toutes les images allant vers ou à partir de l'interface br0 de l'hôte. C'est peut-être la meilleure approche, mais je ne connais pas assez sur ebtables pour fournir des détails sur la façon de le faire.

Une autre option consiste simplement à ne pas configurer d'adresses IP sur l'interface du pont, ce qui devrait empêcher les applications normales de communiquer à travers elle. Il sera toujours accessible à des applications comme Wireshark avec des privilèges root (et cela pourrait être pratique).

Dans les systèmes basés sur Debian (tels que Ubuntu), vous pouvez placer ce qui suit dans /etc/network/interfaces :

 auto br0 iface br0 inet manual bridge_ports eth0 bridge_stp off 

Le "manuel" désigne "ne pas assigner d'adresses lors de l'introduction de l'interface"; Il est destiné à des configurations où quelque chose d'autre affectera une adresse plus tard, mais cela fonctionne aussi lorsque vous ne voulez tout simplement pas une adresse.

La seule exception est une adresse IPv6-local, qui est atsortingbuée automatiquement par le kernel plutôt que par les scripts d'installation de réseau de la dissortingbution, de sorte que vous obtenez un même avec le paramètre "manuel". Vous pouvez éviter cela en désactivant IPv6 entièrement sur l'interface. Créez un file dans /etc/sysctl.d et mettez-le dans:

 net.ipv6.conf.br0.disable_ipv6=1 

(Ce serait bien si vous pouviez désactiver complètement IPv4 sur l'interface, mais il n'y a pas d'option correspondante pour cela.)