VSFTPD FileZilla GnuTLS 錯誤 -15(收到意外的 TLS 數據包)
我同時設置了兩個新的 CentOS 7 盒子,所以配置應該相同,只是 IP 地址和主機名不同。
我安裝了 VSFTPD 並配置了被動埠。一個盒子連接正常,沒有問題,但是第二個盒子不斷地向我拋出這個錯誤:
GnuTLS error -15: An unexpected TLS packet was received.
這是調試 FileZilla 跟踪:
Status: Connecting to 192.168.20.68:21... Status: Connection established, waiting for welcome message... Trace: CFtpControlSocket::OnReceive() Response: 220 (vsFTPd 3.0.2) Trace: CFtpControlSocket::SendNextCommand() Command: AUTH TLS Trace: CFtpControlSocket::OnReceive() Response: 234 Proceed with negotiation. Status: Initializing TLS... Trace: CTlsSocket::Handshake() Trace: CTlsSocket::ContinueHandshake() Trace: CTlsSocket::OnSend() Trace: CTlsSocket::OnRead() Trace: CTlsSocket::ContinueHandshake() Trace: CTlsSocket::OnRead() Trace: CTlsSocket::ContinueHandshake() Trace: CTlsSocket::OnRead() Trace: CTlsSocket::ContinueHandshake() Trace: TLS Handshake successful Trace: Protocol: TLS1.2, Key exchange: ECDHE-RSA, Cipher: AES-256-GCM, MAC: AEAD Status: Verifying certificate... Status: TLS connection established. Trace: CFtpControlSocket::SendNextCommand() Command: USER datamover Trace: CTlsSocket::OnRead() Trace: CFtpControlSocket::OnReceive() Response: 331 Please specify the password. Trace: CFtpControlSocket::SendNextCommand() Command: PASS ******* Trace: CTlsSocket::OnRead() Trace: CTlsSocket::Failure(-15) Error: GnuTLS error -15: An unexpected TLS packet was received. Trace: CRealControlSocket::OnClose(106) Trace: CControlSocket::DoClose(64) Trace: CFtpControlSocket::ResetOperation(66) Trace: CControlSocket::ResetOperation(66) Error: Could not connect to server
錯誤總是在密碼檢查之後。
我知道問題不是 SELinux,因為我禁用了它。問題也不在於防火牆,因為我嘗試禁用防火牆守護程序(firewalld)。
這是 /etc/vsftpd/vsftpd.conf 文件的相關部分。
listen=YES listen_ipv6=NO pasv_enable=YES pasv_max_port=10100 pasv_min_port=10090 pasv_address=192.168.20.88 ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO ssl_ciphers=HIGH require_ssl_reuse=NO rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
我進行了Google搜尋,但沒有看到任何 15 個錯誤程式碼。
想法?
我發布這個答案是希望它可以幫助將來的某個人,可能是我,因為我遇到了解決這個問題。
我沒有
local_root
在/etc/vsftpd/vsftpd.conf
文件中正確設置。該設置指向一個不存在的文件夾。通過我,我看到 FileZilla 中的密碼命令失敗,所以我認為它不喜歡密碼。讓我朝著正確方向思考的是,我花時間研究了為什麼我沒有收到詳細的日誌。我沒有收到任何日誌。一旦我開始接收調試日誌,我看到了 FTP 協議,我看到 FTP 伺服器對密碼說 OK。可悲的是,沒有任何類型的日誌記錄,但我想到協商本地根將是驗證密碼後的下一步行動。我是對的,這導致了我的問題。
這是
/etc/vsftpd/vsftpd.conf
文件中的程式碼片段,包含本地根目錄。# You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that # the user does not have write access to the top level directory within the # chroot) chroot_local_user=YES #local_root=/mnt/raid1 local_root=/ftproot #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list
這是我最終打開詳細日誌記錄的方式,儘管我現在將其關閉以節省磁碟空間並提高性能。
# Activate logging of uploads/downloads. xferlog_enable=YES # # If you want, you can have your log file in standard ftpd xferlog format. # Note that the default log file location is /var/log/xferlog in this case. xferlog_std_format=NO log_ftp_protocol=YES # # Activate logging of uploads/downloads. xferlog_enable=YES
恕我直言,我認為評論是一個錯誤,因為 xferlog_enable 不僅僅是文件的實際上傳和下載。此屬性還打開日誌記錄。一項 Google 研究證明,
log_ftp_protocol=YES
需要xferlog_enable=YES
.
在 CENTOS 7 中執行 PASS 命令後,我遇到了同樣的錯誤。(GnuTLS 錯誤 -15:收到了意外的 TLS 數據包。)
我的解決方案如下:
我必須在 vsftpd.conf 中添加以下內容:
allow_writeable_chroot=YES chroot_local_user=YES local_root=/ftphome/$USER user_sub_token=$USER