Я пытаюсь защитить свой сервер 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:
нет доступного однорангового сертификата
Имена ЦС сертификатов клиента не отправлены
Подтверждение SSL прочитало 91 байт и записало 300 байт
Новое, (NONE), Cipher is (NONE) Безопасное повторное согласование НЕ поддерживается Сжатие: НЕТ Расширение: НЕТ
В журнале TLS нет сообщения, когда я делаю внешнее соединение, а в журнале proftpd.log есть только это сообщение:
02 марта 13:22:38 domain.tld proftpd [31274] domain.tld (domain.tld [ip.addr.es.s]): открыт сеанс FTP.
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-адрес на поддельные
Похоже, твой tls.conf
директивы конфигурации применяются только к vhost "конфигурации сервера" по умолчанию, и не к все vhosts на сервере. В отличие от Apache, директивы конфигурации ProFTPD, кроме <VirtualHost>
раздел, являются не применяется глобально. Поэтому вам нужно будет явно указать mod_tls
глобальные конфигурации с помощью <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's Vhost howto.
Надеюсь это поможет!