Lazy loaded image
网络协议
🗒️SMTP使用与安全/漏洞 (postfix)
Words 2582Read Time 7 min
2026-1-13
2026-1-22
type
status
date
slug
summary
tags
category
icon
password

一、- 使用 --

邮件介绍

  • MX记录(Mail Exchange Record): 用于在邮件发送到某域名时, 将域名指向 邮件服务器地址
  • A记录(Address Record): 用于将域名解析到服务器的IP地址
  • SPF记录(Sender Policy Framework): 声明哪些服务器有权以该域名发送邮件许多正规的邮件厂商接收邮件后 都会检测邮件的来源与SPF记录, 来判断是否为钓鱼邮件如某邮件的寄件人为test@test.cn, 来源ip为100.100.100.100 ,厂商收到后会查询test.cn域名的SPF记录, 查看是否包含100.100.100.100, 若不包含, 判定为垃圾邮件
  • DKIM记录: 用于检测邮件在发送过程中是否被篡改 (需自行配置以达成以下功能)发件服务器生成一对公私钥, 公钥发布在发件服务器域名的DNS中, 私钥用于对邮件头部和内容进行加密签名, 收件服务器收到邮件后, 提取公钥解密签名, 对比邮件内容是否一致, 一致则通过验证
  • DMARC记录: 明确告知收件服务器如何处理未通过 SPF/DKIM 验证的邮件(如拒收、隔离或放行),同时收集认证数据以优化策略
  • 注: MX记录 A记录 SPF记录 DKIM记录 DMARC记录 都是关键的DNS配置,其中SPF/DKIM/DMARC 一般在TXT记录中设置

SMTP流程

  • SMTP连接建立
      1. 客户端连接服务器的25端口(默认的SMTP端口),服务器返回220 (表示服务已就绪)
      1. 客户端发送HELO <身份>EHLO <身份>,告知服务器使用者身份, 用于标识连接来源 (通常为使用者 域名/主机名)服务器返回250(表示命令成功), 并显示 服务器的完整域名(即配置项中的hostname)(用EHLO还会列出SMTP服务支持的扩展功能)
  • 邮箱发送
      1. 客户端发送MAIL FROM:<指定发件人邮箱>,服务端返回250(表示命令成功)
      1. 客户端发送RCPT TO:<指定收件人邮箱>,服务端会根据权限配置呈现不同的回显
      1. 认证(可选): 客户端发送AUTH <认证方式>后, 可输入账户和密码进行登录服务端支持的验证方式可通过使用EHLO时的回显来知晓, 常见的有LOGIN(base64), PLAIN(明文)
      1. 客户端发送DATA表示开始输入邮件内容,服务端返回354(表示开始邮件输入)
      1. 客户端发送 邮件内容(其中用单独一行的句点代表输入结束),服务端返回250(表示邮件接收成功)
      1. 服务端会判断邮件是否为本地,若为本地, 直接发送到本地系统用户的邮箱中(/var/mail中)若非本地, 则中继转发到目标域名中(也叫发送中继邮件)
  • 连接关闭: 客户端发送QUIT, 服务端返回状态码221(表示连接已关闭)

基础

  • 邮件头: 邮件头都是邮件自身的内容(相当于元信息), 不会影响邮件发送过程, 只影响接收后的解析FROM: <邮件显示的发送者>TO: <邮件显示的接收者>Subject: <邮件的主题/标题>Date: <邮件的发送时间>Cc: <邮件的抄送接收者>Bcc: <邮件的密送接收者>Reply-To: <回复邮件时使用的地址>Importance: <邮件的重要性级别>MIME-Version: <邮件的MIME版本>Content-Type: <邮件正文内容的类型及编码方式>Content-Disposition: <邮件附件的处理方式>Message-ID: <邮件的唯一标识符>In-Reply-To: <针对哪封邮件进行回复的标识符>References: <相关邮件的标识符列表>Return-Path: <邮件的退回地址>X-Priority: <邮件的优先级>
  • 配置文件配置项 ( /etc/postfix/main.cf ).mydomain = 定义邮件服务器的主域名(通常是myhostname的父域名, 若未设置该配置项, 自动截取myhostname中第一个.后的部分).relay_domains = 定义允许中继转发的中继域名 (若无该配置项, 则默认允许允许所有域名中继转发)myhostname = kali.localdomain 定义邮件服务器的完整域名myorigin = $myhostname 定义外发邮件的默认域名(发件人地址@后部分, 未填写则自动用该值)inet_interfaces = all 设置监听的ip ( all代表监听所有 )mydestination = $myhostname, localhost 声明哪些邮箱后缀被认定为本地邮件smtpd_banner = $myhostname ESMTP $mail_name (Debian) 定义连接到smtp服务后的欢迎语mynetworks = 127.0.0.0/8 定义允许直接投递邮件(无需认证)的客户端IP范围(mynetworks配置项本身并无作用, 只有再被smtpd_relay_restrictions和smtpd_relay_restrictions配置项中用permit_mynetworks引用时才有作用)
  • 认证配置.smtpd_sasl_auth_enable = yes 是否开启SASL认证功能.smtpd_sasl_security_options = noanonymous.broken_sasl_auth_clients = yes
  • 权限配置配置项:
    • smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination作用: 配置 发送中继邮件 的权限规则
    • .smtpd_recipient_restrictions =作用: 配置 发送本地文件 的权限规则 (默认无该配置项, 即不对发向本地的邮件做任何限制):
    • permit_mynetworks: 允许使用mynetworks配置项中指定的IP 的用户 无认证即可发送中继/本地邮件
    • permit_sasl_authenticated: 允许通过认证的用户 发送中继/本地邮件
    • defer_unauth_destination: 延迟处理(即暂时拒绝)发送到 未授权目标域名 的邮件
    • reject_unauth_destination: 拒绝发送到 未授权目标域名 的邮件
    • defer: 对未通过上述规则的请求进行延迟处理 (即暂时拒绝)
    • reject: 对未通过上述规则的请求直接拒绝
    • 注: 未授权目标域名 即为不在mydestination和relay_domainss和virtual_alias_domains值中的域名
  • 扩展VRFY: 支持客户端使用VRFY命令来验证服务器是否存在 指定邮箱地址(默认开启, 配置项中加入disable_vrfy_command = yes以关闭)

服务搭建(Linux)

  • 安装:sudo apt install postfix
  • 初始化:sudo dpkg-reconfigure postfix
  • 打开:systemctl start postfix
  • 配置文件:/etc/postfix/main.cf
  • 查看邮件队列状态:sudo postqueue -p

二、- 安全 --

未授权访问

  • 未授权发送本地邮件:原因; smtpd_relay_restrictions配置错误, 使得可以不登陆发送本地邮件
  • 未授权发送中继邮件:原因; smtpd_relay_restrictions配置错误使得可以不登陆发送中继邮件
  • 匿名登录原因: 当EHLO后出现AUTH ANONYMOUS的字样时, 即可匿名登录(auth anonymous登录)
  • 测试是否存在: msf中auxiliary/scanner/smtp/smtp_relay模块
  • 后果: 可以通过目标服务器任意发送邮件

信息泄露

  • 原理: smtp在连接上后默认会显示smtpd_banner的欢迎信息, 默认包含了 系统邮箱邮箱 系统类型 服务种类
  • 利用telnet <ip> <端口>nc <ip> <端口>, 第一句话就是
  • 利用(msf): msf中auxiliary/scanner/smtp/smtp_version模块use auxiliary/scanner/smtp/smtp_version;set RHOSTS <服务器ip>;set RPORT <端口>;run;

枚举用户漏洞

  • 前提: 三者满足其一即可
    • 开启了VRFY扩展 (postfix默认开启)
    • 开启了EXPN扩展 (postfix没有该扩展)
    • 可未授权访问 发送本地邮件, 从而可以执行RCPT TO指定接收者
  • 原理:
    • VRFY扩展 支持客户端使用VRFY命令来验证服务器是否存在 指定邮箱地址
    • EXPN扩展 支持客户端使用EXPN命令 查看邮件列表/别名地址 中包含的所有实际邮件地址
    • 使用RCPT TO指向本地邮箱时(即收件人不填写@及其之后部分), 目标存在返回250, 不存在返回550
  • 利用(msf): msf中的auxiliary/scanner/smtp/smtp_enum模块use auxiliary/scanner/smtp/smtp_enum;set RHOSTS <服务器ip>;set RPORT <端口>;run;

爆破

  • smtp:hydra -l <用户名> -P <字典路径> <目标IP> smtp -V -s <端口> -e nsr
  • smtps:hydra -l <用户名> -P <字典路径> <目标IP> smtp -V -s <端口> -S -e nsr

CRLF漏洞

  • 原理: 若能够操控DATA数据(一般是可操控收件人),可通过CRLF来改变邮件内容, 或操控RCPT TO的内容来改变收件人

三、SMTP匿名登录——POSTFIX及dovecot配置

POSTFIX连接:

POSTFIX配置文件修改:

Postfix 99% 的配置都在这两个文件
修改后 都需要 reload 或 restart

SMTP匿名登录配置:

dovecot 配置

1️⃣ 启用 ANONYMOUS 机制
编辑:
改成或确认有:
⚠️ 一定要有 anonymous

2️⃣ 配置 anonymous 用户(可选但推荐)
同文件中或新建:
👉 所有匿名登录都会映射为这个“虚拟用户”

3️⃣ 确保 auth socket 正确(你之前已经配过)
确认:

4️⃣ 重启 dovecot

Postfix 配置(关键点)

1️⃣ 允许 anonymous(不要 noanonymous)
编辑:
❌ 不要这样(会禁用 AUTH ANONYMOUS)
✅ 改成这样(或直接删除该行)
或:

2️⃣ 启用 SASL(如果还没)

3️⃣ 中继策略(必须)
👉 匿名 = 已认证 = 可中继

4️⃣ 重载 Postfix

IMAP匿名登录配置:

配置 Dovecot 允许匿名认证
编辑 /etc/dovecot/conf.d/10-auth.conf
 
 
 
 
上一篇
屏蔽MacOS更新通知
下一篇
常见弱口令密码字典下载网站

Comments
Loading...