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), modinfo
mostra informações sobre nf_conntrack e /proc/modules
o 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 ( FORWARD
no 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 conntrack
correspondência agora é preferida à state
correspondê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.