regras do iptables para bloquear pacotes específicos

regras do iptables para bloquear pacotes específicos

Estou usando a seguinte regra do iptables:

iptables -A INPUT -p tcp -m tcp --tcp-flags PSH,ACK PSH,ACK -m length --length 52 -m state --state ESTABLISHED -j DROP

Ele funciona bloqueando pacotes indesejados do meu servidor, mas também bloqueia coisas que não deveriam.

Aqui estão os pacotes capturados com wireshark:

unwanted packet:source=192.168.0.100    destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62401→38111 [PSH, ACK] Seq=15 Ack=19 Win=65536 Len=12

needed packet:source=192.168.0.100  destination=192.168.0.111   TCP lenght=66   [TCP Retransmission] 62433→38111 [PSH, ACK] Seq=344 Ack=37855 Win=62825 Len=12

Minha pergunta é como modificar a regra para permitir o pacote necessário e bloquear o indesejado.

Responder1

Você não pode fazer isso na camada do firewall (bem, você pode - mas não realizará o que você pensa, nem o que deseja). O segundo pacote (que você deseja) faz parte do mesmo fluxo TCP do primeiro pacote (que você não deseja) e o TCP é um mecanismo de entrega confiável. Isso significa que o sistema operacional sabe se um pacote no meio do fluxo desapareceu (em virtude do número de sequência no cabeçalho de cada pacote, veja, por exemplo,http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structurePara maiores informações).

Se você filtrar um pacote no meio de um fluxo, o kernel simplesmente continuará informando a outra extremidade que um pacote está faltando, e a outra extremidade continuará retransmitindo-o (comportamento que você já está vendo, observe os [TCP Retransmission]marcadores acima). Se você continuar a bloquear essas retransmissões, o stream ficará dessincronizado, a conexão será interrompida e nada no stream será processado.

Você terá que fazer isso na camada de aplicação.

Editaruma troca de comentários entre nós dois (muitos dos quais já foram excluídos) deixou claro que a pergunta pode não conter todos os detalhes que deveria. Recomendo que você feche esta pergunta - aceite minha resposta ou exclua a pergunta inteira - e escreva uma nova onde descreva com detalhes consideráveis ​​o que exatamente acontece agora, como acontece e o que você deseja alcançar.

Tudo o que posso dizer agora, com alguma confiança, é quevocê não pode usar iptablespara cortar um único pacote do meio de um fluxo TCP e esperar que o restante desse fluxo seja processado corretamente pelo aplicativo receptor.

informação relacionada