本教程介绍如何在Ubuntu 16.04/18.04上使用Postfix SMTP服务器设置OpenDMARC的方法,OpenDMARC是MTA(消息传输代理,又名SMTP服务器)的开源DMARC电子邮件策略过滤器。
在Ubuntu 16.04/Ubuntu 18.04或19.04上使用Postfix SMTP Server设置OpenDMARC OpenDMARC是一个开源软件,可以执行DMARC检查和报告,它已经在Ubuntu存储库中了,因此可以运行以下命令来安装: sudo apt install opendmarc 安装后,它将自动启动,检查其状态: systemctl status opendmarc 输出信息如下:
请注意,禁用系统引导时的自动启动,我们可以通过以下命令实现: sudo systemctl enable opendmarc 然后使用文本编辑器编辑主配置文件: sudo nano /etc/opendmarc.conf 参考:GNU nano 4.0发布下载,易于使用的文本编辑器。 找到以下行: # RejectFailures false 默认情况下,即使域的策略设置为p=reject,OpenDMARC也不会拒绝未通过DMARC检查的电子邮件,如果您希望拒绝未通过DMARC的电子邮件,请检查域的策略是否设置为p=reject,然后取消注释此行并将false更改为true: RejectFailures true 你可能希望OpenDMARC忽略通过SMTP AUTH成功验证的SMTP客户端,例如,我的博客Web服务器上运行了一个Postfix SMTP服务器(在Ubuntu 18.04系统上安装和配置Postfix作为SMTP服务器),它使用我的主邮件服务器作为中继来发送通知电子邮件,所以我希望openDMARC忽略从我的博客Web服务器提交的电子邮件,这也适用于通过587端口提交外发电子邮件的桌面/移动邮件客户端,在这种情况下,请在此文件的末尾添加以下行: IgnoreAuthenticatedClients true OpenDMARC实现为milter(邮件过滤器),Postfix可以通过Unix套接字与milter应用程序通信,OpenDMARC使用的默认套接字文件是/var/run/opendmarc/opendmarc.sock,随Ubuntu一起提供的Postfix SMTP守护进程在chroot jail中运行,这意味着SMTP守护进程解析了相对于Postfix队列目录(/var/spool/postfix)的所有文件名,所以我们需要更改OpenDMARC使用的套接字文件。 找到以下行: Socket local:/var/run/opendmarc/opendmarc.sock 将其更改为: Socket local:/var/spool/postfix/opendmarc/opendmarc.sock 保存并关闭文件,在Ubuntu 16.04上,此文件中没有定义Socket,只需在文件中添加上面的行。 注意:/etc/default/opendmarc文件也可以设置套接字文件位置,但是Ubuntu 18.04、19.04上的opendmarc包不读取该文件,因此我们需要在/etc/opendmarc.conf文件中执行此操作。 创建一个目录来保存OpenDMARC套接字文件并更改所有权,以便opendmarc用户和opendmarc组可以访问它: sudo mkdir -p /var/spool/postfix/opendmarc sudo chown opendmarc:opendmarc /var/spool/postfix/opendmarc -R 将权限更改为750以限制访问权限,因此不在组opendmarc中的用户无法访问此目录: sudo chmod 750 /var/spool/postfix/opendmarc/ -R 将用户后缀添加到组opendmarc: sudo adduser postfix opendmarc 然后重新启动OpenDMARC: sudo systemctl restart opendmarc
配置Postfix SMTP服务器 编辑主配置文件: sudo nano /etc/postfix/main.cf 如果已经配置了OpenDKIM,那么应该在此文件中包含如下所示的行: # Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = local:/opendkim/opendkim.sock non_smtpd_milters = $smtpd_milters 现在只需要添加OpenDMARC套接字文件,以便Postfix可以与OpenDMARC通信(确保它在OpenDKIM套接字之后): # Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = local:/opendkim/opendkim.sock,local:/opendmarc/opendmarc.sock non_smtpd_milters = $smtpd_milters 保存并关闭文件,然后重新启动Postfix以使更改生效: sudo systemctl restart postfix
如果使用iRedMail 如果使用iRedMail设置邮件服务器(安装及使用iRedMail在Ubuntu 18.04上设置全功能邮件服务器的步骤),那么没有SPF验证和OpenDKIM,iRedMail使用Amavis进行DKIM签名和验证,但OpenDMARC无法读取Amavis的DKIM验证重播,这将导致DMARC检查失败,因此,我们需要设置SPF验证和DKIM验证,如下所示。 首先,安装SPF包: sudo apt install postfix-policyd-spf-python 然后编辑Postfix主进程配置文件: sudo nano /etc/postfix/master.cf 在文件末尾添加以下行,告诉Postfix在启动时启动SPF策略守护程序: policyd-spf unix - n n - 0 spawn user=policyd-spf argv=/usr/bin/policyd-spf 保存并关闭文件,接下来,编辑Postfix主配置文件: sudo nano /etc/postfix/main.cf 找到以下行: smtpd_recipient_restrictions = 然后在其上方添加以下行,此行指定Postfix策略代理超时: policyd-spf_time_limit = 3600 接下来,添加以下行以执行SPF验证: check_policy_service unix:private/policyd-spf 所以它看起来像这样,如下: policyd-spf_time_limit = 3600 smtpd_recipient_restrictions = ... ... check_policy_service unix:private/policyd-spf 保存并关闭文件,然后重启Postfix: sudo systemctl restart postfix 现在运行以下命令来安装OpenDKIM: sudo apt install opendkim 编辑OpenDKIM主配置文件: sudo nano /etc/opendkim.conf 找到以下行: #Mode sv 默认情况下,OpenDKIM将充当签名者和验证者(v),由于iRedMail已经使用Amavis进行DKIM签名,我们只需要OpenDKIM作为验证者,因此OpenDMARC可以读取验证结果,删除#符号并将模式更改为验证程序: Mode v 然后在此文件的末尾添加以下行: #OpenDKIM user # Remember to add user postfix to group opendkim UserID opendkim # Hosts to ignore when verifying signatures ExternalIgnoreList /etc/opendkim/trusted.hosts InternalHosts /etc/opendkim/trusted.hosts Socket local:/var/spool/postfix/opendkim/opendkim.sock 保存并关闭文件,将postfix用户添加到opendkim组: sudo adduser postfix opendkim 创建可信主机文件: sudo mkdir /etc/opendkim/ sudo nano /etc/opendkim/trusted.hosts 将以下行添加到新创建的文件中: 127.0.0.1 localhost *.your-domain.com 以上意味着来自上述IP地址和域的消息将受到信任,保存并关闭文件,然后改变所有权: sudo chown -R opendkim:opendkim /etc/opendkim 接下来,创建一个目录来保存OpenDKIM套接字文件,并且只允许opendkim用户和组访问它: sudo mkdir /var/spool/postfix/opendkim sudo chown opendkim:opendkim /var/spool/postfix/opendkim 如果可以在/etc/default/opendkim文件中找到以下行: SOCKET="local:/var/run/opendkim/opendkim.sock" 将其更改为: SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock" 之后,我们需要编辑Postfix主配置文件: sudo nano /etc/postfix/main.cf 在此文件的末尾添加以下行以将Postfix与OpenDKIM和OpenDMARC连接: # Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = local:/opendkim/opendkim.sock,local:/opendmarc/opendmarc.sock non_smtpd_milters = $smtpd_milters 保存并关闭文件,重新启动OpenDKIM、OpenDMARC和Postfix: sudo systemctl restart opendkim opendmarc postfix
测试OpenDMARC验证 现在,将你的其他电子邮件地址发送到你的域名地址,之后检查电子邮件标题,如果OpenDMARC工作正常,可以看到如下所示的DMARC验证结果: Authentication-Results: email.linuxbabe.com; dmarc=pass (p=none dis=none) header.from=gmail.com 我从我的Gmail帐户发送了一封电子邮件到我的域名电子邮件地址,并通过了DMARC验证,如果你没有看到此电子邮件标题,请检查邮件日志: sudo nano /var/log/mail.log 你会看到如下所示: opendmarc[26495]: implicit authentication service: mail.linuxbabe.com opendmarc[26495]: 61DAA3EA44: gmail.com pass
使用Telnet测试OpenDMARC 可以使用telnet命令,例如paypal.com,首先,运行以下命令以连接到邮件服务器的25端口: telnet mail.yourdomain.com 25 参考:使用nc、nmap、telnet命令检查端口是否在远程Linux系统上打开。 然后使用以下步骤发送电子邮件: HELO mail.paypal.com 250 mail.yourdomain.com.com MAIL FROM:<help@paypal.com> 250 2.1.0 Ok RCPT TO:<someone@yourdomain.com> 250 2.1.5 Ok DATA 354 End data with <CR><LF>.<CR><LF> From: help@paypal.com To: someone@yourdomain.com Subject: Please update your password. Click this link to update your password. . 550 5.7.1 rejected by DMARC policy for paypal.com quit 如你所见,我的邮件服务器拒绝了此电子邮件,因为它没有通过DMARC检查,Paypal部署了p=reject政策。
相关主题 |