云网牛站
所在位置:首页 > Linux云服务器 > 在Ubuntu 16.04/18.04上使用Postfix设置OpenDMARC的方法

在Ubuntu 16.04/18.04上使用Postfix设置OpenDMARC的方法

2019-04-22 09:25:43作者:秦风稿源:云网牛站

本教程介绍如何在Ubuntu 16.04/18.04上使用Postfix SMTP服务器设置OpenDMARC的方法,OpenDMARC是MTA(消息传输代理,又名SMTP服务器)的开源DMARC电子邮件策略过滤器。

在Ubuntu 16.04/18.04上使用Postfix设置OpenDMARC的方法

 

在Ubuntu 16.04/Ubuntu 18.04或19.04上使用Postfix SMTP Server设置OpenDMARC

OpenDMARC是一个开源软件,可以执行DMARC检查和报告,它已经在Ubuntu存储库中了,因此可以运行以下命令来安装:

sudo apt install opendmarc

安装后,它将自动启动,检查其状态:

systemctl status opendmarc

输出信息如下:

在Ubuntu 16.04/18.04上使用Postfix设置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政策。

 

相关主题

在Ubuntu上的2个Postfix SMTP服务器之间设置SMTP中继

精选文章
热门文章