С чего начать Первые шаги трек · 15 ступеней
Linux Labs

conntrack (отслеживание соединений)

3 мин Linux · conntrack-tools

Таблица соединений ядра — что видит NAT/файрвол, переполнение, отладка.

Шпаргалка

6 команд Версия для печати
  • sudo conntrack -L соединения
  • sudo conntrack -E события в реальном времени
  • sudo conntrack -S drops / insert_failed
  • sudo conntrack -D -s 10.0.0.5 сбросить соединения источника
  • cat /proc/sys/net/netfilter/nf_conntrack_{count,max} загрузка таблицы
  • sudo sysctl -w net.netfilter.nf_conntrack_max=262144 поднять лимит

Обзор

Ядро отслеживает состояние сетевых соединений (conntrack) — на этом держатся stateful-правила файрвола (ESTABLISHED,RELATED) и NAT. conntrack (пакет conntrack-tools) показывает и чистит эту таблицу.

bash
sudo conntrack -L                 # текущие отслеживаемые соединения
cat /proc/sys/net/netfilter/nf_conntrack_count   # сколько записей сейчас
cat /proc/sys/net/netfilter/nf_conntrack_max     # лимит

Ключи

11
Ключ Значение
-L список соединений (таблица tracking)
-E поток событий в реальном времени
-S статистика по CPU (drops, insert_failed)
-D удалить записи (по фильтру)
-p / --dport / -s / -d фильтр: протокол / порт / источник / назначение
--state фильтр по состоянию (ESTABLISHED, TIME_WAIT…)
Ключ Что делает Пример
-L --dump Список отслеживаемых соединений (таблица conntrack). sudo conntrack -L
-E --event Поток событий conntrack в реальном времени. sudo conntrack -E
-S --stat Статистика по CPU — отброшенные и неудавшиеся вставки записей. sudo conntrack -S
-C --count Счётчик записей в таблице (то же, что nf_conntrack_count). sudo conntrack -C
-D --delete Удалить записи, подходящие под фильтр (сбрасывает эти соединения). опасно sudo conntrack -D -s 10.0.0.5
-p --proto tcp|udp|icmp Фильтр по протоколу. sudo conntrack -L -p tcp
--dport port Фильтр по порту назначения. sudo conntrack -L -p tcp --dport 443
-s --src address Фильтр по адресу источника. sudo conntrack -L -s 10.0.0.5
--state state Фильтр по состоянию соединения (ESTABLISHED, TIME_WAIT…). sudo conntrack -L --state ESTABLISHED
-F --flush Очистить всю таблицу соединений сразу. опасно sudo conntrack -F
-d --dst address Фильтр по адресу назначения. sudo conntrack -L -d 10.0.0.5

Ничего не найдено. Попробуй запрос короче.

Рецепты

1

Команды

bash
sudo conntrack -L                          # список соединений
sudo conntrack -L -p tcp --dport 443       # фильтр по протоколу/порту
sudo conntrack -L -s 10.0.0.5              # по источнику
sudo conntrack -L --state ESTABLISHED      # только установленные
sudo conntrack -E                          # события в реальном времени (как watch)
sudo conntrack -E -e NEW                   # только новые соединения
sudo conntrack -S                          # статистика: drops / insert_failed по CPU
sudo conntrack -C                          # счётчик записей (= nf_conntrack_count)
sudo conntrack -D -s 10.0.0.5              # удалить записи источника (сбросить его соединения)
sudo conntrack -F                          # очистить ВСЮ таблицу (осторожно)

Неполадки

5

nf_conntrack: table full, dropping packet

Таблица переполнена (нагруженный шлюз/NAT) — новые соединения дропаются. Подними лимит (sysctl) и проверь, не висят ли тысячи полу-открытых (DoS/утечка клиента):

bash
sudo sysctl -w net.netfilter.nf_conntrack_max=262144   # временно
echo 'net.netfilter.nf_conntrack_max=262144' | sudo tee /etc/sysctl.d/99-conntrack.conf   # постоянно
sudo conntrack -L | awk '{print $4}' | sort | uniq -c | sort -rn | head   # топ источников

NAT/проброс работает «через раз»

conntrack -L — есть ли запись о соединении и в каком состоянии. Асимметричный роутинг ломает conntrack (ответ идёт мимо узла, что трекает).

Соединение «залипло» после смены правил файрвола

Существующие соединения уже в таблице (ESTABLISHED) и проходят мимо новых правил. Сбрось нужные: sudo conntrack -D -s IP (по адресу/порту).

Высокий insert_failed в conntrack -S

Гонки/переполнение при большом числе одновременных коннектов; смотри лимит и таймауты (/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_*).

Где видно текущие соединения без conntrack

Локальные сокеты приложений — ss; именно tracking ядра (для NAT/файрвола) — conntrack -L.

Термины

1
отслеживание соединений connection tracking
Сопоставление пакетов с известными соединениями и состояниями сетевого обмена.

См. также

  • firewall — Фильтрация трафика — простой ufw и низкоуровневый nftables.
  • iptables — Классический файрвол Linux — цепочки, правила, NAT; и почему теперь nftables.
  • ss — Кто слушает порты и какие соединения открыты — современная замена netstat.
Загрузка…