Najlepszy zakres numerów portów TCP dla aplikacji wewnętrznych [zamknięty]

97

Pracuję w miejscu, w którym każda z naszych aplikacji wewnętrznych działa na indywidualnej instancji Tomcat i korzysta z określonego portu TCP. Jaki byłby najlepszy zakres portów IANA do wykorzystania w tych aplikacjach, aby uniknąć kolizji numerów portów z jakimkolwiek innym procesem na serwerze?

Na podstawie http://www.iana.org/ assignments/service-names-port-numbers/service-names- port- numbers.xml są to opcje, które obecnie widzę:

  1. Porty systemowe (0-1023): nie chcę używać żadnego z tych portów, ponieważ na serwerze mogą być uruchomione usługi na standardowych portach z tego zakresu
  2. Porty użytkowników (1024-49151): Biorąc pod uwagę, że aplikacje są wewnętrzne, nie zamierzam prosić IANA o zarezerwowanie numeru dla żadnej z naszych aplikacji. Chciałbym jednak zmniejszyć prawdopodobieństwo użycia tego samego portu przez inny proces, np. Oracle Net Listener na 1521.
  3. Porty dynamiczne i / lub prywatne (49152-65535): ten zakres jest idealny dla niestandardowych numerów portów. Martwię się tylko, jeśli tak się stanie:

    za. Skonfigurowałem jedną z moich aplikacji do korzystania z portu X
    b. Aplikacja nie działa przez kilka minut lub godzin (w zależności od charakteru aplikacji), pozostawiając port nieużywany przez chwilę,
    c. System operacyjny przydziela numer portu X do innego procesu, na przykład, gdy ten proces działa jako klient wymagający połączenia TCP z innym serwerem. To się udaje, biorąc pod uwagę, że mieści się w zakresie dynamicznym, a X jest obecnie nieużywany, jeśli chodzi o system operacyjny, oraz
    d. Aplikacja nie uruchamia się, ponieważ port X jest już używany

Juanal
źródło
2
Odpowiedziałem na podobne pytanie tutaj stackoverflow.com/a/38141340/3333759, które może okazać się pomocne.
adrianwadey

Odpowiedzi:

35

Nie rozumiem, dlaczego miałbyś się przejmować. Poza regułą przywilejów „nie używaj portów poniżej 1024”, powinieneś móc używać dowolnego portu, ponieważ twoi klienci powinni mieć możliwość komunikacji z dowolnym adresem IP i portem!

Jeśli nie, to nie zostały zrobione zbyt dobrze. Wróć i zrób to poprawnie :-)

Innymi słowy, uruchom serwer pod adresem IP Xi portem, Ya następnie skonfiguruj klientów z tymi informacjami. Następnie, jeśli okaże się, że musisz uruchomić inny serwer, na Xktórym występuje konflikt z Twoim Y, po prostu ponownie skonfiguruj serwer i klientów, aby używały nowego portu. Dzieje się tak niezależnie od tego, czy Twoi klienci są kodami, czy ludzie wpisują adresy URL w przeglądarce.

Podobnie jak Ty, nie próbowałbym uzyskać numerów przypisanych przez IANA, ponieważ ma to dotyczyć usług tak powszechnych, że będzie ich używać wiele, wiele środowisk (pomyśl o SSH, FTP lub TELNET).

Twoja sieć to Twoja sieć i jeśli chcesz, aby serwery były na porcie 1234 (lub nawet na portach TELNET lub FTP), to Twoja sprawa. Przykładowo, w naszym obszarze rozwoju komputerów mainframe port 23 jest używany dla serwera terminali 3270, który jest zupełnie inną bestią niż telnet. Jeśli chcesz połączyć się telnetem po stronie systemu mainframe z systemem UNIX, używasz portu 1023. Jest to czasami denerwujące, jeśli używasz klientów telnet bez określania portu 1023, ponieważ łączy cię on z serwerem, który nic nie wie o protokole telnet - musimy przerwać z klienta telnet i zrób to poprawnie:

telnet big_honking_mainframe_box.com 1023

Jeśli naprawdę nie możesz skonfigurować po stronie klienta, wybierz jeden z drugiego zakresu, na przykład 48042, i po prostu go użyj, deklarując, że jakiekolwiek inne oprogramowanie na tych komputerach (w tym każde dodane w przyszłości) musi trzymać się z daleka .

paxdiablo
źródło
Dzięki. Po przeczytaniu Twojej odpowiedzi i zastanowieniu się nad nią zdecydowałem się na opcję wykorzystania portu z drugiego zakresu. Wybraliśmy 46xxx, ponieważ IANA ma obecnie bardzo mało portów przypisanych do tego łącza podzakresu . Nie wybraliśmy trzeciego zakresu ze względu na teoretycznie możliwy (choć mało prawdopodobny) scenariusz, który opisałem.
Juanal
119

Zdecydowałem się pobrać przypisane numery portów z IANA, odfiltrować używane porty i posortować każdy zakres „Nieprzypisanych” w kolejności malejącej większości dostępnych portów. To nie zadziałało, ponieważ plik csv zawiera zakresy oznaczone jako „Nieprzypisane”, które nakładają się na inne rezerwacje numerów portów. Ręcznie rozszerzyłem zakresy przypisanych numerów portów, pozostawiając listę wszystkich przypisanych numerów portów. Następnie posortowałem tę listę i wygenerowałem własną listę nieprzypisanych zakresów.

Ponieważ ta strona stackoverflow.com zajęła bardzo wysokie miejsce w moich poszukiwaniach na ten temat, pomyślałem, że opublikuję tutaj największe zakresy dla każdego, kto jest zainteresowany. Dotyczy to zarówno protokołu TCP, jak i UDP, gdzie liczba portów w zakresie wynosi co najmniej 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

Źródło (za pomocą przycisku pobierania CSV):

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

David Vereb
źródło
„To zarówno tcp, jak i udp”, jak w - mogę otworzyć wszystkie te porty, powiedzmy, 44100-44199że wygląda to na łatwe do zapamiętania, ponieważ próbkowanie dźwięku 44100 zarówno na udp, jak i tcp jest bezpieczne? Zarówno udp 44100-44199, jak i tcp 44100-44199 są bezpłatne?
Lapsio
1
Niestety nie. Odkąd wysłałem, pojawiły się dodatkowe zastrzeżenia. W twoim zasięgu jest teraz port. „Tunel z-wave 44123 tcp Bezpieczny tunel Z-Wave”
David Vereb
na szczęście nie sądzę, żebym zainstalował inteligentne systemy bezpieczeństwa domu Z-Wave na serwerze programistycznym lol. Wcześniej używane zakresy portów obejmowały wiele ważnych rzeczy, w tym niektóre narzędzia VMWare, więc było znacznie gorzej. Jeśli to na razie jedyna kolizja, to nie
przeszkadza
3
Postanowiłem więc ponownie uruchomić listę, aby wymyślić nowy zestaw zakresów na podstawie nowszych danych. Okazuje się, że zakresy „Nieprzypisane” nie wydają się być poprawnie numerowane. Na przykład 43124-44320 jest oznaczony jako nieprzypisany, ale 44123, który jest w tym zakresie, jest wymieniony tuż nad nim jako przypisany. Wygląda na to, że będę musiał ręcznie wymyślić nieprzypisane zakresy, ponieważ wydają się one niepoprawnie obliczone.
David Vereb,
6

Krótka odpowiedź: użyj nieprzypisanego portu użytkownika

Ponad odpowiedź zdobywcy - wybierz i wdróż rozwiązanie do wykrywania zasobów. Niech serwer dynamicznie wybiera port prywatny. Niech klienci skorzystają z wykrywania zasobów.

Ryzyko, że serwer zawiedzie, ponieważ port, na którym chce nasłuchiwać, jest niedostępny, jest realne; przynajmniej mi się to przytrafiło. Inna usługa lub klient może się tam dostać pierwszy.

Możesz prawie całkowicie zmniejszyć ryzyko ze strony klienta, unikając portów prywatnych, które są dynamicznie przekazywane klientom.

Ryzyko związane z inną usługą jest minimalne, jeśli używasz portu użytkownika. Ryzyko związane z nieprzypisanym portem polega tylko na tym, że inna usługa zostanie skonfigurowana (lub dynamicznie) korzysta z tego portu. Ale przynajmniej jest to prawdopodobnie pod twoją kontrolą.

Ogromny dokument zawierający wszystkie przypisania portów, w tym porty użytkowników, znajduje się tutaj: http://www.iana.org/ assignments/service-names-port-numbers/service-names-port-numbers.txt poszukaj tokena Unassigned .

Ben Hyde
źródło
4
Czy nie lepiej jest użyć przypisanego portu dla protokołu, który nigdy nie będzie używany w Twojej sieci? Nieprzypisany port może zostać przypisany w dowolnym momencie i spowodować problemy.
adrianwadey