邮件系统配置检查
引子
2023高校网络安全研讨会上,马云龙老师介绍了清华邮件系统的“电子邮件系统结构-新架构-2023年”,经过多次的部署,清华使用负载均衡,前后端分离,文件分离等方法将邮件系统完全展开部署。我在2018年写过 高校邮件系统配置相关 ,在里面,我也更推荐将整个邮件系统所有组件展开部署,于是我很好奇,目前大家是到什么程度了?
顺便提下,我在2021年写过 为什么我不建议用WebMail收发信件 。里面提到的部分内容Isaac系统目前已经修复了。
其实AIO的部署方式没有任何问题,简单有效,但是将所有组件分开部署,一旦分模块部署后,你可以对各个不同模块应用不同的防护方法,具体好处我以前有写,现在流行微服务的架构,分开部署,一定是未来的方向。
由于邮件系统的很多信息都在DNS上,都是对外公开的。所以我从 教育系统IPv6发展态势监测平台 https://ipv6c.cngi.edu.cn/2021.do 上获得了147个双一流单位的学校名称和URL地址,新建了一个Jupyter Notebook,开始观察了。
怎么判断是不是分开部署了
我初步的想法是,在我以前提到的,最重要的MX的A记录,Web/SMTP/POP/IMAP A记录,SPF里面带的A记录,这3个代表了MTA、MRA、MDA等等多个功能,理论上如果展开部署,这3个的IP应当不同。
当然有些单位可能分开部署后,又通过某种发布机制将IP统一到同一个,很少。
随着我程序运行的过程中,我发现了很多好玩的事情。
SPF
部分单位无法正确地编写SPF字段。可能厂商让写什么就写什么。
在所有的147个单位的SPF字段里,只有包括清华在内的3个单位使用了redirect的指令来重定向SPF。很高级的做法。
有50个单位都include了某个邮件厂商的SPF字段,在这个厂商的SPF里面,使用了SoftFail,我对SoftFail的机制不是太了解,如果是我,我更希望是HardFail。但是这个厂商的SPF A记录里面包括了他自己在云平台的托管服务器IP和某些区域代发服务器IP,我曾经建议将这2个分开,目前看起来可能是还没有。
有42个单位的SPF以SoftFail ~all结尾而不是-all。这里面又大部分是include另外一个邮件厂商的SPF字段,推测这个邮件厂商建议这么配置。
某些单位使用的一家邮件厂商只有简单的A记录,估计没有某些区域代发功能。
有14个单位有ip6记录,很高级。但是有部分单位IPv6记录是/48,不知道是啥情况。还有个单位错误地使用了fe80::开头的IPv6 IP。
只有十几个SPF记录不是硬编码IP地址的方式进行。当然,过多的DNS查询可能导致错误,一般不超过10个,而很多单位普遍在用的某个厂商的include已经会引起9次DNS查询了,另外一家是8次,所以你一般include后,很难不硬编码了。
有一个单位比较神奇的是,只要访问不在他们列表的域名,就会返回 “v=spf1 a ~all” 的记录。可能是为了安全防护吧还是配置错误。
你可以通过 PowerDMARC 网站来对你的域名进行测试得分。
DMARC和其他
有十几个单位有自己的DMARC记录。
有DMARC的单位72个,但是有52个是p=none,我不确定是否为了兼容性而降级了。
还有更多的DKIM、BIMI、MTA-STS(2018年我的文章说没有这种机制,现在看起来是错了)、TLS-RPT没有继续测试。
STARTLS应用整体如何未测试。
IPv6
有13个单位的MX记录有IPv6地址。
有76个单位Web有IPv6地址。以上均未测试服务是否正常。
因为Web/SMTP/POP/IMAP是面向用户的,所以上v6会简单一点,而MX虽然也是SMTP,但是它涉及到跟其他服务器的交互,有些单位会有顾虑。
Web和MX是否同一个IP
在判断Web Mail的IP上,我构造了mail.xxx.edu.cn和email.xxx.edu.cn,再通过HTTP协议去获取是否真的有网站,最终得出WebMail的IP地址。并开始比较,最终得出结论是:以下省略部分字。
管理员界面和API
如果分开部署做得好的话,管理员界面和API应当跟Web Mail进行分离,但是我所知道的某家邮件厂商没有。一般的纵深防御是,对admin这个目录在HTTP层(不是应用层)进行IP限制,在我的检查的结果里,有很多没有做,也就是全世界任意地方都可以访问这个后台管理员界面。如果管理员有比较固定的IP地址,建议加上。
某家邮件厂商的API功能非常强大,具有上帝视角,但是他的API只有IP限制,我曾经建议加上密码限制,在我所知的版本里,可能还没有,于是我对API URL进行了检查,有些没有API,有些是直接暴露在互联网的,估计后端有IP限制,但是IP太容易被抢,可能会在多次升级后对IP白名单列表的失控,或者攻击队进入同网段进行尝试,也是一个隐患。
SMTP、POP、IMAP banner
可以通过连接SMTP端口后拿到banner,有部分是
Anti-spam XXX (mispb-GUID-xxx.edu.cn[20230810])
目前不知道时间戳是啥,应该不是版本号,可能是安装时间。我记得去年banner还会暴露版本号和编译时间2个时间戳,目前看起来是没有了。
有些没有反垃圾网关。
有2家使用****对banner进行了隐藏。
某家厂商邮件首页的seo-link
在我对某个厂商Web Mail首页进行观察时,发现了一个height和line-height为0并且隐藏的seo-link,这个class名字取得挺诚实,但是用height为0,不会被SEO惩罚么?
然后我继续检查了下,部分高校被放了SEO链接,我没有继续查有多少个。
<div class="seo-link">
<a href="XXX" target="_blank">邮件系统</a>
<a href="XXX" target="_blank">邮件服务器</a>
<a href="XXX" target="_blank">企业邮箱</a>
<a href="XXX" target="_blank">企业邮箱</a>
</div>
自动配置
在我以前提到的自动配置里,暂时没有任何一家实现了 _autodiscover._tcp.xxx.edu.cn 的DNS记录 / autoconfig.xxx.edu.cn。有个位数单位有 autodiscover.xxx.edu.cn CNAME,一般都是指向outlook。自动配置对用户更友好,用户可以傻到不需要去知道SMTP/POP等的域名和端口。由于这个是给机器或者说程序读的,各个客户端支持也不同,估计大家都还没意识到。
我用 matplotlib 画了一些图,但是贴图实在麻烦并且没有意义,省略。