hMailServer 是一款专为Microsoft Windows 系统设计的免费、开源电子邮件服务器软件。它以轻量、高效著称,曾经是许多中小型企业、政府学校及技术爱好者自建邮件服务器的热门选择。不过,在2023年之后,这款软件就停止了更新,仅在 Github 上保留这个项目的源代码,偶尔更新一下源代码。
尽管如此,因为免费且容易使用的原因,还有不少的个人或单位依旧使用着这个邮件服务器系统,笔者朋友的公司便是其中一个。最近,他们遇到了一个难题。
某日朋友进入了 hMailServer 服务器,查看了一下近期 hMailServer 处理邮件的情况,发现最近有不少来自世界不同地方的IP地址,正在对这个服务器进行邮件地址枚举攻击。邮件地址枚举攻击是一种通过网络服务的行为差异,来探测某个邮件地址是否存在的攻击技术。简单来说,攻击者就像在“试密码”,不过他们试的不是密码,而是想确认某个邮箱账号是否真实存在。而在 hMailServer 的日志里面,它是像下面这样呈现的(假设我方的邮箱域名是example.com):
"TCPIP" 2164 "2026-06-11 11:59:05.418" "TCP - 116.171.27.248 connected to 192.168.100.11:25."
"SMTPD" 2164 262 "2026-06-11 11:59:05.418" "116.171.27.248" "SENT: 220 mail.example.com ESMTP"
"SMTPD" 5652 262 "2026-06-11 11:59:06.106" "116.171.27.248" "RECEIVED: EHLO 213.142.48.143-FTTB.planeta.tc"
"SMTPD" 5652 262 "2026-06-11 11:59:06.106" "116.171.27.248" "SENT: 250-mail.example.com[nl]250-SIZE 500000000[nl]250-AUTH LOGIN[nl]250 HELP"
"SMTPD" 3412 262 "2026-06-11 11:59:06.590" "116.171.27.248" "RECEIVED: MAIL FROM:qglwjiyacfjnk7@lajiyoujian.net"
"SMTPD" 3412 262 "2026-06-11 11:59:08.809" "116.171.27.248" "SENT: 250 OK"
"SMTPD" 64 262 "2026-06-11 11:59:09.315" "116.171.27.248" "RECEIVED: RCPT TO:37qceonhsthtwwd9@example.com"
"SMTPD" 64 262 "2026-06-11 11:59:09.331" "116.171.27.248" "SENT: 550 Unknown user"
(中间可能有更多类似的与前后来源IP一致的SMTPD记录)
"SMTPD" 1204 262 "2026-06-11 11:59:09.659" "116.171.27.248" "RECEIVED: RCPT TO:ausb0k7g6mnm@example.com"
"SMTPD" 1204 262 "2026-06-11 11:59:09.659" "116.171.27.248" "SENT: 550 Unknown user"
"SMTPD" 1204 262 "2026-06-11 11:59:09.659" "116.171.27.248" "RECEIVED: RCPT TO:purchasing@example.com"
"SMTPD" 1204 262 "2026-06-11 11:59:09.674" "116.171.27.248" "SENT: 451 Please try again later."
参考上面的日志,可以看出攻击者的IP地址是116.171.27.248,它伪装成主机名“213.142.48.143-FTTB.planeta.tc”,冒称自己的邮箱地址是“qglwjiyacfjnk7@lajiyoujian.net”,向邮件域为@example.com内随机命名的邮箱地址发送邮件,但因为很多的邮件地址实际上不存在,所以 hMailServer 回复“550 Unknown user”(即“用户不存在”),但好不巧的是,被它猜中了一个“purchasing@example.com”(或许是这个邮箱地址曾经在网上公开过),但因为 hMailServer 启用了灰名单机制,第一次发送的时候先把它中断,等它后续重试(这种攻击一般不会重试的),因此回复了“451 Please try again later”(稍后再试)。
虽然说可以通过在防火墙屏蔽IP地址来防范这个IP后续再来攻击,但是攻击者一般都会变换着各种各样的IP地址来进行攻击,这样每天都要花不少的时间处理这些攻击来源,有时候会觉得很疲惫,像朋友公司,已经屏蔽了上百万个IP地址了(他是发现一个IP地址,封禁一整段IP地址),直到笔者帮他处理之前,平均每一个小时都仍然会收到三次以上的攻击记录,实在是苦不堪言,因此,他又想找我出手了。
我给他的处理方法是(在操作之前,建议大家先记录或备份相关的设置,另外,下面的操作以中文版为例,如果大家的 hMailServer 暂时无法切换回中文,可以在网上搜索切换方法并下载汉化文件):
一、反垃圾邮件选项
1、常规:
(1)垃圾邮件标记开始值:5;
(2)垃圾邮件删除开始值:15;
(3)其它选项依据自身实际情况进行选择和设置;

2、垃圾邮件检测(以下选项均需要勾选):
(1)使用SPF,记分:3;
(2)校验 HELO/HELO 命令中的主机名,记分:2;
(3)校验发送者是否有 DNS-MX 记录,记分:2;
(4)Verify DKIM-Signature heaer,记分:5;

3、建议部署 SpamAssassin 垃圾邮件过滤系统,并且在 hMailServer 中勾选启用它,参考下图:

二、反垃圾选项——DNS 黑名单

1、zen.spamhaus.org(如果不存在就添加):
(1)DNS 主机:zen.spamhaus.org
(2)预期结果:127.0.0.2-8|127.0.0.10-11
(3)拒绝信息:可以任意填,用来提醒对方的;
(4)记分:15;

2、dnsbl.sorbs.net(可选):
(1)DNS 主机:dnsbl.sorbs.net
(2)预期结果:127.0.0.2-8|127.0.0.10-11
(3)拒绝信息:可以任意填,用来提醒对方的;
(4)记分:3;
3、b.barracudacentral.org(可选)
(1)DNS 主机:b.barracudacentral.org
(2)预期结果:127.0.0.2-8|127.0.0.10-11
(3)拒绝信息:可以任意填,用来提醒对方的;
(4)记分:3;
4、bl.mailspike.net (可选)
(1)DNS 主机:bl.mailspike.net
(2)预期结果:127.0.0.2-8|127.0.0.10-11
(3)拒绝信息:可以任意填,用来提醒对方的;
(4)记分:3;
三、反垃圾选项——SURBL
1、multi.surbl.org(如果不存在就添加):
(1)DNS 主机:multi.surbl.org
(2)拒绝信息:可以任意填,用来提醒对方的;
(3)记分:3;

2、uribl.com(如果不存在就添加):
(1)DNS 主机:uribl.com
(2)拒绝信息:可以任意填,用来提醒对方的;
(3)记分:3;
四、反垃圾选项——灰名单
1、常规:
(1)勾选“启用”;
(2)延迟重试投递的时间(分钟):1分钟;
(3)几天后移除未使用记录:7天;
(4)几天后移除已使用记录:36天;
(5)不勾选“SPF通过时忽略灰名单”和“来自A或MX记录的邮件忽略灰名单”

2、白名单:
白名单视实际情况进行添加,建议把已知的可信IP地址和内网IP地址添加进去;
以上事项,除了建议勾选“启用”之外,其它选项可以根据实际情况进行填写和选择。
五、高级——IP 范围
添加一段IP地址:
(1)名称可以自定义,只要能辨识是垃圾邮件地址范围就行;
(2)优先级:120(反正要是比较高的优先级);
(3)开始 IP:127.0.0.2;
(4)结束 IP:127.0.0.12;
(5)“允许连接”中的“SMTP”、“POP3、“IMAP”全部不勾选;
(6)“其他”中的“反垃圾选项”、“防病毒选项”、“需要SSL/TLS进行身份验证”都要勾选;
(7)剩下的“允许递交来自”和“SMTP 需要验证”内所有的选项都不要勾选。
这个设置主要是让域名解析结果为127.0.0.2到127.0.0.12的IP地址禁止与 MailServer 进行联系。

因为攻击者的 IP 地址中有不少的地址在很早的时候就被上述提到的一些反垃圾邮件机构(特别是 Spamhaus)拉黑,因此在做了上述的设定之后,只要攻击者的IP地址被鉴定为风险IP地址,hMailServer 就会在对方准备发送邮件给自己之前,把连接中断掉,在hMailServer 日志中留下的日志大致是下面这样的:
"TCPIP" 5652 "2026-06-11 15:16:21.233" "TCP - 24.207.66.154 connected to 192.168.100.11:25."
"SMTPD" 5652 2122 "2026-06-11 15:16:21.233" "24.207.66.154" "SENT: 220 mail.example.com ESMTP"
"SMTPD" 5652 2122 "2026-06-11 15:16:21.844" "24.207.66.154" "RECEIVED: EHLO [182.95.90.243]"
"SMTPD" 5652 2122 "2026-06-11 15:16:21.844" "24.207.66.154" "SENT: 250-mail.example.com[nl]250-SIZE 500000000[nl]250-AUTH LOGIN[nl]250 HELP"
"SMTPD" 4328 2122 "2026-06-11 15:16:22.703" "24.207.66.154" "RECEIVED: MAIL FROM:d8vuojk8t6jg4@satchvillegiftcompany.co.uk"
"TCPIP" 4328 "2026-06-11 15:16:23.032" "DNS lookup: 154.66.207.24.zen.spamhaus.org, 3 addresses found: 127.0.0.3, 127.0.0.4, 127.0.0.11, Match: True"
"TCPIP" 4328 "2026-06-11 15:16:23.063" "DNS lookup: 154.66.207.24.dnsbl.sorbs.net, 0 addresses found: (none), Match: False"
"TCPIP" 4328 "2026-06-11 15:16:23.438" "DNS lookup: 154.66.207.24.b.barracudacentral.org, 1 addresses found: 127.0.0.2, Match: True"
"TCPIP" 4328 "2026-06-11 15:16:24.047" "DNS lookup: 154.66.207.24.bl.mailspike.net, 1 addresses found: 127.0.0.2, Match: True"
"SMTPD" 4328 2122 "2026-06-11 15:16:24.047" "24.207.66.154" "SENT: 550 Rejected by Barracuda"
"APPLICATION" 4328 "2026-06-11 15:16:24.047" "hMailServer SpamProtection rejected RCPT (Sender: d8vuojk8t6jg4@satchvillegiftcompany.co.uk, IP:24.207.66.154, Reason: Rejected by Barracuda)"
日志解读:首先,源IP地址24.207.66.154连接至服务器的25端口,服务器正常返回220欢迎信息。随后客户端发送EHLO [182.95.90.243],但声明的IP与实际连接IP完全不一致,这是垃圾邮件发送者常见的欺骗手法。接着客户端发送MAIL FROM,发件人地址为d8vuojk8t6jg4@satchvillegiftcompany.co.uk,用户名部分为随机字符串,进一步证实其恶意性质。服务器立即对该IP进行多个DNS黑名单查询,其中zen.spamhaus.org返回命中(127.0.0.3/4/11),b.barracudacentral.org返回命中(127.0.0.2),bl.mailspike.net同样返回命中,多个国际知名黑名单同时确认该IP为已知垃圾邮件源。最终服务器直接在MAIL FROM阶段返回550 Rejected by Barracuda,终止本次会话。
因此,采用上述手段之后,之前朋友公司所遇到的“邮件地址枚举攻击”,在对方准备发起攻击之前,就被 hMailServer 直接终止了,在很大限度上保证了邮箱系统的安全。不过,最后也提醒一下,既然已经发现了邮箱系统经常被攻击的情况,就应该要进一步地提高警觉性了,最低限度都要让所有的邮箱用户使用强密码,使用技术手段禁止使用简单密码,并且建议各使用者定期更换密码,以避免被攻击者猜中密码导致邮箱被盗。邮箱被盗有可能不止秘密资料泄露那么简单,后果可以很严重的。另外,由于 hMailServer 已经停止更新,条件允许的话,建议大家还是迁移到更新、更安全的平台。
