web-dev-qa-db-fra.com

Meilleur TCP plage de numéros de port pour les applications internes

Je travaille dans un endroit où chacune de nos applications internes s'exécute sur une instance individuelle de Tomcat et utilise un port spécifique TCP. Quelle serait la meilleure plage de ports IANA à utiliser pour ces applications afin d'éviter les conflits de numéros de port avec tout autre processus sur le serveur?

Basé sur http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml , voici les options telles que je les vois actuellement:

  1. Ports système (0-1023): je ne souhaite utiliser aucun de ces ports car le serveur peut exécuter des services sur des ports standard de cette plage.
  2. Ports utilisateur (1024-49151): Étant donné que les applications sont internes, je n'ai pas l'intention de demander à l'IANA de réserver un numéro pour l'une de nos applications. Toutefois, j'aimerais réduire le risque que le même port soit utilisé par un autre processus, par exemple Oracle Net Listener sous 1521.
  3. Ports dynamiques et/ou privés (49152-65535): cette gamme est idéale pour les numéros de port personnalisés. Ma seule préoccupation est si cela devait arriver:

    une. Je configure l'une de mes applications pour utiliser le port X
    b. L'application est arrêtée pendant quelques minutes ou quelques heures (selon la nature de l'application), laissant le port inutilisé pendant un certain temps,
    c. Le système d'exploitation attribue le numéro de port X à un autre processus, par exemple lorsqu'il agit en tant que client nécessitant une connexion TCP à un autre serveur. Cela réussit étant donné qu'il se situe dans la plage dynamique et que X est actuellement inutilisé en ce qui concerne le système d'exploitation.
    ré. L'application ne parvient pas à démarrer car le port X est déjà utilisé

81
Juanal

Je ne vois pas pourquoi cela vous intéresserait. Outre la règle de privilège "n'utilisez pas les ports inférieurs à 1024", vous devriez pouvoir utiliser n'importe quel port car vos clients devraient être configurables pour communiquer avec n'importe quelle adresse IP ou port!

S'ils ne le sont pas, ils ne sont pas très bien faits. Retournez et faites les correctement :-)

En d’autres termes, exécutez le serveur à l’adresse IP X et au port Y, puis configurez les clients avec ces informations. Ensuite, si vous vous trouvez devez exécuter un autre serveur sur X en conflit avec votre Y, configurez votre serveur et vos clients pour utiliser un nouveau port. Cela est vrai que vos clients utilisent du code ou que des personnes tapent des URL dans un navigateur.

Comme vous, je n'essaierais pas d'obtenir des numéros attribués par l'IANA, car ils sont supposés être destinés à des services si courants que de nombreux environnements les utiliseront. (pensez SSH ou FTP ou TELNET).

Votre réseau est votre réseau et, si vous voulez que vos serveurs se trouvent sur le port 1234 (ou même les ports TELNET ou FTP), votre entreprise est la votre. À titre d’exemple, dans notre zone de développement mainframe, le port 23 est utilisé pour le serveur de terminaux 3270, qui est une bête très différente de Telnet. Si vous souhaitez établir une connexion telnet avec le côté UNIX de l’ordinateur central, vous utilisez le port 1023. C’est parfois gênant si vous utilisez des clients telnet sans spécifier le port 1023 car il vous connecte à un serveur ne connaissant rien du protocole telnet - il faut rompre sur le client telnet et faites-le correctement:

telnet big_honking_mainframe_box.com 1023

Si vous ne pouvez vraiment pas rendre le côté client configurable, choisissez-en un dans la deuxième plage, comme 48042, et utilisez-le, déclarant que tout autre logiciel sur ces cases (y compris celles ajoutées ultérieurement) doit rester à l'écart de votre chemin.

26
paxdiablo

J'ai décidé de télécharger les numéros de port attribués depuis l'IANA, de filtrer les ports utilisés et de trier chaque plage "Non attribué" dans l'ordre de la plupart des ports disponibles, par ordre décroissant. Cela n'a pas fonctionné, car le fichier csv comporte des plages marquées "Non attribuées" qui chevauchent d'autres réservations de numéros de port. J'ai développé manuellement les plages de assigné numéros de port, me laissant ainsi une liste de tous les numéros de port attribués. J'ai ensuite trié cette liste et généré ma propre liste de plages non attribuées.

Étant donné que cette page stackoverflow.com était très bien classée dans mes recherches sur le sujet, je me suis dit que je publierais ici les plus grandes gammes pour ceux qui sont intéressés. Ce sont pour à la fois TCP et UDP où le nombre de ports dans la plage est au moins 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

Source (via le bouton de téléchargement CSV):

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

102
David Vereb

Réponse courte: utilisez un port utilisateur non attribué

Une réponse hors du commun - Sélectionnez et déployez une solution de découverte de ressources. Demandez au serveur de sélectionner un port privé de manière dynamique. Demandez aux clients d'utiliser la découverte de ressources.

Le risque qu'un serveur échoue parce que le port sur lequel il veut écouter n'est pas disponible est réel; au moins c'est arrivé à moi. Un autre service ou un client peut y arriver en premier.

Vous pouvez presque totalement réduire le risque d'un client en évitant les ports privés, qui sont distribués dynamiquement aux clients.

Le risque provenant d'un autre service est minime si vous utilisez un port utilisateur. Le risque d'un port non affecté est uniquement qu'un autre service soit configuré (ou de manière dynamique) utilise ce port. Mais au moins, c'est probablement sous votre contrôle.

L'énorme doc avec toutes les assignations de ports, y compris les ports utilisateur, est ici: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt recherchez le jeton Non attribué.

4
Ben Hyde