经常有站长使用百度云加速的同时使用宝塔的防火墙,不过如何设置不对就会导致结果是无法正常拦截CC攻击,甚至宝塔防火墙拦截百度节点,出现502,520错误的情况,所以正确实配置很重要。
在打开网站防火墙同时使用百度云加速CDN后可能无法获取到用户的真实IP,那么就无法防御,造成服务器防火墙误封CDN IP的情况。
解决办法是获取真实用户IP
一种方法是获取 header中的 X-FORWARDED-FOR 来判断用户IP,但是众所周知这个字段是可以伪造的.
可靠的方法是获取百度云加速中的 CF-CONNECTING-IP 字段,实测这个字段无法伪造,是百度服务器直接发送到用户服务器,那么我们获取这个字段就可以获取到用户的真实IP
开启cdn后,nginx获取真实IP的方法:
原理:使用Nginx自带的Realip模块获取用户真实IP
修改nginx配置:http{}中添加如下:
map $HTTP_CF_CONNECTING_IP $clientRealIp { "" $remote_addr; ~^(?P<firstAddr>[0-9.]+),?.*$ $firstAddr; } log_format main '$clientRealIp [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '$http_user_agent $remote_addr $request_time';
然后在网站记录的日志定义使用main这个日志格式
比如
access_log /www/wwwlogs/www.bnxb.com.log main;
2、PHP获取使用CloudFlare CDN环境下的访客真实IP
<?php $realip =$_SERVER['HTTP_CF_CONNECTING_IP']; echo $realip; //也可以用下面这个 $clientIP = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? $_SERVER['HTTP_CF_CONNECTING_IP'] : $_SERVER['REMOTE_ADDR']; echo $clientIP; ?>
以上就是获取百度云加速环境下真实IP功能
最后我们再进入宝塔防火墙设置
步骤:
打开网站防火墙->使用cdn->添加HEADER,把cf-connecting-ip加进去,原来的x-forwarded-for 和x-real-ip都删掉
完工,这样宝塔的防火墙就能利用百度云加速传递过来的真实访客IP对攻击者进行封禁
最后我们还是需要把百度云加速的IP段加白下到宝塔防火墙哈,以免被防火墙误杀。