Как заблокировать по IP другие страны?

Feuer

Новичок
Регистрация
3 Июл 2017
Сообщения
467
Реакции
94
Баллы
28
Приветствую форумчан.
Необходимо локнуть все айпишники кроме РФ и СНГ.
Написал хостеру, говорят
1. это стоит бабок (незначительных)
2. через фаервол они ограничат доступ ко всему серверу...

При этом хостер говорит, что это решается посредством самой CMS.
Подскажите, кто в курсе?
 
Последнее редактирование модератором:

MexaHu3aToP

Новичок
Прошёл марафон
Регистрация
24 Фев 2017
Сообщения
277
Реакции
128
Баллы
43
Блокнув ip адреса РФ и СНГ, ты блокнешь бота гугла.
Можно блокнуть через cloudflare(нужно включить в самом cf: network->ip geolocation):
Код:
$country = $_SERVER["HTTP_CF_IPCOUNTRY"];

if($country == "RU" || $country == "UA"){

echo "работаем";

}else{
echo "блок";
}
Насчет бота гугла, нужно еще сделать проверку на user agent
 
Последнее редактирование:

Feuer

Новичок
Регистрация
3 Июл 2017
Сообщения
467
Реакции
94
Баллы
28
@MexaHu3aToP, в самом дле нет такой функции?)
 

Romantv

Новичок
Регистрация
27 Фев 2017
Сообщения
957
Реакции
358
Баллы
63
А Для чего именно блокировать, цель от блокировки?
 
Последнее редактирование модератором:

Shot5

Новичок
Регистрация
27 Фев 2017
Сообщения
61
Реакции
13
Баллы
8
PHP:
function real_ip_all_server($block_country){
    # БЛОКИРУЕМ IP
    # Роскомнадзор Пишем их IP
    $arrayBanIP = array(
        '198.37.148.63',   # ruprotect
        '176.38.244.90',   # AXGHOUSE
        '188.116.36.253',  # Anti-Piracy Protection Legal
        '35.231.112.156',  # Hacker - (Pidar)
        '217.64.42.100',   # Hacker - (Pidar)
        '191.43.47.191'    # Hacker - (Pidar)
    );
    #########################################
    $block_country = mb_strtolower($block_country);
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];
    if(filter_var($client, FILTER_VALIDATE_IP)){$ip = $client;}elseif(filter_var($forward, FILTER_VALIDATE_IP)){$ip = $forward;}else{$ip = $remote;}
    if(in_array($ip, $arrayBanIP)){die('And it all belongs to corporation google...');}
    # отправка на сервер ip
    $details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
    # ответ сервера даные по ip
    $country = mb_strtolower($details->country);
    $data = array();
    # Реальный IP
    $data['ip'] = $ip;
    # Страна реальная
    $data['country_real'] = $country;
    # Страна заблокирована
    $data['block_country'] = $block_country;
    if($country==$block_country){
        $data['country']=true;
        # Запись в setcookie
        setcookie('check_zone','block',time() + (86400 * 5)); // 86400 = 1 день в секундах
    }else{
        # проверка setcookie
        if($_COOKIE['check_zone']=='block'){$data['country']=true;}else{$data['country']=false;}
    }
    return $data;
}
#########################################
## Проверка
$block = real_ip_all_server('ru');
if($block['country']==true){
    echo'Блок';
}else{
    print_R($block);
}
 

Морган

Приватовец
Приватовец
VIP
Регистрация
15 Июн 2017
Сообщения
473
Реакции
154
Баллы
43
Возможно, поможет ipset.
 

Loner

Новичок
Регистрация
27 Июл 2017
Сообщения
123
Реакции
31
Баллы
28
PHP:
function real_ip_all_server($block_country){
    # БЛОКИРУЕМ IP
    # Роскомнадзор Пишем их IP
    $arrayBanIP = array(
        '198.37.148.63',   # ruprotect
        '176.38.244.90',   # AXGHOUSE
        '188.116.36.253',  # Anti-Piracy Protection Legal
        '35.231.112.156',  # Hacker - (Pidar)
        '217.64.42.100',   # Hacker - (Pidar)
        '191.43.47.191'    # Hacker - (Pidar)
    );
    #########################################
    $block_country = mb_strtolower($block_country);
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];
    if(filter_var($client, FILTER_VALIDATE_IP)){$ip = $client;}elseif(filter_var($forward, FILTER_VALIDATE_IP)){$ip = $forward;}else{$ip = $remote;}
    if(in_array($ip, $arrayBanIP)){die('And it all belongs to corporation google...');}
    # отправка на сервер ip
    $details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
    # ответ сервера даные по ip
    $country = mb_strtolower($details->country);
    $data = array();
    # Реальный IP
    $data['ip'] = $ip;
    # Страна реальная
    $data['country_real'] = $country;
    # Страна заблокирована
    $data['block_country'] = $block_country;
    if($country==$block_country){
        $data['country']=true;
        # Запись в setcookie
        setcookie('check_zone','block',time() + (86400 * 5)); // 86400 = 1 день в секундах
    }else{
        # проверка setcookie
        if($_COOKIE['check_zone']=='block'){$data['country']=true;}else{$data['country']=false;}
    }
    return $data;
}
#########################################
## Проверка
$block = real_ip_all_server('ru');
if($block['country']==true){
    echo'Блок';
}else{
    print_R($block);
}
Может расписать что конкретно дает этот код?
 

Shot5

Новичок
Регистрация
27 Фев 2017
Сообщения
61
Реакции
13
Баллы
8
Может расписать что конкретно дает этот код?
$block = real_ip_all_server('Символ страны которую блокируем');
ip - которые хотим заблокировать на сайте
PHP:
$arrayBanIP = array(
        '198.37.148.63',   # ruprotect
        '176.38.244.90',   # AXGHOUSE
        '188.116.36.253',  # Anti-Piracy Protection Legal
        '35.231.112.156',  # Hacker - (Pidar)
        '217.64.42.100',   # Hacker - (Pidar)
        '191.43.47.191'    # Hacker - (Pidar)
    );
скрипт записывает в куки (если использовали VPN или сменили ip)

как работает

PHP:
$block = real_ip_all_server('ru'); # ru,ua,usa.....
if($block['country']==true){
    echo'Просмотр заблокированно в "вашей стране"';
}else{
    echo'код плеера';
}
 

Loner

Новичок
Регистрация
27 Июл 2017
Сообщения
123
Реакции
31
Баллы
28
@Shot5, а как заблокировать USA при этом чтоб гугл бот имел доступ к сайту?
 

Terminator

Новичок
Прошёл марафон
Регистрация
8 Май 2017
Сообщения
140
Реакции
27
Баллы
28
Приветствую форумчан.
Необходимо локнуть все айпишники кроме РФ и СНГ.
Написал хостеру, говорят
1. это стоит бабок (незначительных)
2. через фаервол они ограничат доступ ко всему серверу...

При этом хостер говорит, что это решается посредством самой CMS.
Подскажите, кто в курсе?
Цель блокировки стран?
Дидос или правообладатели?
Или оба варианта правильные?

В панели ISPmanager можно блочить любые страны и ip самому.
Если у тебя VestaCP, то посравнению с ISPmanager это полное дерьмо.
В CloudFlare на бесплатном тарифе есть ограничения, можно заблочить только 10 стан и нельзя заблочить америку, она неприкасаемая.
Остальные страны можно заставить проходить капчу.
 

Terminator

Новичок
Прошёл марафон
Регистрация
8 Май 2017
Сообщения
140
Реакции
27
Баллы
28
Сверху Снизу