Обзор — что делает этот экран
Соединения по портам — это флагманский экран раздела Инфраструктура ▸ Связность и трафик, то есть PORT OVERVIEW. Он отрисовывает по одной карточке на каждый контролируемый порт (например, 80, 443, 22, 3306 …), заданный в Операционной политике, а внутри карточки разбивает привязанные к этому порту TCP-сессии по серверам в виде 100-процентной составной полосы по состояниям. Цель — одним взглядом понять, «кто сейчас подключён к этому порту, сколько таких сессий и в каком они состоянии».
Источник данных — устаревшая БД трафика (подключение legacy_glory), таблица traffic_session_ct, которую периодически наполняет коллектор check_ct.js. Здесь приложение работает только на чтение — этот экран ничего не записывает.
Каждая плитка сервера показывает:
- 100-процентную составную полосу состояний TCP — доли ESTABLISHED / LISTEN / SYN SENT / SYN RECV / FIN WAIT / CLOSE WAIT / TIME WAIT (всё остальное попадает в
other). ESTABLISHED всегда идёт первым, остальные — по убыванию числа сессий. - Круг SRC — количество уникальных IP-источников (
remote_ip), привязанных к этой паре сервер·порт. По щелчку открывается всплывающее окно со списком IP-источников. - Три основных IP-источника — три удалённых IP с наибольшим числом сессий и их количество.
Когда применять
- Заметить всплеск соединений или аномальные состояния: рост SYN_RECV (полуоткрытые) или TIME_WAIT на порту указывает на SYN-флуд, шторм соединений или утечку соединений в приложении.
- Понять, какой сервер принимает нагрузку: распределение сессий различается по серверам даже на одном и том же порту — так выявляется перекос балансировщика или перегруженный узел.
- Отследить подозрительные источники: щёлкните по основному IP-источнику или по кругу SRC, чтобы детализировать, какие серверы·порты он затрагивает и насколько интенсивно, а также посмотреть гео/ASN и историю, после чего перейти к проверке репутации или к блокировке.
- Вход по прямой ссылке: при переходе с другого экрана (например, Сервисы ▸ Веб) с параметрами
?src_ip=…&port=…фильтр автоматически устанавливается на этот порт и открывается всплывающее окно расследования по IP.
Устройство экрана
Элементы управления сверху
| Элемент | Поведение |
|---|---|
| Таймер 1 мин / 5 мин / 1 час | Ширина окна агрегации сессий. Выбор сохраняется в localStorage (infr:timer:traffic-ports) и переносится между посещениями. |
| Метки портов | Список контролируемых портов (Операционная политика). Щелчок по метке показывает или скрывает соответствующую карточку. All переключает выбор всех и снятие выбора со всех. Фильтрация действует только в текущем сеансе (не сохраняется) — при каждом новом заходе по умолчанию показаны все порты. |
| Время снимка | Метка времени последнего снимка, к которому привязано текущее окно (с поправкой на часовой пояс отображения). |
| Обновление / опрос | Автоматически опрашивает /infra/traffic/ports/live каждые 30 секунд, обновляя карточки. |
Карточки портов (кладка)
Карточки можно переупорядочивать перетаскиванием, а порядок сохраняется в localStorage (infr:order:traffic-ports). Поскольку высота карточек различается, они выкладываются без зазоров методом кладки по строкам (миксин sortable_masonry). Внутри карточки плитки серверов сортируются по числу уникальных IP-источников → суммарному числу сессий → индексу сервера.
Легенда состояний TCP
Цвета составной полосы берутся из семантических CSS-токенов (var(--infr-state-*)). Легенда сопоставляет цвет и состояние.
| Токен | Подпись | Значение |
|---|---|---|
established |
ESTABLISHED | Обычное установленное соединение |
listen |
LISTEN | Прослушивание (серверный сокет) |
syn_sent |
SYN SENT | Попытка подключения (клиент) |
syn_recv |
SYN RECV | SYN получен / полуоткрытое — всплеск указывает на SYN-флуд |
fin_wait |
FIN WAIT | Закрывается (FIN_WAIT1/2 объединены) |
close_wait |
CLOSE WAIT | Удалённая сторона закрыла соединение, приложение — нет; накопление означает утечку соединений |
time_wait |
TIME WAIT | Ожидание после закрытия |
other |
Other | Любое состояние вне перечисленных семи |
Как пользоваться
- Выберите таймер —
1minдаёт самую узкую и свежую выборку снимков,5min/1hour— более сглаженные тенденции. - Сузьте набор до интересующих портов с помощью меток — например, оставьте только 80·443, чтобы наблюдать за вебом.
- Прочитайте составную полосу — низкая доля ESTABLISHED при больших SYN_RECV/TIME_WAIT является признаком аномалии.
- Щёлкните по кругу SRC — откроется всплывающее окно со списком IP-источников для этой пары сервер·порт (удалённый IP, удалённые порты, сессии, первое и последнее появление).
- Щёлкните по IP → расследование по одному IP — разбор того, какие серверы·порты·состояния он затрагивает, гео/ASN и история (агрегация за 5 минут · по часам · по дням). Отсюда можно перейти к проверке репутации или к блокировке.
- Переупорядочите карточки — перетащите наверх порты, за которыми следите чаще всего; порядок сохраняется.
Суточная история (
1day) из-за устройства агрегации собирается по диапазону /24 (256 IP), а не по отдельному адресу. Если во всплывающем окне показана метка CIDR видаby 211.224.128.0/24, это значение представляет собой сумму по всему диапазону.
Источники данных
Все запросы выполняются через подключение legacy_glory и изолированы в App\Repositories\TrafficRepository в виде вызовов построителя запросов с привязкой параметров (без подстановки строк).
Привязка окна
Окно отображения привязано не к now() приложения, а к последнему снимку данных (MAX(snapshot_ts)). Часы записи коллектора могут отставать от часов приложения на несколько часов, поэтому привязка к now() вывела бы окно за пределы данных и экран остался бы пустым.
| Таймер | Граница SQL (snapshot_ts) |
|---|---|
| 1min | startOfMinute … endOfMinute минуты последнего снимка |
| 5min | startOfMinute от (последний − 4 мин) … endOfMinute последнего |
| 1hour | startOfMinute от (последний − 59 мин) … endOfMinute последнего |
Граница WHERE по
snapshot_tsиспользует необработанное время, сохранённое устаревшей системой. Смещение отображения из Операционной политики (traffic_tz_offset_hours) прибавляется только ко времени снимка, показанному на экране.
Основной запрос — portOverview()
SELECT a.local_port, a.server_name, a.server_index, a.remote_ip,
a.state_code, b.state_name,
SUM(a.session_count) AS total_sessions
FROM traffic_session_ct AS a
LEFT JOIN protocol_state AS b ON a.state_code = b.state_code
WHERE a.snapshot_ts BETWEEN :min AND :max
AND a.local_port IN (:ports) -- контролируемые порты из Операционной политики
GROUP BY a.local_port, a.server_name, a.server_index,
a.remote_ip, a.state_code, b.state_name;
traffic_session_ct⋈protocol_stateпреобразует числовой код состояния в понятное человеку имя состояния для легенды и составной полосы.- Узкое окно
snapshot_ts BETWEENвместе с белым спискомlocal_port INсужает большую таблицу снимков (около 605 тыс. строк).
Связанные таблицы
| Таблица | Подключение | Роль | Кто наполняет |
|---|---|---|---|
traffic_session_ct |
legacy_glory | Снимки сессий (хост/удалённый узел/состояние/количество) | check_ct.js |
protocol_state |
legacy_glory | Справочник: код состояния TCP → имя | — |
traffic_session_ct_5min/_1hour/_1day |
legacy_glory | История по периодам для всплывающего окна расследования по IP | aggregate.js |
ip_info_loop |
legacy_glory | Обогащение гео/ASN/ISP для всплывающего окна по IP | — |
Структура ответа сервера (фрагмент)
{
"ports": [80, 443, 22],
"timer": 1,
"snapshot": "2026-08-13 10:24:00",
"ports_data": [
{ "port": 443, "server_data": [
{ "alias": "web1", "idx": 12, "host_count": 84,
"top_req": [ { "remote_ip": "203.0.113.10", "session_count": 61 } ],
"connections": [ { "state": "established", "count": 420, "pct": 78 } ],
"total": 538 }
] }
]
}
portsData() кэшируется на 20 секунд (ключ складывается из таймера и хеша списка портов), чтобы сократить обращения к удалённой стороне.
Доступ
Ролевая область «Инфраструктура» доступна для просмотра начиная с user_level 1 (наблюдатель). Экран «Соединения по портам» работает только на чтение, поэтому отдельного барьера на запись нет — его видят и демо (1), и сотрудники (5), и администраторы (10). Маршрут требует лишь сеансовой аутентификации infr.auth.
| Действие | Требуемый уровень |
|---|---|
| Просмотр соединений по портам, опрос, открытие всплывающего окна расследования по IP | 1 (любой аутентифицированный пользователь) |
| Изменение списка контролируемых портов (Операционная политика) | 10 (Администрирование) — Операционная политика |
Действие блокировки, вытекающее из всплывающего окна расследования по IP, передаётся в Безопасность ▸ Блок-лист, где требуются права на запись
user_level2 и выше, а также журнал аудита. Сам этот экран блокировок не выполняет.
Устранение неполадок и частые вопросы
Карточки появляются, но данные по серверам пусты.
В этом окне к порту не было привязано ни одной сессии. Расширьте таймер до 5min/1hour либо убедитесь, что порт действительно открыт и через него идёт трафик.
Все карточки пусты, отображается «Нет снимка подключений».
В таблице traffic_session_ct на legacy_glory нет свежих снимков (коллектор check_ct.js остановлен либо не удалось подключиться к БД). Если время последнего снимка вообще не показано, проверьте коллектор.
Нужный мне порт не отображается.
Если его нет в списке контролируемых портов (infra_monitored_ports), карточка не создаётся. Добавьте его в виде CSV в разделе Администрирование ▸ Операционная политика (1–65535, не более 30, порядок ввода сохраняется). Значение по умолчанию:
infra_monitored_ports = 80,443,22,3306,25,465,27017,21,53,3030,8080,6379,6001
Время снимка расходится на несколько часов.
Если часы хранения устаревшей БД отличаются от вашего часового пояса отображения, задайте traffic_tz_offset_hours (±14 ч) в Операционной политике, чтобы скорректировать показываемое время. Значение применяется только к отображению и никогда — к границам запроса.
Суточная история пуста.
Агрегация _1day может отставать на сутки и собирается по диапазону /24. Посмотрите вместо неё пятиминутную или почасовую детализацию.
Связанные материалы
- IP-соединения (вид по хостам) — IP удалённых узлов × интенсивность по портам для каждого сервера
- Трафик (сетевой ввод-вывод) — временные ряды входящих и исходящих байтов·пакетов из server_traffic
- Операционная политика — список контролируемых портов и настройка смещения часового пояса
- Репутация IP — репутация AbuseIPDB из всплывающего окна расследования
- Межсетевой экран (поверхность атаки) — мониторинг физической открытости портов
- Блок-лист и репутация — блокировка IP, вытекающая из всплывающего окна расследования
