Por que o net.ipv4.tcp_rfc1337 não está habilitado por padrão?

4

A configuração tcp_rfc1337 parece ter uma solução para Assassinato TIME-WAIT.

The first problem is that old duplicate data may be accepted erroneously in new connections, leading to the sent data becoming corrupt.
The second problem is that connections may become desynchronized and get into an ACK loop because of old duplicate packets entering new connections, which will become desynchronized.
The third and last problem is that old duplicate packets may enter newly established connections erroneously and kill the new connection.

Pelo que li, para resolver os problemas, o que a configuração faz é ignorar os pacotes RST (reset) enquanto o socket está no estado TIME-WAIT .

Então, por que essa configuração não está ativada por padrão? Quais são as desvantagens de usar isso?

Na verdade, eu aprendi sobre essa variável quando estava pesquisando sobre parar ataques de inundação de SYN. Você acha que essa configuração ajuda a pará-los?

    
por Nuno 03.07.2016 / 11:19

2 respostas

5

Concordo com o comentário do Greg. A RFC 1337 é apenas uma RFC informativa e não faz parte do padrão TCP. Para garantir que não haja mudanças inesperadas nas redes de produção, faz sentido manter esse recurso desativado por padrão e deixar que os administradores da rede decidam se desejam ativá-lo para testes.

Descartar pacotes RST para soquetes em TIME-WAIT não aparecer terá consequências negativas, mas isso não significa que não haja nenhum - talvez um caso estranho que não tenha sido totalmente explorado.

Curiosamente, a documentação do kernel para o tcp_rfc1337 parece estar incorreta :

tcp_rfc1337 - BOOLEAN
    If set, the TCP stack behaves conforming to RFC1337. If unset,
    we are not conforming to RFC, but prevent TCP TIME_WAIT
    assassination.
    Default: 0

Se a opção estiver configurada, estamos em conformidade com o RFC 1337 e descartar pacotes RST, evitando o Assassinato TIME-WAIT. Se a opção não estiver definida (padrão), nós não estamos em conformidade com o RFC 1337 e estamos suscetíveis a Assassinato TIME-WAIT.

    
por 11.07.2016 / 21:53
1

Eu encontrei o código-fonte do kernel e para mim o documento está correto: padrão = 0: kill

if (th- > primeiro) {             / * Este é o assassinato de TIME_WAIT, em dois sabores.              * Oh bem ... ninguém tem uma solução suficiente para isso              * bug de protocolo ainda.              * /             if (sysctl_tcp_rfc1337 == 0) { mate:                 inet_twsk_deschedule_put (tw);                 return TCP_TW_SUCCESS;             }         }

O padrão faz sentido: o RFC é Informativo, então você deve definir este botão (valor = 1) para obedecer a ele.

    
por 05.07.2017 / 19:16