FTP незаконная команда PORT

6077
Patrick

Я настроил proftpd для использования ssl / tls. Пытаясь подключиться, я получаю «Неверная команда PORT»

Finding Host xxx.nl ... Connecting to xxx.xxx.xxx.xxx:21 Connected to xxx.xxx.xxx.xxx:21 in 0.018001 seconds, Waiting for Server  Response Initializing SSL Session ... 220 FTP Server ready. AUTH TLS 234 AUTH TLS successful SSL session NOT set for reuse SSL Session Started. Host type (1): AUTO USER xxx 331 Password required for xxx PASS (hidden) 230 User xxx logged in SYST 215 UNIX Type: L8 Host type (2): Unix (Standard) PBSZ 0 200 PBSZ 0 successful PROT P 200 Protection set to Private PWD 257 "/" is the current directory CWD /var/www/html/ 250 CWD command successful PWD257 "/var/www/html/" is the current directory TYPE A 200 Type set to A PORT 192,168,192,14,211,181 500 Illegal PORT command Port failed 500 Illegal PORT command PASV 227 Entering Passive Mode (xxx,xxx,xxx,xxx,160,151). connecting data channel to xxx.xxx.xxx.xxx:160,151(41111) Failed to connect data channel to xxx.xxx.xxx.xxx:160,151(41111) 

Iptables:

Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT icmp -- anywhere anywhere /* 000 accept all icmp */ ACCEPT all -- anywhere anywhere /* 001 accept all to lo interface */ REJECT all -- anywhere loopback/8 /* 002 reject local traffic not on loopback interface */ reject-with icmp-port-unreachable ACCEPT all -- anywhere anywhere /* 003 accept all to eth1 interface */ ACCEPT all -- anywhere anywhere /* 004 accept related established rules */ state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere multiport ports ftp /* 021 allow ftp. */ ACCEPT tcp -- anywhere anywhere multiport ports ssh /* 022 allow ssh. */ ACCEPT tcp -- anywhere anywhere multiport ports smtp /* 025 allow smtp. */ ACCEPT tcp -- anywhere anywhere multiport ports pharos /* 051 allow rundeck. */ ACCEPT tcp -- anywhere anywhere multiport ports 8140 /* 814 allow puppetserver. */ ACCEPT tcp -- anywhere anywhere multiport ports http /* 080 allow http. */ ACCEPT tcp -- anywhere anywhere multiport ports https /* 443 allow https. */ DROP all -- anywhere anywhere /* 999 drop all */  Chain FORWARD (policy ACCEPT) target prot opt source destination  Chain OUTPUT (policy ACCEPT) target prot opt source destination 

Подключение через обычный ftp работает просто отлично ...

Я использую WS_FTP с ftp-authssl // xxx.nl / .... Я пробовал несколько других вариантов подключения, портов и т. Д. Но все выдают ту же ошибку. Хотя кажется, что иногда отображается первый список каталогов (но это может быть кеширование WS_FTP)

3
`PORT 192,168,192,14,211,181` переводится в` tcp: //192.168.192.141: 54197`, который является допустимым портом, но может использоваться. https://www.securitypronews.com/understanding-the-ftp-port-command-2003-09 Frank Thomas 6 лет назад 0
@FrankThomas: Это нормально - это должен быть случайный порт, выделенный клиенту FTP только для этой передачи. (Если бы клиент не был успешно привязан к нему, он бы попробовал другой.) grawity 6 лет назад 1
Общий совет: если вы подозреваете, что межсетевой экран может быть связан, _ получите некоторую обратную связь от него. _ Iptables хранит счетчики пакетов для каждого правила и может регистрировать [и отслеживать] (http://backreference.org/2010/06/11 / Iptables-отладка /). grawity 6 лет назад 0
Патрик - У меня такие же проблемы. Вы решили эту проблему? если да, не могли бы вы поделиться? Avis 6 лет назад 0
Да, получил решение, см. Мой собственный ответ на мой вопрос. Patrick 6 лет назад 0
Ваш вопрос от [так] был перенесен сюда и объединен. В будущем, пожалуйста, не пересылайте вопросы на нескольких сайтах. Mokubai 6 лет назад 0

4 ответа на вопрос

6
grawity

Прежде всего обратите внимание, что две последние команды, PORT и PASV, не имеют ничего общего друг с другом. Это две независимые попытки подключения (одна для активного FTP, другая для пассивного FTP).


Итак, ваш сбой в порту ожидается.

Способ PORTработает (режим «активный FTP»), когда клиент отправляет свой адрес на сервер - сервер подключается к вам для передачи данных.

Согласно журналам, ваш клиентский компьютер находится за NAT и имеет «частный» IP-адрес. Это единственный адрес, который он знает, поэтому он отправляет его с помощью команды PORT.

Обычно ваш маршрутизатор распознает FTP-соединение и незаметно редактирует команду PORT, заменяя ваш личный адрес собственным публичным. (Или, если вам не повезет, он заменит его мусором.)

Однако, поскольку ваше управляющее соединение теперь зашифровано с использованием TLS, маршрутизатор не может выполнить это исправление (все, что он видит, это зашифрованные данные), и сервер получает именно то, что отправляет ваш клиент: ваш личный адрес.

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

tl; dr Переключите ваш FTP-клиент в пассивный режим. Да, ваши журналы показывают, что пассивный режим (PASV) также нарушен. Но по крайней мере это несколько исправимо, если ваш сервер имеет выделенный публичный IP-адрес, а активный режим - нет.


Что насчет PASV? Ну, проблема похожа.

Обычно брандмауэр вашего сервера отслеживает управляющее соединение FTP, извлекает временный порт из ответа «Вход в пассивный режим (x, y, z…)» и помечает его как принадлежащий «СВЯЗАННОМУ» соединению. Тогда ваше правило # 004 позволит это.

Однако, опять же, iptables не может видеть через TLS (все, что он видит, это зашифрованные данные) и больше не может распознавать ваши подключения к данным FTP как связанные. Таким образом, ваше соединение просто соответствует правилу № 999 и прерывается.

Чтобы заставить PASV работать, вам нужно настроить ProFTPd на использование определенного диапазона пассивных портов (неважно, какой именно диапазон) и указать iptables разрешить соединения с этими портами.

Людям нравится использовать это в качестве аргумента, что FTP - это мусор, и его следует избегать. Они не ошибаются, но лично я бы сказал, что _NAT_ это мусор, и его следует избегать ... grawity 6 лет назад 1
Я не могу согласиться с вами по поводу NAT. без него не было бы простых маршрутизаторов, настроенных потребителем, в каждом доме, а NAT + SPF действительно предоставляет неискушенным домашним пользователям значительную степень защиты без значительной работы. Только опытные пользователи должны иметь каждый компьютер с публично адресуемым IP-адресом, чтобы они могли на 100% доверять своим собственным навыкам. В противном случае это наносит большой ущерб веб-экосистеме. кроме того, мы всегда можем сказать, что проблемы с NAT на самом деле заключаются в том, что мы хотим продолжать работать с парадигмами TCP, а не изобретать заново. Просто мои два бита. Frank Thomas 6 лет назад 0
Конечно, у нас было бы - если бы интернет-провайдеры выдвигали протоколы с правильной адресацией, такие как IPv6 / IPng / и т. Д. grawity 6 лет назад 0
IPv6 усугубляет проблему прямых подключений к системам, при которых бизнес не является общедоступным; это не умаляет этого. Frank Thomas 6 лет назад 0
Некоторые клиенты (например, чрезвычайно мощный lftp, недоступный в Windows, кроме Cygwin AFAIK) имеют возможность выбрать ip и порт (диапазон) для отправки (в lftp с `set ftp: port-ipv4` и` set ftp: port- range`). При некоторой синхронизации с правилами брандмауэра (включая некоторую защиту с использованием «недавнего» совпадения) в этом случае должна быть возможность использовать PORT с TLS. Но это будет ограничено «привилегированным» клиентом, оно не будет автоматическим для всех A.B 6 лет назад 1
(Извините за задержку) Я настроил ProFTPd и iptables: `PassivePorts 49152 65534` Команда недопустимого PORT все еще отображается, но затем продолжается, когда PASV` PASV 227 входит в пассивный режим (xxx, xxx, xxx, xxx, 226,92) , подключение канала данных к каналу данных xxx.xxx.xxx.xxx:226,92(57948) к каналу xxx.xxx.xxx.xxx:226,92(57948) LIST -la 150 Открытие подключения к данным в режиме ASCII для списка файлов 425 Невозможно для построения передачи данных: операция не разрешена` Patrick 6 лет назад 0
Пришлось добавить `TLSOptions NoSessionReuseRequired` в ProFTPd, и это сработало! Patrick 6 лет назад 0
2
Steffen Ullrich
PORT 192,168,192,14,211,181 

Эта команда означает, что клиент прослушивает IP-адрес 192.168.192.14 порта 54197 для подключения к данным с сервера. 192.168. *. * Являются частными IP-адресами, которые нельзя маршрутизировать через Интернет. Это означает, что этот IP-адрес недоступен с сервера в Интернете. И именно поэтому сервер считает команду PORT недействительной.

0
Patrick

Я разместил вопрос также в SuperUser и получил ответ там: я добавил следующее в proftpd.conf:

PassivePorts 49152 65534 TLSOptions NoSessionReuseRequired 

Для PassivePorts см http://proftpd.org/docs/directives/linked/config_ref_PassivePorts.html

Для TLSOptions см. Http://www.proftpd.org/docs/howto/TLS.html (основываясь на некоторых сообщениях журнала от WS_FTP, я понял, что NoSessionReuseRequired должен помочь).

Ваш пост был перенесен; теперь это излишне. Martijn Pieters 6 лет назад 0
0
albert

Это сработало для меня: вам нужно добавить следующие строки в vsftpd.conf. Я потратил несколько дней, пытаясь найти этот ответ

listen=YES #listen_ipv6=YES 

Ниже всех некомментированных элементов в vsftpd.conf

listen=YES anonymous_enable=NO local_enable=YES write_enable=YES dirmessage_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO pasv_enable=YES pasv_min_port=1024 pasv_max_port=1048 port_enable=YES pasv_address=PUT YOUR PUBLIC IP ADDRESS HERE (e.g. 18.236.105.3) 

Похожие вопросы