Meilleure plage de numéros de port TCP pour les applications internes [fermé]

95

Je travaille dans un endroit où chacune de nos applications internes s'exécute sur une instance Tomcat individuelle et utilise un port TCP spécifique. Quelle serait la meilleure plage de ports IANA à utiliser pour ces applications afin d'éviter les collisions 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 les 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. Cependant, j'aimerais réduire la probabilité que le même port soit utilisé par un autre processus, par exemple, Oracle Net Listener sur 1521.
  3. Ports dynamiques et / ou privés (49152-65535): cette plage est idéale pour les numéros de port personnalisés. Ma seule préoccupation est que cela se produise:

    une. Je configure une de mes applications pour utiliser le port X
    b. L'application est en panne pendant quelques minutes ou heures (selon la nature de l'application), laissant le port inutilisé pendant un moment,
    c. Le système d'exploitation attribue le numéro de port X à un autre processus, par exemple, lorsque ce processus agit comme un 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, et
    d. L'application ne démarre pas car le port X est déjà utilisé

Juanal
la source
2
J'ai répondu à une question similaire ici stackoverflow.com/a/38141340/3333759 que vous trouverez peut-être utile.
adrianwadey

Réponses:

34

Je ne vois pas pourquoi tu t'en soucierais. Hormis 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 parler à n'importe quelle adresse IP et port!

Si ce n'est pas le cas, cela n'a pas été très bien fait. Revenez en arrière et faites-les correctement :-)

En d'autres termes, exécutez le serveur à l'adresse IP Xet au port, Ypuis configurez les clients avec ces informations. Ensuite, si vous constatez que vous devez exécuter un serveur différent sur Xlequel est en conflit avec votre Y, reconfigurez simplement votre serveur et vos clients pour utiliser un nouveau port. Cela est vrai que vos clients soient 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 puisque cela est censé être pour des services si courants que de très nombreux environnements les utiliseront (pensez à SSH, FTP ou TELNET).

Votre réseau est votre réseau et, si vous voulez que vos serveurs soient sur le port 1234 (ou même les ports TELNET ou FTP d'ailleurs), c'est votre affaire. Par 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 voulez telnet du côté UNIX du mainframe, vous utilisez le port 1023. C'est parfois ennuyeux si vous utilisez des clients telnet sans spécifier le port 1023 car il vous connecte à un serveur qui ne sait rien du protocole telnet - nous devons interrompre hors du 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 simplement, en déclarant que tout autre logiciel sur ces boîtes (y compris tout logiciel ajouté à l'avenir) doit rester hors de votre chemin .

paxdiablo
la source
Merci. Après avoir lu votre réponse et y avoir réfléchi un peu plus, j'ai décidé d'utiliser l'option d'utiliser un port dans la deuxième plage. Nous avons choisi 46xxx car l'IANA a actuellement très peu de ports attribués dans ce lien de sous-plage . Nous n'avons pas choisi la troisième plage en raison du scénario théoriquement possible (bien que hautement improbable) que j'ai décrit.
Juanal
118

J'ai décidé de télécharger les numéros de port attribués à partir de l'IANA, de filtrer les ports utilisés et de trier chaque plage «Non attribué» dans l'ordre de la plupart des ports disponibles, en ordre décroissant. Cela n'a pas fonctionné, car le fichier csv a des plages marquées comme «non attribuées» qui chevauchent d'autres réservations de numéro de port. J'ai étendu manuellement les plages de numéros de port attribués , me laissant avec 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 s'est classée très haut dans ma recherche sur le sujet, j'ai pensé que je publierais les plus grandes gammes ici pour toute personne intéressée. Celles-ci concernent à la fois TCP et UDP où le nombre de ports de la plage est d'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

David Vereb
la source
"C'est à la fois tcp et udp" comme dans - je peux ouvrir tous ces ports disons 44100-44199semble facile à retenir parce que l'échantillonnage audio 44100 sur udp et tcp en toute sécurité? Les protocoles udp 44100-44199 et tcp 44100-44199 sont gratuits?
Lapsio le
1
Malheureusement non. Il y a eu des réservations supplémentaires depuis que j'ai posté. Il y a un port dans votre gamme maintenant. "Tunnel z-wave-tunnel 44123 tcp Z-Wave Secure Tunnel"
David Vereb
Heureusement, je ne pense pas que je vais installer les systèmes de sécurité pour la maison intelligente Z-Wave sur le serveur de développement lol. Les gammes de ports précédemment utilisées couvraient beaucoup de choses importantes, y compris certains outils VMWare, donc c'était bien pire. Si c'est la seule collision pour le moment, je suis cool avec ça merci :)
Lapsio
3
J'ai donc décidé de réexécuter la liste pour créer un nouvel ensemble de plages basées sur des données plus récentes. Il s'avère que les plages «non attribuées» ne semblent pas numérotées correctement. Par exemple, 43124-44320 est marqué comme non attribué, mais 44123, qui se trouve dans cette plage, est répertorié juste au-dessus de lui comme étant attribué. Il semble que je devrai trouver manuellement les plages non attribuées car elles semblent être mal calculées.
David Vereb
6

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

Sur la réponse du réalisateur - 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 ça m'est arrivé. Un autre service ou un client pourrait 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 d'un autre service est minime si vous utilisez un port utilisateur. Le risque d'un port non attribué est uniquement qu'un autre service soit configuré (ou dyamiquement) utilise ce port. Mais au moins, c'est probablement sous votre contrôle.

L'énorme doc avec toutes les attributions de port, 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é .

Ben Hyde
la source
4
N'est-il pas préférable d'utiliser un port attribué pour un protocole qui ne sera jamais utilisé sur votre réseau? Un port non attribué peut être attribué à tout moment et vous poser des problèmes.
adrianwadey