Спасибо за чтение статьи, на которую указал Атти. Похоже, вам может понадобиться немного больше объяснений. Я нашел руководство по брандмауэру OpenBSD, раздел "Проблемы с FTP", чтобы быть информативным. Тем не менее, я постараюсь обобщить проблему здесь.
Когда программное обеспечение обменивается данными с использованием интернет-протоколов (IPv4 или IPv6), "протокол IP" (который я использую как общий термин, применяемый в равной степени к IPv6 и IPv4) включает в себя IP-адрес назначения. Когда вы используете некоторые протоколы, такие как TCP (который делает FTP), UDP (который делает DNS), SCTP, у вас также есть "номер порта", который является частью причины, по которой мы используем термин "переадресация портов". (Некоторые протоколы не используют "номер порта". Например, ICMP использует IP и имеет "Типы сообщений", но не "номера портов".)
Большая часть программного обеспечения будет предоставлять информацию об IP-адресе сетевым компонентам TCP/IP локального компьютера и предоставлять только "полезную нагрузку" удаленному компьютеру (то есть любую другую информацию, которую удаленный компьютер должен получить). Например, при использовании HTTP ваш веб-браузер сообщает локальному сетевому стеку TCP/IP открыть соединение с IP-адресом, а ваш веб-браузер сообщает удаленной системе, какой файл он хочет получить. Ваш веб-браузер не сообщает ваш IP-адрес. Эта деталь обрабатывается сетевыми компонентами TCP/IP.
FTP отличается от большинства программного обеспечения.
FTP фактически включает IP-адрес в свою полезную нагрузку. Таким образом, в дополнение к предоставлению IP-адреса как части стандартного IP-пакета, в части диалога FTP упоминается, какой IP-адрес использовать. Стандартная "переадресация портов" просто изменяет стандартное местоположение для IP-адреса и не изменяет разговор по FTP.
FTP - это очень старый протокол, написанный в эпоху, когда университеты и крупные корпорации создавали сеть как исследовательский проект. Средства защиты Интернета, такие как брандмауэры, не существовали и не были необходимы в то время. Таким образом, проблема, которую предоставляет FTP, не была проблемой плохого авторства. Проблема только в том, что FTP был просто разработан для другого стиля сети.
Эта проблема может быть решена тремя различными способами:
- Вы можете попробовать использовать "пассивный" FTP. Это может работать с FTP-сервером, который находится за брандмауэром (но бремя переносится: клиент FTP не должен находиться за брандмауэром ... так что часто этот сценарий тоже не работает). Если это исправление возможно (для этого требуется, чтобы программное обеспечение клиента FTP поддерживало эту функцию), это может быть самое быстрое исправление (изменение параметра в программном обеспечении клиента FTP), но оно может быть простым или трудным в зависимости от того, какое программное обеспечение клиента FTP используется.
- Многие маршрутизаторы поддерживают опцию под названием «FTP-прокси», которая изменяет диалог FTP, эффективно решая эту проблему для вас. Найдите и включите такую опцию (если она существует)
- использовать другой протокол, который не имеет той же проблемы
FTP это своего рода уникальный. У большинства популярных протоколов сегодня нет той же самой проблемы, и не будет, потому что межсетевые экраны действительно существуют, и поэтому люди знают о проблеме. (Если бы кто-то написал новый протокол, и этот человек не знал о проблеме, он, вероятно, узнал бы о проблеме, прежде чем протокол стал очень популярным.) Тем не менее, FTP был лучшим решением в определенный момент времени, и люди не хотели использовать другие решения. Одной из основных причин этого может быть то, что у многих людей было программное обеспечение FTP, включая популярные веб-браузеры, поддерживающие FTP.
В настоящее время существуют доступные решения лучше, чем FTP. Используйте "SSH File Transfer Protocol" (один из протоколов, называемых "SFTP"), или SCP, или HTTPS. Любой из них не требует специальных прокси для запуска на брандмауэрах. Для решений, которые должны быть легко доступны для нескольких клиентов, HTTPS может сделать свое дело. (Могут быть и другие варианты, например, FTPS, но я рекомендую предыдущие протоколы, которые я только что упомянул.)
Итак, последний пункт маркировки рекомендуется, но если вы чувствуете, что по какой-то причине вы не можете этого сделать, вы можете попробовать первый или второй пункты маркера (каждый из которых может быть быстрее, но хуже, решить проблему, которую вы имеем дело с).