Назад | Перейти на главную страницу

Активный FTP-клиент заблокирован брандмауэром Windows в Windows 7

У меня есть приложение, которое работает как служба и содержит FTP-клиент. Ему необходимо подключиться к FTP-серверу, который поддерживает только активный FTP. Когда я пытаюсь получить список файлов или загрузить файл, брандмауэр Windows отключает входящее соединение с FTP-сервера. (Я не верю, что у нас была эта проблема в Windows XP или Windows Vista.)

Активный FTP - это протокол, который требует, чтобы сервер открывал соединение с клиентом через порт, указанный клиентом. (http://slacksite.com/other/ftp.html)

Я знаю, что могу открыть большой диапазон портов в брандмауэре Windows и заставить мой FTP-клиент использовать только эти порты, но я мог предположить, что брандмауэр Windows изначально поддерживает Active FTP.

Необходимо ли выполнить какие-то настройки, чтобы брандмауэр Windows автоматически обнаруживал активный FTP и открывал необходимые порты по мере необходимости? Могу ли я изменить этот параметр программно?

Спасибо.

Вот в чем дело: в активном или пассивном режиме сервер всегда использует порт 20 на своей стороне для подключения к данным и подключается к клиенту через любой порт, указанный клиентом при выполнении команды FTP PORT.

Посмотрев на брандмауэр Windows 7, похоже, что вы можете создать настраиваемое правило для входящих подключений, которое разрешает подключения к любому локальному порту с определенного удаленного порта (20) для данного типа протокола (TCP). Вы также можете указать локальный и удаленный IP-адреса, к которым применяется это правило.

Я должен признать, что я никогда не занимался обезьяной с брандмауэром Windows, но мне кажется, что он может сработать для вас.

Вместо добавления портов в список исключений брандмауэра Windows добавьте приложение, к которому у вас должен быть доступ. Затем брандмауэр Windows позволит этому приложению привязать и использовать любые порты, которые оно пожелает.

Все Windows XP / Vista / 7 используют «службу шлюза прикладного уровня» в качестве помощника по подключению для активного FTP. Вы должны убедиться, что эта служба запущена для работы Active FTP.

Для начала:

  1. Нажмите кнопку "Пуск" в Windows.
  2. Введите services.msc в строку поиска и нажмите Enter (появится панель служб Windows).
  3. Прокрутите вниз, пока не найдете «Служба шлюза уровня приложения».
  4. Посмотрите на столбец «Статус», там должно быть написано «Запущено».
  5. Если не запущен, дважды щелкните имя службы, чтобы перейти на панель параметров.
  6. Измените раскрывающийся список "Тип статистики" на "Автоматически".
  7. Нажмите кнопку с надписью "Пуск".
  8. Нажмите "Применить".
  9. Нажмите "ОК".

Вы пытались убедиться, что ваш брандмауэр выполняет фильтрацию FTP с отслеживанием состояния?

Вы можете сделать это, открыв командную строку с правами администратора и набрав:

netsh advfirewall устанавливает глобальное включение StatefulFtp

Мне было бы любопытно, повлияло ли это вообще на вашу проблему.

У меня была проблема с FTP-клиентом в нашей интрасети, и я не хотел делать исключение брандмауэра для этой конкретной программы. Я хотел, чтобы Active FTP "просто работал" с любой клиентской программой.

Я попытался включить «Службу шлюза уровня приложений» (sc start ALG) и убедился, что у меня включен "statefulftp" (netsh advfirewall set global statefulftp enable). Я полагаю, они нужны в некоторых случаях, но для меня это не имело значения.

В конце концов, я просто открываю связи из порт 20 с локальных IP-адресов, и Active FTP работает с любой программой.

netsh advfirewall firewall add rule name="FTP (active)" action=allow protocol=TCP dir=in remoteport=20 remoteip=localsubnet

Вместо remoteip = localsubnet вы также можете указать конкретный IP-адрес.

Я решил эту проблему, посмотрев более точно в верхней части правил для входящих подключений. Обратите внимание, что было два правила, называемых программой передачи файлов (одно для TCP, а другое для UDP), которые были блокировка Программа "c: \ windows \ system32 \ ftp.exe". Отключил оба и все заработало как шарм! Только мои 2 цента ;-)

Многих не волнует% SystemRoot% \ system32 \ inetsrv \ inetinfo.exe при создании FTP-сервера на Windows Machine.

Приложение должно быть внесено в белый список, прежде чем вы получите доступ к подключению из своей подсети или Интернета.

Сначала вы разрешаете эти порты: 80, 20, 21 как для HTTP, так и для FTP. Затем добавьте исключение для "inetinfo.exe"

Вместо этого я бы рекомендовал туннелирование. Например, запуск WinSSHD-сервера на удаленном сервере. Он имеет UPnP и автоматически откроет для вас порт 22. У него есть сопутствующая клиентская программа под названием Tunnelier, если вы переходите со стороны клиента. Дело в том, что когда у вас есть туннель на 22-м порту, активный или пассивный FTP будет нормально работать с этого момента и далее через туннель. Фактически, если вы запускаете WinSSHD (или SSHD) на удаленном FTP-сервере, у него есть FTP-подсистема, которая делает то же самое, что и FTP-сервер. Итак, если удаленным FTP-сервером является Linux, скорее всего, у них уже запущена служба SSHD, и поэтому сам FTP-сервер является точкой отключения.