Активный 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.
Чтобы начать это:
- Нажмите кнопку Пуск в Windows
- Введите "services.msc" в строку поиска и нажмите Enter (откроется панель служб Windows)
- Прокрутите вниз, пока не найдете "Службу шлюза прикладного уровня"
- Посмотрите на столбец "Статус", там должно быть написано "Начато".
- Если он не запущен, дважды щелкните имя службы, чтобы перейти на панель параметров.
- Измените раскрывающееся меню "Тип статуи" на "Автоматический".
- Нажмите на кнопку с надписью "Пуск"
- Нажмите "Применить"
- Нажмите "ОК"
Вы пытались убедиться, что ваш брандмауэр выполняет 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-сервер не работает.