Базовая настройка Proxmox Firewall
Пошаговая настройка Proxmox Firewall на уровне Datacenter, узла и виртуальной машины: включение, правила, группы безопасности и безопасная проверка.
Proxmox Firewall позволяет фильтровать трафик на уровне Datacenter, отдельного узла, виртуальной машины и LXC-контейнера.
В этой инструкции рассматривается только базовая настройка firewall: включение, создание разрешающих правил, проверка работы и безопасное применение без потери доступа к веб-интерфейсу и SSH.
Подходит для: Proxmox VE 8 и 9
Уровень сложности: средний
Время выполнения: около 20 минут
Требуемый доступ: учётная запись с правами управления firewall и резервный доступ к консоли
Важное предупреждение
Ошибка в правилах может заблокировать:
- веб-интерфейс Proxmox VE;
- SSH;
- кластерную связь;
- доступ к хранилищам;
- трафик VM и LXC.
Перед включением firewall необходимо иметь резервный доступ:
- локальная консоль;
- IPMI;
- iDRAC;
- iLO;
- KVM over IP;
- консоль провайдера.
Не включайте firewall удалённо без возможности быстро восстановить доступ.
Уровни Proxmox Firewall
Правила могут применяться на нескольких уровнях.
Datacenter
Используется для:
- общих политик;
- групп безопасности;
- общих alias;
- IPSet;
- кластерных правил.
Node
Используется для защиты самого узла Proxmox VE.
VM или LXC
Используется для фильтрации трафика конкретного гостя.
Проверка состояния служб
На узле выполните:
systemctl status pve-firewall --no-pager
Проверьте:
systemctl is-enabled pve-firewall
Проверьте активность:
systemctl is-active pve-firewall
Проверка статуса через CLI
pve-firewall status
Пример:
Status: disabled/running
Это означает, что служба работает, но firewall может быть отключён на уровне конфигурации.
Проверка текущих правил
Конфигурация Datacenter:
cat /etc/pve/firewall/cluster.fw 2>/dev/null
Конфигурация узла:
cat /etc/pve/nodes/NODE_NAME/host.fw 2>/dev/null
Конфигурация VM:
cat /etc/pve/firewall/VM_ID.fw 2>/dev/null
Пример:
cat /etc/pve/firewall/100.fw 2>/dev/null
Подготовка списка разрешённых адресов
Перед включением firewall определите:
- IP администратора;
- подсеть управления;
- адрес мониторинга;
- адрес backup-сервера;
- адреса кластерных узлов;
- адреса NFS, iSCSI или Ceph;
- VPN-подсеть при удалённом администрировании.
Пример management-подсети:
192.0.2.0/24
Не используйте реальные публичные адреса в документации и шаблонах правил.
Включение firewall на уровне Datacenter
Откройте:
Datacenter → Firewall → Options
Параметр:
Firewall
пока оставьте:
No
Сначала создайте разрешающие правила, затем включайте фильтрацию.
Базовые правила для узла
Откройте:
Node → Firewall → Add
Создайте разрешающие правила для management-подсети.
Веб-интерфейс Proxmox VE
Direction: in
Action: ACCEPT
Source: 192.0.2.0/24
Protocol: tcp
Destination port: 8006
Comment: Proxmox Web UI
SSH
Direction: in
Action: ACCEPT
Source: 192.0.2.0/24
Protocol: tcp
Destination port: 22
Comment: SSH administration
ICMP
Direction: in
Action: ACCEPT
Source: 192.0.2.0/24
Protocol: icmp
Comment: ICMP from management network
Правило для established-соединений
Proxmox Firewall является stateful и отслеживает состояния соединений.
Обычно отдельное ручное правило для ESTABLISHED,RELATED не требуется.
Политика INPUT
После создания разрешающих правил можно установить:
Input Policy: DROP
Откройте:
Node → Firewall → Options
Сначала убедитесь, что разрешены:
- порт 8006;
- SSH;
- кластерные порты;
- storage-трафик;
- monitoring;
- DNS и NTP при необходимости.
Политика OUTPUT
Для базовой конфигурации оставьте:
Output Policy: ACCEPT
Ограничение исходящего трафика требует отдельного проектирования.
Политика FORWARD
Для трафика VM и LXC поведение зависит от уровня правил и включения firewall на сетевом интерфейсе гостя.
Для базового старта можно оставить:
Forward Policy: ACCEPT
Создание IPSet
Чтобы не повторять подсеть в каждом правиле, создайте IPSet.
Откройте:
Datacenter → Firewall → IPSet
Создайте:
Name: management
Comment: Management network
Добавьте сеть:
192.0.2.0/24
Теперь в поле Source можно использовать:
+management
Создание Alias
Alias удобен для одного адреса.
Откройте:
Datacenter → Firewall → Alias
Создайте:
Name: admin-workstation
IP/CIDR: 192.0.2.10
Comment: Administrator workstation
В правиле можно указать:
+admin-workstation
Создание Security Group
Откройте:
Datacenter → Firewall → Security Group
Создайте группу:
Name: management-access
Добавьте правила:
ACCEPT tcp 22 from +management
ACCEPT tcp 8006 from +management
ACCEPT icmp from +management
Группу можно применять к нескольким узлам или гостям.
Включение firewall на узле
После создания правил откройте:
Node → Firewall → Options
Установите:
Firewall: Yes
Пока оставьте Datacenter Firewall отключённым, если проверяете правила поэтапно.
Проверка доступа
С management-компьютера проверьте:
curl -kI https://PROXMOX_IP:8006/
Проверьте SSH:
ssh ADMIN_USER@PROXMOX_IP
Проверьте ping:
ping PROXMOX_IP
Не закрывайте текущую SSH-сессию до завершения проверки.
Включение на уровне Datacenter
После успешной проверки узла откройте:
Datacenter → Firewall → Options
Установите:
Firewall: Yes
Повторно проверьте веб-интерфейс и SSH.
Проверка активных правил
На узле:
pve-firewall status
Проверка компиляции:
pve-firewall compile
Показать сгенерированные правила:
pve-firewall compile |
less
Журнал firewall
Откройте:
Node → Firewall → Log
Через CLI:
journalctl -u pve-firewall -n 100 --no-pager
Дополнительно:
journalctl --since today |
grep -i firewall
Включение логирования правила
При создании правила можно задать уровень логирования:
Log level: info
Не включайте подробное логирование для всего трафика без необходимости.
Большой объём логов может быстро занять диск.
Защита виртуальной машины
Откройте:
VM → Hardware → Network Device
Убедитесь, что для интерфейса включено:
Firewall
Затем откройте:
VM → Firewall → Options
Установите:
Firewall: Yes
После этого добавьте правила.
Пример правил для веб-сервера
Разрешить HTTP:
Direction: in
Action: ACCEPT
Protocol: tcp
Destination port: 80
Разрешить HTTPS:
Direction: in
Action: ACCEPT
Protocol: tcp
Destination port: 443
Разрешить SSH только из management-подсети:
Direction: in
Action: ACCEPT
Source: +management
Protocol: tcp
Destination port: 22
После этого:
Input Policy: DROP
Защита LXC-контейнера
Откройте:
CT → Network
Проверьте, что для net0 включён firewall.
Затем:
CT → Firewall → Options
Установите:
Firewall: Yes
Добавьте нужные правила.
Проверка правил VM
С внешнего узла:
nc -zv VM_IP 80
nc -zv VM_IP 443
nc -zv VM_IP 22
Проверка веб-сервиса:
curl -I http://VM_IP
Проверка SSH:
ssh ADMIN_USER@VM_IP
Проверка блокировки
С адреса, который не входит в management-подсеть, проверьте порт:
nc -zv PROXMOX_IP 22
При политике DROP соединение должно завершиться таймаутом.
При политике REJECT клиент получит немедленный отказ.
DROP и REJECT
DROP
Пакет отбрасывается без ответа.
Преимущества:
- меньше информации внешнему источнику;
- типично для входящего трафика.
Недостаток:
- клиент ждёт таймаут.
REJECT
Соединение отклоняется ответом.
Преимущества:
- быстрее диагностируется;
- удобно во внутренних сетях.
Для внешнего входящего трафика чаще используют DROP.
Макросы Proxmox Firewall
Proxmox VE поддерживает predefined macros для сервисов.
Примеры:
SSH
HTTP
HTTPS
DNS
PING
Вместо ручного указания протокола и порта можно выбрать подходящий macro.
Перед использованием проверьте, какие порты включает macro.
Кластерные узлы
Если Proxmox работает в кластере, нельзя блокировать служебный трафик между узлами.
Необходимо учесть:
- Corosync;
- SSH между узлами;
- migration traffic;
- web/API traffic;
- storage network;
- Ceph при использовании.
Кластерный firewall требует отдельного набора правил.
Storage-трафик
При использовании NFS, iSCSI или Ceph разрешите соответствующий трафик между узлом и storage-сервером.
Пример NFSv4:
Protocol: tcp
Destination port: 2049
Destination: NFS_SERVER_IP
Для NFSv3 может потребоваться больше портов.
DNS и NTP
Если исходящая политика ограничивается, разрешите:
DNS: udp/tcp 53
NTP: udp 123
Без DNS и точного времени могут возникнуть проблемы с:
- обновлениями;
- сертификатами;
- кластером;
- журналами;
- backup;
- внешними API.
Отключение firewall при аварии
Через локальную консоль:
pve-firewall stop
Проверьте:
pve-firewall status
Запустить снова:
pve-firewall start
Для постоянного отключения измените параметр в интерфейсе или конфигурации.
Не используйте аварийное отключение как постоянное решение.
Проверка конфигурационных файлов
Datacenter:
cat /etc/pve/firewall/cluster.fw
Узел:
cat /etc/pve/nodes/NODE_NAME/host.fw
VM или CT:
cat /etc/pve/firewall/GUEST_ID.fw
Не редактируйте файлы вручную без резервной копии и понимания синтаксиса.
Резервная копия конфигурации
Создайте каталог:
mkdir -p /root/proxmox-firewall-backup
Скопируйте:
cp -a /etc/pve/firewall /root/proxmox-firewall-backup/firewall-$(date +%F-%H%M%S)
Проверьте:
find /root/proxmox-firewall-backup -maxdepth 2 -type f
Типичные проблемы
После включения пропал SSH
Используйте локальную консоль.
Проверьте:
pve-firewall status
pve-firewall compile
Остановите firewall временно:
pve-firewall stop
Исправьте правило SSH и запустите снова.
Веб-интерфейс недоступен
Проверьте разрешение:
tcp/8006
Проверьте службу:
systemctl status pveproxy --no-pager
Проверьте локально:
curl -kI https://127.0.0.1:8006/
Правило VM не работает
Проверьте:
- включён ли firewall на уровне Datacenter;
- включён ли firewall на VM;
- включён ли firewall на сетевом адаптере;
- порядок правил;
- направление;
- Source и Destination;
- Input Policy.
Трафик разрешён, хотя должен блокироваться
Проверьте:
- более раннее разрешающее правило;
- Security Group;
- Datacenter rules;
- Node rules;
- policy;
- направление;
- правильный интерфейс VM.
Логи быстро растут
Уменьшите уровень логирования.
Не логируйте каждое разрешённое соединение без необходимости.
Безопасный порядок включения
- Подготовить резервный доступ к консоли.
- Записать management IP и подсеть.
- Создать IPSet.
- Разрешить порт 8006.
- Разрешить SSH.
- Разрешить кластер и storage-трафик.
- Включить firewall на узле.
- Проверить доступ.
- Включить Datacenter Firewall.
- Только после проверки установить Input Policy DROP.
- Отдельно включать firewall на VM и LXC.
Быстрый набор команд
Проверить статус:
pve-firewall status
Проверить конфигурацию:
pve-firewall compile
Остановить:
pve-firewall stop
Запустить:
pve-firewall start
Проверить журнал:
journalctl -u pve-firewall -n 100 --no-pager
Итог
После выполнения инструкции:
- проверена служба Proxmox Firewall;
- подготовлены management-правила;
- созданы IPSet, Alias и Security Group;
- включён firewall на уровне узла и Datacenter;
- настроены правила для VM и LXC;
- проверены доступ и блокировка;
- разобран аварийный порядок восстановления.
Главное правило при настройке Proxmox Firewall — сначала создать разрешающие правила и только затем включать политику DROP.