четкое и техническое объяснение в отношении проблемы множественных одновременных сеансов FTP, когда блокировка порта данных только для одного порта - это то, что мне больше всего интересно знать подробно. Когда он может работать, когда он не будет работать, почему он не может быть рекомендован и т. Д.
Это будет дикое предположение, так как я не проверял это, вы должны попробовать это сами и посмотреть, есть ли другие проблемы, которые я мог пропустить.
Я полагаю, вы можете ограничить диапазон пассивных портов одним портом . На самом деле вы можете видеть в этом вопросе, что небольшие диапазоны портов используются на практике . Теоретически, для поддержки нескольких одновременных подключений вам нужно только 4 значения: локальный IP, локальный порт, удаленный IP, удаленный порт, чтобы быть уникальным. Вот как вы различаете разные связи.
Если вы заблокируете порт на вашем сервере на одно единственное значение, то единственной переменной останется порт, используемый клиентом. Это не проблема, если у клиента достаточно большой пул свободных временных портов для выбора. Если он не делает какой-то тяжелый NAT, вам не нужно беспокоиться об этом. Имейте в виду , что это будет чисто теоретический материал : если вы используете несколько портов на своем сервере, вы можете умножить число гипотетических одновременных подключений, включивnumber of ports in range
соединения на один порт на стороне клиента. Но на практике этого не произойдет, так как я сомневаюсь, что есть какая-либо реализация FTP-клиента, которая бы поддерживала это (потому что это не имеет особого смысла). Кроме того, если клиенту приходится делиться своими эфемерными портами таким образом и он не может просто открыть новый, у него возникают гораздо более серьезные проблемы. Таким образом, с этой точки зрения вы должны быть полностью в безопасности, используя один порт.
Давайте подумаем, почему одного порта может быть недостаточно .
Прежде всего, я мог бы столкнуться с ситуацией, когда действительно некорректная реализация FTP-сервера использует только номер локального порта для идентификации передачи данных клиента. Еще раз, я не думаю, что какой-либо приличный FTPd сделал бы это.
Настоящая проблема ( да, вы можете игнорировать все вышеперечисленное как серьезное отступление ;-)) в том, что диапазон пассивных портов находится в непривилегированном диапазоне .
Это означает, что выбранный вами номер порта не зарезервирован сам по себе , и фактически любой пользовательский процесс (не требующий прав root ) может получить его до того, как это сделает ваш FTP-сервер. Если у вас есть обширный пул портов на выбор, вы просто получаете случайный свободный. Если вы обязаны использовать только один, и он уже используется, вы не сможете обрабатывать переводы должным образом.
Извините, если ответ кажется слишком спекулятивным. Честно говоря, я очень старался найти причину, по которой вы не должны использовать один порт, и, кроме последнего, я не мог придумать никаких веских доказательств против этого. Тем не менее, интересный и сложный вопрос вы задаете.