相信现在很多站长为了防止网站被恶意 CC、DDoS 攻击,都给自己的网站加上了 CDN 服务。
CDN 服务器一般都有较高的防御,抗攻击性,可以让网站服务器 “躲” 在后面,免受攻击。
而最让站长头疼的问题,就是网站源站 IP 泄露了,一旦源站 IP 泄露,再强大的 CDN 防护也无济于事。
很多人可能忽略了邮件,大多数网站都有注册验证或者邮件找回密码的功能,而往往就是这么一封邮件,就 “出卖” 了你的源站 IP。
其实这个问题很早以前就有人发现了,很多人都不重视而已,这个问题很容易复现:
- 注册一个网站,会要求邮件验证
- 使用 GMail 等支持查看 “原始邮件” 的邮箱
- 在邮件 Header 里可以找到网站源站 IP
说到这可能有很多人会惊呼,自己花大价钱买的 CDN 几乎一点作用都没有,攻击者可以轻松拿到源站 IP。
那么话说回来,如何防止邮件泄露网站源站 IP 呢?
之前我看到过很多解决方案,例如用 HaProxy 做代理的,或者用第三方邮局的,这些都是可行的方案,但是今天我要带给大家的是另一个更简单更实用的方法。
什么是 RiSMTP?
这是一个可以远程发送邮件的 API,使用 PHP 编写。
传统的 SMTP 发送邮件的方式是这样的:
网站服务器 > SMTP 服务器 > 对方邮件服务器
这样就会导致网站服务器的 IP 直接被 SMTP 服务器暴露了。
而 RiSMTP 的原理也非常简单:
网站服务器 > 邮件中转服务器 > SMTP 服务器 > 对方邮件服务器
显然,邮件中转服务器在发信过程中充当了一个挡箭牌的功能,攻击者即使通过邮件头查 IP,也只能查到中转服务器的 IP 地址,而无法查到源站地址。
RiSMTP 的工作原理是基于 PHP 的 curl,所以请确保你的网站 PHP 启用了 php_curl 模块。
使用方法
首先需要准备以下几样东西
- 一个支持 PHP 的虚拟主机或者服务器,作为 API 服务器
- 一个 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 编辑了帖子