网站运行了一段时间了,最近用户增加的比较多,突然有用户反馈说遇到骗子了,给我看了他跟骗子的邮件记录,发现骗子竟然可以用我们域名的邮件发邮件,真是被惊吓到了,赶紧开始查找问题.

  • 首先怀疑是企业邮箱密码泄露了,于是赶紧把密码给改了。
  • 然后进入服务器的邮箱发送日志列表,过滤搜索用户提供给我们的关键字,未找到对应的邮件记录。
  • 进入到企业邮箱账户,搜索邮件关键字,也未找到任何记录。

到这里我就疑问了,因为邮件客户端我们一直登着,所以不会存在邮箱记录被删除的情况,于是我猜应该是我们的邮箱服务被攻击了,通过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 表示前面的策略没有命中,则直接拒绝邮件,所以安全级别更高。

如何测试自己的域名是否可以被伪造,我提供两种方法:

  1. 通过在线网站测试(https://emkei.cz/)
  2. 如果有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,总想着怎么让你办理收费套餐。

网易企业邮箱

优点:

  1. 客服人员服务态度好,即使用的是免费版。
  2. 相比腾讯客服的比较专业。

缺点:

MX验证花了两三个小时,后面在知乎上看到有人说需要增加CNAME记录,于是照做了,结果一下子就验证通过了(不确定是CNAME的影响还是确实时间到了)。

参考文章

SPF语法

域名健康查询

记录一次网站邮箱(STMP)被恶意伪造事件的更多相关文章

  1. js记录用户在网站的浏览记录和停留时间

    by weber开发者 from http://weber.pub/ 本文地址: http://weber.pub/js记录用户行为浏览记录和停留时间/163.html 问题 公司想统计一个用户从进入 ...

  2. 记录asp.net网站停止运行原因的代码

    记录网站是什么原因导致停止运行还是有必要的,下面是具体的实现方式. protected void Application_End(object sender, EventArgs e) { Recor ...

  3. 阿里云服务器 发送邮箱 STMP 25端口 465端口问题 Javamail 25被禁用

    我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了 ...

  4. 阿里云服务器 通过JavaMail发送邮箱STMP问题( 25端口被禁用 使用SSL协议465端口 )

    我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JDK1.8换到了 ...

  5. 阿里云服务器 通过JavaMail发送邮箱STMP问题 25端口被禁用 使用SSL协议465端口

    1 问题描述 我们传统使用的比较简单的是 STMP 25端口收发邮件 今天发现刚购买的阿里云服务器不能作为客户端通过STMP 25端口发送邮件 开始在网上有说发现是JDK1.8的原因,然后自己也把JD ...

  6. 用jsp的application写一个记录用户登陆网站的数量

    </head><body><%int i = 0;Object number = application.getAttribute("num");if ...

  7. 记录一次网站漏洞修复过程(三):第二轮处理(拦截SQL注入、跨站脚本攻击XSS)

    在程序编写的时候采用参数化的SQL语句可以有效的防止SQL注入,但是当程序一旦成型,再去修改大量的数据库执行语句并不是太现实,对网页表单上输入进行校验是易于实现的方法.在webForm 页面中开启校验 ...

  8. 记录一次网站漏洞修复过程(二):第一轮处理(IIS目录枚举、应用程序错误)

    解决IIS目录枚举 当前的IIS版本为7.5 [IIS]   => [请求筛选] => [URL]中添加 [拒绝序列] 符号  ~ 应用程序错误 在Global.asax 中添加异常处理代 ...

  9. Java 利用监听器来实现记录用户访问网站次数

    假如有这么一个需求,要记录所有用户访问某一页面的次数. 最先想到的可能是在该Controller定义一个静态成员,然后在相应Action里自增.但这样有一个问题,就是Tomcat或者其他服务器重启的话 ...

随机推荐

  1. c# 操作word写入特殊字符

    在word中插入特殊字符(word 2010): 插入-符号-选择特殊符号,如图:     c#操作 :首先要得到插入符号的字符代码,在上图中有显示,然后word模板改为相应的字体,具体插入代码如下 ...

  2. (转)SQLServer分区表操作

    原文地址:https://www.cnblogs.com/libingql/p/4087598.html 1. 分区表简介 分区表在逻辑上是一个表,而物理上是多个表.从用户角度来看,分区表和普通表是一 ...

  3. DOM随时记

    1.node-type 返回元素的节点类型:可以在标签上进行设置 node-type="item"   ---来自新浪微博的首页写法

  4. Docker安装ElasticSearch及kibana

    什么是Kibana? Kibana 是一个设计出来用于和 Elasticsearch 一起使用的开源的分析与可视化平台,可以用 kibana 搜索.查看.交互存放在Elasticsearch 索引里的 ...

  5. Extjs中grid 的ColumnModel 属性配置

    一, 用数组的方式配置ColumnModel var colModel = new Ext.grid.ColumnModel([ { header:'编号', dataIndex:'id',width ...

  6. 数据传输流程和socket简单操作

    一.***C/S架构:客户端(client)/服务端(server)架构, B/S架构:浏览器(browser) / 服务端(server)架构 软件cs架构:浏览器,qq,微信,陌陌等等硬件cs架构 ...

  7. oracle入坑日记<四>表空间

    1   表空间是什么 1.1.数据表看做的货品,表空间就是存放货品的仓库.SQLserver 用户可以把表空间看做 SQLserver 中的数据库. 1.2.引用[日记二]的总结来解释表空间. 一个数 ...

  8. DLC 复合逻辑运算

    与非逻辑运算 或非逻辑运算 与或非逻辑运算 异或逻辑运算 同或逻辑运算

  9. django 加载css、js和图片记载不上

    在django的setting里加以下配置 STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'), 'Djago/static/',)

  10. Gradle 打多渠道包

    使用gradle 打多渠道包记录经验如下图可见,每个渠道是包含debug 和realse版本的.通过打印BASE_URL 发现在渠道和版本中都可以修改BuildConfig的常量,这样一次可以打出多个 ...