# 邮件服务器安全

SMTP 简单邮件传输协议，正如名称所言，简单的实施，无需身份认证，而且发件人地址是可以自己指定的，因此该缺陷可以被利用与伪造和模仿发件人。考虑邮件是社会工程学攻击的重要载体，因此现代企业也配置了如下这些加固邮件服务安全性的措施。从企业角度，他们可以更高效地防范邮件钓鱼攻击、垃圾邮件等，对于网络安全中的进攻方，则增添了社会工程学攻击的难度，我们一起来了解一下。

### **MX 记录**

MX 即 **Mail Exchange邮件交换**，MX 记录用于标识负责代表域名接收电子邮件的邮件服务器。当有人向与特定域关联的电子邮件地址发送电子邮件时，该电子邮件将被传送到该域的 MX 记录中标识的邮件服务器之一。 MX 记录指定每个邮件服务器的优先级和主机名。 优先级值表示尝试邮件服务器的顺序，值越低表示优先级越高。 如果第一个服务器不可用或无法访问，则尝试下一个具有更高优先级值的服务器，依此类推。MX 记录是电子邮件传递的重要组成部分，有助于确保将邮件可靠地传递给目标收件人。

我们可以通过以下命令来查询目标域的 MX 记录：

```bash
┌──(root㉿kali)-[/opt/spoofcheck]
└─# dig MX qq.com +short
20 mx2.qq.com.
30 mx1.qq.com.
10 mx3.qq.com.
                                                                                                                                                  
┌──(root㉿kali)-[/opt/spoofcheck]
└─# host -t MX qq.com       
qq.com mail is handled by 20 mx2.qq.com.
qq.com mail is handled by 30 mx1.qq.com.
qq.com mail is handled by 10 mx3.qq.com.
```

### **SPF 记录**

SPF 记录，全称为 **Sender Policy Framework 发送方策略框架**，域名持有者通过使用 DNS 记录来授权哪些邮件服务器可以代替该域名来发送邮件。当该域名收到一份邮件的时候，接收端服务器会检查发件人域的 SPF 记录，以查看发送服务器是否有被授权为该域发送电子邮件。 如果发送服务器未经授权 (IP 地址不匹配)，电子邮件可能会被拒绝或标记为垃圾邮件。设置 SPF 不仅可以防止自己的域名被第三方恶意伪造，还有助于维持良好的域名名声 (没有设置 SPF 的话，该域名会被广泛用于伪造和垃圾邮件，久而久之接收方会认为该域名被用于恶意用途，尽管只是被恶意第三方所利用的)。例如，我们可以用该在线网站伪造发件人发送邮件：[https://emkei.cz/](https://emkei.cz/)。

一个比较实际的情景可以是这样的，你在一家公司 A\_Company 的 Career 界面申请了一个岗位，提交了所有资料后，你的邮箱收到了一封 noreply@acompany.com 的自动回复邮件，这份邮件实际上是由某职位申请平台 B\_Company 发送的。因为 A\_Company 与 B\_Company 有合作关系，因此 A\_Company 的 SPF 记录授权了 B\_Company 以域 @acompany 发送邮件给申请者。

一个有效的 SPF 记录可以是这样的：

**v=spf1 ip4:209.225.8.0/24 ip4:209.225.28.0/24 ip4:24.196.48.42/32 ip4:24.217.29.16/32 ip4:24.176.92.28/32 ip4:142.136.234.128/27 ip4:142.136.235.128/27 include:et.\_spf.pardot.com include:spf-c.usa.striata.com include:everbridge.net ~all**

这些指定的域名、网段、IP 被授权代替该域名发送邮件，除此之外的所有都 “软拒绝”。对于软拒绝的策略，不同的邮件系统有不同的反应，有的不接受、有的标记、有的接受。

 我们可以在在线网站 [https://mxtoolbox.com/SuperTool.aspx](https://mxtoolbox.com/SuperTool.aspx) 上查询目标域名的 SPF 记录并获得解析。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-02/scaled-1680-/QEaB6ZaqLjSrXZer-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-02/QEaB6ZaqLjSrXZer-image.png)

一些常见的配置失误以及绕过

1：SPF 记录的语法错误，导致整个 SPF 记录失效。

例如：**v=spf1 ip4:113.110.223.0/24 183.110.226.0/24 183.110.255.0/24 59.110.132.0/24 -all**

只有第一个网段有 ip4 的前缀，导致后续的语法错误，让整个记录失效。

2：授权的范围过大，导致有漏网之鱼。例如，SPF 记录授权了一个较大的网段，该网段中任意邮件服务器被入侵了，那么从而实现 SPF 绕过。

3：邮件服务器不支持 SPF 校验

4：内网 DNS 无法解析

5：公司内部的发件人伪造

我们可以通过以下命令来读取目标域的 SPF 记录 (如果配置的话)

```bash
┌──(root㉿kali)-[/opt/spoofcheck]
└─# host -t txt  xx.com | grep spf
qq.com descriptive text "v=spf1 include:spf.mail.xx.com -all"
                                                                                                                                                  
┌──(root㉿kali)-[/opt/spoofcheck]
└─# dig TXT +short xx.com       
"v=spf1 include:spf.mail.xx.com -all"

```

### **DKIM**

全称 **Domain Keys Identified Mail 域名密钥识别邮件标准**。DKIM 是另一种基于 DNS 的身份验证协议，它允许域所有者使用私钥对外发电子邮件进行签名。然后，接收服务器可以使用域的 DNS TXT 记录中发布的公钥来验证签名。 如果签名有效，则可以保证电子邮件在传输过程中未被篡改。由于非对称加密，DKIM 更加难以伪造，除非私钥被攻击者获得。简而言之，DKIM 从垃圾邮件、邮件伪造、钓鱼攻击中保护了邮箱发送者和接受者，是一种邮件认证的形式。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-02/scaled-1680-/NfSa0uWjtfH8uu5H-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-02/NfSa0uWjtfH8uu5H-image.png)

### **DMARC 记录**

全称为 **Domain-based Message Authentication, Reporting, and Conformance 基于域名的邮件认证、报告和一致性标准**。DMARC 是一个建立在 SPF 和 DKIM 基础上的策略框架，为域所有者提供一种方法来指定接收服务器应如何处理未通过身份验证检查 (SPF 和 DKIM) 的电子邮件。DMARC 策略可以指示接收服务器通过但标记、拒绝、或隔离电子邮件。

例如该 Dmarc 案例：**v=DMARC1; p=quarantine; sp=none; aspf=r; adkim=r; pct=100; [rua=mailto:dmarcAR@abc.com](https://raven-medicine.com/rua=mailto:dmarcAR@abc.com);**

对于任何 (**100%**) 的邮件消息，如果 SPF 和 DKIM 都没有通过 (这里采取了 **relaxed** 选项，即**部分匹配**即可，任何有效的**子域名**都被接受)，那么对其进行隔离。如果是来自子域的消息，不采取行动。DMARC 日志会被发送到 <dmarcAR@abc.com> 邮箱。因为 DMARC 有有关子域名的设置，因此 DMARC 的配置正确与否，影响着主域名以及子域名。

我们可以通过如下命令来查询目标域的 DMARC 记录

```bash
┌──(root㉿kali)-[/opt/spoofcheck]
└─# dig _dmarc.xx.com TXT +short           
"v=DMARC1; p=quarantine; rua=mailto:mailauth-reports@xx.com"
                                                                                                                                                  
┌──(root㉿kali)-[/opt/spoofcheck]
└─# host -t txt  _dmarc.xx.com | grep DMARC
_dmarc.xx.com descriptive text "v=DMARC1; p=quarantine; rua=mailto:mailauth-reports@xx.com"

```

### **进攻方**

SPF，DKIM，和 DMARC 3者共同强化了邮件安全。而对于攻击者而言，将我们的钓鱼邮件服务器配置这 3 项，也会让我们的邮件服务器看起来更加可信，从而减少被目标邮件服务器和网关拦截的概率。