Обзор — что делает экран
Блок-лист и репутация (/security/blocklist) рассказывает историю тех диапазонов угроз, которые Kitsune ML и Suricata IDS блокируют автоматически, и даёт операторам консоль управления, чтобы вручную блокировать (добавлять) · снимать · блокировать снова диапазоны.
- Исходная таблица —
blacklist_infoна подключенииlegacy_glory(примерно 8 000–9 000 строк). Единица блокировки — не отдельный IP, а диапазон /24 (c_class, например203.0.113.0/24). - В эту таблицу пишут коллекторы обнаружения (
kts_tx.js·srct_tx.js) и данный операторский интерфейс; демонsync_black(sync_black.mjs) читает её и применяет блокировки в виде правил DROP ipset/iptables на каждом хосте. Поэтому добавление и снятие здесь — это плоскость управления, а фактическое отбрасывание пакетов выполняет sync_black. - Тег источника в поле
reason([Kitsune ...]·[Suricata Auto-Block]·[Manual] ...) и доказательные показатели (score · port · ja3 · hits …) разбираются в понятную человеку подпись «почему сюда попали» (разбор не зависит от языка интерфейса).
«Блокировка» всегда охватывает весь диапазон /24. Даже если вы введёте один IP, сохранятся только первые три октета, а запись будет приведена к виду
x.y.z.0/24. Ложные срабатывания исключаются через Белый список, а не сужением блокировки.
Когда использовать
- Чтобы одним взглядом оценить, что и в каком объёме сейчас блокирует автоматическая защита (число действующих блокировок · вклад механизмов · страны происхождения).
- Чтобы вручную заблокировать вредоносный IP, замеченный в разделах Угрозы, Обнаружения или во всплывающем окне расследования IP (глубокая ссылка через
?add=с предзаполнением). - Чтобы снять ошибочно заблокированный диапазон или заблокировать снова снятый диапазон, возобновивший активность.
- Чтобы сверить представительный IP заблокированного диапазона с репутацией AbuseIPDB.
Структура экрана
Показатели вверху
Вычисляются методом summary() с кэшем на 30 секунд (infr:sec:blocklist:summary).
| Показатель | Значение | Расчёт |
|---|---|---|
| Действующие блокировки | Диапазоны /24, применяемые сейчас | COUNT(*) WHERE is_use=1 |
| Защищённых адресов (подзаголовок) | Адреса, покрытые действующими блокировками | active × 256 (/24 ≈ 256) |
| Заблокировано сегодня | Новые блокировки за последние 24 ч | is_use=1 AND created_at >= today 00:00 |
| Доля автоматической защиты | Часть, обработанная ИИ/IDS автоматически | (kitsune + suricata) / active × 100 |
| Отслеживаемые страны | Различные страны среди действующих диапазонов | COUNT(DISTINCT country) WHERE is_use=1 |
| Снято | Снятые сейчас (ожидают повторной блокировки) | COUNT(*) WHERE is_use=0 |
Вклад механизмов защиты
Действующие блокировки раскладываются по тегу источника в полосу долей и плитки. Классификация выполняется сопоставлением LIKE по полю reason.
| Механизм | Правило сопоставления | Значение |
|---|---|---|
| Kitsune ML | reason LIKE '%Kitsune%' |
Обнаружение аномалий ансамблевым автокодировщиком |
| Suricata IDS | reason LIKE '%Suricata%' |
Автоблокировка при сканировании или нарушении протокола |
| Вручную | reason LIKE '%Manual%' или %수동% |
Блокировка, назначенная оператором |
| Другое | Всё, что не подошло выше | active − (kitsune+suricata+manual), не ниже 0 |
Происхождение угроз
blockByCountry(12) агрегирует действующие диапазоны в топ-12 стран (GROUP BY country ORDER BY COUNT DESC) и показывает их эмодзи флагов и полосами рейтинга. Щелчок по полосе фильтрует список по этой стране.
Лента недавней активности защиты
blockFeed(16) показывает 16 самых свежих строк независимо от статуса (ORDER BY created_at DESC, id DESC) сеткой 4×4 — живое ощущение того, что попалось только что.
Список блокировок с фильтрами
40 карточек на страницу (PER_PAGE=40, ORDER BY created_at DESC, id DESC). На каждой карточке — диапазон · страна · значок источника · чип доказательства (поведение + ключевое число) · время блокировки · статус, а также строковые действия [Репутация] · [Подробности] · [Снять]/[Заблокировать снова]. Если диапазон принадлежит зарегистрированной внутренней сети, он получает значок Internal, а кнопка репутации скрывается (internal_scope.js).
Фильтры:
- Статус —
active(по умолчанию) ·released·all - Источник —
kitsune·suricata·manual(пусто = все) - Страна — точное совпадение (не более 64 символов)
- Поиск (q) — только префикс CIDR (регулярное выражение
^[0-9.]{0,20}$, например211.→c_class LIKE '211.%')
Как пользоваться
Как читать основание
Чип доказательства на каждой карточке выбирает из строки reason единственный набор правил с наибольшим весом и показывает его подписью с представительным числом. Среди эвристических категорий srct главная определяется по такому порядку весов:
| Маркер категории | Вес | Ключ behavior | Подпись | Представительное число (подробности) |
|---|---|---|---|---|
[A2:...] |
6 | brute | Перебор к админке | hits=N → N hits |
[A:...] |
5 | scanner | Сканирование уязвимых путей | hits=N → N hits |
[D:...] |
4 | ja3 | Отпечаток JA3 ботнета | ja3=N → ja3×N |
[B:...] |
3 | bot_ua | Обращения вредоносного бота | hits=N → N hits |
[C:...] |
2 | err_flood | Шквал ошибок 4xx | err_rate=NN% |
[E:...] |
1 | short_scan | Сканирование TCP-портов | port=N или N scan |
Если источник — Kitsune либо reason содержит score=, запись относится к ml_anomaly (аномалия машинного обучения) прежде любой категории и показывает top= (компонент с наибольшей ошибкой) вместе с score. Ручные и прочие случаи откатываются к manual / auto.
Дополнительные факты, извлекаемые из reason: score=, top=, port=, short_scan_sessions=, bytes=. Примеры оснований:
[Kitsune v2.2] anomaly top=TLS score=0.83
[Suricata Auto-Block] [A:URL] hits=42 port=443
[Manual] repeated login abuse (uid=5)
Добавление ручной блокировки
- Кнопка [Ручная блокировка] в заголовке списка открывает окно добавления. (При переходе из раздела Угрозы или из расследования IP адрес подставляется из
?add=203.0.113.10.) - Введите IP или CIDR. Одиночный IP расширяется до
/24(203.0.113.10→203.0.113.0/24). - При желании укажите причину (не более 160 символов) и нажмите [Заблокировать].
- Поведение сервера:
- Ввод приводится к виду
x.y.z.0/24функциейcclassCidr()(всё, что не IPv4, отклоняется какinvalid_cidr). - Для полного адреса IPv4 страна дополняется из
ip_info_loop(иначе остаётся имеющееся значение /Unknown). - Если пара
(server_index=0, c_class)уже существует, запись обновляется доis_use=1(повторная активация); иначе вставляется новая строка. Причина записывается как"[Manual] <note> (uid=N)". - Кэш сводки сбрасывается, и возвращаются обновлённые список и сводка.
- Ввод приводится к виду
Блокировка попадает в
blacklist_infoнемедленно, но фактический DROP на межсетевом экране применяется тогда, когда демонsync_blackна каждом хосте в следующий раз синхронизирует её в ipset/iptables. Если этот пакетный процесс не запущен, блокировка на межсетевом экране не действует.
Снятие / повторная блокировка
- [Снять] выставляет
is_use=0, после чего sync_black удаляет запись из ipset (сама строка остаётся). Выполняется после диалога подтверждения. - [Заблокировать снова] возвращает снятому диапазону значение
is_use=1. - Обе операции возвращают
not_found, если целевая строка отсутствует.
Опрос
security-blocklist.js вызывает /security/blocklist/live каждые 30 секунд, чтобы обновить сводку и текущую страницу.
Источники данных
| Элемент | Источник | Примечания |
|---|---|---|
| Реестр блокировок | blacklist_info (legacy_glory) |
id, server_index, c_class, country, reason, is_use, created_at, updated_at · UNIQUE(server_index, c_class) |
| Дополнение страны | ip_info_loop (legacy_glory) |
поиск страны для полного IPv4 при добавлении |
| Проверка внутренней сети | SecurityScope::internalMatchers() |
IP зарегистрированных инстансов + белый список Операционной политики → значок Internal |
| Применение на межсетевом экране | демон sync_black |
blacklist_info → DROP в ipset/iptables |
| Поставка автоблокировок | kts_tx.js · srct_tx.js |
записывают теги источника и доказательные строки в reason |
| Журнал аудита | infr_audit_log |
sec.block_add · sec.block_release · sec.block_readd |
Опорой чтения служит App\Repositories\SecurityRepository; повествование и запись оркестрирует App\Services\Security\BlocklistService. Учётные данные берутся только из config('database.connections.legacy_glory') — никогда не задаются в коде.
Доступ
- Просмотр страницы — вы должны относиться к ролевой области «Безопасность» (sitemap
min_req=2). На развёрнутой шкале уровней экраны безопасности видят staff (5) и admin (10); demo (1) находится вне периметра безопасности. - Запись (добавление/снятие/повторная блокировка) — сервер требует
infr_user_level >= 2(canWrite). Ниже этого возвращается403 forbidden. Поэтому demo (1) писать не может, а staff и admin могут. - Каждая запись фиксируется в
InfrAuditLogи прослеживается в Журнале аудита (исполнитель, целевой CIDR, признак повторной активации и прочее в meta).
Поскольку это разрушительные действия по безопасности, интерфейс перед выполнением показывает диалог подтверждения (step-up). Перепроверьте CIDR, чтобы случайно не заблокировать крупный диапазон.
Диагностика и частые вопросы
- Я заблокировал, но атаки продолжаются. Этот экран обновляет только реестр. Проверьте, что на целевом хосте работает
sync_blackи что ipset действительно обновился. Кроме того, блокировки действуют на уровне /24, поэтому атакам из других диапазонов нужны собственные блокировки. - [Ручная блокировка] возвращает 403. Ваш уровень входа ниже 2. Повторите под учётной записью staff или admin (см. Уровни RBAC).
- Ввод отклоняется как «недопустимый IP/CIDR». Принимаются только
a.b.c/a.b.c.d/a.b.c.d/nn. IPv6 и имена хостов не поддерживаются. - В поле страны отображается Unknown. Для этого IP нет данных из
ip_info_loop, либо вы ввели только CIDR. Добавление полного адреса IPv4 может заполнить страну. - Показатели или список не меняются. Сводка кэшируется на 30 секунд. Сразу после записи кэш сбрасывается, но изменения от коллекторов могут отставать до 30 секунд.
- Я по ошибке заблокировал легитимный диапазон. Немедленно снимите блокировку, а если ложное срабатывание при повторной блокировке повторяется, добавьте диапазон в Белый список, чтобы srct_tx исключал его непосредственно перед блокировкой.
Смежные разделы
- Угрозы — передать сюда вредоносный IP через
?add=и заблокировать его - Белый список — исключения из блокировок (защита от ложных срабатываний, со сроком действия)
- Обнаружения и JA3 — как работает обнаружение Kitsune / srct / JA3
- Автоблокировка — конвейер автоматической блокировки по расписанию
- Репутация IP (AbuseIPDB) — сверить представительный IP
- Журнал аудита — проследить историю блокировок и снятий
