Система отслеживания состояния соединений conntrack, часть 2
В прошлой части мы разобрали состояние NEW и ESTABLISHED, сегодня поговорим об более интересных состояниях.
Начнем с RELATED, вроде бы просто – это соединения, связанные с уже установленным соединением. Но если начинать разбираться, то вопросов становится больше, чем ответов.
Что такое связанное соединение? Это новое соединение, которое является частью уже существующего, хорошие примеры таких протоколов – это FTP, PPTP или SIP. Для них характерно наличие управляющего соединения и связанных с ним соединений для передачи данных.
Важно понимать и то, что связанное соединение может быть инициировано как изнутри, так и снаружи, при этом порт передачи данных обычно выбирается динамически, что создает проблемы с фильтрацией таких соединений.
Поэтому conntrack как-то должен понять, что это не самостоятельное соединение, иначе оно получит состояние NEW и пойдет в брандмауэр со всеми вытекающими.
Для этого он при помощи специальных модулей ядра ipconntrackNNN анализирует данные управляющих протоколов и на их основании выделяет связанные соединения.
Если новый пакет соединения, определенного как связанное попадает в брандмауэр, то ему присваивается состояние RELATED. После того, как на этот пакет будет получен ответ связанное состояние перейдет в состояние установленного – ESTABLISHED.
Таким образом RELATED – это аналог состояние NEW, но только для связанных соединений, установленных соединений с таким статусом не бывает. Все установленные соединения только ESTABLISHED.
Если у вас пакеты связанного соединения не определяются как RELATED, то это может говорить о том, что отсутствует загруженный модуль для работы с используемым протоколом.
И последнее состояние соединения – INVALID. Очень часто оно трактуется и понимается неправильно.
Скажем нам пришел TCP-пакет уже установленного соединения, но в таблице трассировщика данные о таком соединении отсутствуют. Перед нами типичный INVALID?
Вовсе нет. Если корректно указаны все необходимые поля пакета, то он получит состояние NEW. Об этом мы говорили вчера, такое поведение позволяет подхватывать уже установленные соединения без обрыва сеанса связи.
Что касается UDP, то там каждый пакет является первым, так как протокол не подразумевает установку соединения.
Тогда что такое INVALID? Это пакет, который не может быть идентифицирован, например, имеет некорректно заполненные поля или поврежден. Также сюда относятся ICMP-ответы, для которых отсутствуют соединения породившие запросы.
Напоминаем, что для типов ICMP подразумевающих ответы создается соединение с состоянием NEW и переходит в ESTABLISHED и закрывается только после получения ответа.
Поэтому если есть ответ, но нет соответствующего ему соединения, то такой пакет будет помечен как INVALID.
Также подобное состояние мы можем получить и для вполне легальных пакетов при недостатке ресурсов брандмауэра, например, закончилась свободная память или высокая нагрузка на процессор, перегрев и т.д.
Поэтому INVALID не указывает на однозначно вредоносные пакеты, а говорит о том, что conntrack не смог разобраться с идентификацией пакета и резкий всплеск получения подобного состояния может указывать именно не недостаток ресурсов, а не сетевую атаку.
В тоже время пренебрегать блокированием INVALID тоже не стоит, так как позволяет эффективно защититься от ряда атак, чаще всего через поддельные ICMP-ответы.
Но, повторимся, INVALID – это не только неправильный пакет, а любой, который conntrack по какой-либо причине не смог идентифицировать.
Непонимание этого может заставить искать вас черную кошку в темной комнате, которой там нет (сетевую атаку), вместо того, чтобы проверить режим работы оборудования.
Post #6526
2.41K

- 👍 26
- ❤ 3
- 🔥 2