Я часто видел, как -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
применяется правило . Пока я не эксперт, эта конкретная линия касается меня. Совершенно очевидно, что правило разрешает весь трафик за исключением того, что соединение должно быть установлено или связано с установленным соединением.
сценарий
- Я разрешаю подключения к стандартному порту SSH
22
из локальной сети серверов в подсети192.168.0.0/16
или что-то еще. SuperInsecureApp®
выставляет что-то на порт1337
, который я добавляю в своюINPUT
цепочку.- Я добавил
conntrack
правило, чтобы принятьESTABLISHED
иRELATED
из всех источников - Цепная политика
DROP
Таким образом, в основном эта конфигурация разрешает SSH-соединения только из локальной сети, в то время как разрешает входящий трафик через порт 1337 из мира.
Вот где расцветает мое замешательство. Будет ли conntrack
каким-либо образом обнаружен недостаток безопасности, который позволит получить установленное соединение на 1337 (поскольку оно открыто для всех), а затем использовать это соединение для получения доступа к порту SSH (или любому другому порту в этом отношении)?
conntrack
правило находится в начале или в конце цепочки? Насколько я понимаюiptables
, он должен был бы обработать все правила на установленных соединениях, если бы он был в конце, и только это единственное правило, если бы он был помещен в начало?ESTABLISHED и RELATED - это функции «пакетной» фильтрации пакетов, где фильтрация зависит не только от статического набора правил, но и от контекста, в котором рассматриваются пакеты. Вам нужно ESTABLISHED, чтобы позволить соединениям работать, и вам нужно RELATED для соответствующих сообщений ICMP. Фильтрация с учетом состояния позволяет выполнять фильтрацию более точно по сравнению со статическими правилами без сохранения состояния.
Давайте сначала посмотрим на ESTABLISHED. Например, рассмотрим TCP на порту 22. Инициатор (клиент) отправляет
SYN
вserverIPaddr:22
. Сервер возвращаетсяSYN+ACK
к клиенту. Теперь очередь за клиентом отправлятьACK
. Как должно выглядеть правило фильтрации на сервере, чтобыACK
принималось только «соответствие» ? Общее правило без гражданства будет выглядеть таккоторый является более либеральным, чем соответствующее государственное правило. Правило апатридом позволяет произвольные сегменты TCP, например ,
ACK
илиFIN
без установив соединение в первую очередь. Сканеры портов могут использовать такое поведение для снятия отпечатков ОС.Теперь давайте посмотрим на СВЯЗАННЫЕ. Это используется для сообщений ICMP, в основном сообщений об ошибках. Например, если пакет от сервера к клиенту отброшен, то сообщение об ошибке отправляется на сервер. Это сообщение об ошибке «связано» с ранее установленным соединением. Без правила RELATED нужно было бы либо разрешить входящие сообщения об ошибках вообще (без контекста), либо, как это принято для многих сайтов, вообще отбросить ICMP и дождаться истечения времени ожидания на транспортном уровне. (Обратите внимание, что это плохая идея для IPv6; ICMPv6 играет более важную роль для IPv6, чем ICMP для прежних версий IP.)
источник