Сценарий:Я написал iptables
правила для хоста, на котором механизм DPI отслеживает очереди Netfilter: правила брандмауэра помещают входящий на этот хост трафик в разные очереди Netfilter в зависимости от того, исходит ли трафик от определенного ipset
моего хоста.
В FORWARD
цепочке все соединения ставятся в очередь по-разному NFQUEUES
: движок DPI отслеживает в пользовательском пространстве очереди пакетов, отправленных iptables, если обнаружено запрещенное соединение, он помечает пакет специальным значением; движок DPI повторно вставляет запрещенные пакеты в стек; в цепочке POSTROUTING
я проверяю, помечены ли соединения этим специальным значением, если да, то я DROP
их.
Все работает нормально, но...
Проблема: движок DPI хорош, но не идеален: иногда,
- трафик, который должен быть идентифицирован как запрещенный, не идентифицируется как таковой и, следовательно, не блокируется;
- запрещенный трафик блокируется, но не сразу, а запрещенное соединение в это время может открыть другое соединение (
RELATED
согласно машине conntrack), которое не помечено как запрещенное, но я хотел бы заблокировать и связанное с ним соединение.
Во втором случае я хочу предпринять действия: в качестве примера для случая 2 представьте, что движок DPI хочет заблокировать YouTube, но ему не удается сделать это быстро; он позволяет соединению YouTube открыть другое соединение, которое помечено как SSL от движка DPI; движок DPI в конечном итоге блокирует YouTube, но соединение SSL остается неуправляемым и свободным; я не могу приказать движку DPI блокировать соединения SSL, независимо от того, какие соединения их открыли.
Соображения: как объяснено вСценарий, пакеты, поступающие по POSTROUTING
цепочке, могут быть помечены 0 (что является значением по умолчанию, поэтому DPI-движок не предпринимает никаких действий) или специальным значением (DPI-движок увидел запрещенное соединение и пометил его): простой
iptables -t mangle -A POSTROUTING -m mark --mark DROPVALUE -j DROP
почти всегда достаточно, но вПроблемараздел Я написал, что соединения ОТНОСЯТСЯ к запрещенным, но не рассматриваются как таковые движком DPI, потому чтодаже если они были созданы запрещенным соединением, его протокол не занесен в черный список и поэтому они не рассматриваются как запрещенные. Это правильно, потому что я не могу добавить в черный список SSL
и HTTPS
.
Мне нужно заблокировать соединения RELATED
с запрещенными: RELATED
и ESTABLISHED
(если я правильно понял) не ссылаться на конкретные соединения, а ссылаться на запрещенные соединения.
Вопрос: возможно ли сбрасывать соединения RELATED
с соединениями для сброса (или уже сброшенными) в ? Или необходим iptables
какой-то хак ?conntrack
Заранее спасибо за любые предложения.
решение1
Вы не понимаете RELATED
. Это не используется для каждого соединения, которое может создать один адрес. Это используется только для фактически связанных данных, таких как поток данных FTP, связанный с управляющим соединением FTP, или сообщения об ошибках ICMP, связанные с открытым соединением. Существует очень мало таких соединений, которые действительно будут соответствовать RELATED
.