Активный 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 и, при необходимости, открывал необходимые порты? Могу ли я изменить эту настройку программно?

Благодарю.

8 ответов

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

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

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

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

У меня была проблема с 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-адрес.

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

Чтобы начать это:

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам