Настройка механизма фильтрации трафика

Этот раздел описывает управление правилами фильтрации для узлов и сервисов, развёрнутых с помощью Kolla Ansible. Поддерживается фильтрация трафика на основании правил nftables, включая фильтрацию трафика в контейнерах, использующих интерфейсы типа bridge на базе Podman.

При этом допускается использование сетей типа host, однако правила фильтрации для контейнеров в данном случае не применяются.

Включение фаервола

Для включения управления фаерволом:

  1. Откройте веб-интерфейс GitLab.

  2. Перейдите в репозиторий региона project_k / deployments / <имя региона>.

  3. Добавьте в файл 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