Управление политиками
Политика — это набор правил фаервола: что разрешить или запретить в сетевом трафике и на каких машинах это должно действовать. Вы собираете политику в интерфейсе из готовых полей (выпадающие списки, порты), нажимаете сохранить — и правила автоматически применяются на нужных машинах.
Ниже описано, как это делается мышью и что происходит после каждого действия.
Из чего состоит политика
- Имя — как вы её называете (например «Закрыть админ-порты»).
- Правила (Rules) — сами разрешения/запреты. Одна политика может содержать несколько правил.
- Кому применяется (Host selector) — на какие машины действует. Разбор этой части — в отдельном гайде «Кому применяется политика».
- Приоритет (Priority) — кто главнее, если несколько политик спорят за один и тот же трафик (см. ниже).
Одно правило — из чего собирается
В блоке «Rules» нажимаете «Add rule» и заполняете поля из списков:
| Поле | Что выбираете | Простыми словами |
|---|---|---|
| Direction | ingress / egress | Входящий трафик (к машине) или исходящий (с машины) |
| Action | allow / deny | Разрешить или запретить |
| Protocol | tcp / 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) поддерживает:
- Protocol —
tcp/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-трафик покрыт более широким разрешающим правилом.
Кто главнее: приоритет и порядок
На одной машине может действовать несколько правил (из одной или разных политик). Когда для пакета подходит несколько — побеждает первое подходящее по приоритету:
- Сначала — политики с меньшим числом в Priority (меньше = главнее).
- Внутри политики — правила с меньшим Priority.
Как только правило сработало — остальные для этого пакета не смотрятся.
Поведение по умолчанию: если ни одно правило не подошло — трафик пропускается. Фаервол закрывает только то, на что есть явное правило deny. Это специально: машина не отрежется сама по себе, если вы забыли какое-то правило.
⚠️ Никогда не делайте правило «запретить всё» (deny без указания порта/адреса). Это отрежет доступ к серверу целиком, включая управление. Запреты — всегда на конкретные порты или адреса.
Создать политику — по шагам
- Раздел Policies → кнопка «New policy».
- Ввести имя (поле «Policy name») и при желании Priority.
- Блок Rules → «Add rule» → заполнить поля (Direction, Action, Protocol, порты). Повторить для каждого правила.
- Блок Host selector → «Assign to hosts» → выбрать машины/группу (см. гайд по selector).
- Сохранить.
Что произойдёт: правила компилируются и в течение пары секунд применяются на всех выбранных машинах, где сразу вступают в силу. Машина офлайн — получит правила автоматически, как только выйдет на связь.
Проверить заранее — «Preview impact»
Перед сохранением есть «Preview impact» (предпросмотр). Он показывает, какие машины затронет политика и что именно изменится (какие правила добавятся/уберутся) — до того, как что-либо реально включится.
Зачем: убедиться, что не задели лишнего. Особенно полезно, когда политика нацелена на группу или на «все машины».
Технически — POST /policies/{id}/preview: возвращает добавленные/удалённые/изменённые правила без применения.
Изменение и удаление
Изменили правила или список машин → сохранили: система сама пересчитывает и рассылает обновлённый набор правил всем затронутым машинам. Машины, которые выпали из-под политики, автоматически теряют её правила; новые — получают.
Cascade: изменение политики, её селектора или группы объектов пересчитывает объединение затронутых машин и рассылает им новые бандлы.
Версии и откат
Каждое сохранение (PUT) политики создаёт снимок предыдущего состояния.
GET /policies/{id}/versions— список версий.POST /policies/{id}/versions/{v}/revert— восстановить выбранную версию; откат так же пересчитывает и рассылает правила (cascade), как обычное сохранение.
Удалили политику (кнопка «Delete policy»): её правила автоматически снимаются со всех машин, где она действовала. Вручную ничего чистить не надо.
Общий принцип: не бывает «зависших» машин со старыми правилами — при любом изменении всё синхронизируется само.
Типовые сценарии
Закрыть порты на всей группе машин
- Завести группу (например «web-серверы») в разделе Host Groups, добавить в неё машины.
- Создать политику → «Add rule»: Direction
ingress, Actiondeny, Protocoltcp, Dst ports8080, 9090. - «Assign to hosts» → «Assign host group» → выбрать группу.
- Сохранить.
Результат: все текущие и будущие участники группы получают блокировку — добавите машину в группу позже, она подхватит правило сама.
Политика на несколько групп
В «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».