Чому Linux не використовує діапазон портів ефемерних портів IANA?


30

За даними Вікіпедії

Інтернет-адміністрація номерів (IANA) пропонує діапазон від 49152 до 65535 для динамічних або приватних портів. Багато ядер Linux використовують діапазон портів 32768 до 61000.

Незважаючи на те, що існує деякий історичний відхилення від запропонованого діапазону IANA, здається незручним, що Windows Vista, Windows 7, Windows Server 2008, FreeBSD 4.6+ та багато інших всі погодились на цей діапазон, і все ж Linux все ще виділяється.

Однак, дивлячись на це, ось і ось:

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

Чому Linux не прийняв стандартний діапазон?

Відповіді:


21

Був час, коли IANA призначала лише порти до 1023. Див. RFC1700 . Свого часу це було стандартом. Більшу частину часу я не маю проблем з пошуку, коли в потоці RFC змінюються речі, але на питання про зміну портів з 1024 на 49152 з зареєстрованих на призначені я прийшов коротко.

Що стосується історії Linux, то виникло питання щодо ip_local_port_range за замовчуванням у 2007 році. У той час було вирішено використовувати діапазон Linux, який ви згадуєте, побоюючись, що високі кількості портів можуть спричинити проблеми, і початок діапазону в 49152 може залишити занадто мало номери портів у пулі. Дивіться це та його нитку. У той час висловлена ​​думка полягала в тому, що початок в 32768 було в дусі процедур IANA, якщо не повністю відповідних. Читаючи це, я роблю висновок, що розробники припускали, що більшість завдань буде здійснюватися знизу діапазону і рухатись вгору. Під час написання я рахую трохи більше 100 номерів портів, присвоєних (не рахуючи різні протоколи як окремі) між 32768 і 49152, так що це затрималося досить добре протягом останніх п'яти років.

Я не знаю, чому діапазон вважався занадто малим, але я можу уявити дві причини:

  1. Номери портів рандомізовані для запобігання певних атак. Чим більше адрес у пулі, тим краща захист може працювати.
  2. Сервери з високою активністю можуть мати проблеми з вичерпанням номерів портів. Хоча порти можуть бути ефемерними, їх використання не є миттєвим. Зокрема, розетки можуть тривати кілька хвилин після закриття TCP.

Ця публікація в блозі стосується номера 2 і пропонує відповідь, якщо ви бажаєте, щоб ваші системи Linux використовували інший діапазон локальних портів. (Використовуючи /etc/sysctl.d для визначення діапазону, який вам подобається. Існує також запис ip_local_reserved_ports, який може бути корисним у випадку конкретного конфлікту. Вони співпадають із записом / proc / sys, який ви цитуєте.)

Підводячи підсумок За замовчуванням Linux не відповідають поточним специфікаціям IANA, але будь-яка конкретна система Linux може, якщо бажає її власник.


1
Згідно з RFC 6056 , "Як зазначено в розділі 2.1, динамічні порти складаються з діапазону 49152-65535. Однак алгоритми вибору ефемерних портів повинні використовувати весь діапазон 1024-65535." - Це здається, що значення " ip_local_port_rangeжодного разу не слід використовувати".
Еван Керролл


@evan RFC 6056 продовжує говорити, що "номери портів, які можуть знадобитися для надання певної послуги на локальному хості, НЕ БУДЬТЕ включатись у пул номерів портів, доступних для рандомізації ефемерних портів", і що "адміністратори повинні ідентифікувати послуги, які можуть пропонується місцевим хостом, і ОБОВ'ЯЗКОВО виключати лише відповідні зареєстровані порти ", але це не те, що ОС зазвичай пропонує вам робити. Єдиний практичний механізм виключення - підняти нижню межу.
jmb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.