Хихо!
Я использую libvirt с kvm, и он отлично работает. Мое желание - заблокировать хост-систему с помощью брандмауэра хоста. До сих пор я всегда использовал shorewall в качестве предпочтительной утилиты для управления iptables. Но это конфликтует с управлением iptables libvirt. Я использовал libvirt для настройки NAT для гостей kvm. Libvirt настраивает для этого MASQ, используя iptables, который отлично работает. Но как только shorewall запускается, он сбрасывает iptables и настраивает их в соответствии с конфигурацией, сделанной в файлах shorewall. Затем я попытался «перевести» все правила libvirt iptables в shorewall, чтобы предотвратить потерю функциональности. Но это работает только частично и в любом случае является уродливым взломом. Как только я изменяю конфигурацию сети с помощью libvirt для гостя, я должен также внести изменения в shorewall. Итак, каков был бы правильный способ как защитить хост-систему, так и использовать libvirt для управления сетью гостей kvm? Совместима ли libvirt с firewalld в мире CentOS? привет!
Возможно, вы можете использовать скрипт перехвата libvirt. Вы создаете сценарий оболочки, который libvirt выполнит, как только ваша виртуальная машина будет запущена.
Создайте файл /etc/libvirt/hooks/qemu
с этим внутри:
#!/bin/bash
if [ "${1}" = "<the name of your vm>" ] ; then
VM_NAME=${1}
VM_IP=172.16.20.10
if [ "${2}" = "prepare" ] ; then
iptables -t nat -I POSTROUTING -s ${VM_IP} -o eth0 \
-m comment --comment "${VM_NAME} nat" -j MASQUERADE
elif [ "%{2}" = release" ] ; then
iptables -t nat -D POSTROUTING -s ${VM_IP} -o eth0 \
-m comment --comment "${VM_NAME} nat" -j MASQUERADE
fi
Убедитесь, что вы заменили <the name of yout vm>
и значение VM_IP соответственно. Сделайте файл также исполняемым: chmod +x /etc/libvirt/hooks/qemu
.
Теперь, каждый раз, когда libvirt запускает вашу виртуальную машину, она подготавливает конфигурацию NAT и после остановки виртуальной машины деконфигурирует NAT.
Для получения дополнительной информации вы можете посмотреть Вот и Вот