
Estou tentando criar regras de iptables para redirecionar todo o tráfego destinado à porta 1986 para a porta 9 para provocar uma “conexão recusada” usando a seguinte regra:
iptables -t nat -I PREROUTING -p tcp -m tcp --dport 1986 -j DNAT --to-destination :9
Isso funciona muito bem para novas conexões, mas o problema é que as conexões estabelecidas parecem ignorar esta regra e não são recusadas.
Tentei adicionar uma NOTRACK
regra na tabela bruta para tentar evitar o rastreamento do estado da conexão, mas isso não teve efeito:
iptables -t raw -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j NOTRACK
Adicionar estado à regra nat também não funciona:
iptables -t nat -I PREROUTING -p tcp --dport 1986 -m state --state ESTABLISHED,RELATED,NEW,INVALID -j DNAT --to-destination :9
Como posso usar o iptables para provocar um erro de ‘conexão recusada’ para pacotes enviados em conexões estabelecidas?
Responder1
A DNAT
regra cria uma entrada na tabela conntrack quando a conexão é estabelecida com handshake TCP de 3 vias.
A notrack
regra parece desabilitar a criação de novas entradas conntrack. No entanto, isso não impede o uso de entradas conntrack existentes.
Como a conexão já está estabelecida, já existe uma entrada na tabela conntrack, e o kernel a utiliza para encaminhar o tráfego.
Você deve usar conntrack
a ferramenta para excluir os fluxos da tabela conntrack. Por exemplo:
conntrack -D -s 192.168.1.10 -d 192.168.100.20 -p tcp --dport 1986
Após emitir este comando, a conexão é adicionada novamente ao conntrack usando as novas regras DNAT em iptables. Então o novo servidor de destino recusará a conexão. Não tenho certeza do que exatamente o novo servidor de destino enviará de volta, talvez TCP RST.