民审-M

Discuz! X3.4 X3.3 X3.2集成SendCloud api邮件代发, 规避smtp泄漏服务器真实IP的风险

作者:民审-M   发布时间:2017-05-15 17:01   回复数:24   浏览数:5511
民审-M
551124民审-M金牌草根
热门 2017-05-15 17:01:34
551124 热门 2017-05-15 17:01:34
本帖最后由 民审-M 于 2017-5-18 15:58 编辑

       很多站长为了避免被攻击,全站虽然接入了百度云加速、360网站卫士、加速乐、其他cdn等,但是攻击者任然可以通过服务器上的论坛 Discuz 的邮件功能(用来发注册信,取回密码,还有一些论坛服务器的,没办法关闭),你只要随便注册一个用户,或者使用密码取回功能,立刻给你发邮件,邮件头上清清楚楚就是 服务器真实 IP ,一时间DZ smtp发送邮件找回密码、验证密码、重发验证邮件等种种手法都可以通过smtp发信获得站长真实服务器IP,该漏洞一直是dz不公开的密码,站长因此被CC、DD苦不堪言,今天草根吧公布并彻底解决站长发邮件泄露真实服务器IP的问题的两大解决方案供站长使用。

   
一、如何泄漏
看过Discuz!官网的bug反馈区的站长应该已经知道是怎么一回事了。就是当我们的网站通过SMTP代发或者php调用SendMail来发邮件通知注册用户时,我们发送过去的邮件原文中将带有我们主机的真实IP!!如果被人恶意利用,我们的CDN防护都将变得毫无意义(点此查看个人网站暴漏真实IP的危害)!

图片:真实服务器IP.jpg



二、解决方案
①、SendCloud 发信API
<p align="left">既然不能使用SMTP代发,又不能使用 SendMail,那就只有一个办法了:用第三方API代发邮件即可,就算暴露IP也是暴露了邮件服务器的IP,和我们的小站没有任何关系。</p><p align="left">感兴趣的可以前往SendCloud官网一探究竟。这玩意如何牛逼,如何高大上我就不说了。简单的说就是一个邮件代发服务,比上面介绍的自建API更加完善,当然使用也更加复杂,希望看完本文的朋友可以成功集成到Discuz!当中。</p>三、动手集成
      ①、注册帐号<p align="left">如何注册就不赘述了,官网地址:http://sendcloud.sohu.com/</p>
<p align="left">②、域名设置</p><p align="left">邮件设置==>域名==>新增发信域名</p><p align="left"></p><p align="left"></p><p align="left">完成后,进入域名设置,按照提示到你的DNS解析控制台新增必须的几个记录:</p><p align="left"></p><p align="left">下面还有一个收信配置,也是一个必配项:</p><p align="left"></p><p align="left">Ps:不过这里有一个技巧,上图可以很明显的看到,我现有的记录值是2个,一个sendcloud,一个是QQ的域名邮箱。因为,我不是很想用Sendloud的转发功能,而是想继续用之前就配好的QQ域名邮箱。这里该如何实现呢?很简单,在DNS解析那新建2个MX记录,然后将QQ域名的MX优先级设置更小即可!</p><p align="left">下面是草根吧的相关DNS设置,不会的可以参考下:</p><p align="left"></p><p align="left">设置好了之后,可以点击右上角的【检测配置】来探测是否生效。这个生效时间长短不一,咱们先继续做后面的设置。</p>
<p align="left">最新补充:其实如果你的网站要用其他域名邮箱或企业邮箱,那么只要在Sencloud域名验证后将MX记录改为相应的域名邮箱或企业邮箱记录即可!比如草根吧要用QQ的域名邮箱,那么就将上图中的sendcloud的MX记录删除,只保留QQ邮箱的MX记录就好了。并不影响 sendcloud 发信,因为这个MX记录只是用于收信,而最爽的是QQ邮箱那边依然可以用域名邮箱发信!</p>
③、获取api_user和api_key
<p align="left">登录后,就会获得帐号专属的API_KEY,当然如果你忘记了也可以使用会员首页的重置功能。</p><p align="left">接着点击上方的【邮件设置】==>【Api_user】,来创建新的API_KEY备用:</p><p align="left"></p>④、邮件样本<p align="left">Ps:目前已和邮件模板合并,请直接跳过这一步!展开</p>
⑤、邮件模板<p align="left">看到这,估计大伙要骂娘了。。。刚弄了一个邮件样本,又要弄邮件模板!当然,我们是可以直接post整个邮件内容到Sendloud,但是并不是强迫症所向往的,我们追求的是极致,因为使用模板发送只要post模板中的几个变量即可。</p><p align="left">废话不说,点击【发送相关】==>【邮件模板】===>【创建模板】</p><p align="left">和上面的邮件样本一样,将以下代码粘贴到源码模式保存即可:</p>
<p align="left">调用名称推荐使用字母:</p><p align="left">

图片:[草根吧.] 论坛注册地址,请完成您的注册.jpg

</p><p align="left">

图片:[草根吧] 取回密码说明.jpg

</p><p align="left">这里就不用审核了,但是注意这个模板在邮件样本中必须存在匹配的样本,否则无法发出去。</p>⑥、PHP函数<p align="left">唉,草根吧折腾一上午,分享出来几分钟!代码已经整合到提供的附件的\source\class\SendCloud.php</p>
⑦、系统邮件(可选)[p=null, 2, left]什么叫系统邮件?就是开启后系统会发一条注册的地址到用户的邮箱,从该地址链接过来的允许注册,同时建议UCenter中开启一个邮箱只允许注册一个帐户 注意:只有在站长 - 邮件设置中完成邮件设置,确保邮件能发送成功下可以开启该功能。但是我懒得将这个功能也用Sendloud来代发,一是麻烦,二是发给管理员的,泄漏IP又如何?[/p]<p align="left">所以,之前如果已经弄过SMTP,可以保留如下代码,让系统继续使用SMTP发邮件给管理员:</p>
<p align="left">但是如果之前已经添加过评论回复邮件通知代码的的,请注意注释掉,否则之前的代码可能还会继续工作,泄漏IP,一般在functions.php里面添加如下代码即可:</p>//移除原有的邮件通知动作钩子(一般都是用的comment_mail_notify这个函数,自己注意辨别)
remove_action('comment_post', 'comment_mail_notify');
四、效果预览<p align="left">目前草根吧已经使用了一段时间了,非常稳定。免费用户每天可以发送200封邮件,这已经足够应付绝大部分个人论坛了,如果不够用,其实安装应用中心一个免费插件:SendCloud邮件发送 2.0.3(http://addon.discuz.com/?@sendcloud.plugin)会自动分配一个日发送1000封的免费账号 !</p><p align="left">[color=rgb(47, 136, 154)]
</p><p align="left">[color=rgb(47, 136, 154)]

图片:.jpg

</p><p align="left">Ps:如图,最看不起那些乱填邮件的人!要么就灌水,要么就是找茬的。而且经常对SendCloud请求一些无效邮件,将会降低帐号的信誉度,影响以后的发送成功率。</p><p align="left">很多人看到本文肯定会望而却步,因为确实弄起来比较复杂,也比较麻烦!嫌麻烦,下面已经给你备好懒人包和安装使用文档,按需选择!!!</p><p align="left">API接口调用包(适用于Discuz X3.2 X3.3):
本部分内容设定了隐藏,需要回复后才能看到
</p><p align="left">----------------------------------------------------------------------------------------------------------------------------</p>[color=rgb(255, 0, 0)]解决方案②、SendCloud 通过SMTP接入

[color=rgb(255, 0, 0)]
[p=20, null, left]使用 SMTP 协议传输数据到 SendCloud 的邮件服务器 ( smtp.sendcloud.net:25 smtpcloud.sohu.com:25 )[/p]

    [*]用户可以编写程序连接邮件服务器, 发送邮件
    [*]用户可以配置客户端连接邮件服务器, 只需修改用户名, 密码和 SMTP 配置即可

Discuz!后台配置如下:
后台——站长——邮件设置——设置:
选择:通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)
SMTP 服务器:smtp.sendcloud.net     或      smtpcloud.sohu.com
端口:25
验证:勾选
发信人邮件地址:admin@xxx.com (你的管理员邮箱)
SMTP 身份验证用户名:API_USER
SMTP 身份验证密码:API_KEY

[color=rgb(255, 0, 0)]然后测试即可,直接用SendCloud 的smtp接入,而发送云的SMTP隐藏了真实服务器IP了。

[color=rgb(255, 0, 0)]后记:
\uc_client\lib\sendmail.inc.php
\uc_server\lib\sendmail.inc.php

\uc_client\control\mail.php
\uc_server\control\mail.php

发信模板:
\source\language\lang_email.php
\source\language\lang_spacecp.php

感谢 @sakura丶小樱@繁星夜空下 提供指导支持!

如果没有如果将来没有将来
沙发如果没有如果将来没有将来步入草根 2018-11-07 22:47
我来看看
敏感字有点多
板凳敏感字有点多步入草根 2018-08-11 22:08
我记得这个是收费的吧
euryueyru
地板euryueyru步入草根 2018-08-10 11:35
感谢楼主分享
GBOY
4楼GBOY步入草根 2018-07-01 20:22
支持草根吧
晚上的太阳46
5楼晚上的太阳46步入草根 2018-05-17 13:40
学习一下,看自己的网站有没有用
ru1404
6楼ru1404步入草根 2018-04-22 11:34
有没搞错这还要隐藏啊!!!!
号天朝
7楼号天朝步入草根 2018-04-09 16:30
谢谢收下了
Dying
8楼Dying步入草根 2018-03-14 21:07
谢谢,很需要啊!!!
小母猫
9楼小母猫步入草根 2018-03-09 02:34
感谢分享啧啧啧啧啧啧啧啧啧啧啧啧
酷爱-Cooile.com
10楼酷爱-Cooile.com步入草根 2018-03-07 15:02
谢谢分享哦,不知道能用不
心有所守
11楼心有所守步入草根 2018-02-21 23:19
暗示的发生大幅
心有所守
12楼心有所守步入草根 2018-02-21 23:19
暗示的发生大幅
心有所守
13楼心有所守步入草根 2018-02-21 23:19
暗示的发生大幅
心有所守
14楼心有所守步入草根 2018-02-21 23:18
暗示的发生大幅
游客
登录后才可以回帖,登录 或者 注册