web-dev-qa-db-ja.com

FTP Illegal PORTコマンド

Ssl/tlsを使用するようにproftpdを設定しました。接続しようとすると、「無効な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経由での接続は問題なく動作します...

私はftp_authssl // xxx.nl /でWS_FTPを使用しています...他のいくつかの接続オプション、ポートなどを試しましたが、すべて同じエラーが発生しました。あるいは、時々最初のディレクトリリストが表示されるようです(しかし、それはWS_FTPのキャッシュかもしれません)

5
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が役立つことを理解しました)。

0
Patrick

最初の2つのコマンド、PORTとPASVは互いに関係がないことに注意してください。それらは2つのindependent接続試行です(1つはアクティブFTP用、1つはパッシブFTP用)。


したがって、PORT障害が予想されます。

PORTが機能する方法(「アクティブFTP」モード)は、クライアントに自身のアドレスをサーバーに送信させることです。サーバーはデータ転送のためにyoに接続します。

ログによると、クライアントコンピューターはNAT=の背後にあり、「プライベート」IPアドレスを持っています。それが知っている唯一のアドレスであるため、PORTコマンドで送信するものです。

通常、ルーターはFTP接続を認識し、こっそりとedit PORTコマンドを実行して、プライベートアドレスをルーター独自のパブリックアドレスに置き換えます。 (または、運が悪ければ、ゴミに置き換えられます。)

ただし、コントロール接続はTLSを使用して暗号化されているため、ルーターcannotはこの修正を実行し(サーバーはすべて暗号化されたデータであると見なします)、サーバーはクライアントが送信したもの、つまりプライベートアドレスを正確に受信します。

サーバーが別のネットワーク上にあるため、プライベートアドレスに到達できない可能性があります(これがNATの要点です)。セキュリティ上の理由から、ほとんどのサーバーは試行錯誤することはありませんが、制御接続の送信元と完全に一致しないアドレスを即座に拒否します。

tl; dr FTPクライアントをパッシブモードに切り替えます。はい、ログにはパッシブモード(PASV)も壊れていることが示されています。しかし、少なくともそれはsomewhatサーバーが専用のパブリックIPアドレスを持っている場合は修正可能ですが、アクティブモードはそうではありません。


PASVはどうですか?まあ、問題は似ています。

通常、サーバーのファイアウォールはFTP制御接続をスヌープし、「パッシブモードに入ります(x、y、z…)」応答から一時ポートを抽出し、「関連」接続に属するものとしてマークします。次に、ルール#004はそれを許可します。

ただし、繰り返しになりますが、iptablesはTLSを介して認識できず(認識されるのはすべて暗号化されたデータです)、FTPデータ接続を関連するものとして認識できなくなります。そのため、接続はルール999に到達し、ドロップされます。

PASVを機能させるには、特定の パッシブポートの範囲 (正確にはどの範囲でもかまいません)を使用するようにProFTPdを構成し、それらのポートへの接続を許可するようにiptablesに指示する必要があります。

8
user1686
PORT 192,168,192,14,211,181

このコマンドは、クライアントがサーバーからのデータ接続のためにIPアドレス192.168.192.14ポート54197で待機していることを意味します。 192.168。*。*は、インターネット経由でルーティングできないプライベートIPアドレスです。つまり、このIPアドレスはインターネット上のサーバーから到達できません。このため、サーバーはPORTコマンドを無効と見なします。

3
Steffen Ullrich

これは私にとってうまくいきました: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
albert