- Блокировка пользователей из определенных стран
- .htaccess и GeoIP
- Перенаправление по странам
- Блокировка по странам
- MikroTik.by
- GEOIP и Блокировка стран
- GEOIP и Блокировка стран
- GeoIP — блокировка стран и вход с определенных ip-адресов.
- Контекст http <> файл nginx.conf
- Контекст server <> хост-файл
- Как защитить сервер от посетителей из нежелаемых стран
- Вариант с приложением: NGINX
Блокировка пользователей из определенных стран
Примеры использования GeoIp, для блокировки пользователей из определенных стран
Использование модуля GeoIP который позволяет перенаправлять или блокировать веб-трафик в соответствии с географическим положением.
Репозиторий EPEL в RHEL и CentOS
По умолчанию для Apache/2.4.6 mod_geoip недоступен в официальном репозитории RHEL / CentOS, поэтому нам нужно установить сторонний репозиторий EPEL.
Mod_GeoIP в RHEL и CentOS
После того, как в вашей системе включен репозиторий EPEL, вы можете просто установить mod_geoip, выполнив следующую команду с его пакетами зависимостей:
Для загрузки последних Geo City и Country Database, выполните команды:
Включите Mod_GeoIP в Apache
После того, как модуль установлен, откройте и отредактируйте основной файл конфигурации модуля текстовым редактором и активируйте модуль:
Установите строку GeoIPEnable с Off в положение On. Так же убедитесь, что вы добавили абсолютный путь к файлу базы данных GeoIP.
Перезапустите службу Apache.
Перенаправление пользователей на основе страны
В описанном примере код перенаправит пользователей на основе страны, который мы установили как AS (Азия).
Таким образом, вы можете перенаправить всех пользователей на основе их кода страны.
Блокировка пользователей на основе страны
Данный пример заблокирует пользователей на основе кода страны, который устанавливает GeoIP.
Пример блокировки пользователей из стран AS (Азия) и USA (США).
Разрешение доступа пользователей на основе страны
Данный пример позволит пользователям иметь доступ только из ниже перечисленных стран.
Каждый запрос на сайт содержит специальный заголовок GeoIp-Country-Code, в котором содержится двухбуквенный код страны посетителя ISO 3166. Страна определяется исходя из IP адреса посетителя по данным MaxMind GeoLite.
- AF – Africa
- AN – Antarctica
- AS – Asia
- EU – Europe
- NA – North America
- OC – Oceania
- SA – South America
- UA – Ukraine
- CN – China
- PL – Poland
Источник
.htaccess и GeoIP
Используя GeoIP можно выполнить перенаправление или блокировку определенных IP по странам.
Для того чтобы настроить работу GeoIP на сайте используя .htaccess, необходимо проверить включен ли модуль GeoIP на сервере. Для этого необходимо создать php файл с любым названием, например: info.php, открыть его для редактирования и вставить такой код:
После этого перейти на эту страницу, например: https://unihost.com/info.php и нажать Ctrl+F для поиска на странице. В поисковую строку необходимо ввести «geo» без кавычек. В случае если на странице буду присутствовать директивы вида:
Это значит что модуль GeoIP включен на сервере, на котором расположен сайт. В таком случае можно продолжать настройку GeoIP.
Рассмотрим варианты применения GeoIP в примерах.
Перенаправление по странам
Иногда бывает нужно перенаправить пользователя с иностранным IP на английскую версию сайта, и наоборот. В таком случае в .htaccess необходимо вставить код вида:
RewriteEngine On — включение модуля Rewrite
GeoIPEnable On — включение модуля GeoIP
RewriteCond %
RewriteCond %
RewriteRule .* http://unihost.com/ru/ [R=302,L] — выполняем редирект на русскую версию сайта
RewriteCond %
RewriteRule .* http://unihost.com/en/ [R=302,L] — методом исключения выполняем редирект на англоязычную версию сайта
Блокировка по странам
В случае как с перенаправлением, так же и с блокировкой. Есть возможность заблокировать того или иного посетителя в зависимости от страны. Для этого в .htaccess необходимо добавить следующий код:
GeoIPEnable On — включение модуля GeoIP
SetEnvIf GEOIP_COUNTRY_CODE CN BlockCountry — создание некоего массива (цепочки) BlockCountry в которую вноситься условие что страна CN — Китай
SetEnvIf GEOIP_COUNTRY_CODE FR BlockCountry — тоже самое что и предыдущая строка, только страна в этом случае Франция
Deny from env=BlockCountry — блокирование стран которые находятся в цепочке BlockCountry
Источник
MikroTik.by
For every complex problem, there is a solution that is simple, neat, and wrong.
GEOIP и Блокировка стран
GEOIP и Блокировка стран
Сообщение promychev » 19 авг 2017, 23:34
Здравствуйте, решил я добавить для вас тему по блокировки стран. Многие и не знаю как ей пользоваться. Модуля на GEOIP как многие уже в курсе — на самом деле нету. Но есть альтернативное решение. Mikrotik предоставили нам БД для IP диапазонов всех стран.
Вносим все IP адреса в ЧС(черный список)
Начнем с CN — китай и республики Гон-конг HK
Коды стран для GEOip можно взять тут — ассортимент всех стран мира
https://www.artlebedev.ru/country-list/
Сами же правила тут http://www.iwik.org/ipcountry/mikrotik/HK Ичем через первую ссылку нужную вам страну для блокироваки или наоборот для открытия доступа к роутеру. Далее заменяем HK например на ID индию — или на DE германию например.
Далее все по сторой ссылке — вставляем в терминал весь диапапозон ( я делаю через Winbox )
И вставляю в терминал правым кликом и «Paste»
Далее задаю правила
которые я описал в другой статье для защиты от DDoS атак http://forum.mikrotik.by/viewtopic.php?f=2&t=327
Кстати не забудьте закрыть водящий UDP трафик с помощью reject!
Так как мы внесли список address-list = HK , то пропишем для него правило.
Этим правилом мы закрыли доступ для Гонконга. Это был метод блокировки IP диапазона определенной страны.
А теперь второй метод :
Вы можете облегчить себе задачу если вам надо впускать только РФ, Украину, Казахстан и тд а остальные заблокировать — ведь тех кого хотите заблокировать больше чем тех кого хотите впустить.
Добавим правило DROP на все соединения перед правилом блокировки UDP соединений:
Источник
GeoIP — блокировка стран и вход с определенных ip-адресов.
В этой статье я расскажу как заблокировать доступ к сайту из нежелательных стран, но при этом сохранить возможность посещения сайта отдельными пользователями из заблокированной страны. Блокировать неугодные страны будем с помощью GeoIP модуля для сервера Nginx.
В предыдущей статье я рассмотрел добавление GeoIP модуля в сборку Nginx, с его дальнейшей настройкой, которая позволяет блокировать страны, исключая их из списка разрешенных. Данный способ подразумевает полный запрет посещения сайта со всех адресов принадлежащих заблокированной стране, не оставляя никаких лазеек. Ну разве что, кроме VPN, TOR-а и прочих средств обхода блокировок.
Один из посетителей сайта прочитав вышеуказанную статью, задал очень интересный вопрос. Суть вопроса состояла в том, что если заблокировать доступ к сайту из США, то будет ли сайт доступен для поисковых роботов Google-а, имеющих американские диапазоны ip-адресов.
Я не знаю зачем человеку понадобилось блокировать пользователей из США, ведь обычно блокируют китайских товарищей, но это не мое дело. Может он является ярым патриотом, и таким образом показывает американцам их место, ну или отвечает на санкции, ведь запрещали же вход Бараку Обаме, отчего же не запретить вход остальным американцам?
В таком случае мне непонятна обеспокоенность за американский поисковик, ведь если отказываешься от американского, то нужно отказываться сразу от всего. Но это не важно, главное что сам вопрос интересный, причем настолько, что я решил написать отдельную статью.
Представьте себе что есть некий сайт и есть друг уехавший в Китай. Ввиду повышенной активности китайских ботов, доступ к сайту для Китая у нас закрыт. Но друг очень любит посещать сайт и жить не может без фотографий котиков, которые вы там выкладываете. Как сделать так, чтобы ваш друг находясь в Китае, имел возможность посещать сайт, а остальные китайцы такой возможности не имели?
Конечно же он может использовать TOR или VPN, чтобы попасть на ваш сайт, но давайте представим что такой возможности у него нет и все нужно сделать грамотно.
Контекст http <> файл nginx.conf
В конфигурацию сервера, у меня она устроена следующим образом, в контекст http <>, должны быть включены GeoIP-базы. У меня они находятся в каталоге /etc/nginx/geoip.
Теперь с помощью директивы geo (ngx_http_geo_module — добавлять не нужно, т.к. входит в состав nginx), создадим переменную $friend (имя может быть любым, главное наличие «$» в начале), значение которой будет определять ip-адрес друга. По умолчанию переменная будет равна нулю, если определены ip-адрес или подсеть друга, то значение переменной будет равняться единице.
Должно быть примерно так. Адресов и подсетей может быть столько, сколько нужно.
Контекст server <> хост-файл
В конфигурацию хост-файла, в контекст server <>, добавляем переменную $block_china (имя может быть любым) и несколько условий для ее работы. Все вместе выглядит следующим образом.
Разберем написанное, чтобы понимать как все это работает.
Добавляем переменную $block_china и выставляем ее значение равным нулю.
Пока $block_china равна нулю, доступ на сайт разрешен всем приходящим посетителям. Если определен китайский ip-адрес, то переменная $block_china становится равной единице и запрещает доступ.
Если на сайт пришел ваш друг и переменная $friend равна единице, то $block_china становится равной нулю и разрешает посещение сайта.
Если $block_china равна единице, то для остальных китайских посетителей, не попадающих под действие предыдущего условия, доступ запрещен. Тогда клиенту отдается 403-й ответ (forbidden) или любой другой, например 444-ый (разрыв связи с клиентом).
Если помимо Китая нужно заблокировать еще какую-либо страну, то в таком случае нужно немного изменить первое условие. Если страна одна, то достаточно добавить значение переменной $geoip_country_code = CN. Но если нужно добавить еще страны, то значение переменной $geoip_country_code будет выглядеть так !
(CN|AF|BO). Стран может быть сколько угодно, главное записывать их внутри скобок, через разделитель «|», например !
В этом условии к Китаю я добавил Афганистан — AF и Боливию — BO.
Для применения изменений проверяем правильность конфигурационных файлов и перечитываем конфиги.
Проверить работу можно с помощью VPN или TOR-а. Подключитесь к VPN или TOR-у, посмотрите свою страну и ip-адрес, например вот тут. Быстренько набросайте конфигурацию GeoIP с запретом страны, разрешите вход со своего нового ip-адреса, перезагрузите сервер и зайдите на сайт. Если вас пустило на сайт, значит все работает.
Чтобы точно убедиться в правильности конфигурации, закомментируйте свой ip-адрес в значении переменной $friend директивы geo.
Перечитайте конфиг сервера и перезагрузите страницу своего сайта. Если после этого вам отдан 403-й ответ, то все точно работает.
Вот таким простым образом и китайцы заблокированы и друг доволен. Ну а патриоты могут заблокировать на своих сайтах США, но при этом разрешить доступ для поисковых роботов Американской Корпорации Google. Список диапазонов адресов, с которых приходят роботы Google-а, я любезно прилагаю ниже.
Источник
Как защитить сервер от посетителей из нежелаемых стран
Ко мне очень часто поступают довольно интересные и нестандартные задачи по настройке серверов.
Сегодня например, меня попросили настроить ряд серверов на фильтрацию любого трафика из определенных стран. Причин такой защите есть множество — сокращения спама и атак, выравнивание соотношений, и многого другого.
В моем случае — надо было заблокировать CN полностью, на RU отдавать полный канал, а на остальные страны — в два раза меньше.
Разумеется, вбивать полностью все подсети руками неудобно, да и они часто меняются. Логичнее всего было сделать это с помощью geoip.
Самое эффективное — это конечно прикрутить geoip к ядру. В моем случае на серверах был Debian, по этому и рецепт привожу под него.
Сначала скачаем исходники
apt-get install linux-source-2.6.18
tar xjf /usr/src/linux-source-2.6.18.tar.bz2 -C /usr/src/
apt-get source iptables
wget people.netfilter.org/peejix/patchlets/geoip.tar.gz
wget ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070414.tar.bz2
tar xjf patch-o-matic-ng-20070414.tar.bz2
tar xzf geoip.tar.gz -C patch-o-matic-ng-20070414/patchlets/
Теперь будем собирать
cd patch-o-matic-ng-20070407/
KERNEL_DIR=/usr/src/linux-source-2.6.18/ ./runme geoip
Говорим «да» и выходим. Самое время поставить все нужное для сборки, если еще не ставили:
apt-get install build-essential
Скопировав текущий конфиг ядра, я просто вношу изменения:
cd /usr/src/linux-source-2.6.18/
make oldconfig
geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW)
Тут нужно сказать «m» для сборки модуля. Затем:
make modules_prepare
cp net/ipv4/netfilter/ipt_geoip.ko /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/
depmod
modprobe ipt_geoip
echo «ipt_geoip» >> /etc/modules
Точно так же собираем библиотеку для iptables:
make KERNEL_DIR=/usr/src/linux-source-2.6.18/ extensions/libipt_geoip.so
cp extensions/libipt_geoip.so /lib/iptables/
Самая малость — база GeoIP
Для подготовки надо скачать бесплатную базу, хотя лучше взять платный вариант — он точнее. В любом случае подготовка базы будет идти с помощью csv2bin, который нужно собрать:
wget people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
tar xzf csv2bin-20041103.tar.gz
cd csv2bin/
make
unzip GeoIPCountryCSV.zip
./csv2bin ../GeoIPCountryWhois.csv
Появляются 2 фалйа geoipdb.bin и geoipdb.idx которые надо бросить в /var/geoip:
mkdir /var/geoip
mv geoipdb.* /var/geoip/
После этого можно работать с mod_geoip, например так:
iptables -A INPUT -p tcp —dport 80 -m geoip —src-cc CN -j REJECT
Отбрасываем трафик с CN. А еще можно метить и менять полосу с помощью TC.
Вариант с приложением: NGINX
Если у вас не собирается ядро, или вообще VDS, то можно сделать почти все тоже самое, поставив на фронтенд nginx с mod_geoip. Прежде убедитесь, что nginx собран с поддержкой mod_goip. У меня он стоял, у кого нет — придется пересобрать, но это не сложно.
Саму базу необходимо конвертировать с помощью geo2nginx.pl (лежит в архиве с исходником nginx) и закинуть в конфиг:
perl geo2nginx.pl geo.conf
cp geo.conf /etc/nginx/
Использовать проще пареной репы:
geo $country <
default no;
include /etc/nginx/geo.conf;
127.0.0.0/24 ru;
>
Пример с CN трафиком:
if ($country
Как всегда у быстрого решения всегда найдется минус — в этом случае в виде паузы перед запуском nginx, так как база читается в память.
Источник