设置Postfix使用TLS加密全部数据传输

02/19/2016

电子邮件在邮件服务器间是明文传输的这个事实和其他教科书式信息安全案例一样,即便是在斯诺登曝光了棱镜计划之后,仍然让许多网络管理员麻木。其中的原因有很多,通常情况下,除非运行组织内部的邮件组,服务器发送的邮件基本上都是通常不含隐私信息的通知邮件,其次便是常用的邮件服务器软件默认配置并没有开启加密。然而,最近Gmail出了个星辰大海的损招倒逼所有管理员开启加密——在所有收到的未加密邮件上增加了一个“未对此邮件进行加密”提示。

出此损招之后,所有使用未开启TLS加密功能的Postfix服务器发送给Gmail的邮件便会出现例如“kaijia.me 未对此邮件进行加密”的提示。因此出现这种情况时就需要调整配置开启TLS加密了,在Postfix中,需要修改/etc/postfix/main.cf增加一下两行:

其中smtpd_tls_security_level设置服务器接收邮件的TLS安全等级,而smtp_tls_security_level则是设置服务器发送邮件的TLS安全等级。此两个选项有三个共同的参数nonemayencryptnone表示禁用TLS加密;may在SMTPD接收端表示向客户端通告服务器支持加密但允许客户端使用不加密方式传输邮件,在SMTP发送端表示如果服务器通告支持加密即使用加密方式发送邮件;encrypt表示强制要求加密。除了以上三个参数外,外发邮件时smtp_tls_security_level还有danedane-onlyfingerprintverifysecure几个不常用的参数。此处选择may最为合适,这样即使客户端或接收服务器不开启加密仍可以以未加密形式通信,避免由于对方服务器不支持加密而己方不支持不加密导致邮件无法投递。

完成以上设置后重启Postfix:

之后发送邮件,Postfix就将使用TLS加密全部数据传输,之后在Gmail中收到的邮件便会有“标准(传输层安全协议)”的提示。