proftpd tls内部连接工作,外部连接失败

我试图确保我的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中有更详细的介绍。

希望这可以帮助!