InfraGuard

Белый список (освобождение от блокировки)

Управление IP и CIDR, освобождёнными от автоматической блокировки, с моделью срока действия (постоянный или временный); список читает srct_tx прямо перед блокировкой.

Обзор — что делает эта страница

Страница Белый список управляет IP-адресами и диапазонами, которые нужно вывести из конвейера автоматической блокировки InfraGuard. Всё, что здесь зарегистрировано, образует «реестр исключений», к которому коллекторы обнаружения обращаются непосредственно перед блокировкой, — это не даёт заблокировать доверенные источники (CDN, партнёрские API, офисные каналы) из-за ложного срабатывания.

Центральное понятие здесь — срок действия:

Исключения поступают из трёх источников:

Источник Значение Смысл
Вручную manual Оператор добавляет запись прямо из интерфейса
Автоматически (невиновен) auto srct_tx проверяет репутацию IP и при явной невиновности автоматически регистрирует исключение на 30 дней
По умолчанию seed Ранее прошитые в коде диапазоны CDN/OFFICE, перенесённые сидером InfrWhitelistSeeder (постоянные)

Таблица infr_whitelist находится на подключении legacy_glory (та же БД, что и blacklist_info и таблицы suricata_*), а не в базе приложения. Благодаря этому Node-коллектор srct_tx может читать эту таблицу напрямую прямо перед блокировкой и записывать в неё невиновные IP.


Когда использовать


Устройство

Показатели вверху (5)

Их вычисляет WhitelistService::summary() с кешем на 30 секунд. Действует = is_active = 1 И (expires_at IS NULL ИЛИ expires_at > now).

Показатель Смысл Расчёт
Действующие исключения Всего исключений, действующих сейчас количество действующих
Постоянные Записи без срока действующие И expires_at IS NULL
Временные Записи, которые истекут действующие − постоянные
Автоматическое исключение Автоматические записи с вердиктом о невиновности действующие И source = 'auto'
Скоро истекут Истекают в течение 7 дней действующие И expires_at <= now+7d

Список исключений

Таблица с фильтрами (25 строк на страницу). Сортировка: сначала постоянные (expires_at IS NULL DESC) → срок по возрастанию → id по убыванию.

Столбец Описание
Диапазон нормализованный cidr (например, 203.0.113.0/24 или 203.0.113.10/32)
Название label (например, «Cloudflare», «Офис»)
Источник значок manual / auto / seed
Срок Постоянно / YYYY-MM-DD HH:MM / n days left / истекло
Добавлено created_at
Действие Удалить (если у вас есть права на запись)

Фильтры: состояние (действует · истекло · все), источник (вручную · автоматически · по умолчанию · все) и поиск (IP · CIDR · название). Список опрашивает обновления каждые 30 секунд.

Окно добавления вручную

Кнопка [Add manually] (Добавить вручную) открывает модальное окно. Поля: IP или CIDR, название (необязательно) и дата-время окончания (необязательно; пусто = постоянно).


Как пользоваться

1. Добавить исключение вручную

  1. Нажмите [Add manually] (Добавить вручную).
  2. Введите IP или CIDR. Одиночный IP приводится к /32, диапазон — к своему адресу сети (см. правила нормализации ниже).
  3. При желании укажите название и дату-время окончания. Оставьте срок пустым, чтобы получить постоянное исключение.
  4. Нажмите [Add] (Добавить). Если такой же cidr уже существует, запись активируется заново (is_active=1), а её срок и название обновляются.

2. Правила нормализации (normalizeCidr)

WhitelistService::normalizeCidr() переписывает ввод в каноническую форму (не зависит от языка и совпадает с соглашением сопоставления в srct_tx).

203.0.113.10        → 203.0.113.10/32     (одиночный IP становится /32)
203.0.113.0/24      → 203.0.113.0/24      (без изменений)
203.0.113.55/24     → 203.0.113.0/24      (биты узла маскируются → адрес сети)
10.0.0.5/8          → 10.0.0.0/8
999.1.1.1           → (недопустим → null, 422 invalid_ip)

При добавлении диапазона /24 биты узла можно оставить — 203.0.113.55/24 автоматически сохраняется как 203.0.113.0/24 (адрес его сети).

3. Ввод срока действия

4. Удаление

Действие удаления в строке списка вызывает remove после подтверждения. Строка удаляется физически (не помечается как удалённая). Даже запись CDN с источником seed можно удалить, но при следующем запуске сидера она может быть создана заново.

5. Автоматическое признание невиновности в srct_tx (источник auto) — как оно наполняется

Коллектор srct_tx проверяет невиновность по очень строгой процедуре непосредственно перед блокировкой IP со сканированием или аномальной частотой и оставляет здесь запись auto только тогда, когда вердикт бесспорен.

  1. Фильтр по белому списку — если IP уже есть в infr_whitelist (плюс список CDN в самом коде), он немедленно освобождается и пропускается.
  2. Проверка репутации только для кандидатов «только E» — в AbuseIPDB проверяются лишь те IP, у которых есть склонный к ложным срабатываниям признак «короткое сканирование само по себе» (эвристика E) и нет ни одного из жёстких признаков (A/A2/B/C/D) (ключи по кругу · кеш 6 ч · лимит на проход).
  3. Вердикт о полной невиновности — если abuse_score=0 И reports=0 И это не Tor (либо IP в белом списке с оценкой 0), в infr_whitelist(source=auto) автоматически регистрируется исключение на 30 дней (ip/32), а блокировка пропускается.

Автоматическое признание невиновности есть только у srct_tx. kts_tx (Kitsune ML) лишь читает белый список и фильтрует по нему — он не делает запросов репутации и не регистрирует записи автоматически.

6. cidrList() — повторное использование при генерации кода

WhitelistService::cidrList() возвращает список действующих и не истёкших CIDR без дубликатов (кеш на 30 секунд). Этот список подставляется как источник константы CDN_WHITELIST_CIDRS, когда страница Правила и пороги генерирует скрипты srct_tx/kts_tx, — так исключения, которыми управляют в интерфейсе, попадают в реальный код коллектора.


Источники данных

Таблица infr_whitelist (подключение: legacy_glory, миграция 000734)

Столбец Тип Описание
id bigint PK
cidr varchar(43) unique нормализованный IP (/32) или сеть (/n)
label varchar(120) null что или кто это
source varchar(12) manual / auto / seed
reason varchar(500) null обоснование автоматики (оценка/категория репутации)
country varchar(4) null код страны
expires_at datetime null NULL = постоянно
is_active tinyint(1) признак активности
created_by int null id пользователя, добавившего запись
created_at / updated_at timestamps

Индексы: (is_active, expires_at), source.

infr_whitelist создаётся в БД legacy_glory (GLORY). Если legacy_glory не настроено как mysql/mariadb, миграция и сидер защищены и ничего не делают — страница отрисовывается, но показатели читаются как 0. В реальных развёртываниях подключение GLORY должно быть заполнено.

Сидер InfrWhitelistSeeder (source=seed, постоянно)

Переносит ранее прошитые в коде диапазоны CDN/OFFICE (идемпотентно за счёт firstOrCreate). Включает фронтальные диапазоны Cloudflare, Google, Meta, AWS и Akamai, а также фиксированный IP OFFICE.

php artisan db:seed --class=InfrWhitelistSeeder

Модель · сервис


Права доступа

Действие Минимальный уровень Примечания
Вход в область «Безопасность» и просмотр min_req 2 меню «Безопасность» demo(1) не видит меню «Безопасность»
Добавление и удаление в белом списке (запись) уровень ≥ 2 WhitelistController::canWrite() = user_level >= 2

Схема уровней: demo=1 · staff=5 · admin=10. То есть staff и admin могут и читать, и писать; при неудачной записи возвращается 403 forbidden (уведомление «Не разрешено (уровень 2 или выше)»).

Каждая запись фиксируется в InfrAuditLog:

Полную политику уровней и ролей см. в разделе Уровни доступа, а разбор записей — в Журнале аудита.


Устранение неполадок и FAQ

Все показатели равны 0, а список пуст

Подключение legacy_glory не настроено либо таблица infr_whitelist ещё не создана. Проверьте настройки БД GLORY и выполните миграцию и сидер. При ошибках БД сервис аккуратно возвращает пустые значения.

«Недопустимый IP / CIDR» (422)

Введённое значение не является IPv4, либо длина префикса выходит за пределы 0–32. IPv6 не поддерживается. Примеры: 203.0.113.10, 203.0.113.0/24.

Я ввёл /24, но сохранённый диапазон отличается

Так и задумано. Биты узла маскируются до адреса сети (203.0.113.55/24 → 203.0.113.0/24).

Создаст ли повторное добавление того же IP дубликат?

Нет. Поле cidr уникально, поэтому существующая запись активируется заново, а её срок и название обновляются (в ответе reactivated: true). Если существующая запись была seed, источник так и остаётся seed.

Почему появляются записи auto и можно ли их удалить?

srct_tx автоматически зарегистрировал IP, признанный им явно невиновным, как исключение на 30 дней. Удалить её можно, но если этот IP снова будет отмечен ошибочно, запись может появиться вновь.

Исчезают ли истёкшие записи сами собой?

Строка остаётся, но после наступления срока перестаёт попадать в подсчёт «действующих». Переключите фильтр состояния на истекло/все, чтобы их увидеть. Чтобы избавиться от них полностью, удалите их.

Я освободил IP, но его всё равно блокируют

Проверьте: (1) действительно ли нормализованный диапазон покрывает IP этого трафика (например, /32 против /24); (2) кеш cidrList() (30 с) и был ли заново сгенерирован скрипт коллектора; (3) нет ли уже записи о блокировке в blacklist_info. Существующие блокировки нужно снимать из блок-листа.


Смежные темы

화이트리스트 — 차단 면책 목록
화이트리스트 — 차단 면책 목록