Dlaczego Linux nie używa zakresu portów IANA Efemeryczny?

30

Według Wikipedii

Internet Assigned Numbers Authority (IANA) sugeruje zakres od 49152 do 65535 dla portów dynamicznych lub prywatnych. Wiele jąder Linux używa zakresu portów od 32768 do 61000.

Chociaż wydaje się, że istnieje pewne historyczne odchylenie od sugerowanego zakresu IANA, wydaje się dziwne, że Windows Vista, Windows 7, Windows Server 2008, FreeBSD 4.6+ i wiele innych zgodziło się na ten zakres, a mimo to Linux wciąż się wyróżnia.

Patrząc na to, oto i oto:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768   61000

Dlaczego Linux nie przyjął standardowego zakresu?

Evan Carroll
źródło

Odpowiedzi:

21

Był czas, kiedy IANA przypisała tylko porty do 1023. Patrz RFC1700 . Kiedyś był to standard. Przez większość czasu nie mam problemów ze znalezieniem, kiedy rzeczy zmieniają się w strumieniu RFC, ale na pytanie o zmianę portów z 1024 na 49152 z zarejestrowanych na przypisane, zabrakło mi.

Jeśli chodzi o historię Linuksa, w 2007 r. Pojawiło się pytanie dotyczące domyślnego zakresu_portu_lokalnego_portu. W tym czasie zdecydowano się na użycie zakresu Linux, o którym wspomniałeś, obawiając się, że wysokie liczby portów mogą powodować problemy, a rozpoczęcie zakresu od 49152 może pozostawić zbyt mało numery portów w puli. Zobacz to i jej wątek. Wyraziła się wówczas myśl, że początek od 32768 był zgodny z duchem procedur IANA, jeśli nie w pełni zgodny. Czytając to, wnioskuję, że programiści założyli, że większość zadań pojawi się od dołu zakresu i przejdzie w górę. Podczas tego pisania liczę trochę więcej niż 100 numerów portów przypisanych (nie licząc różnych protokołów jako osobnych) między 32768 a 49152, więc utrzymało się to całkiem dobrze przez ostatnie pięć lat.

Nie wiem, dlaczego zasięg został uznany za zbyt mały, ale mogę sobie wyobrazić dwa powody:

  1. Numery portów są losowe, aby udaremnić niektóre ataki. Im więcej adresów w puli, tym lepiej ta obrona może działać.
  2. Serwery o wysokiej aktywności mogą mieć problemy z wyczerpaniem numeru portu. Chociaż porty mogą być efemeryczne, ich użycie nie jest natychmiastowe. W szczególności gniazda mogą trwać kilka minut po zamknięciu protokołu TCP.

Ten post na blogu dotyczy numeru 2 i sugeruje odpowiedź, jeśli chcesz, aby systemy Linux używały innego zakresu portów lokalnych. (Użycie /etc/sysctl.d do zdefiniowania zakresu, który ci się podoba. Istnieje również wpis ip_local_reserved_ports, który może być przydatny w przypadku wystąpienia konkretnego konfliktu. Pasują one do cytowanego wpisu / proc / sys.)

W podsumowaniu. Domyślne ustawienia Linuksa nie odpowiadają bieżącym specyfikacjom IANA, ale każdy konkretny system Linux może, jeśli chce tego jego właściciel.

John S Gruber
źródło
1
Zgodnie z RFC 6056 : „Jak wspomniano w sekcji 2.1, porty dynamiczne składają się z zakresu 49152-65535. Jednak efemeryczne algorytmy wyboru portów powinny używać całego zakresu 1024-65535”. - Wygląda na to, że i ip_local_port_rangetak nie należy używać wartości.
Evan Carroll
@evan RFC 6056 mówi dalej, że „numery portów, które mogą być potrzebne do świadczenia określonej usługi na lokalnym hoście NIE POWINNY być uwzględniane w puli numerów portów dostępnych do efemerycznej losowej konfiguracji portów” oraz że „administratorzy powinni zidentyfikować usługi, które mogą być oferowane przez lokalnego hosta i POWINNY wykluczać tylko odpowiadające im zarejestrowane porty ”, ale nie jest to coś, co zazwyczaj zapewnia system operacyjny. Jedynym praktycznym mechanizmem wykluczającym jest podniesienie dolnej granicy.
jmb