Centos

VSFTPD FileZilla GnuTLS 錯誤 -15(收到意外的 TLS 數據包)

  • September 6, 2019

我同時設置了兩個新的 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

引用自:https://unix.stackexchange.com/questions/270539