Я не понимаю некоторые основные концепции модуля 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
. Думаю, некоторые версии ядра даже ворчат по этому поводу.)
Это позволит пропускать пакеты, принадлежащие существующим соединениям, если для них существует информация об отслеживании соединения. Но суть в том,тыможет контролироватьгде именновы устанавливаете это правило, или используете ли вы его вообще. Таким образом, вы можете сделать так, чтобы правила вашего брандмауэра заботились о состояниях соединения так сильно — или так слабо — как вы хотите.