У меня есть приложение, которое работает как служба и содержит 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.
Для начала:
Вы пытались убедиться, что ваш брандмауэр выполняет фильтрацию 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-сервер является точкой отключения.