InfraGuard

Межсетевой экран (поверхность атаки)

Карта открытости, которая сопоставляет правила межсетевого экрана каждого хоста с зарегистрированными службами и окрашивает каждый открытый порт по уровню риска.

Обзор — что делает этот экран

Безопасность ▸ Межсетевой экран (/security/firewall) наносит все порты, которые ваш парк серверов оставляет открытыми, на единую карту открытости. Каждый открытый порт окрашивается по уровню риска (crit / warn / ok / unknown), и отдельно указывается, является ли он зарегистрированной службой (managed) или неожиданным открытием (unmanaged), — так вы сразу видите, «что видно снаружи и почему».

Экран объединяет три источника:

infr_instance_firewall   (per-instance firewall rules = open ports/services)
        ×  infr_instance  (host meta — public IP · criticality · env · status)
        ×  infr_service   (registered logical services — instance_id · port)
        →  classified by FirewallLore →  exposure map

Разграничение ролей: эта страница рассматривает физическую открытость портов (поверхность атаки). Логическая доступность служб (проверки состояния) относится к разделу Сервисы ▸ Каталог. Один и тот же порт рассматривается в каждом из этих мест под своим углом.

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

Устройство экрана

Заголовок (HERO)

Заголовок и подзаголовок (Ports your fleet leaves open — attack-surface exposure map), отметка времени последнего сбора, переключатель LIVE / PAUSED (30-секундный опрос вкл./выкл.) и кнопка полноэкранного режима.

Пустое состояние

Если правил межсетевого экрана нет вовсе, появляется вводная панель — кнопка Go to Instances ведёт на /asset/instances. Импортируйте результат firewall-cmd из раздела Инстансы ▸ [fw] либо соберите открытые порты через удалённую эмуляцию, и карта заполнится.

Полоса KPI (5 плиток)

KPI Подпись Определение Как вычисляется
ports Открытые порты Общее число записей об открытых портах по всем хостам количество классифицированных правил
hosts Открытые хосты Машины, открывающие хотя бы один порт различные instance_id
crit Опасная открытость Порты, отнесённые к crit risk == 'crit'
unmanaged Открытость без учёта Порты, которые НЕ являются зарегистрированной службой И риск которых не ok !managed && risk != 'ok'
public_crit Публичный · crit Порты crit, открытые на хосте с публичным IP crit && public

Публичный · crit — это намеренный двойной подсчёт. Порт crit на публичном IP уже учтён в Risky exposure и (если это не зарегистрированная служба) также в Unmanaged exposure, но, поскольку именно это пересечение (public × crit) представляет самую опасную открытость во всём парке, оно выносится ещё раз как отдельный KPI, чтобы ничего не ускользнуло. Если эта плитка не равна нулю, начинайте с неё.

Полоса риска открытости

Четырёхцветная составная полоса (crit·warn·ok·unknown) показывает распределение риска. Легенда под ней работает как фильтр по щелчку: щёлкните уровень риска, чтобы оставить только его (повторный щелчок снимает фильтр). Рядом с полосой значение coverage (например, 7 / 12 hosts collected) — это число хостов, для которых есть правила межсетевого экрана, в сравнении с общим числом инстансов.

Панель инструментов · фильтры

Представление по портам

Сетка карточек портов. На каждой карточке — порт/протокол · подпись службы · метка риска, фишки хостов, открывающих этот порт (до 8 + +N), и подвал с числом хостов · числом публичных открытий · категорией. Щелчок по карточке открывает модальное окно с деталями порта и разбором риска. Сортировка: риск → число хостов → номер порта.

Представление по хостам

Сетка карточек хостов. На каждой карточке — имя хоста · псевдоним · env · критичность, метка публичного доступа, фишки портов, которые открывает эта машина (окрашены по риску, с маркером check-decagram, если это зарегистрированная служба), и подвал с количествами по каждому уровню риска · общим числом портов. Щелчок по фишке порта открывает то же модальное окно. Сортировка: число crit → число warn → число портов.

Модальное окно с деталями порта и разбором риска

Порт/протокол · имя службы · метка риска · категория, а также пояснение fwlore из трёх частей:

Ниже — список хостов, открывающих этот порт (env · критичность · зона · публичный/внутренний · метки с учётом/без учёта), и ссылка Manage in Instances ▸ [fw].

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

  1. Если включён режим LIVE, страница обновляется каждые 30 секунд. Если во время расследования меняющиеся значения мешают, переключитесь на PAUSED.
  2. Сначала проверьте KPI «Публичный · crit» — если он не равен нулю, щёлкните crit в легенде риска, чтобы сузить представление по портам, и в первую очередь займитесь хостами с меткой публичного доступа (значок глобуса).
  3. С помощью фильтра Только без учёта выделите «неожиданные открытия». Если здесь появились база данных (3306/5432/27017), кеш (6379/11211), Docker (2375) или удалённое администрирование (23/3389/VNC), не являющиеся зарегистрированной службой, немедленно сузьте доступ к ним.
  4. Щёлкните карточку порта, прочитайте why/best в модальном окне разбора, затем перейдите по Manage in Instances ▸ [fw], чтобы ужесточить правило или зарегистрировать его как службу.
  5. Фактическое закрытие порта или изменение правила выполняется не здесь, а в межсетевом экране целевого хоста и в разделе Инстансы ▸ [fw]. Эта страница — карта и инструмент аудита.

Правила классификации риска (FirewallLore)

Строка порта может быть одиночным значением (8080) или диапазоном (6081-6100). Диапазон сопоставляется с таблицей общеизвестных портов по своему начальному порту.

risk rank значение примеры
crit 3 Немедленная опасность при открытости — хранилища данных · удалённое администрирование · файловые ресурсы · контейнеры MySQL 3306, Redis 6379, RDP 3389, SMB 445, Docker 2375, k8s-api 6443
warn 2 Требует внимания — управление · унаследованное · нестандартное SSH 22, SMTP 25, 8080/8443, SNMP 161, Grafana 3000
ok 1 Обычная публичная служба HTTP 80, HTTPS 443, DNS 53, NTP 123, WireGuard 51820
unknown 0 Не сопоставлено — требует проверки порты и диапазоны, отсутствующие в каталоге

Определение учтённости

Таблица зарегистрированных служб построена по ключу infr_service.instance_id : port. Если у инстанса на этом порту есть зарегистрированная служба, правило считается учтённым (маркер check-decagram, managed_name). Диапазоны портов сопоставляются по своему начальному порту (low). Без зарегистрированной службы правило остаётся без учёта — и если его риск не ok, оно попадает в KPI Unmanaged exposure.

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

Таблица / источник Роль Чем заполняется
infr_instance_firewall Правила открытых портов и служб по каждому инстансу (реестр) Активы ▸ Инстансы ▸ [fw] — ручной CRUD / импорт исходного текста firewall-cmd --list-all / импорт JSON из scripts/infr_firewall_probe.cjs
infr_instance Метаданные хоста — name · alias · env · criticality · status · ip_public Активы ▸ Инстансы
infr_service Зарегистрированные логические службы (instance_id · port · name · kind) → проверка учтённости Сервисы ▸ Каталог
App\Support\FirewallLore Эталон классификации порт → {key,label,category,risk,icon} (не зависит от локали) код
resources/lang/{ko,en}/fwlore.php Пояснения what/why/best по уровню риска и по категории языковой пакет

Структура правила infr_instance_firewall (UNIQUE instance_id, zone, proto, port):

{
  "zone": "public",
  "ports": [
    { "port": "22",         "proto": "tcp", "service": "ssh" },
    { "port": "443",        "proto": "tcp", "service": "https" },
    { "port": "3306",       "proto": "tcp", "service": "mysql" },
    { "port": "6081-6100",  "proto": "tcp", "service": "" }
  ]
}

Импортер [fw] также разбирает исходный текст firewall-cmd --list-all (заголовок зоны → сопоставление services: → ports: напрямую):

public (active)
  services: http https ssh
  ports: 8080/tcp 6081-6100/tcp 3306/tcp

Собранная панель кешируется на сервере в течение 30 секунд (infr:sec:firewall:dashboard). Если правил нет вовсе, возвращается пустой ответ (empty=true), по которому отрисовывается вводное состояние.

Доступ

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

Я вижу только пустой экран («Данных о межсетевом экране пока нет»). Это значит, что в infr_instance_firewall нет ни одного правила. Вставьте результат firewall-cmd --list-all в Активы ▸ Инстансы ▸ [fw] для импорта либо соберите открытые порты через удалённую эмуляцию.

Порт отображается как Unknown service. Этого порта нет в каталоге FirewallLore (риск unknown). Если это законная служба, зарегистрируйте её в разделе Сервисы ▸ Каталог или добавьте подпись в поле service/note правила [fw]. Если порт не нужен, закройте его.

Это зарегистрированная служба, но отображается unmanaged. Для проверки учтённости требуется infr_service на том же инстансе и на этом порту. Если служба находится на другом хосте или другом порту, совпадения не будет. Диапазоны портов сопоставляются только по начальному порту.

Risky exposure не равно нулю, но Public · crit равно 0. Это значит, что все хосты с открытыми портами crit доступны только изнутри (нет ip_public) — радиус открытости невелик, поэтому относительно безопаснее. Тем не менее сузьте их, учитывая внутренние угрозы и горизонтальное перемещение.

Значения не в реальном времени. Возможно, режим LIVE переведён в PAUSED или вкладка находится в фоне. Панель кешируется на сервере 30 секунд, поэтому в течение до 30 секунд после изменения правила в [fw] вы можете видеть прежние значения.

Можно ли закрыть порт здесь? Нет. Эта страница — карта только для чтения. Фактическая блокировка выполняется в межсетевом экране целевого хоста, а обновление реестра правил — в разделе Инстансы ▸ [fw].

Связанные разделы

방화벽 — 오픈 포트 노출 지도
방화벽 — 오픈 포트 노출 지도