чітке та технічне пояснення щодо випуску декількох паралельних сеансів FTP при блокуванні порту даних лише на один порт - це те, що мені найбільше цікаво знати глибоко. Коли це може працювати, коли це не буде працювати, чому це може бути не рекомендовано тощо.
Це буде дикою здогадкою, оскільки я її ще не перевіряв, ви можете спробувати це на собі і побачити, чи є якісь інші проблеми, які я, можливо, пропустив.
Я припускаю, що ви можете обмежити діапазон пасивних портів одним портом . Насправді в цьому питанні ви бачите, що невеликі діапазони портів використовуються на практиці . Теоретично для підтримки декількох одночасних з'єднань вам потрібні лише 4 значення: локальний IP, локальний порт, віддалений IP, віддалений порт, щоб бути унікальним. Таким чином ви розрізняєте різні з'єднання.
Якщо ви заблокуєте порт на сервері до одного значення, то єдиною лівою змінною є порт, який використовується клієнтом. Це не є проблемою, якщо у клієнта є достатньо великий пул вільних ефемерних портів на вибір. Якщо це не робить важкий NAT, вам не доведеться турбуватися про це. Тепер, будьте попереджені, це буде суто теоретичний матеріал : якщо ви використовували кілька портів на своєму сервері, ви можете помножити кількість гіпотетичних одночасних з'єднань, включившиnumber of ports in range
з'єднання на одному клієнтському порту. Але це не відбудеться на практиці, тому що я сумніваюся, що існує будь-яка реалізація клієнта FTP, який би підтримував це (тому що це не має великого сенсу). Плюс якщо клієнт повинен поділитися своїми ефемерними портами таким чином і не може просто відкрити новий, то у нього виникають набагато більш серйозні проблеми. Отже, з цього погляду ви повинні бути повністю безпечними, використовуючи один порт.
Давайте подумаємо, чому одного порту може бути недостатньо .
Перш за все, я міг зіткнутися з ситуацією, коли реально помилкова реалізація FTP-сервера використовує виключно локальний номер порту як спосіб ідентифікації передачі даних клієнта. Ще раз, я не думаю, що будь-який пристойний FTPd зробив би це.
Справжня проблема ( так, ви можете проігнорувати все вище як головне відступлення ;-)) в тому, що діапазон пасивних портів знаходиться в непривілейованому діапазоні .
Це означає, що вибраний номер порту сам по собі не зарезервований , і насправді будь-який користувацький процес (не потребує привілеїв root ) може захопити його до того, як це зробить ваш FTP-сервер. Якщо у вас є велика кількість портів для вибору, ви просто захопите випадковий безкоштовний. Якщо ви зобов'язані використовувати єдиний, і він уже використовується, ви не зможете належним чином обробити передачі.
Вибачте, якщо відповідь здається трохи надто спекулятивним. Якщо чесно, я дуже намагався знайти причину, чому ви не повинні використовувати один порт, і, крім останнього шматочка, я не міг придумати жодних важких доказів проти цього. Тим не менш, цікаве та складне питання, яке ви ставите.