Conntrack и динамические правила ipset/iptables

Conntrack и динамические правила ipset/iptables

Я не понимаю некоторые основные концепции модуля conntrack.

Прежде всего, я уверен, что он включен в моей системе (Ubuntu 18.04), modinfoпоказывает информацию о nf_conntrack и /proc/modulesфайл сообщает, что nf_conntrack «активен».

Во-вторых, у меня есть следующая тестовая установка:

Машина A (192.168.1.2) <-----> Машина маршрутизатора (192.168.1.1 и 192.168.2.1) <----> Машина B (192.168.2.2)

На маршрутизаторе у меня есть следующее правило iptables:
iptables -t filter -A FORWARD -m set --match-set BlackListPort dst -j DROP

BlackListPort — это таблица ipset.
Теперь я устанавливаю SSH-соединение с машины A (1.2) на машину B (2.2). После того, как я убедился, что все работает, я добавляю порт 22 (SSH по умолчанию) в таблицу BlackListPort.

SSH-соединение зависает, пока я не удалю порт 22 из таблицы ipset.

Теперь вопрос: Поскольку conntrack присутствует в моей системе, почему блокировка SSH проходит успешно? SSH-соединение было установлено до того, как порт 22 был добавлен в ipset, поэтому conntrack должен просто пропускать все пакеты, позволяя SSH работать.

решение1

SSH-соединение было установлено до того, как порт 22 был добавлен в ipset, поэтому conntrack должен просто пропускать все пакеты, позволяя SSH работать.

Это неверно.

Все пакеты будут обработаны с использованием правил фильтрации, независимо от того, относятся ли они к отслеживаемым соединениям или нет.

Очень распространенной оптимизацией правил iptables является размещение чего-то подобного в начале соответствующей цепочки правил ( FORWARDв вашем примере):

iptables -t filter -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

В старых дистрибутивах вы можете увидеть следующую версию:

iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

(Я понимаю, что conntrackсовпадение теперь предпочтительнее совпадения state. Думаю, некоторые версии ядра даже ворчат по этому поводу.)

Это позволит пропускать пакеты, принадлежащие существующим соединениям, если для них существует информация об отслеживании соединения. Но суть в том,тыможет контролироватьгде именновы устанавливаете это правило, или используете ли вы его вообще. Таким образом, вы можете сделать так, чтобы правила вашего брандмауэра заботились о состояниях соединения так сильно — или так слабо — как вы хотите.

Связанный контент