Перейти к основному содержимому

Управление политиками

Политика — это набор правил фаервола: что разрешить или запретить в сетевом трафике и на каких машинах это должно действовать. Вы собираете политику в интерфейсе из готовых полей (выпадающие списки, порты), нажимаете сохранить — и правила автоматически применяются на нужных машинах.

Ниже описано, как это делается мышью и что происходит после каждого действия.


Из чего состоит политика

  • Имя — как вы её называете (например «Закрыть админ-порты»).
  • Правила (Rules) — сами разрешения/запреты. Одна политика может содержать несколько правил.
  • Кому применяется (Host selector) — на какие машины действует. Разбор этой части — в отдельном гайде «Кому применяется политика».
  • Приоритет (Priority) — кто главнее, если несколько политик спорят за один и тот же трафик (см. ниже).

Одно правило — из чего собирается

В блоке «Rules» нажимаете «Add rule» и заполняете поля из списков:

ПолеЧто выбираетеПростыми словами
Directioningress / egressВходящий трафик (к машине) или исходящий (с машины)
Actionallow / denyРазрешить или запретить
Protocoltcp / udp / icmp / anyТип трафика; any — любой
Dst portsнапр. 8080, 3000-4000На какие порты (можно диапазон)
Src portsнапр. 443С каких портов идёт трафик (обычно не нужно)
Match conditionsадреса/подсетиОграничить конкретными IP/сетями (необязательно)
Logвкл/выклЗаписывать срабатывания в журнал событий

Пример: Direction ingress, Action deny, Protocol tcp, Dst ports 8080 → «запретить входящие подключения на порт 8080». После сохранения правило применяется на машинах политики.

Дополнительные условия матчинга

Помимо базовых полей, правило (match) поддерживает:

  • Protocoltcp / udp / icmp.
  • Dst ports / Src ports — отдельные порты и диапазоны, напр. ["443","8000-8100"].
  • Dst CIDRs / Src CIDRs — подсети; поддерживаются IPv4 и IPv6 (v6-энфорс при QF_DROP_IPV6=false на хосте, по умолчанию v6 режется целиком).
  • Object-group по ссылке — вместо перечисления адресов/портов можно указать несколько групп: поля *_ip_set_ids / *_port_set_ids / *_host_set_ids принимают массив UUID, CP объединяет их адреса/порты. Старые singular-ключи читаются для совместимости.
  • TCP-флаги — выборочный матч по флагам: tcp_flags_mask + tcp_flags_match, напр. mask=SYN|ACK, match=SYN (только SYN).
  • State — состояние соединения (conntrack): new / established. Значение related не поддерживается — API отклоняет его с ошибкой 422.
  • No-track (notrack) — при true поток, разрешённый этим правилом, не заносится в таблицу conntrack (экономит слоты LRU на высоко-объёмном stateless-трафике, напр. DNS). На вердикт (allow/deny) не влияет. ⚠️ notrack действует по НАПРАВЛЕНИЮ правила. conntrack двунаправлен (общий канонический ключ), поэтому чтобы поток не трекался целиком, notrack нужен на обоих правилах — ingress (dst_ports) и egress (src_ports); иначе ответное направление создаст запись через своё правило или default-allow.

⚠️ state=established требует stateless-компаньона. Датапас не подхватывает соединение посреди потока: если в conntrack нет записи, а пришёл TCP-пакет без SYN (обычный ACK живой сессии), запись не создаётся и правило established его не сматчит. Таблица conntrack не персистится — она обнуляется при рестарте агента, ручном сбросе, LRU-вытеснении под нагрузкой и при смене QF_CONNTRACK_MAX. Поэтому правило, которое пропускает established-трафик только через state=established (без более общего stateless-allow по протоколу/порту, покрывающего тот же трафик), после любой очистки conntrack оборвёт все существующие TCP-сессии: первый же ACK не пройдёт conntrack-байпас, не пересоздаст запись (нет SYN), не сматчится и попадёт под default-drop. Не делайте state=established единственным разрешающим правилом — держите рядом stateless-allow либо убедитесь, что established-трафик покрыт более широким разрешающим правилом.


Кто главнее: приоритет и порядок

На одной машине может действовать несколько правил (из одной или разных политик). Когда для пакета подходит несколько — побеждает первое подходящее по приоритету:

  1. Сначала — политики с меньшим числом в Priority (меньше = главнее).
  2. Внутри политики — правила с меньшим Priority.

Как только правило сработало — остальные для этого пакета не смотрятся.

Поведение по умолчанию: если ни одно правило не подошло — трафик пропускается. Фаервол закрывает только то, на что есть явное правило deny. Это специально: машина не отрежется сама по себе, если вы забыли какое-то правило.

⚠️ Никогда не делайте правило «запретить всё» (deny без указания порта/адреса). Это отрежет доступ к серверу целиком, включая управление. Запреты — всегда на конкретные порты или адреса.


Создать политику — по шагам

  1. Раздел Policies → кнопка «New policy».
  2. Ввести имя (поле «Policy name») и при желании Priority.
  3. Блок Rules«Add rule» → заполнить поля (Direction, Action, Protocol, порты). Повторить для каждого правила.
  4. Блок Host selector«Assign to hosts» → выбрать машины/группу (см. гайд по selector).
  5. Сохранить.

Что произойдёт: правила компилируются и в течение пары секунд применяются на всех выбранных машинах, где сразу вступают в силу. Машина офлайн — получит правила автоматически, как только выйдет на связь.


Проверить заранее — «Preview impact»

Перед сохранением есть «Preview impact» (предпросмотр). Он показывает, какие машины затронет политика и что именно изменится (какие правила добавятся/уберутся) — до того, как что-либо реально включится.

Зачем: убедиться, что не задели лишнего. Особенно полезно, когда политика нацелена на группу или на «все машины».

Технически — POST /policies/{id}/preview: возвращает добавленные/удалённые/изменённые правила без применения.


Изменение и удаление

Изменили правила или список машин → сохранили: система сама пересчитывает и рассылает обновлённый набор правил всем затронутым машинам. Машины, которые выпали из-под политики, автоматически теряют её правила; новые — получают.

Cascade: изменение политики, её селектора или группы объектов пересчитывает объединение затронутых машин и рассылает им новые бандлы.


Версии и откат

Каждое сохранение (PUT) политики создаёт снимок предыдущего состояния.

  • GET /policies/{id}/versions — список версий.
  • POST /policies/{id}/versions/{v}/revert — восстановить выбранную версию; откат так же пересчитывает и рассылает правила (cascade), как обычное сохранение.

Удалили политику (кнопка «Delete policy»): её правила автоматически снимаются со всех машин, где она действовала. Вручную ничего чистить не надо.

Общий принцип: не бывает «зависших» машин со старыми правилами — при любом изменении всё синхронизируется само.


Типовые сценарии

Закрыть порты на всей группе машин

  1. Завести группу (например «web-серверы») в разделе Host Groups, добавить в неё машины.
  2. Создать политику → «Add rule»: Direction ingress, Action deny, Protocol tcp, Dst ports 8080, 9090.
  3. «Assign to hosts» → «Assign host group» → выбрать группу.
  4. Сохранить.

Результат: все текущие и будущие участники группы получают блокировку — добавите машину в группу позже, она подхватит правило сама.

Политика на несколько групп

В «Assign to hosts» добавьте несколько групп подряд. Политика действует на объединение — на всех участников всех выбранных групп.

Политика на группу + одну отдельную машину

Добавить и группу («Assign host group»), и машину («Assign single host»). Обе строки появятся в списке — политика действует на всех из группы плюс эту машину.

Разрешить узкий доступ, запретить остальной

Внутри одной политики: правило allow с меньшим Priority (например разрешить порт 22 только из внутренней сети) + правило deny с большим Priority (запретить порт 22 отовсюду). Первым срабатывает более приоритетный allow для «своих», всем остальным достаётся deny.

Временно снять политику с машины

В блоке Host selector у нужной строки — «Remove from host» (или «Remove host group» для группы). Правила уходят с затронутых машин автоматически. Саму политику при этом можно не удалять.


Частые вопросы

Создал политику с правилами, но ничего не блокируется. Стоит проверить блок «Host selector» — вероятно, не выбрано ни одной машины. Новая политика по умолчанию ни на кого не действует (защита от случайного применения на весь парк). Машины добавляются через «Assign to hosts».

Правило deny не срабатывает. Скорее всего выше по приоритету стоит allow, который перехватывает трафик первым. Разбирается по Priority правил и политик — меньше число = раньше проверяется.

Изменения долго не доходят до машины. Обычно правила применяются за пару секунд. Если машина офлайн — получит их автоматически при следующем подключении.

Хочу больше 8 диапазонов портов в одном правиле. В одном правиле — до 8 диапазонов портов на направление (техническое ограничение). Нужно больше — разбейте на несколько правил.

Удалил группу — политика осталась. Политика не удаляется вместе с группой, но перестаёт кого-либо затрагивать (участников у группы больше нет). Если строка группы в политике больше не нужна — уберите её вручную через «Remove host group».