当前位置: 当前位置:首页 > 时尚 > smtp服务器版本信息可被获取漏洞修复正文

smtp服务器版本信息可被获取漏洞修复

作者:知识 来源:娱乐 浏览: 【大 中 小】 发布时间:2026-10-17 06:16:21 评论数:

一次例行巡检,服务复我随手敲了一行 telnet mail.example.com 25,器版取漏屏幕上立刻弹出一串字符:220 mx.example.com ESMTP Postfix。本信被获就这一下,洞修服务器把家底全抖出来了——软件是服务复Postfix,版本号虽然没直接显示,器版取漏但光那个“ESMTP”和主机名就够有心人琢磨半天了。本信被获更糟的洞修是,有些配置不当的服务复服务器会直接回显 Sendmail 8.15.2/8.15.2 这种完整版本串,等于把攻击面画好了地图递给对方。器版取漏

这事儿的本信被获根子在于SMTP协议设计得太“坦诚”。RFC 5321里规定服务器必须在连接时发送问候语,洞修但没规定必须说得多详细。服务复偏偏大多数邮件软件默认把banner信息写得满满当当——品牌、器版取漏版本号、本信被获甚至编译参数都往上堆。攻击者拿到这些,直接去漏洞库比对,连猜都不用猜。我见过一个老运维,服务器跑了八年没更新,banner上明晃晃写着Sendmail 8.12.11,那版本漏洞多得能串成项链,可他愣是不知道这信息早就泄出去了。

修复思路其实不复杂,核心就一句话:让banner变成哑巴。具体做法分两层。第一层,改配置。Postfix用户在主配置文件 /etc/postfix/main.cf 里加一行 smtpd_banner = $myhostname ESMTP,把版本号彻底摘掉。Sendmail则要改 sendmail.mc,找到 define(`confSMTP_LOGIN_MSG', `$j') 这行,把 $j 换成自定义字符串,比如 define(`confSMTP_LOGIN_MSG', `mx.example.com ESMTP'),然后重新生成配置并重启。第二层,更狠一点,直接上防火墙或代理层做清洗。用iptables的string模块匹配 ^220 开头的响应,把包含版本号的包拦下来改写,但这招需要谨慎,容易误伤正常邮件流。

改完后你得验证效果。别拿telnet到本机试,那走的是回环接口,可能绕过某些过滤规则。找个外网端口扫一下,或者用 nc -vz host 25 看握手信息。我习惯用 openssl s_client -connect host:465 -starttls smtp 测加密通道,因为有些服务器只在STARTTLS之后才暴露详细版本。测完记得看日志——有些邮件系统会记录完整的SMTP会话,确保banner改动没影响日志分析。

这里有个容易栽的坑:光改banner不够。很多服务器在出错响应里也会带版本,比如发个无效命令 EHLO 后,某些实现会回 500 5.5.1 Command unrecognized: EHLO,版本号照样漏。所以你得把整个SMTP会话层的错误信息都过一遍。更隐蔽的是,有些服务在 HELP 命令或 VRFY 响应里会附带编译信息,这得靠抓包逐条看。我上次帮人排查,banner改干净了,结果对方在 QUIT 时回了句 221 2.0.0 Bye (Sendmail 8.14.4),直接破功。

说到底,这漏洞不算高危,但属于典型的“信息泄露类”小毛病。可别小看它——红队打点的时候,第一步就是抓banner。你想想,如果连版本都藏不住,那等于把自家门锁型号贴在大门上,开锁工具网上随便买。勤快点,改完配置顺手做次全端口扫描,把25、465、587、2525这些常用邮件端口都查一遍,确保没有漏网之鱼。要是用容器或云主机,还得检查镜像里有没有默认配置文件覆盖你的设置。别嫌麻烦,安全这活儿,细节里全是魔鬼。