我想通过服务来保护我的根服务器(进一步)服务,从最繁忙的 SMTP 服务(Postfix MTA)开始。在设置所有内容的过程中,我阅读了很多关于安全和加密的内容,并尽我所能收集最有价值的信息。但是,一些问题似乎仍然存在,我找不到其他任何东西来使配置完美。
期望的行为
我希望服务尽可能严格,即尽可能使用安全加密。STARTTLS
只有在(提交)安全加密后才允许进行身份验证。
- 服务器到服务器通信:高度加密,仅在必要时不加密
- 客户端到服务器的通信:仅高度加密
- 仅在端口 587 进行客户端身份验证(可选?)
差异化
主要关注的是 Postfix MTA 的安全性、加密和安全相关设置。我不寻求反垃圾邮件或反病毒解决方案的建议——这完全是另一回事。电子邮件加密不是选项,因为关注的是隐私而不是真实性,这最终不能证明客户端需要付出不合理的高昂努力是合理的。
当前配置
- 服务器:Debian 7 (Wheezy)
- MTA:后缀 2.9.6
- CaCert 证书:4096 位 / sha512-RSA
文件/etc/postfix/main.cf
摘录:
tls_random_source=dev:/dev/urandom
# Incoming
smtpd_tls_cert_file=/etc/ssl/cacert/certs/example.com.crt
smtpd_tls_key_file=/etc/ssl/cacert/private/example.com.key
smtpd_use_tls=yes
smtpd_tls_auth_only=yes
smtpd_tls_security_level=may
smtpd_tls_mandatory_ciphers=high
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
# Outgoing
smtp_tls_cert_file=/etc/ssl/cacert/certs/example.com.crt
smtp_tls_key_file=/etc/ssl/cacert/private/example.com.key
smtp_use_tls=yes
smtp_tls_security_level=may
smtp_tls_mandatory_ciphers=high
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# SASL Authentication (dovecot)
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = no
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
# prevent leaking valid e-mail addresses
disable_vrfy_command = yes
文件/etc/postfix/master.cf
摘录:
smtp inet n - - - - smtpd
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
开放式问题
-
信任链中有一个自签名证书 [...] 证书存在有效性问题。很少为 SMTP 服务器验证证书,因此这并不意味着不会使用 STARTTLS。一般来说,没有有效证书是一种不好的做法,不验证它们是一种更糟糕的做法。任何尝试的加密通信都几乎容易受到中间人攻击。
这是关于服务器到服务器通信的问题吗?如果是这样,我可以做些什么来改善这一点而无需支付证书?(我只有我个人认识的客户)
同一网站指出:
接受匿名 Diffie-Hellman。这对于中间人攻击是可疑的。
需要什么设置来禁用这些?(另见下一个列表项)
testssl.sh显示端口 587 的问题:
--> Testing standard cipher lists ... Anonymous NULL Cipher offered (NOT ok) Anonymous DH Cipher offered (NOT ok) ...
这可能与上一个项目相同。
testssl.sh显示端口 25 的问题:
--> Testing Protocols SSLv3 offered (NOT ok) ... --> Testing standard cipher lists ... Anonymous NULL Cipher offered (NOT ok) Anonymous DH Cipher offered (NOT ok) 40 Bit encryption offered (NOT ok) 56 Bit encryption Local problem: No 56 Bit encryption configured in /usr/bin/openssl Export Cipher (general) offered (NOT ok) Low (<=64 Bit) offered (NOT ok) DES Cipher offered (NOT ok) Triple DES Cipher offered Medium grade encryption offered ... RC4 seems generally available. Now testing specific ciphers... ...
这仅适用于服务器到服务器的通信吗?如果不是,这怎么可能?至少应根据
main.cf
文件禁用 SSLv3。如何解决这些问题?-
*.example.com - 证书与主机名不匹配
本身可能不是安全问题,但与上面的第一项结合起来很有趣。如果通配符证书不正确,我应该选择什么主机名?example.com或host.example.com?
我还能做些什么来使配置完全安全?