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

CloudFlare와 IP차단

· 2년 전 · 1961 · 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 문제는 아닌것 같은데 다른 방법을 찾아봐야 겠습니다. ^^

게시글 목록

번호 제목
19430
19420
19398
19387
19379
19371
19358
19354
19345
19343
19330
19322
19303
19296
19283
19274
19256
19244
19238
19230
19229
19219
19201
19184
19183
19177
19153
19133
19132
19090