Встроенный в Proxmox файервол можно использовать как для защиты самого хоста (кластера) гипервизора, так и для изоляции виртуальных машин (контейнеров) и сегментации виртуальных подсетей. Proxmox Firewall удобное средство для организации централизованного управление правилами межсетевого экранирования, позволяет использовать группы и шаблоны для удобного гибкого назначения правил файервола на разных уровнях. В этой статье мы рассмотрим особенности настройке файервола и создания правил в Proxmox.
Файервол в Proxmox работать на трех иерархических уровня:
| Уровень | Область действия | Местоположение настройки |
|---|---|---|
| Datacenter | Все ноды | Datacenter -> Firewall |
| Нода | Отдельный хост Proxmox | Node -> Firewall |
| ВМ или контейнер | Отдельная виртуальная машина | VM -> Firewall |
Технически в качестве средства фильтрации используется
iptables
(либо можно переключиться на
nftables
). Благодаря тому, что большинство операций управления файерволом Proxmox выполнятся через веб-интерфейс или API, для администратора не будет разницы какой нижележащий файервол используется.
Также обратите внимание, что правила уровня датацентра применяются (наследуется) на все ноды, но не на уровень отдельной ВМ или контейнера. Трафик к ВМ фильтруется прямо на виртуальном мосту (
vmbr
), минуя цепочки правил хоста
Как включить файервол в Proxmox VE?
По умолчанию, при установке файервол в Proxmox установлен (
pve-firewall
), но не включен. Если вы хотите использовать файервол Proxmox для настройки правил для отдельной ВМ, вам придется последовательно включить файервол на всех трех уровнях: на уровне Датацентра, хоста и затем на уровне конкретной ВМ.
В файерволе Proxmox можно (и нужно) создать логические группы для более удобного управления правилами. Вместо использования в правилах конкретных IP адресов, лучше создать для них псевдонимы (Aliases) или списки адресов (IP Set):
- Alias – позволяет задать текстовое имя для одного IP адреса или IP сети
- IP Set – список, который может содержать множество IP-адресов, подсетей и созданных ранее Aliases
Создадим для примера несколько алиасов для хостов PVE и локальных подсетей. Перейдите в раздел Datacenter -> Firewall -> Aliases и создайте новые элементы.

Отдельные алиасы можно объединить в группы (Datacenter -> Firewall -> IPSet).

Прежде чем включать файервол на любом из уровней, нужно создать разрешающие правила, которые позволят вам сохранить доступ к управлению серверам (веб интерфейсу Proxmox + SSH) после включения файервола.
Перейдите в раздел Security Group и создайте новую группу, которая будет содержать правила, разрешающие входящий трафик к управляющим интерфейсам хостов Proxmox из локальной сети (хотя более безопасным будет оставить доступ только с IP адресов рабочих станций администраторов/серверов управления): порты TCP 8006 (веб интерфейс) и TCP 22 (SSH).
- Datacenter -> Firewall -> Security Group
- Создайте новую группу, например
prox_management - Добавьте в нее правило: Add
- Direction:
in(входящий трафик) - Action:
ACCEPT(разрешить) - Source: выберите источник, с которого разрешен трафик. В моем примере это все локальные сети.
- Destionation: назначение – группа, содержащая все хосты PVE
- Dest port: разрешенные порты. Я указал
8006и22через запятую. - Отметьте галку в поле Enable, чтобы активировать правила.
- Добавьте описание правила, чтобы его смогли понять ваши коллеги.
- Нажмите Add.
80,443,8080
), или диапазон (
5000:5010
). Можно совмещать эти варианты в одном правиле:
80,443,8080
,
5000:5010
.
Вместо указания конкретных портов, можно выбрать из списка макрос. Это предопределенные правила для типовых сетевых протоколов и сервисов. Например, DHCP, Git, IMAP, Rsync и так далее.

Если используется кластер Proxmox, создайте соответствующие правила, которые обеспечат взаимодействие между узлами. Список портов ниже:
| Описание | Протокол | Порты |
|---|---|---|
| Web interface | TCP | 8006 |
| VNC Web console | TCP, WebSocket | 5900 – 5999 |
| SPICE proxy | TCP | 3128 |
| sshd | TCP | 22 |
| rpcbind | UDP | 111 |
| corosync cluster traffic | UDP | 5405 – 5412 |
| live migration | TCP | 60000 – 60050 |
Теперь перейдите в раздел Firewall. Здесь вы можете создать нужные правила вручную, или добавить существующие правила из Security Group. Я добавил правило, разрешающее доступ к управлению хостами (Insert: Security Group), и для примера вручную создал правило, которое блокируют любой другой входящий трафик. Обратите внимание, что порядок правил имеет значение. Правила применяются сверху вниз. Поднимите разрешающие правила (и исключения) вверх по списку. Правила файервола перемещаются в списке простым перетягиванием.

После того, как вы настроили базовые правила инфраструктурного взаимодействия между хостами, можно включить файервол на уровне датацентра. Перейдите в Datacenter -> Firewall -> Options и измените значение Firewall на Yes.
Здесь же настраивается поведение по- умолчанию для файервола. Из коробки все входящие подключения разрешены (Output Policy:
ACCEPT
), а входящие запрещены (Input Policy:
DROP
).

iptables-save
. Также в Proxmox файерволе есть ряд предопределенных правил, которые не отображается в веб интерфейсе https://pve.proxmox.com/wiki/Firewall#pve_firewall_default_rules, но фактически применятся, даже если вы изменили политику по-умолчанию на DROP или REJECT.Настройка файервола для виртуальной машины (контейнера) в Proxmox
После того, как вы включили файервол на уровне датацентра, можно настроить и включить файервол для каждой виртуальной машины.
Откройте свойства ВМ и перейдите на вкладку Firewall. Создайте правила доступа к этой виртуальной машины.
В моем примере это виртуальная машина с Windows Server. На уровне датацетра я сформировал несколько глобальных типовых групп безопасности для Windows хостов, которые обеспечивают доступ к контроллерам домена, а также RDP доступ. Таким образом, я могу быстро предоставить типовые доступа любой виртуальной машине с Windows на гипервизоре Proxmox.
Дополнительно вручную я создам два правила, которые обеспечивают доступ к этой машине через SSH с компьютеров администраторов и управляющих машин (на встроенный OpenSSH сервер Windows), а также доступ к веб серверу IIS на 80 порту.

После того, как все правила файрвола сформированы, перейдите на вкладку Options и включите файервол для этой виртуальной машины.

Затем в свойствах ВМ перейдите в раздел оборудования и выберите виртуальный сетевой адаптер ВМ (Hardware -> Network Device). Включите опцию Firewall для сетевого адаптера (без этой опции правила фильтрации будут игнорироваться, даже если файервол включен для машины).

Теперь эта виртуальная машина Windows будет доступна только по портам и для адресов-источников, которые вы описали в правилах.
/var/log/pve-firewall.log
. 
Как временно остановить Proxmox Firewall?
Если вы ошиблись в правилах, и не можете попасть на веб интерфейс управления Proxmox, можно временно отключить файервол на хосте, подключившись к нему через KVM или консоль.
Чтобы отключить файервол на уровне датацентра, откройте конфигурационный файл:
# nano /etc/pve/firewall/cluster.fw
Измените опцию Enable на 0.

После того, как вы сохраните файл, Proxmox автоматически увидит изменения и полностью отключит защиту файерволом.
Чтобы временно отключить Proxmox VE firewall на конкретной ноде, выполните:
# systemctl stop pve-firewall

Правила файрвола кластер хранятся в файле:
/etc/pve/firewall/cluster.fw
Правила хоста:
/etc/pve/nodes/<nodename>/host.fw
Правила файервола отдельной ВМ или контейнера:
/etc/pve/firewall/<VMID>.fw

С помощью этих файлов можно временно отключить файервол на конкретном уровне (датацентра, хоста или ВМ), или управлять правилами в текстовом конфиге.
Ну и несколько базовых рекомендаций при создании межсетевых правил:
- Начинайте настройку с разрешающих правил
- Используйте алиасы, группы IP Set и шаблоны типовых правил в Security Group для упрощения управления правилами межсетевого экранирования.
- Сложные правила тестируйте пошагово
- Помните про порядок обработки правил файервола в Proxmox (iptables)
- В целях безопасности минимизируйте доступ к узлам мини
С помощь правил файервола в Promox можно строить сложные микро сегментированные конфигурации, в которых вы можете разделить подсети, виртуальные машины на разные уровни безопасности (внешняя сеть, DMZ, защищенный сегмент и т.д.). Правила файервола можно применять как для защиты самих хостов, так и для ограничения доступа на/к виртуальным машинам. Возможность централизованно создавав глобальные группы хостов и шаблонные правила доступа значительно упрощает настройку правил файервола в Proxmox даже в сложных сценариях.

