Вопрос FTP Незаконная команда PORT


Я установил 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 / .... Я пробовал несколько других параметров подключения, порты и т. Д. Но все они дают ту же ошибку. Althoiugh кажется, что иногда отображается первый список каталогов (но это может быть кеширование WS_FTP)


3
2017-12-21 13:05


происхождения


PORT 192,168,192,14,211,181 переводит на tcp://192.168.192.141:54197 который является допустимым портом, но может быть использован. securitypronews.com/understanding-the-ftp-port-command-2003-09 - Frank Thomas
@FrankThomas: Это нормально - предполагается, что это случайный порт по FTP-клиенту только для этой передачи. (Если клиент не успел привязаться к нему, он бы попробовал другой). - grawity
Общий совет: если вы подозреваете, что межсетевой экран может быть связан, получить от него некоторые отзывы. iptables хранит счетчики пакетов для каждого правила и способен регистрировать и отслеживание, - grawity
Патрик. У меня такие же проблемы. Вы решили эту проблему? если да, то могли бы вы поделиться? - Avis
Да, он решил, что мой ответ на мой вопрос. - Patrick


ответы:


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


Таким образом, ваш отказ PORT ожидается.

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

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

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

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

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

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


Как насчет PASV? Ну, проблема такая же.

Как правило, брандмауэр вашего сервера будет отслеживать соединение с FTP-контроллером, извлекать временный порт из ответа «Ввод пассивного режима (x, y, z ...)» и отмечать его как принадлежащий соединению «RELATED». Тогда ваше правило № 004 разрешило бы это.

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

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


6
2017-12-21 13:18



Людям нравится использовать это как аргумент, что FTP - это мусор, и его следует избегать. Они не ошибаются, но лично я бы сказал: NAT это мусор, и его следует избегать ... - grawity
Я не могу согласиться с вами в NAT. у нас не было бы простых маршрутизаторов, сконфигурированных потребителем, в каждом доме без него, а NAT + SPF предоставит неискушенным домашним пользователям значительную степень защиты без существенной работы. Это должны быть только сложные пользователи, которые имеют каждый компьютер на публично адресуемом IP-адресе, поэтому они могут на 100% доверять своим собственным навыкам. в противном случае угрожает экосистеме Интернета в широких масштабах. кроме того, мы всегда можем сказать, что проблемы с NAT на самом деле состоят в том, что мы хотим продолжать делать что-то с парадигмами TCP, а не изобретать. Просто мои два бита. - Frank Thomas
Конечно, мы бы хотели - если бы интернет-провайдеры вместо этого продвинули протоколы с правильной адресацией, например, IPv6 / IPng / etc. - grawity
IPv6 усугубляет проблему прямых подключений к системам, в которых бизнес не является публично доступным; он не уменьшает его. - Frank Thomas
Некоторые клиенты (например, чрезвычайно мощные lftp, недоступные для окон, кроме cygwin AFAIK) имеют опции для выбора ip и порта (диапазона) для отправки (в lftp с set ftp:port-ipv4 а также set ftp:port-range). При некоторой синхронизации с правилами брандмауэра (включая некоторую защиту с помощью recent матч), в этом случае должно быть возможно использовать PORT с TLS. Но это будет ограничено «привилегированным» клиентом, оно не будет автоматически для всех - A.B


PORT 192,168,192,14,211,181

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


2
2017-12-19 18:04





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

PassivePorts 49152 65534
TLSOptions NoSessionReuseRequired

Для пассивных портов см. http://proftpd.org/docs/directives/linked/config_ref_PassivePorts.html

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


0
2018-01-09 10:00



Ваш пост был перенесен; теперь это избыточно. - Martijn Pieters


Это сработало для меня: Вам нужно добавить следующие строки: 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)

0
2018-06-20 17:13