Melhor intervalo de número de porta TCP para aplicativos internos [fechado]

94

Eu trabalho em um local onde cada um de nossos aplicativos internos é executado em uma instância individual do Tomcat e usa uma porta TCP específica. Qual seria o melhor intervalo de portas IANA para usar para esses aplicativos, a fim de evitar colisões de números de porta com qualquer outro processo no servidor?

Com base em http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , estas são as opções como as vejo atualmente:

  1. Portas do sistema (0-1023): Não quero usar nenhuma dessas portas porque o servidor pode estar executando serviços em portas padrão neste intervalo
  2. Portas de usuário (1024-49151): Como os aplicativos são internos, não pretendo solicitar à IANA que reserve um número para nenhum de nossos aplicativos. No entanto, gostaria de reduzir a probabilidade de a mesma porta ser usada por outro processo, por exemplo, Oracle Net Listener em 1521.
  3. Portas dinâmicas e / ou privadas (49152-65535): este intervalo é ideal para números de porta personalizados. Minha única preocupação é se isso acontecesse:

    uma. Eu configuro um dos meus aplicativos para usar a porta X
    b. O aplicativo fica inativo por alguns minutos ou horas (dependendo da natureza do aplicativo), deixando a porta sem uso por um tempo,
    c. O sistema operacional aloca o número da porta X para outro processo, por exemplo, quando esse processo atua como um cliente exigindo uma conexão TCP com outro servidor. Isso é bem-sucedido, visto que está dentro da faixa dinâmica e X não é usado atualmente no que diz respeito ao sistema operacional, e
    d. O aplicativo falha ao iniciar porque a porta X já está em uso

Juanal
fonte
2
Eu respondi a uma pergunta semelhante aqui stackoverflow.com/a/38141340/3333759 que você pode achar útil.
adrianwadey,

Respostas:

32

Não vejo por que você se importaria. Além da regra de privilégio "não use portas abaixo de 1024", você deve ser capaz de usar qualquer porta porque seus clientes devem ser configuráveis ​​para se comunicarem com qualquer endereço IP e porta!

Se não forem, então não foram muito bem feitos. Volte e faça-os corretamente :-)

Em outras palavras, execute o servidor no endereço IP Xe na porta Ye configure os clientes com essas informações. Então, se você achar que deve executar um servidor diferente em Xque está em conflito com o seu Y, apenas reconfigure o servidor e os clientes para usar uma nova porta. Isso é verdade quer seus clientes sejam códigos ou pessoas digitando URLs em um navegador.

Eu, como você, não tentaria obter números atribuídos pela IANA, pois isso deve ser para serviços tão comuns que muitos, muitos ambientes os usarão (pense em SSH ou FTP ou TELNET).

Sua rede é sua rede e, se você quiser seus servidores na porta 1234 (ou mesmo nas portas TELNET ou FTP), esse é o seu negócio. Caso em questão, em nossa área de desenvolvimento de mainframe, a porta 23 é usada para o servidor de terminal 3270, que é uma besta muito diferente do telnet. Se você quiser fazer telnet para o lado UNIX do mainframe, use a porta 1023. Às vezes, isso é irritante se você usar clientes telnet sem especificar a porta 1023, pois ela conecta você a um servidor que nada sabe sobre o protocolo telnet - temos que quebrar fora do cliente telnet e faça-o corretamente:

telnet big_honking_mainframe_box.com 1023

Se você realmente não pode tornar o lado do cliente configurável, escolha um na segunda faixa, como 48042, e apenas use-o, declarando que qualquer outro software nessas caixas (incluindo qualquer adicionado no futuro) deve ficar fora do seu caminho .

paxdiablo
fonte
Obrigado. Depois de ler sua resposta e pensar um pouco mais, decidi usar a opção de usar uma porta dentro da segunda faixa. Escolhemos 46xxx porque IANA atualmente tem muito poucas portas atribuídas neste link de subfaixa . Não escolhemos a terceira faixa por causa do cenário teoricamente possível (embora altamente improvável) que descrevi.
Juanal
116

Decidi baixar os números de porta atribuídos da IANA, filtrar as portas usadas e classificar cada intervalo "Não atribuído" na ordem decrescente da maioria das portas disponíveis. Isso não funcionou, pois o arquivo csv tem intervalos marcados como "Não atribuídos" que se sobrepõem a outras reservas de número de porta. Eu expandi manualmente os intervalos de números de porta atribuídos , deixando-me com uma lista de todos os números de porta atribuídos. Em seguida, classifiquei essa lista e gerei minha própria lista de intervalos não atribuídos.

Uma vez que esta página stackoverflow.com teve uma classificação muito alta em minha pesquisa sobre o tópico, decidi postar os maiores intervalos aqui para qualquer pessoa interessada. Eles são para TCP e UDP, em que o número de portas no intervalo é de pelo menos 500.

Total   Start   End
829     29170   29998
815     38866   39680
710     41798   42507
681     43442   44122
661     46337   46997
643     35358   36000
609     36866   37474
596     38204   38799
592     33657   34248
571     30261   30831
563     41231   41793
542     21011   21552
528     28590   29117
521     14415   14935
510     26490   26999

Fonte (por meio do botão de download CSV):

http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

David Vereb
fonte
"É tcp e udp", como em - posso abrir todas essas portas, digamos, 44100-44199parece fácil de lembrar porque a amostragem de áudio 44100 em udp e tcp com segurança? Tanto o udp 44100-44199 quanto o tcp 44100-44199 são gratuitos?
Lapsio
1
Infelizmente não. Houve reservas adicionais desde que eu postei. Existe uma porta ao seu alcance agora. "Z-wave-tunnel 44123 tcp Z-Wave Secure Tunnel"
David Vereb
bem, felizmente, não acho que vou instalar os sistemas de segurança residencial inteligente Z-Wave no servidor de desenvolvimento lol. Os intervalos de portas usados ​​anteriormente cobriam muitas coisas importantes, incluindo algumas ferramentas VMWare, por isso era muito pior. Se essa é a única colisão por agora, então estou bem com isso, obrigado :)
Lapsio
3
Portanto, decidi executar a lista novamente para apresentar um novo conjunto de intervalos com base em dados mais recentes. Acontece que os intervalos "Não atribuídos" não parecem estar numerados corretamente. Por exemplo, 43124-44320 está marcado como não atribuído, mas 44123, que está nesse intervalo, está listado logo acima dele como sendo atribuído. Parece que terei que criar manualmente os intervalos não atribuídos, pois eles parecem estar calculados incorretamente.
David Vereb
6

Resposta curta: use uma porta de usuário não atribuída

Resposta de grande sucesso - Selecione e implante uma solução de descoberta de recursos. Faça com que o servidor selecione uma porta privada dinamicamente. Faça com que os clientes usem a descoberta de recursos.

O risco de que um servidor falhe porque a porta que deseja escutar não está disponível é real; pelo menos isso aconteceu comigo. Outro serviço ou cliente pode chegar primeiro.

Você pode reduzir quase totalmente o risco de um cliente evitando as portas privadas, que são entregues dinamicamente aos clientes.

O risco de outro serviço ser mínimo se você usar uma porta de usuário. O risco de uma porta não atribuída é apenas que outro serviço esteja configurado (ou dinamicamente) use essa porta. Mas pelo menos isso provavelmente está sob seu controle.

O enorme documento com todas as atribuições de porta, incluindo portas de usuário, está aqui: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt procure o token não atribuído .

Ben Hyde
fonte
4
Não é melhor usar uma porta atribuída para um protocolo que nunca será usado em sua rede? Uma porta não atribuída pode ser atribuída a qualquer momento e causar problemas.
adrianwadey 01 de