使用Dovecot将SASL添加到Postfix
如果邮件服务器将邮件中继到另一个域(即,收件人的地址不在我们的域中)并且该邮件来自我们的网络外部,则该服务器称为开放中继。 垃圾邮件发送者一直在寻找开放式中继,因为这种宽容行为很容易利用,而Postfix试图通过仅转发来自我们网络的消息来保护我们。 不幸的是,限制合法用户仅在他们在我们的网络上时才通过服务器发送电子邮件是不切实际的。 此配方教您如何使用Dovecot将简单身份验证和安全层(SASL)身份验证添加到Postfix的配置。 然后Postfix会愉快地为我们的用户认证用户中继消息,无论他们的网络位置如何,同时仍然拒绝为其他人这样做.
准备
此配方需要一个CentOS系统,其Postfix配置如上一个配方中所述。 通过使用root帐户登录或使用sudo,还需要管理权限.
怎么做。。。
请按照以下步骤将Postfix保护到SASL:
- 安装dovecot包:
yum install dovecot
- 使用文本编辑器打开/etc/dovecot/conf.d/10-master.conf文件:
vi /etc/dovecot/conf.d/10-master.conf
- 找到/var/spool/postfix/private/auth的unix_listener部分。 通过删除前导#字符取消注释该部分:
# Postfix smtp-authunix_listener /var/spool/postfix/private/auth { mode = 0666}
- 将模式更新为0660并将参数user和group添加到值为postfix的部分:
# Postfix smtp-authunix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix}
- 保存更改并关闭文件。
- 使用文本编辑器打开/etc/dovecot/conf.d/10-auth.conf文件:
vi /etc/dovecot/conf.d/10-auth.conf
- 找到auth_mechanisms选项并将login添加到其值:
auth_mechanisms = plain login
- 保存更改并关闭文件。
- 启动Dovecot服务器并可选择使其在系统重新启动时自动启动:
systemctl start dovecot.servicesystemctl enable dovecot.service
- 使用文本编辑器打开/etc/postfix/main.cf文件:
vi /etc/postfix/main.cf
- 在配置文件的末尾,添加以下选项和值:
smtpd_sasl_auth_enable = yessmtpd_sasl_type = dovecotsmtpd_sasl_path = private/authsmtpd_sasl_security_options = noanonymous
- 保存更改并关闭文件。
- 重启Postfix:
systemctl restart postfix.service
工作原理
Dovecot主要是一个邮件检索服务器,为用户提供使用POP和IMAP协议访问其电子邮件的权限,它还允许Postfix挂钩其SASL身份验证机制。我们需要一个检索服务器供用户从系统中获取他们的电子邮件,Dovecot和Postfix很好地集成,所以选择Dovecot比其他选项更有意义。
Dovecot的配置被组织成各种文件,每个文件都针对特定功能或功能。对于此配方,我们需要更新主配置文件/etc/dovecot/conf.d/10-master.conf和身份验证配置文件/etc/dovecot/conf.d/10-auth.conf。
在10-master.conf中,我们找到了unix_listener参数,该参数定义了将与Postfix共享的SMTP身份验证服务。取消注释它将创建Dovecot和Postfix将通信的套接字文件/ var / spool / postfix / private / auth。然后,我们更新了mode参数并添加了用户和groupaarameters以保护套接字的所有权和访问权限:
unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix}
在10-auth.conf中,我们找到了auth_mechanism参数并添加了对其值的登录。 此参数设置Dovecot使用的机制列表,login是专门用于SMTP身份验证的机制:
auth_mechanisms = plain login
plain允许用户以纯文本形式提供用户名和密码。 login也被认为是纯文本机制,但不要担心; 你将学习如何在下一个食谱中确保这一点.
最后一点配置涉及将必要的SASL相关参数添加到Postfix的main.cf文件中:
smtpd_sasl_auth_enable = yessmtpd_sasl_type = dovecotsmtpd_sasl_path = private/authsmtpd_sasl_security_options = noanonymous
smtpd_sasl_auth_enable启用SASL身份验证,smtpd_sasl_type通知Postfix它将使用Dovecot的身份验证服务。 smtpd_sasl_path参数指定套接字文件的路径,该文件用于与Dovecot相对于Postfix的工作目录进行通信。 smtpd_sasl_security_options禁止匿名连接,并要求每个人都进行身份验证.
Postfix期望用户名和密码为Base64编码,因此我们需要对它们进行编码,然后才能使用Telnet测试我们的配置。 可以使用base64,但在提供原始值时请注意不要引入尾随换行符。 调用base64后,您可以在stdin上输入用户名或密码,然后立即按Ctrl + D两次,但不要按Enter键。 您可能希望将base64的输出重定向到稍后可以转储的单独文件,以便更容易区分编码值和原始值,因为它们似乎在没有换行符的终端中一起运行:
base64 > ./usernametboronczykbase64 > ./passwordP@$$W0rdcat ./username ./password
注意
尽管有“新线警惕”的麻烦,但这种方法比如下管道价值更好:
echo -n tboronczyk | base64
命令的调用将保留在shell的历史记录中。 虽然这对于用户名来说很好,但由于这个原因,绝不应该在命令行上提供敏感数据(如密码)作为命令的一部分.
在端口25上使用telnet连接到服务器后,发送AUTH LOGIN命令以启动身份验证。 Postfix应响应VXNlcm5hbWU6,这是Username的Base64编码值:
AUTH LOGIN334 VXNlcm5hbWU6
提供您的编码用户名,然后按Enter键。 然后Postfix以UGFzc3dvcmQ6响应,正如您可能已经猜到的那样,它是Password的编码版本。 提供编码密码后,将通知您身份验证是否成功:
See also
Refer to the following resources for more information on Postfix, Dovecot, and SASL:
- The Dovecot Homepage (http://www.dovecot.org/)
- RFC 4422: Simple Authentication and Security Layer (https://tools.ietf.org/html/rfc4422)
- Postfix SASL How-To (http://www.postfix.org/SASL_README.html)
- 25, 465, 587... What Port Should I Use? (http://blog.mailgun.com/25-465-587-what-port-should-i-use/)