Настройка механизма фильтрации трафика¶
Этот раздел описывает управление правилами фильтрации для узлов и сервисов, развёрнутых с помощью Kolla Ansible. Поддерживается фильтрация трафика на основании правил nftables, включая фильтрацию трафика в контейнерах, использующих интерфейсы типа bridge на базе Podman.
При этом допускается использование сетей типа host, однако правила фильтрации для контейнеров в данном случае не применяются.
Включение фаервола¶
Для включения управления фаерволом:
Откройте веб-интерфейс GitLab.
Перейдите в репозиторий региона project_k / deployments / <имя региона>.
Добавьте в файл
globals.ymlили создайте файлglobals.d/firewall.ymlсо следующей конфигурацией:## Firewall options enable_firewall: "yes" ## Разрешение исходящего трафика firewall_allow_mgmt_outgoing: true ## Включение drop-правила в конце цепочек firewall_enable_trailing_drop: true
enable_firewall: "yes"— включение управления фаерволом через nftables;,
firewall_allow_mgmt_outgoing: true— разрешение всего исходящего трафика черезapi_interface;,
firewall_enable_trailing_drop: true— добавление правилаdropв конец цепочек для блокировки неразрешённого трафика.
Секция firewall_rules¶
Секция firewall_rules предназначена для задания правил доступа к VIP-адресам или другим точкам подключения. Она дополняет правила, связанные с контейнерами, и применяется отдельно.
firewall_rules:
management:
allow:
- "10.0.0.0/8"
- "172.16.0.0/12"
- "192.168.0.0/16"
deny:
- "192.0.2.1"
destination: "{{ hostvars[inventory_hostname].ansible_host | default(inventory_hostname) }}"
external:
allow:
- "0.0.0.0/0"
deny:
- "8.8.8.8/32"
destination: "{{ kolla_external_vip_address }}"
internal:
allow:
- "0.0.0.0/0"
deny:
- "8.8.8.8/32"
destination: "{{ kolla_internal_vip_address }}"
destination_ports:
- "80"
- "443"
- "1024:65535"
Поддерживаемые параметры:
allow — список разрешённых источников (CIDR),
deny — список запрещённых источников (CIDR),
destination — целевой IP-адрес (например, внешний или внутренний VIP),
destination_ports — список портов или диапазонов.
Секция firewall_containers¶
Правила задаются для каждого контейнерного сервиса через переменную firewall_containers. В примере ниже запрещается исходящий трафик от контейнеров на 22 порт (SSH).
firewall_containers:
memcached:
deny:
- "0.0.0.0/0"
destination_ports:
- 22
containers:
- "memcached"
keystone:
deny:
- "0.0.0.0/0"
destination_ports:
- 22
containers:
- "keystone_api"
Поддерживаемые параметры:
allow — список разрешённых источников (CIDR),
deny — список запрещённых источников (CIDR),
destination_ports — список целевых портов,
protocol — сетевой протокол (по умолчанию
tcp, если заданы порты),containers — применение правила на конкретные контейнеры.
Исходящий трафик¶
Чтобы разрешить весь исходящий трафик через api_interface, включите:
firewall_allow_mgmt_outgoing: true
Это автоматически создаст необходимые правила в цепочке output.
Сохранение настроек¶
Конфигурация сохраняется в файл, путь к которому зависит от базового дистрибутива:
firewall_nftables_conf: "{{ '/etc/sysconfig/nftables.conf' if kolla_base_distro in ['rocky', 'sberlinux'] else '/etc/nftables.conf' }}"
Для дистрибутивов на базе RHEL (например, Rocky, SberLinux) используется путь
/etc/sysconfig/nftables.confДля других систем (например, Debian или Ubuntu) —
/etc/nftables.conf
Также будет установлен и запущен системный сервис nftables-persist, который обеспечивает восстановление конфигурации после перезагрузки.
Порядок правил¶
Порядок применения правил внутри сервиса регулируется переменной firewall_ruleorder:
firewall_ruleorder:
- allow
- deny
Порядок применения различных наборов правил (по типам) регулируется через firewall_traffic_types:
firewall_traffic_types:
- podman_override
- management
- external
- internal
Тип правил по умолчанию — KeyStack¶
По умолчанию роль включает тип правил keystack, который разрешает обмен трафиком между узлами. Возможно явно указать keystack в firewall_traffic_types и изменить порядок его применения.
Важные замечания¶
При каждом запуске правила фаервола полностью пересоздаются
Чтобы добавить правило
dropв конец цепочек, включите:
firewall_enable_trailing_drop: true