====== Conntrack ======
Компонент [[:linux:firewall:netfilter|netfilter]], обеспечивающий отслеживание состояния соединения и классификацию пакетов по **принадлежности к соединениям**, что обеспечивает **stateful-фильтрацию**.\\
===== Сведения =====
**Классифицирует каждый пакет** либо как открывающий новое соединение, либо относящийся к уже установленному. При этом, понятие "состояние соединения" искусственно вводится даже для протоколов не использующих его (UDP, ICMP).\\
**Отслеживание связанных соединений**, ICMP-ответы на TCP и UDP, FTP сессии с несколькими соединениями и т.д.\\
Механизм анализирует все пакеты, кроме помеченных **NOTRACK** в таблице **raw**, функция удобна например во время DDoS-атаки, что бы не тратить ресурсы на отслеживание с этих хостов.\\
==== Критерий состояния соединения ====
Критерий **conntrack** позволяет классифицировать пакеты на основании их отношения к соединениям.\\
Возможные состояния (**--ctstate**):
* **NEW** - соединение еще не открыто т.е. пакет первый в соединении.
* **ESTABLISHED** - пакет относится к уже установленному соединению, обычно принимаются без доп фильтрации (как и RELATED)
* **RELATED** - пакет открывает новое соединение, логически связанное с уже установленным соединением.
* **INVALID** - пакет по смыслу должен принадлежать к уже установленному соединению, но оно не зарегистрировано, обычно используют **DROP**.
* **UNTRACKED** - отслеживание отключено для этого пакета.
* **DNAT** - применена операция **подмены адреса назначения**.
* **SNAT** - применена операция **подмены адреса источника**.
Возможные состояния (**--ctstatus**):
* **EXPECTED** - соединение ожидалось по результатам анализа других соединений (пассивный FTP).
* **CONFIRMED** - подтвержденное состояние, инициатор начал передачу пакетов.
* **SEEN_REPLY** - соединение по которому поступил ответ (имеет место передача в обоих направлениях).
* **ASSURED** - соединение можно считать полностью установленным (присваивается после передачи определенного кол-ва данных, увеличивается тайм-аут).
* **NONE** - не соответствует ни одному из перечисленных.
**conntrack** пришел на замену старому критерию **state** (использование его уже не рекомендуется).\\
==== Маркировка соединений ====
Позволяет классифицировать соединение в целом на основании одного пакета. Маркировку автоматически приобретают все пакеты в данном соединении и связанными с ним.
==== Статистика по соединениям =====
Критерий **connbytes** позволяет контролировать кол-во байт или пакетов, переданных по каждому конкретному соединению (возможность квот или приоритетов загрузки).
==== Количество соединений ====
Критерий **connlimit** позволяет ограничивать число одновременно открытых TCP-соединений с каждого хоста или подсети.
===== Модули =====
Часть функционала содержится в модулях, некоторые из них нужно **включать вручную**, например **nf_conntrack_ftp**, модуль для распознавания связанных ftp соединений.\\
Просмотреть список модулей в системе:
# lsmod
Включить модуль **nf_conntrack_ftp**:
# modprobe nf_conntrack_ftp
===== Утилиты (conntrack-tools) =====
Комплект **conntrack-tools** содержит две утилиты:
* **[[:linux:firewall:conntrack_util|conntrack]]** - позволяет наблюдать таблицы состояний соединений и взаимодействовать с ними.
* **conntrackd** - демон, обеспечивающий синхронизацию таблиц состояний с другими хостами, используется в кластерах высокой доступности.