Настройка FTP-сервера на домашнем сервере или как провайдеры вмешиваются в трафик по 21-му порту

Выкладываю затерявшуюся статью о тонкостях настройки FTP-серверов на домашних интернет-каналах. Замечу, что за год, прошедший с момента написания статьи, Билайн убрал фильтрацию трафика на моем канале, и сейчас сервер нормально работает по 21-му порту. Между тем, статья все равно будет полезна многим, кто столкнется с проблемами при создании FTP-сервера.

Я потратил почти три часа в попытках поднять FTP-сервер на Beeline. Не могу не поделиться сделанным открытием. Вообще говоря, настройка FTP-сервера лишь чуть сложнее, чем torrent-клиента. Под Windows сервис можно поднять на бесплатной программе FileZilla Server, которая распространяется, в частности, в комплекте XAMPP для веб-разработчиков. Выбор и настройку пользователей и их прав оставлю за рамками рассказа - это тривиально и очевидно. После того, как сервер настроен и протестирован на локальной машине (или в локальной сети), начинается самое интересное: его нужно "открыть миру", пробросив порты сквозь NAT роутера. Операция, опять же штатная, и не отличается от "проброса" портов для других приложений (torrent-клиента, RDP-подключения и т.д.), за исключением одного небольшого нюанса.

FTP-протокол работает по двум портам сразу - по, скажем, "сигнальному", передаются только команды Клиента и ответы Сервера. По "дата" порту происходит собственно передача данных. Контакт начинается с того, что Клиент подключается к Серверу по "Сигнальному" порту (обычно это 21-й порт), и потом по дефолту переходит в "пассивный" режим - предлагает Серверу выбрать порты для осуществления прямого "дата" соединения. FTP-cервер при этом берет какой-нибудь порт из заранее выбранного диапазона (диапазон портов, как я понимаю, резервируется на случай нескольких одновременных подключений). По "сигнальному" порту Сервер пересылает Клиенту свой текущий IP-адрес (его, впрочем, клиент и так уже знает, ведь он уже подконнектился, но все же) и номер порта для соединения, после чего происходит успешная передача данных.

Таким образом, для правильной работы FTP-сервера необходимо "пробросить" через роутер один "сигнальный" порт и диапазон возможных "дата" портов. В настройках сервера необходимо выставить те же значения.

Итак, в теории все ясно и просто, но у меня в упор не получалось настроить FTP на Beeline на новом сервере. В локальной сети все работало, но извне получить доступ к Серверу не получалось ни при каких обстоятельствах примерно вот с такими симптомами:

Команда:	PASV
Ответ:	227 Entering Passive Mode (95,24,139,182,195,202)
Команда:	MLSD
Ответ:	425 Can't open data connection.
Ошибка:	Не могу получить список каталогов!
Статус:	Отключен от сервера

Что я только не делал: отключал файерволлы компьютеров, файерволл провайдера в личном кабинете, отключал Stateful Packet Inspection в роутере, отключал вообще все возможные фильтрации в роутере и, наконец, настроил его просто как прямой шлюз к Серверу - все впустую, клиент успешно подключался к серверу, но соединения никак не хотел устанавливать.

До тех пор, пока я не ограничил диапазон "дата" портов одним портом за номером 50000 и не обратил внимание на логи FTP-сервера и Клиента, открытые на соседних мониторах. Вот что я увидел:

Сервер:

(000001) 12/13/2010 16:26:12 PM - anonymous (109.252.213.XX)> PASV
(000001) 12/13/2010 16:26:12 PM - anonymous (109.252.213.XX)> 227 Entering Passive Mode (89,178,150,XX,195,80)
(000001) 12/13/2010 16:26:12 PM - anonymous (109.252.213.XX)> MLSD

Клиент:

Команда:	PASV
Ответ:	227 Entering Passive Mode (89,178,150,XX,195,200)
Команда:	MLSD

Ничего не заметили? Сервер передал свой IP-адрес и назначил порт (последние два числа) 195*256+80 = 50000 , как я и просил. А что же при этом получил клиент? 195*256+... 200 = 50120 ! В процессе передачи данных по "сигнальному" порту информация оказалась искажена. Кто же ее исказил? Билайн!

Сухой остаток: на моем канале Билайн сканирует весь трафик по 21-му порту, и, если обнаруживает FTP-транзакции с сервером, искажает ответы Сервера с тем, чтобы соединение не удавалось установить. Думается, сделано это было еще в давнишние времена (когда это был еще не Билайн, а Корбина), когда трафик стоил существенно больших денег и провайдер его экономил.

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

Leon — 2012-05-17, 15:25

Ждем продолжения)

Блог

Что с Мастерхостом? Когда заработает?!

Этот вопрос всё чаще задают в Интернете начиная примерно с 12:00 дня 2 марта. А всё потому, что он накрылся!

далее

Автоматизированная Система Управления Бэкапами

Автоматизированная Система Управления Бэкапами позволяет добиться полного контроля над резервными копиями сайтов внутри инфраструктуры веб-студии. Если вы поддерживаете десятки сайтов на разных хостингах, без подобной системы вы не можете быть на 100% уверены в том, что каждый из них был корректно зарезервирован прошлой ночью.

далее

WebSocket: интеграция с NetCat

Хотите добавить на сайт под управлением CMS NetCat поддержку технологии WebSocket? Обращайтесь к нам! Посетители сайта смогут получать мгновенные уведомления о событиях сайта без обращений к серверу и перезагрузок страниц. Превратите свой сайт в интерактивную площадку, работающую в реальном времени!

далее

NetCat: техническая поддержка и доработка сайтов

Мы работаем с CMS NetCat уже больше 10 лет. У нас большой опыт и ответственный подход к делу.

далее

Весь блог тут