记录一次网站邮箱(STMP)被恶意伪造事件
网站运行了一段时间了,最近用户增加的比较多,突然有用户反馈说遇到骗子了,给我看了他跟骗子的邮件记录,发现骗子竟然可以用我们域名的邮件发邮件,真是被惊吓到了,赶紧开始查找问题.
- 首先怀疑是企业邮箱密码泄露了,于是赶紧把密码给改了。
- 然后进入服务器的邮箱发送日志列表,过滤搜索用户提供给我们的关键字,未找到对应的邮件记录。
- 进入到企业邮箱账户,搜索邮件关键字,也未找到任何记录。
到这里我就疑问了,因为邮件客户端我们一直登着,所以不会存在邮箱记录被删除的情况,于是我猜应该是我们的邮箱服务被攻击了,通过Google了解到STMP的邮件可以很容易被伪造,只要域名解析中没有配置SPF记录(SPF是 Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术,是非常高效的垃圾邮件解决方案),如果没有这条TXT记录,那么任何人都可以你域名的邮箱发邮件,于是赶紧将腾讯的 SPF 加入。
SPF是一条 TXT 记录,主机记录为@就行了,值设置为
v=spf1 include:spf.mail.qq.com ~all
加入之后发现还是可以伪造邮件,经过反复尝试查阅资料,最后将SPF的值改成如下解决此问题:
v=spf1 include:spf.mail.qq.com -all
-all 表示前面的策略没有命中,则直接拒绝邮件,所以安全级别更高。
如何测试自己的域名是否可以被伪造,我提供两种方法:
- 通过在线网站测试(https://emkei.cz/)
- 如果有Linux主机,可以直接安装 mail,通过命令行测试
sudo apt install mailutils
internet site >> example.com # 安装的时候会让你配置, example.com 可以随便设置
echo "成功伪造啦!" | mail -s "我是XXX" -r no-reply@example.com youremail
然后查看 mail 日志 (/var/log/mail.log),如果发送结果是 250,表示这封邮件发送成功了,此时就要去配置SPF,如果提示 SPF 未通过,表明已经加了SPF,则不用理会。
这次的查错过程很曲折,甚至都把企业邮箱服务商都改了(当然我用的免费版的,无所谓)
说说对腾讯企业邮箱和网易企业邮箱的感受
腾讯企业邮箱
优点:
1、 DNS解析生效很快(可能是我们用了DNSpod的原因)
2、 可以绑定微信,管理安全方便。
缺点:
客服人员的专业性比较差,问什么都不知道,还骗我说免费版不支持SPF,总想着怎么让你办理收费套餐。
网易企业邮箱
优点:
- 客服人员服务态度好,即使用的是免费版。
- 相比腾讯客服的比较专业。
缺点:
MX验证花了两三个小时,后面在知乎上看到有人说需要增加CNAME记录,于是照做了,结果一下子就验证通过了(不确定是CNAME的影响还是确实时间到了)。
参考文章
记录一次网站邮箱(STMP)被恶意伪造事件的更多相关文章
- js记录用户在网站的浏览记录和停留时间
by weber开发者 from http://weber.pub/ 本文地址: http://weber.pub/js记录用户行为浏览记录和停留时间/163.html 问题 公司想统计一个用户从进入 ...
- 记录asp.net网站停止运行原因的代码
记录网站是什么原因导致停止运行还是有必要的,下面是具体的实现方式. protected void Application_End(object sender, EventArgs e) { Recor ...
- 阿里云服务器 发送邮箱 STMP 25端口 465端口问题 Javamail 25被禁用
我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了 ...
- 阿里云服务器 通过JavaMail发送邮箱STMP问题( 25端口被禁用 使用SSL协议465端口 )
我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了 ...
- 阿里云服务器 通过JavaMail发送邮箱STMP问题 25端口被禁用 使用SSL协议465端口
1 问题描述 我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JD ...
- 用jsp的application写一个记录用户登陆网站的数量
</head><body><%int i = 0;Object number = application.getAttribute("num");if ...
- 记录一次网站漏洞修复过程(三):第二轮处理(拦截SQL注入、跨站脚本攻击XSS)
在程序编写的时候采用参数化的SQL语句可以有效的防止SQL注入,但是当程序一旦成型,再去修改大量的数据库执行语句并不是太现实,对网页表单上输入进行校验是易于实现的方法.在webForm 页面中开启校验 ...
- 记录一次网站漏洞修复过程(二):第一轮处理(IIS目录枚举、应用程序错误)
解决IIS目录枚举 当前的IIS版本为7.5 [IIS] => [请求筛选] => [URL]中添加 [拒绝序列] 符号 ~ 应用程序错误 在Global.asax 中添加异常处理代 ...
- Java 利用监听器来实现记录用户访问网站次数
假如有这么一个需求,要记录所有用户访问某一页面的次数. 最先想到的可能是在该Controller定义一个静态成员,然后在相应Action里自增.但这样有一个问题,就是Tomcat或者其他服务器重启的话 ...
随机推荐
- c# 操作word写入特殊字符
在word中插入特殊字符(word 2010): 插入-符号-选择特殊符号,如图: c#操作 :首先要得到插入符号的字符代码,在上图中有显示,然后word模板改为相应的字体,具体插入代码如下 ...
- (转)SQLServer分区表操作
原文地址:https://www.cnblogs.com/libingql/p/4087598.html 1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一 ...
- DOM随时记
1.node-type 返回元素的节点类型:可以在标签上进行设置 node-type="item" ---来自新浪微博的首页写法
- Docker安装ElasticSearch及kibana
什么是Kibana? Kibana 是一个设计出来用于和 Elasticsearch 一起使用的开源的分析与可视化平台,可以用 kibana 搜索.查看.交互存放在Elasticsearch 索引里的 ...
- Extjs中grid 的ColumnModel 属性配置
一, 用数组的方式配置ColumnModel var colModel = new Ext.grid.ColumnModel([ { header:'编号', dataIndex:'id',width ...
- 数据传输流程和socket简单操作
一.***C/S架构:客户端(client)/服务端(server)架构, B/S架构:浏览器(browser) / 服务端(server)架构 软件cs架构:浏览器,qq,微信,陌陌等等硬件cs架构 ...
- oracle入坑日记<四>表空间
1 表空间是什么 1.1.数据表看做的货品,表空间就是存放货品的仓库.SQLserver 用户可以把表空间看做 SQLserver 中的数据库. 1.2.引用[日记二]的总结来解释表空间. 一个数 ...
- DLC 复合逻辑运算
与非逻辑运算 或非逻辑运算 与或非逻辑运算 异或逻辑运算 同或逻辑运算
- django 加载css、js和图片记载不上
在django的setting里加以下配置 STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), 'Djago/static/',)
- Gradle 打多渠道包
使用gradle 打多渠道包记录经验如下图可见,每个渠道是包含debug 和realse版本的.通过打印BASE_URL 发现在渠道和版本中都可以修改BuildConfig的常量,这样一次可以打出多个 ...