Como posso redirecionar conexões estabelecidas com o iptables?

Como posso redirecionar conexões estabelecidas com o iptables?

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 NOTRACKregra 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 DNATregra cria uma entrada na tabela conntrack quando a conexão é estabelecida com handshake TCP de 3 vias.

A notrackregra 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 conntracka 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.

informação relacionada