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

CloudFlare와 IP차단

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

게시글 목록

번호 제목
21184
21166
21157
21136
21132
21124
21119
21114
21106
21095
21069
21063
21060
21058
21053
21035
21032
21028
21009
21000
20994
20993
20984
20979
20958
20935
20934
20930
20913
20883