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のキャッシュかもしれません)
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が役立つことを理解しました)。
最初の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に指示する必要があります。
PORT 192,168,192,14,211,181
このコマンドは、クライアントがサーバーからのデータ接続のためにIPアドレス192.168.192.14ポート54197で待機していることを意味します。 192.168。*。*は、インターネット経由でルーティングできないプライベートIPアドレスです。つまり、このIPアドレスはインターネット上のサーバーから到達できません。このため、サーバーはPORTコマンドを無効と見なします。
これは私にとってうまくいきました: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)