如何在PHP中阻止所有CloudFlare IP

时间:2017-11-05 14:19:23

标签: php block cloudflare

我遇到一些使用cloudflare的代理网站存在问题,他们正在伪装我的网站并将其编入垃圾邮件。

如何阻止php中的所有cloudflare ip,以便这些抓取我网站的网站被阻止..还是有更好的解决方案? 我的网站也在使用cloudflare。

2 个答案:

答案 0 :(得分:1)

幸运的是,cloudflare提供了他们的IP范围here的列表,因此只需检查连接IP是否在这些范围的1之内,如果是,则退出()。

使用M6Web/Firewall的示例实现:

use M6Web\Component\Firewall\Firewall;

if(!((new Firewall())->setDefaultState(true)->addList(file('blacklist.txt',FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES),'localBad')->setIpAddress($_SERVER['REMOTE_ADDR'])->handle())){
     http_response_code(403);
     exit();
}

随附每日cronjob:

<?php
$ips = file_get_contents ( 'https://www.cloudflare.com/ips-v4' ) . "\n" . file_get_contents ( 'https://www.cloudflare.com/ips-v6' );
file_put_contents ( '/path/to/blacklist.txt', $ips );
  • 请注意,手动实现ipv6 cidr范围很困难,因此您应该使用第三方库,例如M6Web防火墙。而且,使用iptables比在php级别执行它会更高效。

  • cronjob并不是真的需要,你可以在每个页面加载时获取一个新的ips列表,但这可能会非常慢,而且,或许具有讽刺意味的是,你可能会从cloudflare中自动禁止ip。用于发送垃圾邮件,因此我强烈建议您使用每日cronjob。

答案 1 :(得分:0)

  

如何阻止所有cloudflare ip的

     

我的网站也在使用cloudflare

你不能 - 否则你将无法自己使用cloudflare。

更好的解决方案是让您的网络服务器(例如,apache或nginx)检查主机标头(用户在地址栏中看到的内容)以及它是否是您的正常域名以外的其他内容重定向(永久) - 这将告诉搜索引擎内容已移动&#34;从报废网站到合法网站