我试图确保我的proftpd服务器,但我不明白我做错了什么。
我的tls.conf
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1 TLSCipherSuite AES128+EECDH:AES128+EDH TLSOptions NoCertRequest AllowClientRenegotiations TLSRSACertificateFile /etc/ssl/certs/mailserver.pem TLSRSACertificateKeyFile /etc/ssl/private/mailserver.pem TLSCACertificateFile /etc/apache2/ssl.crt/1_root_bundle.crt TLSVerifyClient off TLSRequired on RequireValidShell no TLSRenegotiate none </IfModule>
我使用相同的证书文件的HTTPS连接,工作都很好。 当我这样做:
openssl s_client -connect 127.0.0.1:21 -starttls ftp
我得到一个很好的ssl连接。 但是,当我做我的外部IP地址相同,我得到这个消息:
CONNECTED(00000003)140567084144296:错误:140770FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议:s23_clnt.c:774:
没有对等证书可用
未发送客户端证书CA名称
SSL握手已经读取了91个字节并写入了300个字节
新(NONE),密码是(NONE)不支持安全重协商压缩:无扩展:无
在我做外部连接时,在TLS日志中没有消息,而在proftpd.log中只有这条消息:
Mar 02 13:22:38 domain.tld proftpd [31274] domain.tld(domain.tld [ip.addr.es.s]):打开FTP会话。
Mar 02 13:22:38 domain.tld proftpd [31274] domain.tld(domain.tld [ip.addr.es.s]):FTP会话已closures。
我检查了防火墙,但不应该是这个问题
有人知道我能做些什么来做这个工作吗?
编辑
我的proftpd.conf
Include /etc/proftpd/modules.conf UseIPv6 on IdentLookups off ServerName "Debian" ServerType standalone DeferWelcome off MultilineRFC2228 on DefaultServer on ShowSymlinks on TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DisplayLogin welcome.msg DisplayChdir .message true ListOptions "-l" DenyFilter \*.*/ Port 0 <IfModule mod_dynmasq.c> </IfModule> MaxInstances 30 User proftpd Group nogroup Umask 022 022 AllowOverwrite on TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log <IfModule mod_quotatab.c> QuotaEngine off </IfModule> <IfModule mod_ratio.c> Ratios off </IfModule> <IfModule mod_delay.c> DelayEngine on </IfModule> <IfModule mod_ctrls.c> ControlsEngine off ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock </IfModule> <IfModule mod_ctrls_admin.c> AdminControlsEngine off </IfModule> Include /etc/proftpd/tls.conf Include /etc/proftpd/conf.d/ <Global> DefaultRoot ~ RootLogin off </Global> DefaultRoot ~ ServerIdent on "FTP Server ready." DefaultAddress domain.tld
我的虚拟主机,它们被virtualmin自动写入tls.conf
<VirtualHost ftp.domain1.tld> Group domain1 User domain1 DefaultRoot ~ </VirtualHost> <VirtualHost ftp.domain1.tld> ServerName "domain1.tld" <Anonymous /home/domain1/ftp> User domain1 Group domain1 UserAlias anonymous ftp <Limit WRITE> DenyAll </Limit> ExtendedLog /home/domain1/logs/ftp.log </Anonymous> </VirtualHost> <VirtualHost 1.2.3.4> ServerName ftp.domain2.tld <Anonymous /home/domain2/ftp> User domain2 Group domain2 UserAlias anonymous ftp <Limit WRITE> DenyAll </Limit> RequireValidShell off ExtendedLog /home/domain2/logs/ftp.log <Directory /> AllowOverwrite on </Directory> </Anonymous> </VirtualHost>
当然,我用假的取代了我的域名和IP地址
它看起来像你的tls.confconfiguration指令只适用于默认的“服务器configuration”虚拟主机,而不是服务器中的所有虚拟主机。 与Apache不同,“ <VirtualHost>部分之外的ProFTPDconfiguration指令不是全局应用的。 所以你需要使用一个<Global>部分明确地使这些mod_tlsconfiguration成为<Global> , 即 :
<IfModule mod_tls.c> # Apply these configurations globally, to all vhosts <Global> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1 TLSCipherSuite AES128+EECDH:AES128+EDH TLSOptions NoCertRequest AllowClientRenegotiations TLSRSACertificateFile /etc/ssl/certs/mailserver.pem TLSRSACertificateKeyFile /etc/ssl/private/mailserver.pem TLSCACertificateFile /etc/apache2/ssl.crt/1_root_bundle.crt TLSVerifyClient off TLSRequired on # Note: This particular directive is not specific to mod_tls; # I'm not sure why it's here, versus elsewhere. RequireValidShell no TLSRenegotiate none </Global> </IfModule>
这个行为在ProFTPD的Vhost howto中有更详细的介绍。
希望这可以帮助!