테스트 사이트 - 개발 중인 베타 버전입니다

CloudFlare와 IP차단

· 2년 전 · 1960 · 3

만약 extend에서
[code]
$geo_info = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$_SERVER['REMOTE_ADDR']));
if ( !in_array($geo_info['geoplugin_countryCode'], ['KR']) ) { //['','','']
    http_response_code(403);exit();
}
[/code]
이렇게 한국 외 모두 차단을 하면 접속이 안될 때
common.php 상단에 아래 내용을 추가하면 됩니다.
[code]
class FixCloudFlare{
    public static $cf_ip_ranges = array('103.21.244.0/22','103.22.200.0/22','103.31.4.0/22','104.16.0.0/13','104.24.0.0/14','108.162.192.0/18','131.0.72.0/22','141.101.64.0/18','162.158.0.0/15','172.64.0.0/13','173.245.48.0/20','188.114.96.0/20','190.93.240.0/20','197.234.240.0/22','198.41.128.0/17','199.27.128.0/21');
    public static function fixVisitorInfo(){
        foreach (self::$cf_ip_ranges as $range){
            if (self::inRange($_SERVER['REMOTE_ADDR'], $range)){
                if(isset($_SERVER['HTTP_CF_CONNECTING_IP']))$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
                if(strpos($_SERVER['HTTP_CF_VISITOR'], 'https') !== false)$_SERVER['HTTPS'] = 'on';
                return true;
            }
        }
        return false;
    }
    public static function inRange($ip, $range){
        list($range, $netmask) = explode('/', $range);
        $ip = ip2long($ip) & (0xffffffff << (32 - $netmask));
        $range = ip2long($range) & (0xffffffff << (32 - $netmask));
        return $ip == $range;
    }
}
FixCloudFlare::fixVisitorInfo();
[/code]

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 3개

2년 전
찾고 있었는데, 감사합니다. ^^
2년 전
@민트다이어리 찾고 있었다니 반갑습니다.
2년 전
@들레아빠 어제부터 오전까지 잘 되었는데, 오후부터 제 아이피도 차단되어 버리네요. ㅠ..ㅠ CloudFlare 문제는 아닌것 같은데 다른 방법을 찾아봐야 겠습니다. ^^

게시글 목록

번호 제목
20497
20496
20467
20455
20448
20447
20446
20428
20424
20421
20404
20402
20401
20389
20350
20345
20333
20307
20286
20284
20281
20280
20239
20235
20226
20197
20192
20189
20166
20147