¿Por qué Linux no usa el rango de puertos efímeros de IANA?

30

De acuerdo con Wikipedia

La Autoridad de Números Asignados de Internet (IANA) sugiere el rango 49152 a 65535 para puertos dinámicos o privados. Muchos núcleos de Linux usan el rango de puertos 32768 a 61000.

Aunque parece haber una desviación histórica del rango sugerido por IANA, parece incómodo que Windows Vista, Windows 7, Windows Server 2008, FreeBSD 4.6+ y muchos otros hayan acordado este rango y, sin embargo, Linux aún se destaca.

Sin embargo, al mirarlo, he aquí:

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

¿Por qué Linux no ha adoptado el rango estándar?

Evan Carroll
fuente

Respuestas:

21

Hubo un momento en que IANA solo asignaba puertos hasta 1023. Consulte RFC1700 . En un momento esto era un estándar. La mayoría de las veces no tengo problemas para encontrar cuándo cambian las cosas en el flujo de RFC, pero por la cuestión de cambiar los puertos de 1024 a 49152 de registrados a asignados, me quedé corto.

En términos de la historia de Linux, surgió una pregunta sobre el rango predeterminado de ip_local_port_range en 2007. En ese momento, se decidió utilizar el rango de Linux que menciona por temor a que los números de puerto altos puedan causar problemas y comenzar el rango en 49152 podría dejar muy pocos números de puerto en el grupo. Ver esto y su hilo. El pensamiento expresado en ese momento era que a partir de 32768 estaba dentro del espíritu de los procedimientos de la IANA, si no totalmente conforme. Al leer esto, infiero que los desarrolladores asumieron que la mayoría de las tareas ocurrirían desde la parte inferior del rango y subirían. Al escribir esto cuento un poco más de 100 números de puerto asignados (sin contar diferentes protocolos como separados) entre 32768 y 49152, por lo que se ha mantenido bastante bien en los últimos cinco años.

No sé por qué el rango se consideró demasiado pequeño, pero puedo imaginar dos razones:

  1. Los números de puerto se asignan al azar para frustrar ciertos ataques. Cuantas más direcciones hay en el grupo, mejor puede funcionar esta defensa.
  2. Los servidores de alta actividad pueden tener problemas con el agotamiento del número de puerto. Si bien los puertos pueden ser efímeros, su uso no es instantáneo. En particular, los sockets pueden durar varios minutos después del cierre de TCP.

Esta publicación de blog toca el número 2 y sugiere una respuesta si desea que sus sistemas Linux utilicen un rango diferente de puertos locales. (Usando /etc/sysctl.d para definir un rango que le guste. También hay una entrada ip_local_reserved_ports que puede ser útil si llega un conflicto en particular. Estos coinciden con la entrada / proc / sys que cita).

En resumen. Los valores predeterminados de Linux no coinciden con las especificaciones actuales de IANA, pero cualquier sistema Linux en particular puede, si su propietario lo desea.

John S Gruber
fuente
1
De acuerdo con RFC 6056 , "Como se mencionó en la Sección 2.1, los puertos dinámicos consisten en el rango 49152-65535. Sin embargo, los algoritmos de selección de puertos efímeros deben usar el rango completo 1024-65535". - Parece que el valor de ip_local_port_rangeno debe usarse de todos modos.
Evan Carroll
1
Aquí está el hilo sobre Linux usa puertos cerca del techo de la IANA
Evan Carroll
@evan RFC 6056 continúa diciendo que "los números de puerto que pueden ser necesarios para proporcionar un servicio particular en el host local NO DEBEN incluirse en el conjunto de números de puerto disponibles para la aleatorización efímera de puertos" y que "los administradores deben identificar los servicios que pueden ser ofrecido por el host local y DEBERÁ excluir solo los puertos registrados correspondientes ", pero eso no es algo que el sistema operativo normalmente le permite hacer. El único mecanismo práctico de exclusión es elevar el límite inferior.
jmb