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

CloudFlare와 IP차단

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

게시글 목록

번호 제목
20141
20129
20120
20114
20106
20099
20097
20091
20050
20042
20039
20010
19996
19978
19969
19954
19911
19908
19907
19905
19904
19892
19882
19864
19861
19844
19831
19829
19820
19805