====== 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** - демон, обеспечивающий синхронизацию таблиц состояний с другими хостами, используется в кластерах высокой доступности.