通过理解安全证书来保护你的 Linux 邮件做事。
来源:https://linux.cn/article-12217-1.html作者:Marc Skinner译者:Acceleratorrrr常日,不管你是通过 大略邮件传输协议(Simple Mail Transport Protocol)(SMTP)或者 互联网访问协议(Internet Message Access Protocol)(IMAP)或 邮局协议(Post Office Protocol)(POP)发送或者接管邮件,邮件做事默认都因此无保护的明文来传输数据。比来随着数据加密成为越来越多程序的共识,你须要 安全套接层(Secure Sockets Layer)/ 传输层安全性(Transport Layer Security)(SSL/TLS)的安全证书来保护你的邮件做事。
首先,快速回顾一下邮件做事和协议的基本流程。邮件通过 SMTP 从 TCP 端口 25 发出。这个协议依赖 DNS 邮件交流做事器(Mail eXchanger)(MX)记录的地址信息来传输邮件。当邮件到达邮件做事器后,可以被以下两种做事中的任意一种检索:利用 TCP 端口 143 的 IMAP,或者利用 TCP 端口 110 的 POP3(邮局协议第 3 版)。然而,以上做事都默认利用明文传输邮件和认证信息。这非常的不屈安!

为了保护电子邮件数据和认证,这些做事都增加了一个安全功能,使它们可以利用 SSL/TLS 证书对数据流和通讯进行加密封装。SSL/TLS 是如何加密数据的细节不在本文谈论范围,有兴趣的话可以阅读 Bryant Son 关于互联网安全的文章 理解更多细节。概括的说,SSL/TLS 加密是一种基于公钥和私钥的算法。
通过加入这些安全功能后,这些做事将监听在新的 TCP 端口:
天生 SSL/TLS 证书OpenSSL 可以天生免费的 SSL/TLS 证书,或者你也可以从公共 证书颁发机构(Certificate Authoritie)(CA)购买。过去,天生自签发证书十分大略而且通用,但是由于安全被日益重视,大部分的邮件客户端是不信赖自签发证书的,除非手动设置。
如果你只是自己利用或者做做测试,那就利用自签发证书省点钱吧。但是如果很多人或者客户也须要利用的话,那最好还是从受信赖的证书颁发机构购买。
不管是哪种情形,开始要求新证书的过程是利用 Linux 系统上的 OpenSSL 工具来创建一个 证书签发要求(Certificate Signing Request) (CSR):
$ openssl req -new -newkey rsa:2048 -nodes -keyout mail.mydomain.key -out mail.mydomain.csr
这个命令会为你想保护的做事同时天生一个新的 CSR 文件和一个私匙。它会讯问你一些证书干系的问题,如:位置、做事器的 完备合规域名(Fully Qualified Domain Name)(FQDN)、邮件联系信息等等。当你输入完这些信息后,私钥和 CSR 文件就天生完毕了。
如果你想天生自签发证书
如果你想要天生自签发证书的话,在运行以上 CSR 命令之前,你必须先创建一个 自己的根 CA 。你可以通过以下方法创建自己的根 CA。
$ openssl genrsa -des3 -out myCA.key 2048
命令行会提示你输入一个密码。请输入一个繁芜点的密码而且不要弄丢了,由于这将会是根 CA 私钥的密码,正如其名称所示,它是你的证书中所有信赖关系的根。
接下来,天生根 CA 证书:
$ openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem
在回答完一些问题后,你就拥有一个有效期为 5 年的根 CA 证书了。
用之前天生的 CSR 文件,你可以要求天生一个新证书,并由您刚才创建的根 CA 署名。
$ openssl x509 -req -in mail.mydomain.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out mail.mydomain.pem -days 1825 -sha256
输入你的根 CA 私钥的密码来创建和签署证书。
现在你有了配置电子邮件做事以增强安全性所需的两个文件:私匙文件 mail.mydomain.key 和公开证书文件 mail.mydomain.pem。
如果你乐意购买证书
如果你乐意从机构购买证书,则须要上传 CSR 文件到证书颁发机构的系统中,它将会被用于天生 SSL/TLS 证书。证书可作为文件下载,比如 mail.mydomain.pem。很多 SSL 机构也须要你下载一个中间证书。如果是这样的话,你必须把这个两个证书合并成一个,这样电子邮件做事就可以将这两个证书结合起来处理。可以利用以下命令把你的证书和第三方中间证书合并在一起:
$ cat mail.mydomain.pem gd_bundle-g2-g1.crt > mail.mydomain.pem
值得一提的是 .pem 文件后缀代表 隐私增强邮件(Privacy-Enhanced Mail)。
现在你就有全部的设置邮件做事安全所需文件了:私匙文件 mail.mydomain.key 和组合的公开证书文件 mail.mydomain.pem。
为你的文件天生一个安全的文件夹不管你是的证书是自签发的或者从机构购买,你都须要天生一个安全的,管理员拥有的文件夹用于保存这两个文件。可以利用以下命令来天生:
$ mkdir /etc/pki/tls$ chown root:root /etc/pki/tls$ chmod 700 /etc/pki/tls
在复制文件到 /etc/pki/tls 后,再次设置这些文件的权限:
$ chmod 600 /etc/pki/tls/
配置你的 SMTP 和 IMAP 做事
接下来,让 SMTP 和 IMAP 做事利用新的安全证书。我们用 postfix 和 dovecot 来作为例子。
用你顺手的编辑器来编辑 /etc/postfix/main.cf 文件。添加以下几行:
smtpd_use_tls = yessmtpd_tls_cert_file = /etc/pki/tls/mail.mydomain.pemsmtpd_tls_key_file = /etc/pki/tls/mail.mydomain.key
自定义选项
以下选项可以启用或禁用各种加密算法,协议等等:
smtpd_tls_eecdh_grade = strongsmtpd_tls_protocols= !SSLv2, !SSLv3, !TLSv1, !TLSv1.1smtpd_tls_mandatory_protocols= !SSLv2, !SSLv3, !TLSv1, !TLSv1.1smtpd_tls_mandatory_ciphers = highsmtpd_tls_security_level=maysmtpd_tls_ciphers = hightls_preempt_cipherlist = yessmtpd_tls_mandatory_exclude_ciphers = aNULL, MD5 , DES, ADH, RC4, PSD, SRP, 3DES, eNULLsmtpd_tls_exclude_ciphers = aNULL, MD5 , DES, ADH, RC4, PSD, SRP, 3DES, eNULLsmtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
编辑 /etc/dovecot/dovecot.conf 文件,添加以下三行:
ssl = requiredssl_cert = </etc/pki/tls/mail.mydomain.pemssl_key = </etc/pki/tls/mail.mydomain.key
添加下列更多选项来启用或禁用各种加密算法、协议等等(我把这些留给你来理解):
ssl_cipher_list = EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:ALL:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SSLv2ssl_prefer_server_ciphers = yesssl_protocols = !SSLv2 !SSLv3 !TLSv1 !TLSv1.1ssl_min_protocol = TLSv1.2
设置 SELinux 高下文
如果你的 Linux 发行版启用了 SELinux,请为你的新证书文件设置精确的 SELinux 高下文。
对付 Postfix 设置 SELinux:
$ chcon -u system_u -t cert_t mail.mydomain.
对付 Dovecot 设置 SELinux:
$ chcon -u system_u -t dovecot_cert_t mail.mydomain.
重启这些做事,并与你相应更新过的电子邮件客户端配置连接。有些电子邮件客户端会自动探测到新的端口,有些则须要你手动更新。
测试配置用 openssl 命令行和 s_client 插件来大略测试一下:
$ openssl s_client -connect mail.mydomain.com:993$ openssl s_client -starttls imap -connect mail.mydomain.com:143$ openssl s_client -starttls smtp -connect mail.mydomain.com:587
这些测试命令会打印出很多信息,关于你利用的连接、证书、加密算法、会话和协议。这不仅是一个验证新设置的好方法,也可以确认你利用了适当的证书,以及在 postfix 或 dovecot 配置文件中定义的安全设置精确。
保持安全!
via: https://opensource.com/article/20/4/securing-linux-email
作者: Marc Skinner 选题: lujun9972 译者: Acceleratorrrr 校正: wxy
本文由 LCTT 原创编译, Linux中国 名誉推出
点击“理解更多”可访问文内链接