web-dev-qa-db-fra.com

Pourquoi net.ipv4.tcp_rfc1337 est-il activé par défaut?

Le paramètre TCP_RFC1337 semble avoir une solution pour l'assassinat d'attente de temps.

Le premier problème est que les anciennes données en double puissent être acceptées à tort dans les nouvelles connexions, ce qui entraîne la corruption des données envoyées.
[.____.
[.____] Le troisième et dernier problème est que les anciens paquets en double peuvent entrer des connexions nouvellement établies à tort et tuer la nouvelle connexion.

D'après ce que j'ai lu, pour résoudre les problèmes, ce que le réglage est ignorer les paquets RST (réinitialiser) pendant que la prise est dans son état d'attente de temps.

Alors, pourquoi ce paramètre n'est-il pas activé par défaut? Quels sont les inconvénients de l'utilisation de cela?

J'ai effectivement appris cette variable lorsque je faisais des recherches sur l'arrêt des attaques d'inondation syntonisées. Pensez-vous que ce réglage aide à les arrêter?

6
Nuno

Je suis d'accord avec le commentaire de Greg. RFC 1337 est une RFC informationnelle uniquement et ne partie de la norme TCP) pour s'assurer qu'il n'y a pas de changements inattendus dans les réseaux de production, il est logique de garder Cette fonctionnalité désactivée par défaut et laissez-la jusqu'au réseau Admins pour décider s'ils souhaitent lui permettre de tester.

Déposer des paquets RST pour les sockets dans le temps-wait ne serait pas apparaître avoir des conséquences négatives cependant, cependant, cela ne signifie pas non plus - peut-être un Cas d'arête impair qui n'a pas été pleinement exploré.

Fait intéressant, la Documentation du noya pour TCP_RFC1337 semble être incorrecte:

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

Si l'option est définie, nous nous conformons au RFC 1337 et déposons des paquets RST, empêchant ainsi l'assassinat d'attente du temps. Si l'option est non définie (par défaut), nous ne sommes pas conformes à la RFC 1337 sont sensibles à l'assassinat d'attente de temps.

7
Mark Riddell

J'ai trouvé le code source du noya et à moi, le doc est correct: défaut = 0: tuer

if (th->rst) {
    /* This is TIME_WAIT assassination, in two flavors.
     * Oh well... nobody has a sufficient solution to this
     * protocol bug yet.
     */
    if (sysctl_tcp_rfc1337 == 0) {
kill:
        inet_twsk_deschedule_put(tw);
        return TCP_TW_SUCCESS;
    }
}

La valeur par défaut a du sens: le RFC est informatif. Vous devez donc définir ce bouton (valeur = 1) pour y être conforme.

1
Massimo