vsftpd
をcentos
にインストールするときはいつでも、ユーザーのjail環境のみをセットアップし、残りはvsftpd
のデフォルト構成です。ユーザーを作成してfilezila
ftpクライアントで接続しようとしましたが、パッシブモードで接続できませんでした。私は常にtransfer settings
をアクティブモードに変更してftp server
に正常に接続します。それ以外の場合は
Error: Failed to retrieve directory listing
vsftp.conf
ファイルのディレクティブを変更する方法はありますか?パッシブモードでサーバーに接続できますか?
Vsftpdのパッシブモードを構成するには、vsftpd.confでいくつかのパラメーターを設定する必要があります。
pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090
これにより、パッシブモードが有効になり、データ接続に11個のポートを使用するように制限されます。ファイアウォールでこれらのポートを開く必要があるため、これは便利です。
iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT
これをテストした後、すべてが機能する場合は、ファイアウォールの状態を
service iptables save
/etc/sysconfig/iptables
ファイルを更新します。
これを行うには、CentOS 7です。iptablesではなく、新しいfirewalldを使用する必要があります。
ゾーンを見つけます:
# firewall-cmd --get-active-zones
public
interfaces: eth0
私のゾーンは「パブリック」なので、ゾーンをパブリックに設定し、ポート範囲を追加してから、リロードします。
# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload
接続するとどうなりますか
クライアントがポート21でvsftpdサーバーに接続します。
サーバーはクライアントに応答して、上記で指定された範囲からどのポートに接続するかを伝えます。
クライアントは指定されたポートでデータ接続を行い、セッションが続行されます。
さまざまなftp modes の説明はこちらです。
パッシブモードを有効にするには、vsftp.confで次の構成オプションを設定します。
pasv_enable=YES
pasv_min_port=41361
pasv_max_port=65534
pasv_address=xxx.xxx.xxx.xxx
もちろん、開始ポートと終了ポートを変更することができ、xxxをサーバーのパブリックIPに置き換える必要があります。
さらに、ファイアウォールでパッシブモードのポート範囲を開く必要があります。 CentOSでは、ip_conntrack_ftp
モジュールは、ファイアウォールでftp接続を処理します。編集/etc/sysconfig/iptables-config
およびiptables_MODULESオプションにip_conntrack_ftpを追加します。その後、iptablesを再起動します。
/sbin/service iptables restart
pasv_enable=YES
の横で、VSFTPがPASVモードを実行するポート範囲を指定します。
pasv_min_port=50000
pasv_max_port=50999
port_enable=YES
Iptablesがこれらのポートでのパケット送信を許可するように設定することを忘れないでください:
iptables -I INPUT -p tcp --dport 50000:50999 -j ACCEPT
通常、これはftpサーバー、vsftpdではなく、パッシブモードが使用されないようにするiptableのようなファイアウォールです(データ転送に必要なTCP接続のブロック)。
CentOS 8でvsftpパッシブモードを機能させるには、次の手順を実行する必要がありました。
Vsftpd構成でパッシブモードを有効にする/etc/vsftpd/vsftpd.config
:
pasv_enable=Yes
pasv_min_port=50000
pasv_max_port=50999
FirewalldでFTPサービスを有効にします。
firewall-cmd --permanent --zone=public --add-service=ftp
firewall-cmd --reload
別の post で述べたように、カーネルモジュール「nf_conntrack_ftp」(CentOS 8ではすでにそうでした)をロードし、カーネル設定で「nf_conntrack_helper」を有効にする必要があります:
echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
次の行を/etc/sysctl.conf
(または/etc/sysctl.d/10-nf_conntrack_helper.conf
が存在する場合は/etc/sysctl.d/
)に追加して、再起動の永続的な設定を行います。
net.netfilter.nf_conntrack_helper=1
接続トラックを有効にすると、ローカルファイアウォールでパッシブポートを追加構成する必要はありません。