使用 RiSMTP 防止网站源站 IP 地址泄露

KasuganoSoras 发表于 2018-10-31 05:21:58 | 查看:504 | 编程


相信现在很多站长为了防止网站被恶意 CC、DDoS 攻击,都给自己的网站加上了 CDN 服务。

CDN 服务器一般都有较高的防御,抗攻击性,可以让网站服务器 “躲” 在后面,免受攻击。

而最让站长头疼的问题,就是网站源站 IP 泄露了,一旦源站 IP 泄露,再强大的 CDN 防护也无济于事。

很多人可能忽略了邮件,大多数网站都有注册验证或者邮件找回密码的功能,而往往就是这么一封邮件,就 “出卖” 了你的源站 IP。

其实这个问题很早以前就有人发现了,很多人都不重视而已,这个问题很容易复现:

  1. 注册一个网站,会要求邮件验证
  2. 使用 GMail 等支持查看 “原始邮件” 的邮箱
  3. 在邮件 Header 里可以找到网站源站 IP

说到这可能有很多人会惊呼,自己花大价钱买的 CDN 几乎一点作用都没有,攻击者可以轻松拿到源站 IP。

那么话说回来,如何防止邮件泄露网站源站 IP 呢?

之前我看到过很多解决方案,例如用 HaProxy 做代理的,或者用第三方邮局的,这些都是可行的方案,但是今天我要带给大家的是另一个更简单更实用的方法。

什么是 RiSMTP?

这是一个可以远程发送邮件的 API,使用 PHP 编写。

传统的 SMTP 发送邮件的方式是这样的:

网站服务器 > SMTP 服务器 > 对方邮件服务器

这样就会导致网站服务器的 IP 直接被 SMTP 服务器暴露了。

而 RiSMTP 的原理也非常简单:

网站服务器 > 邮件中转服务器 > SMTP 服务器 > 对方邮件服务器

显然,邮件中转服务器在发信过程中充当了一个挡箭牌的功能,攻击者即使通过邮件头查 IP,也只能查到中转服务器的 IP 地址,而无法查到源站地址。

RiSMTP 的工作原理是基于 PHP 的 curl,所以请确保你的网站 PHP 启用了 php_curl 模块。

使用方法

首先需要准备以下几样东西

  1. 一个支持 PHP 的虚拟主机或者服务器,作为 API 服务器
  2. 一个 SMTP 服务器和账号密码

第一步,将 server/ 目录上传到虚拟主机或者服务器

第二步,编辑 index.php,修改第 293 行的 $apipass = "1234567890";,将 1234567890 改为你想设置的 API 密码。

第三步,将 client/ 目录中的文件复制到你的网站任意目录

第四步,通过 include 将 RiSMTP 类引入你的代码,并创建一个连接

include("plugins/RiSMTP.inc.php");
$api     = "http://example.com/server/"; // API 服务器地址
$apipass = "1234567890";                 // API 密码
$host    = "smtp.example.com";           // SMTP 服务器地址
$port    = 25;                           // SMTP 服务器端口
$auth    = true;                         // 是否启用身份验证
$user    = "[email protected]";        // SMTP 用户名
$pass    = "1234567890";                 // SMTP 密码
$Client  = new RiSMTPClient($api, $apipass, $host, $port, $auth, $user, $pass);

第五步,测试发送邮件

$to      = "[email protected]";     // 收信人地址
$from    = "[email protected]"; // 发信人地址
$subject = "SendMail";         // 邮件主题
$body    = "RiSMTP 发信测试!"; // 邮件正文
$type    = "HTML";             // 邮件类型
$cc      = "";                 // 抄送
$bcc     = "";                 // 密送
$headers = "";                 // 附加请求头
$debug   = false;              // 是否开启调试模式
$result  = $Client->sendMail($to, $from, $subject, $body, $type, $cc, $bcc, $headers, $debug);
if(!empty($result)) {
    echo $result;
} else {
    echo "Successful!";
}

关于邮件发送源码

这个是我好久之前在百度上找的一个 PHP 邮件发送类,对 PHP 7 的兼容性有点问题,拿来改了一下。

至于原作者,已经无法找到了,因为这个基本上已经烂大街了,根本无法找到初始来源。

开源协议

RiSMTP 使用通用公共许可证协议(GNU General Public License v3.0)协议开源

开源项目地址

Github:https://github.com/kasuganosoras/RiSMTP

KasuganoSoras 在 2018-10-31 05:24:52 编辑了帖子


img


帖子评分

评分是对作者的一种鼓励,您可以在评论框输入 /cs score 分数 附言 对帖子进行评分。

最少 1 分,最大 5 分,评分会消耗自己的积分,不能给自己的帖子评分。

暂时没有人评分!


发表你的评论

回帖时请注意遵守论坛发言规定,请勿恶意灌水。

  回帖倒序排列   匿名回复 您还可以输入 2000  


欢迎来到 ZeroDream 论坛!

您还没有登录噢 :P

登陆以后就可以发帖和回复啦~


系统主题选项

在线人数:Loading...

WebSocket 状态:Loading...