經(jīng)常有站長(zhǎng)使用百度云加速的同時(shí)使用寶塔的防火墻,不過如何設(shè)置不對(duì)就會(huì)導(dǎo)致結(jié)果是無(wú)法正常攔截CC攻擊,甚至寶塔防火墻攔截百度節(jié)點(diǎn),出現(xiàn)502,520錯(cuò)誤的情況,所以正確實(shí)配置很重要。
在打開網(wǎng)站防火墻同時(shí)使用百度云加速CDN后可能無(wú)法獲取到用戶的真實(shí)IP,那么就無(wú)法防御,造成服務(wù)器防火墻誤封CDN IP的情況。
解決辦法是獲取真實(shí)用戶IP
一種方法是獲取 header中的 X-FORWARDED-FOR 來判斷用戶IP,但是眾所周知這個(gè)字段是可以偽造的.
可靠的方法是獲取百度云加速中的 CF-CONNECTING-IP 字段,實(shí)測(cè)這個(gè)字段無(wú)法偽造,是百度服務(wù)器直接發(fā)送到用戶服務(wù)器,那么我們獲取這個(gè)字段就可以獲取到用戶的真實(shí)IP
開啟cdn后,nginx獲取真實(shí)IP的方法:
原理:使用Nginx自帶的Realip模塊獲取用戶真實(shí)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';
然后在網(wǎng)站記錄的日志定義使用main這個(gè)日志格式
比如
access_log ?/www/wwwlogs/www.bnxb.com.log main;
2、PHP獲取使用CloudFlare CDN環(huán)境下的訪客真實(shí)IP
<?php $realip?=$_SERVER['HTTP_CF_CONNECTING_IP'];? echo?$realip; //也可以用下面這個(gè) $clientIP?=?isset($_SERVER['HTTP_CF_CONNECTING_IP'])???$_SERVER['HTTP_CF_CONNECTING_IP']?:?$_SERVER['REMOTE_ADDR']; echo?$clientIP; ?>
以上就是獲取百度云加速環(huán)境下真實(shí)IP功能
最后我們?cè)龠M(jìn)入寶塔防火墻設(shè)置
步驟:
打開網(wǎng)站防火墻->使用cdn->添加HEADER,把cf-connecting-ip加進(jìn)去,原來的x-forwarded-for 和x-real-ip都刪掉
完工,這樣寶塔的防火墻就能利用百度云加速傳遞過來的真實(shí)訪客IP對(duì)攻擊者進(jìn)行封禁
最后我們還是需要把百度云加速的IP段加白下到寶塔防火墻哈,以免被防火墻誤殺。