在 CentOS/RHEL 上使用 Postfix 设置 OpenDMARC 以阻止电子邮件欺骗

[ad_1]

在之前的文章中,我们讨论了几个阻止垃圾邮件的有效技巧。 本教程将向您展示如何在 CentOS/RHEL 上使用 Postfix SMTP 服务器设置 OpenDMARC 以阻止电子邮件欺骗和垃圾邮件。 OpenDMARC 是 MTA(邮件传输代理,又名 SMTP 服务器)的开源 DMARC 电子邮件策略过滤器。

什么是 DMARC

DMARC(基于域的消息身份验证、报告和一致性)是一项 Internet 标准 (RFC 7489),允许域所有者防止其域名被电子邮件欺骗者使用。 在 DMARC 发明之前,不法分子很容易在 From 地址中使用其他人的域名。

如果域所有者为其域名创建了 DMARC DNS 记录并且接收电子邮件服务器实施了 DMARC 验证,那么不良行为者需要通过 SPF 对齐或 DKIM 对齐才能通过 DMARC 验证。 如果 DMARC 检查失败,欺骗性电子邮件可能会被拒绝。 永远不会被最终用户看到。 坏人很难通过 SPF 或 DKIM,除非域所有者的电子邮件服务器受到威胁。

电子邮件欺骗示例

垃圾邮件发送者向我发送了一封赎金电子邮件,使用 winsaaluminyumankara.com 在发件人地址中。 的whois信息 winsaaluminyumankara.com 是公开的。 显然,垃圾邮件发送者不是对该域名负责的人。

winsaaluminyumankara.com 有 DMARC 记录。

opendmarc-postfix-centos 8

然后我检查了电子邮件标头,显示 SPF 失败。 没有 DKIM 签名。 所以 DMARC 检查失败。 这是一封伪造的电子邮件。

opendmarc 后缀

这表明,不仅大品牌被电子邮件欺骗者利用,互联网上的任何域名都可能被不法分子冒充。 不幸的是,此域名的 DMARC 政策是 p=none, 如果 DMARC 检查失败,它告诉接收电子邮件服务器不做任何特殊处理。 如果政策是 p=reject,那么我的 Postfix SMTP 服务器将使用 OpenDMARC 拒绝此电子邮件。

Paypal 和 Facebook 已经创建了一个 reject 他们的域名的 DMARC 政策。

opendmarc 配置

因此,如果不法分子试图欺骗 Paypal 或 Facebook,我的电子邮件服务器可以使用 OpenDMARC 拒绝欺骗性电子邮件。 还有许多其他知名域名部署了 reject DMARC 政策,如下表所示。

  • 美国银行
  • 雅虎网
  • 大通网
  • wellsfargo.com
  • 脸书网
  • 谷歌网站
  • youtube.com
  • 推特网
  • 红迪网
  • instagram.com
  • 联通网
  • 媒体网
  • pinterest.com
  • dropbox.com
  • 微软网站
  • whatsapp.com

安全邮箱提供商 Protonmail 正在使用 Postfix 和 OpenDMARC 对入站电子邮件执行 DMARC 检查,我将向您展示如何在您自己的 Postfix SMTP 服务器上执行相同操作。

先决条件

本教程适用于邮箱提供商和运行自己的邮件服务器的任何人,以保护他们的用户免受电子邮件欺骗的欺骗。 如果您是域名所有者,并希望防止您的域名被电子邮件欺骗者使用,请阅读本文以创建 DMARC 记录并分析 DMARC 报告。 如果您不完全了解 DMARC,我还建议您阅读该文章。

在设置 OpenDMARC 之前,您应该在邮件服务器上运行 DKIM 验证服务。 OpenDMARC 应与 OpenDKIM 结合使用。 如果你使用 Amavis 做 DKIM 签名和验证,那么我建议从 Amavis 切换到 OpenDKIM。 这是因为 OpenDMARC 无法从 Amavis 读取 DKIM 验证结果。 您不必完全卸载 Amavis。 只需在 Amavis 中禁用 DKIM,然后安装和配置 OpenDKIM。

如果你不喜欢切换到 OpenDKIM,那么你需要通过 milter 接口将 Amavis 与 Postfix 集成,这将在本文末尾解释。

步骤 1:在 CentOS/RHEL 上安装和配置 OpenDMARC

OpenDMARC 是一个开源软件,可以执行 DMARC 检查和报告。 您可以从 EPEL 存储库将其安装在 CentOS/RHEL 上。

sudo dnf install epel-release

sudo dnf install opendmarc

启动 OpenDMARC。

sudo systemctl start opendmarc

在启动时启用自动启动。

sudo systemctl enable opendmarc

OpenDMARC 监听 127.0.0.1:8893. 运行以下命令检查其状态。

systemctl status opendmarc

输出:

 opendmarc.service - Domain-based Message Authentication, Reporting & Conformance (DMARC) Milter
   Loaded: loaded (/usr/lib/systemd/system/opendmarc.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2020-03-08 23:52:59 EDT; 1min 4s ago
     Docs: man:opendmarc(8)
           man:opendmarc.conf(5)
           man:opendmarc-import(8)
           man:opendmarc-reports(8)
           https://www.trusteddomain.org/opendmarc/
 Main PID: 19987 (opendmarc)
    Tasks: 3 (limit: 5047)
   Memory: 1.1M
   CGroup: /system.slice/opendmarc.service
           └─19987 /usr/sbin/opendmarc -c /etc/opendmarc.conf -P /var/run/opendmarc/opendmarc.pid

然后使用文本编辑器编辑主配置文件。

sudo nano /etc/opendmarc.conf

找到以下行:

# AuthservID name

默认情况下,OpenDMARC 使用 MTA 主机名作为 AuthserveID,但最好为身份验证服务使用不同的名称,因为 Amavisd-new 会覆盖 OpenDMARC 添加的身份验证结果标头。 您可以将其更改为以下内容,这将很容易让您看到哪个程序添加了哪个 authentication-results 头。

AuthservID OpenDMARC

接下来,添加以下行。 将主机名替换为您真正的 Postfix 主机名。 这告诉 OpenDMARC 信任身份验证结果 mail.yourdomain.com 在身份证上。 当您运行 OpenDKIM 进行 DKIM 验证时,这是必需的。 如果 Postfix 主机名未包含在 TrustedAuthservIDs,则 OpenDMARC 将忽略 OpenDKIM 生成的 Authentication-Results 标头。

TrustedAuthservIDs mail.yourdomain.com

然后找到以下行。

# IgnoreAuthenticatedClients false

将值更改为 true 忽略通过 SMTP AUTH 成功验证的 SMTP 客户端,包括通过端口 587 提交外发电子邮件的桌面/移动邮件客户端。

IgnoreAuthenticatedClients true

然后找到这一行:

# RejectFailures false

默认情况下,OpenDMARC 不会拒绝未通过 DMARC 检查的电子邮件,即使域的策略设置为 p=reject. 如果您希望在域的策略设置为时拒绝未通过 DMARC 检查的电子邮件 p=reject,然后取消注释此行并更改 falsetrue.

RejectFailures true

找到以下行。

# RequiredHeaders  false

将其更改为:

RequiredHeaders    true

这将拒绝不符合 RFC5322 中描述的电子邮件标头标准的电子邮件。 例如,如果传入的电子邮件没有 From: 标题或 date: 标头,它将被拒绝。 发件人:无法从中提取域名的字段也将被拒绝。

默认情况下,CentOS/RHEL 上的 OpenDMARC 将忽略电子邮件标头中的任何 SPF 结果并自行执行 SPF 检查。 这由以下两个参数控制。

SPFIgnoreResults true

SPFSelfValidate true

如果您更喜欢在邮件服务器上使用其他 SPF 检查服务,请告诉 OpenDMARC 信任电子邮件标头中的 SPF 结果,并且仅在标头中找不到 SPF 结果时才执行 SPF 检查。

SPFIgnoreResults false

SPFSelfValidate true

Save 和 close 文件。 然后重新启动 OpenDMARC 以使更改生效。

sudo systemctl restart opendmarc

第 2 步:将 OpenDMARC 与 Postfix SMTP 服务器集成

如果您使用 OpenDKIM

编辑 Postfix 主配置文件。

sudo nano /etc/postfix/main.cf

如果你在 CentOS 8/RHEL 8 上学习了我的 DKIM 教程,那么你应该在这个文件中有如下几行。 OpenDKIM 正在监听 127.0.0.1:8891.

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters

现在您只需要添加 OpenDMARC 套接字,以便 Postfix 可以与 OpenDMARC 对话。 (确保它在 OpenDKIM 套接字之后。)OpenDMARC 监听 127.0.0.1:8893.

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891,inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters

Save 和 close 文件。 然后重新启动 Postfix 以使更改生效。

sudo systemctl restart postfix

如果您使用 Amavis

如果您使用 Amavis 进行 DKIM 签名和验证,例如 红邮,则OpenDMARC 无法读取Amavis 的DKIM 验证结果。 您可以安装 OpenDKIM 来验证 DKIM 签名。

从 EPEL(企业 Linux 的额外包)存储库安装 OpenDKIM。

sudo dnf install epel-release

sudo dnf install opendkim

默认情况下, opendkim CentOS/RHEL 上的软件包仅在验证模式下运行。 它不会向外发电子邮件添加 DKIM 签名。 这就是我们想要的,因为 Amavis 会添加 DKIM 签名。 编辑 OpenDKIM 配置文件。

sudo nano /etc/opendkim.conf

找到以下行。

KeyFile   /etc/opendkim/keys/default.private

由于我们不希望 OpenDKIM 签署外发电子邮件,我们需要注释掉这一行,然后保存并 close 文件。

编辑 Postfix 主配置文件。

sudo nano /etc/postfix/main.cf

在此文件的末尾添加以下几行,以便 Postfix 能够通过 milter 协议调用 OpenDKIM。 请注意,您应该使用 127.0.0.1 作为地址。 不要使用 localhost.

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891,inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters

Save 和 close 文件。 然后加 postfix 用户 opendkim 团体。

sudo gpasswd -a postfix opendkim

重新开始 postfix 服务。

sudo systemctl restart postfix

现在我们可以启动 opendkim 服务了。

sudo systemctl start opendkim

并在启动时启用自动启动。

sudo systemctl enable opendkim

第 3 步:测试 OpenDMARC 验证

现在从您的其他电子邮件地址向您的域地址发送一封电子邮件。 之后,检查电子邮件标题。 如果 OpenDMARC 工作正常,您可以看到如下所示的 DMARC 验证结果。

Authentication-Results: OpenDMARC; dmarc=pass (p=none dis=none) header.from=gmail.com

我从我的 Gmail 帐户向我的域电子邮件地址发送了一封电子邮件,它通过了 DMARC 验证。 如果您没有看到此电子邮件标题,请检查您的邮件日志。

sudo nano /var/log/maillog

您将看到如下所示的内容,这意味着 OpenDMARC 正在运行。

opendmarc[26495]: 61DAA3EA44: gmail.com pass

如果您看到以下消息。

ignoring Authentication-Results at 1 from mail.linuxbabe.com

这意味着 OpenDMARC 忽略了 SPF 和 DKIM 验证结果,因此 OpenDMARC 不起作用。 您需要添加以下行 /etc/opendmarc.conf 文件,然后重新启动 OpenDMARC。

TrustedAuthservIDs mail.yourdomain.com

如果您更改后缀 myhostname 参数,记得将新主机名添加到 TrustedAuthservIDs。 您可以添加多个主机名,以逗号分隔。

TrustedAuthservIDs mail.yourdomain.com,mail2.yourdomain.com

使用 Telnet 测试 OpenDMARC

您可以使用 telnet 来欺骗另一个域名,例如 paypal.com。 首先,运行以下命令连接到邮件服务器的 25 端口。

telnet mail.yourdomain.com 25

然后使用以下步骤发送欺骗电子邮件。 (您输入粗体文本。)

HELO mail.paypal.com
250 mail.yourdomain.com
MAIL FROM:<[email protected]>
250 2.1.0 Ok
RCPT TO:<[email protected]>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From:     [email protected]
To:       [email protected]
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 政策。

笔记: 如果域的 DMARC 策略设置为 p=quarantine,然后 OpenDMARC milter 会将欺骗性电子邮件无限期地放入 Postifx 保留队列。 postmaster 可以列出队列中的所有消息 postqueue -p 命令并使用 postsuper 用于释放保留队列中的消息的命令行实用程序。

(可选)通过 Milter 将 Amavis 与 Postfix 集成

如先决条件部分所述,我建议从Amavis切换到OpenDKIM,但如果您不喜欢切换,则需要通过milter接口将Amavis与Postfix集成,以便OpenDMARC可以从Amavis读取DKIM验证结果。

安装 amavisd-milter CentOS/RHEL 上的软件包。

sudo dnf install amavisd-milter

启动服务。

sudo systemctl start amavisd-milter

在启动时启用自动启动。

sudo systemctl enable amavisd-milter

Amavisd-milter 在 Unix 套接字上侦听 /run/amavisd/amavisd-milter.sock. 编辑 Postfix 主配置文件。

sudo nano /etc/postfix/main.cf

在文件末尾添加以下几行。 请注意,您应该将 amavisd-milter Unix 套接字放在 OpenDMARC TCP 套接字之前。

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:/run/amavisd/amavisd-milter.sock,inet:127.0.0.1:8893
non_smtpd_milters = $smtpd_milters

还要注释掉以下行,因此 Postfix 不会将传入的电子邮件传递给 Amavis 两次。

content_filter = smtp-amavis:[127.0.0.1]:10024

Save 和 close 文件。 然后加 postfixamavis 组,因此 Postfix 将能够访问 Amavis Unix 套接字。

sudo gpasswd -a postfix amavis

认证用户提交的外发邮件不应通过 milter 接口传递给 Amavis,因为 Amavis 不会添加 DKIM 签名。 他们应该使用 127.0.0.1:10026 像往常一样,以便添加 DKIM 签名。 编辑 Postfix master.cf 文件。

sudo nano /etc/postfix/master.cf

找出 submission 成分。 如果您在 CentOS/RHEL 上遵循我的 Amavis 教程,它应该如下所示。

submission     inet     n    -    y   -    -    smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_tls_wrappermode=no
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o content_filter=smtp-amavis:[127.0.0.1]:10026

现在在最后添加以下选项。

-o smtpd_milters=

像这样:

submission     inet     n    -    y   -    -    smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_tls_wrappermode=no
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o content_filter=smtp-amavis:[127.0.0.1]:10026
 -o smtpd_milters=

这将使 Postfix 提交服务完全不使用 milter,这样从经过身份验证的用户提交的电子邮件将不会通过 milter 接口传递给 Amavis。 请注意,您不应在等号 (=) 前添加任何空格。

您还应该将此行添加到 smtps 成分。

smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o content_filter=smtp-amavis:[127.0.0.1]:10026
  -o smtpd_milters=

Save 和 close 文件。 重新启动 Postfix 以使更改生效。

sudo systemctl restart postfix

现在 OpenDMARC 将能够读取 Amavis 的 DKIM 验证结果,并且 Amavis 将继续为经过身份验证的用户添加 DKIM 签名。

包起来

我希望本教程可以帮助您在 CentOS/RHEL 上使用 Postfix SMTP 服务器设置 OpenDMARC 以阻止电子邮件欺骗和垃圾邮件。 与往常一样,如果您发现这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧。 保重?

[ad_2]

Related Posts