Conntrack e regras dinâmicas de ipset/iptables

Conntrack e regras dinâmicas de ipset/iptables

Não entendo alguns conceitos básicos do módulo conntrack.

Em primeiro lugar, tenho certeza de que está habilitado no meu sistema (Ubuntu 18.04), modinfomostra informações sobre nf_conntrack e /proc/moduleso arquivo informa que nf_conntrack está "ao vivo".

Em segundo lugar, tenho a seguinte configuração de teste:

Máquina A (192.168.1.2) <-----> Máquina roteadora (192.168.1.1 e 192.168.2.1) <----> Máquina B (192.168.2.2)

Na máquina do roteador, tenho a seguinte regra do iptables:
iptables -t filter -A FORWARD -m set --match-set BlackListPort dst -j DROP

BlackListPort é uma tabela ipset.
Agora estabeleço uma conexão SSH da Máquina A (1.2) para a Máquina B (2.2). Depois de confirmar que funciona, adiciono a porta 22 (padrão SSH) à tabela BlackListPort.

A conexão SSH congela/trava até que eu remova a porta 22 dessa tabela ipset.

Agora a questão: Como o conntrack está presente no meu sistema, por que o bloco SSH foi bem-sucedido? A conexão SSH foi estabelecida antes da porta 22 ser adicionada ao ipset, então o conntrack deve simplesmente pular todos os pacotes, permitindo que o SSH funcione.

Responder1

A conexão SSH foi estabelecida antes da porta 22 ser adicionada ao ipset, então o conntrack deve simplesmente pular todos os pacotes, permitindo que o SSH funcione.

Isso não está correto.

Todos os pacotes serão processados ​​através das regras de filtragem, pertencendo ou não a conexões rastreadas.

É uma otimização muito comum das regras do iptables colocar algo assim próximo ao início da cadeia de regras relevante ( FORWARDno seu exemplo):

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

Em distribuições mais antigas, você poderá ver esta versão:

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

(Eu entendo que a conntrackcorrespondência agora é preferida à statecorrespondência. Acho que algumas versões do kernel até incomodam você sobre isso.)

Isso permitirá a passagem de pacotes pertencentes a conexões existentes, se existir uma informação de rastreamento de conexão para eles. Mas o ponto é,vocêpode controlaronde exatamentevocê coloca essa regra, ou se você a usa. Assim, você pode fazer com que suas regras de firewall se importem com os estados de conexão tanto quanto desejar.

informação relacionada