proftpd tls内部连接正常,外部连接失败

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 地址执行相同操作时,我收到此消息:

已连接(00000003)140567084144296:错误:140770FC:SSL 例程:SSL23_GET_SERVER_HELLO:未知协议:s23_clnt.c:774:

没有可用的对等证书

未发送客户端证书 CA 名称

SSL 握手已读取 91 个字节并写入 300 个字节

新的,(无),密码是(无)不支持安全重新协商压缩:无扩展:无

当我进行外部连接时,TLS 日志中没有消息,而在 proftpd.log 中只有此消息:

3 月 02 日 13:22:38 domain.tld proftpd[31274] domain.tld (domain.tld[ip.addr.es.s]): FTP 会话已打开。

3 月 02 日 13:22:38 domain.tld proftpd[31274] domain.tld (domain.tld[ip.addr.es.s]): FTP 会话已关闭。

我检查了防火墙,但那不应该是问题

有人知道我该怎么做才能让它工作吗?

编辑

我的 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 地址替换了我的域名和 IP 地址

答案1

看起来你的tls.conf配置指令仅适用于默认的“服务器配置”虚拟主机,并且不是全部服务器中的虚拟主机。与 Apache 不同,ProFTPD 配置指令(<VirtualHost>部分之外)是不是全局应用。因此,您需要mod_tls使用一个<Global>部分明确地将这些配置设为全局配置,IE

<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 操作指南

希望这可以帮助!

相关内容