Por que o Linux não usa o intervalo de portas efêmero da IANA?

30

De acordo com a Wikipedia

A Internet Assigned Numbers Authority (IANA) sugere o intervalo 49152 a 65535 para portas dinâmicas ou privadas. Muitos kernels do Linux usam o intervalo de portas 32768 a 61000.

Embora pareça haver algum desvio histórico do intervalo sugerido pela IANA, parece estranho que o Windows Vista, Windows 7, Windows Server 2008, FreeBSD 4.6+ e muitos outros tenham concordado com esse intervalo, e o Linux ainda se destaca.

Olhando para ele, porém, eis que:

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

Por que o Linux não adotou a faixa padrão?

Evan Carroll
fonte

Respostas:

21

Houve um tempo em que a IANA atribuiu apenas portas até 1023. Consulte RFC1700 . Ao mesmo tempo, isso era um padrão. Na maioria das vezes, não tenho problemas para encontrar quando as coisas mudam no fluxo de RFCs, mas para a questão de alterar as portas de 1024 para 49152 de registradas para atribuídas, fiquei aquém.

Em termos de histórico do Linux, houve uma pergunta sobre o ip_local_port_range padrão em 2007. Na época, foi decidido usar o intervalo do Linux mencionado por receio de que números de portas altos pudessem causar problemas e iniciar o intervalo em 49152 poderia deixar muito poucos. números de porta no pool. Veja isso e seu tópico. O pensamento expresso na época era que, a partir de 32768, estava dentro do espírito dos procedimentos da IANA, se não totalmente compatíveis. Ao ler isso, deduzo que os desenvolvedores assumiram que a maioria das atribuições ocorreria da parte inferior do intervalo e subia. No momento em que escrevo, conto um pouco mais de 100 números de portas atribuídos (sem contar diferentes protocolos separados) entre 32768 e 49152, de modo que isso se manteve muito bem nos últimos cinco anos.

Não sei por que o intervalo foi considerado pequeno demais, mas posso imaginar duas razões:

  1. Os números de porta são randomizados para impedir certos ataques. Quanto mais endereços no pool, melhor essa defesa pode funcionar.
  2. Servidores de alta atividade podem ter problemas com a exaustão do número da porta. Embora as portas possam ser efêmeras, seu uso não é instantâneo. Em particular, os soquetes podem durar vários minutos após o fechamento do TCP.

Esta postagem do blog aborda o número 2 e sugere uma resposta, caso você deseje que seus sistemas Linux usem um intervalo diferente de portas locais. (Usando /etc/sysctl.d para definir um intervalo que você gosta. Há também uma entrada ip_local_reserved_ports que pode ser útil se ocorrer um conflito em particular. Eles correspondem à entrada / proc / sys que você cita.)

Em suma. Os padrões do Linux não correspondem às especificações atuais da IANA, mas qualquer sistema Linux específico pode, se o proprietário desejar.

John S Gruber
fonte
11
De acordo com a RFC 6056 , "Como mencionado na Seção 2.1, as portas dinâmicas consistem no intervalo 49152-65535. No entanto, os algoritmos de seleção de portas efêmeras devem usar o intervalo inteiro 1024-65535". - Parece que o valor de ip_local_port_rangenão deve ser usado de qualquer maneira.
Evan Carroll
11
Aqui é o fio sobre Linux utiliza as portas perto do teto IANA
Evan Carroll
@evan A RFC 6056 continua dizendo que "os números de porta que podem ser necessários para fornecer um serviço específico no host local NÃO DEVEM ser incluídos no pool de números de portas disponíveis para a randomização efêmera de portas" e que "os administradores devem identificar serviços que possam ser oferecido pelo host local e DEVE excluir apenas as portas registradas correspondentes ", mas isso não é algo que o sistema operacional normalmente fornece para você fazer. O único mecanismo de exclusão prática é aumentar o limite inferior.
jmb