Базовая настройка 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.

Логи быстро растут

Уменьшите уровень логирования.

Не логируйте каждое разрешённое соединение без необходимости.

Безопасный порядок включения

  1. Подготовить резервный доступ к консоли.
  2. Записать management IP и подсеть.
  3. Создать IPSet.
  4. Разрешить порт 8006.
  5. Разрешить SSH.
  6. Разрешить кластер и storage-трафик.
  7. Включить firewall на узле.
  8. Проверить доступ.
  9. Включить Datacenter Firewall.
  10. Только после проверки установить Input Policy DROP.
  11. Отдельно включать 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.

← Предыдущая статья Настройка расписания резервного копирования в Proxmox VE Следующая статья → Безопасное обновление Proxmox VE