Cel mai bun interval de numere de port TCP pentru aplicațiile interne [închis] (Programare, Rețea, Tomcat)

Juanal a intrebat.
a intrebat.

Lucrez într-un loc în care fiecare dintre aplicațiile noastre interne rulează pe o instanță Tomcat individuală și utilizează un anumit port TCP. Care ar fi cel mai bun interval de porturi IANA de utilizat pentru aceste aplicații, pentru a evita coliziunile de numere de port cu orice alt proces de pe server?

Pe baza http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml, , acestea sunt opțiunile, așa cum le văd eu în prezent:

  1. Porturi de sistem (0-1023): Nu vreau să folosesc niciunul dintre aceste porturi, deoarece serverul poate rula servicii pe porturi standard din acest interval.
  2. Porturi utilizator (1024-49151): Având în vedere că aplicațiile sunt interne, nu intenționez să solicit IANA să rezerve un număr pentru oricare dintre aplicațiile noastre. Cu toate acestea, aș dori să reduc probabilitatea ca același port să fie utilizat de un alt proces, de exemplu, Oracle Net Listener pe 1521.
  3. Porturi dinamice și/sau private (49152-65535): Acest interval este ideal pentru numere de porturi personalizate. Singura mea îngrijorare este dacă s-ar întâmpla acest lucru:

    a. Îmi configurez una dintre aplicații pentru a utiliza portul X
    b. Aplicația este oprită pentru câteva minute sau ore (în funcție de natura aplicației), lăsând portul nefolosit pentru o perioadă de timp,
    c. Sistemul de operare alocă portul numărul X unui alt proces, de exemplu, atunci când procesul respectiv acționează ca un client care necesită o conexiune TCP cu un alt server. Acest lucru reușește, având în vedere că se încadrează în intervalul dinamic, iar X este momentan neutilizat în ceea ce privește sistemul de operare, și
    d. Aplicația nu reușește să pornească deoarece portul X este deja utilizat.

Comentarii

  • Am răspuns la o întrebare similară aici stackoverflow.com/a/38141340/3333759, care vă poate fi de ajutor. –  > Por adrianwadey.
3 răspunsuri
paxdiablo

Nu văd de ce ți-ar păsa. În afară de regula de privilegiu „nu folosiți porturi sub 1024”, ar trebui să puteți utiliza orice port, deoarece clienții dvs. ar trebui să fie configurabili pentru a vorbi cu orice adresă IP și port!

Dacă nu sunt, atunci nu au fost făcute foarte bine. Întoarceți-vă și faceți-le cum trebuie 🙂

Cu alte cuvinte, rulați serverul la adresa IP X și portul Y apoi configurați clienții cu aceste informații. Apoi, dacă observați că dvs. trebuie să executați un alt server pe X care intră în conflict cu serverul dvs. Y, , trebuie doar să reconfigurați serverul și clienții pentru a utiliza un nou port. Acest lucru este valabil indiferent dacă clienții dvs. sunt coduri sau persoane care tastează URL-uri într-un browser.

Eu, ca și dumneavoastră, nu aș încerca să obțin numere atribuite de IANA, deoarece acest lucru ar trebui să fie pentru servicii atât de comune încât multe dintre ele, multe medii le vor folosi (gândiți-vă la SSH, FTP sau TELNET).

Rețeaua dvs. rețea și, dacă doriți ca serverele dvs. să fie conectate la portul 1234 (sau chiar la porturile TELNET sau FTP), este treaba dvs. De exemplu, în zona noastră de dezvoltare a mainframe-urilor, portul 23 este utilizat pentru serverul terminal 3270, care este o bestie foarte diferită de telnet. Dacă doriți să faceți telnet la partea UNIX a mainframe-ului, utilizați portul 1023. Acest lucru este uneori enervant dacă folosiți clienți telnet fără a specifica portul 1023, deoarece vă conectează la un server care nu știe nimic despre protocolul telnet – trebuie să ieșim din clientul telnet și să facem acest lucru în mod corespunzător:

telnet big_honking_mainframe_box.com 1023

Dacă într-adevăr nu puteți să faceți partea client configurabilă, alegeți unul din al doilea interval, cum ar fi 48042, și folosiți-l pur și simplu, declarând că orice alt software de pe acele cutii (inclusiv orice software adăugat în viitor) trebuie să nu vă stea în cale.

Comentarii

  • Vă mulțumim. După ce am citit răspunsul dumneavoastră și m-am mai gândit puțin, am decis să aleg opțiunea de a folosi un port din al doilea interval. Am ales 46xxx, deoarece IANA are în prezent foarte puține porturi alocate în acest subgrup. link. Nu am ales al treilea interval din cauza scenariului teoretic posibil (deși foarte puțin probabil) pe care l-am descris. –  > Por Juanal.
David Vereb

Am decis să descarc numerele de porturi alocate de la IANA, să filtrez porturile utilizate și să sortez fiecare interval „neatribuit” în ordinea descrescătoare a celor mai multe porturi disponibile. Acest lucru nu a funcționat, deoarece fișierul csv are intervale marcate ca „Unassigned” care se suprapun peste alte rezervări de numere de port. Am extins manual intervalele de alocate numere de port, rămânând cu o listă a tuturor numerelor de port alocate. Apoi am sortat această listă și am generat propria mea listă de intervale neatribuite.

Deoarece această pagină stackoverflow.com s-a clasat foarte sus în căutarea mea despre acest subiect, m-am gândit să postez aici cele mai mari intervale pentru oricine altcineva care este interesat. Acestea sunt atât pentru TCP, cât și pentru UDP, în cazul în care numărul de porturi din interval este de cel puțin 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

Sursa (prin intermediul butonului de descărcare CSV):

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

Comentarii

  • „Este vorba atât de tcp cât și de udp”, adică – pot deschide toate aceste porturi, să zicem 44100-44199 pare ușor de reținut, deoarece eșantionarea audio 44100 pe ambele udp și tcp în siguranță? Atât udp 44100-44199 cât și tcp 44100-44199 sunt libere? –  > Por Lapsio.
  • Din păcate, nu. Au apărut rezervări suplimentare de când am postat. Acum există un port în raza dvs. de acțiune. „z-wave-tunnel 44123 tcp Z-Wave Secure Tunnel” –  > Por David Vereb.
  • ei bine, din fericire, nu cred că voi instala sisteme de securitate Z-Wave smart home pe serverul de dezvoltare lol. Domeniile de porturi folosite anterior acopereau o mulțime de lucruri importante, inclusiv unele instrumente VMWare, așa că a fost mult mai rău. Dacă aceasta este singura coliziune pentru moment, atunci sunt de acord cu asta, mulțumesc 🙂 –  > Por Lapsio.
  • Așa că am decis să rulez din nou lista pentru a veni cu un nou set de intervale bazat pe date mai noi. Se pare că intervalele „Unassigned” nu par să fie numerotate corect. De exemplu, 43124-44320 este marcat ca neatribuit, dar 44123, care se află în acest interval, este listat chiar deasupra lui ca fiind atribuit. Se pare că va trebui să introduc manual intervalele neatribuite, deoarece se pare că sunt calculate incorect. –  > Por David Vereb.
Ben Hyde

Răspuns scurt: utilizați un port de utilizator neatribuit

Răspunsul de la Over achiever – Selectați și implementați o soluție de descoperire a resurselor. Solicitați serverului să selecteze un port privat în mod dinamic. Puneți clienții să utilizeze descoperirea resurselor.

Riscul ca un server să eșueze din cauză că portul pe care vrea să asculte nu este disponibil este real; cel puțin mie mi s-a întâmplat. Un alt serviciu sau un client ar putea ajunge primul.

Puteți reduce aproape în totalitate riscul din partea unui client evitând porturile private, care sunt distribuite în mod dinamic clienților.

Riscul că din partea unui alt serviciu este minim dacă folosiți un port de utilizator. Riscul unui port neatribuit este doar acela că un alt serviciu se întâmplă să fie configurat (sau să folosească în mod diamic) acel port. Dar cel puțin asta este probabil sub controlul dumneavoastră.

Documentul uriaș cu toate asignările de porturi, inclusiv porturile de utilizator, este aici: http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.txt căutați simbolul Unassigned (neatribuit).

Comentarii

  • Nu este mai bine să folosiți un port atribuit pentru un protocol care nu va fi folosit niciodată în rețeaua dumneavoastră? Un port neatribuit ar putea deveni atribuit în orice moment și să vă creeze probleme. –  > Por adrianwadey.