Pourquoi Linux n'utilise-t-il pas la gamme de ports IANA Ephemeral?


30

Selon Wikipedia

L'Internet Assigned Numbers Authority (IANA) suggère la plage 49152 à 65535 pour les ports dynamiques ou privés. De nombreux noyaux Linux utilisent la plage de ports 32768 à 61000.

Même s'il semble y avoir un certain écart historique par rapport à la plage suggérée par l'IANA, il semble gênant que Windows Vista, Windows 7, Windows Server 2008, FreeBSD 4.6+ et bien d'autres aient tous convenu de cette plage et pourtant Linux se démarque toujours.

Cependant, en y regardant, voici:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768   61000

Pourquoi Linux n'a-t-il pas adopté la gamme standard?

Réponses:


21

Il fut un temps où l'IANA affectait uniquement les ports jusqu'à 1023. Voir RFC1700 . À une époque, c'était une norme. La plupart du temps, je n'ai aucun mal à trouver quand les choses changent dans le flux de RFC, mais pour la question de changer les ports de 1024 à 49152 de enregistrés en assignés, je suis venu court.

En ce qui concerne l'histoire de Linux, une question a été soulevée à propos de l'ip_local_port_range par défaut en 2007. À cette époque, il a été décidé d'utiliser la plage Linux que vous mentionnez, de peur que les numéros de port élevés ne causent des problèmes et le début de la plage à 49152 ne laisse trop peu numéros de port dans le pool. Voir cela et son fil. La pensée exprimée à l'époque était qu'à partir de 32768 était dans l'esprit des procédures de l'IANA, sinon pleinement conforme. En lisant ceci, je déduis que les développeurs ont supposé que la plupart des affectations se produiraient du bas de la plage et monteraient. Au moment d'écrire ces lignes, je compte un peu plus de 100 numéros de port attribués (sans compter les différents protocoles comme séparés) entre 32768 et 49152, ce qui a plutôt bien résisté au cours des cinq dernières années.

Je ne sais pas pourquoi la gamme a été jugée trop petite, mais je peux imaginer deux raisons:

  1. Les numéros de port sont randomisés pour contrecarrer certaines attaques. Plus il y a d'adresses dans le pool, plus cette défense peut fonctionner.
  2. Les serveurs à haute activité peuvent avoir des problèmes avec l'épuisement des numéros de port. Bien que les ports puissent être éphémères, leur utilisation n'est pas instantanée. En particulier, les sockets peuvent durer plusieurs minutes après la fermeture de TCP.

Ce billet de blog aborde le numéro 2 et suggère une réponse si vous souhaitez que vos systèmes Linux utilisent une gamme différente de ports locaux. (En utilisant /etc/sysctl.d pour définir une plage que vous aimez. Il existe également une entrée ip_local_reserved_ports qui peut être utile si un conflit particulier se produit. Elles correspondent à l'entrée / proc / sys que vous citez.)

En résumé. Les valeurs par défaut de Linux ne correspondent pas aux spécifications IANA actuelles, mais tout système Linux particulier peut, si son propriétaire le souhaite.


1
Selon la RFC 6056 , "Comme mentionné dans la section 2.1, les ports dynamiques se composent de la plage 49152-65535. Cependant, les algorithmes de sélection de port éphémère doivent utiliser toute la plage 1024-65535." - Il semble que la valeur de ip_local_port_rangene doit pas être utilisée de toute façon.
Evan Carroll


@evan RFC 6056 poursuit en disant que "les numéros de port qui peuvent être nécessaires pour fournir un service particulier sur l'hôte local NE DEVRAIENT PAS être inclus dans le pool de numéros de port disponibles pour la randomisation de port éphémère" et que "les administrateurs devraient identifier les services qui peuvent être offert par l'hôte local et DEVRAIT exclure uniquement les ports enregistrés correspondants ", mais ce n'est pas quelque chose que le système d'exploitation vous propose généralement de faire. Le seul mécanisme d'exclusion pratique consiste à relever la borne inférieure.
jmb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.