Найти тему
2,7K подписчиков

Закрываем доступ к ресурсам по геолокации

1,6K прочитали
Наш с вами привычный мир меняется день ото дня и в рамках санкций и ожесточённой риторики множества стран по отношению к нам, а также возросшей киберпреступности, необходимо отгораживаться геолокально

Наш с вами привычный мир меняется день ото дня и в рамках санкций и ожесточённой риторики множества стран по отношению к нам, а также возросшей киберпреступности, необходимо отгораживаться геолокально от тех регионов, которые не являются потребителями ваших продуктов и сервисов. Ну и как в той поговорке: "Хочешь ощущать себя защищённым, защити себя сам", государство наши с вами ресурсы защищать или отгораживаться не будет, у них самих проблем выше крыши.

В этой статье мы как раз и рассмотрим существующие варианты блокировки, а также настройку на самых популярных в нашей стране маршрутизаторах Mikrotik и серверах Linux.

Варианты блокировки по геолокации:

1) Защита на уровне ДНС - хостинг провайдера. Пишете письмо с просьбой закрыть всё зоны на resolve кроме России, Белоруссии.

2) Защита на уровне вашего маршрутизатора, когда злоумышленник уже за вашей дверью.

3) Защита на уровне брандмауэра или nginx вашего сервера, последний бастион.

Единственный вариант обхода злоумышленниками это использование Российских прокси серверов, но даже при таких действиях вы снизите вариант угрозы на 95℅.

Закрываем по геолокации все регионы кроме России и Белоруссии на Mikrotik:

Порядок выполнения:

  1. Получаем список всех IP адрессов России и Белоруссии
  2. Добавляем адреса в address-list
  3. Добавляем правило в firewall на drop запросов

Получаем список всех IP адрессов России и Белоруссии

http://www.iwik.org/ipcountry/ --- тут список всех стран с ip адресами, постоянно обновляется.

Добавляем адреса в address-list

  • Открываем терминал в Winbox и добавляем по очереди:

/tool fetch url=http://www.iwik.org/ipcountry/mikrotik/BY

/tool fetch url=http://www.iwik.org/ipcountry/mikrotik/RU

Добавляем правила в firewall на DROP запросов

/ip firewall filter add action=drop chain=input in-interface=ether1 src-address-list=!BY

/ip firewall filter add action=drop chain=forward in-interface=ether1 src-address-list=!BY

/ip firewall filter add action=drop chain=input in-interface=ether1 src-address-list=!RU

/ip firewall filter add action=drop chain=forward in-interface=ether1 src-address-list=!RU

"Будьте очень аккуратны не отрезайте сразу все, попробуйте с каким либо регионом поиграться, постепенно отрезая и присматриваясь все ли хорошо, ведь вы отрежете не только доступ к своим ресурсам в сети, но и запросы пользователей работать не будут"

Закрываем по геолокации все регионы кроме России и Белоруссии на сервере linux:

1-й вариант блокировка доступа к сайту используя Nginx + GeoIP

Для этого мы настроем фильтр по IP-адресам. Настройки будут производиться с помощью модуля ngx_http_geoip2_module и базы GeoIP2.

Проверяем установку Nginx на предмет GeoIP модуля:

nginx -V

Если в выводе команды найдем значение -- with-http_geoip_module, если его нет, то необходимо пересобрать nginx с этой поддержкой, подробнее здесь:

Устанавливаем базу GeoIP

apt install geoip geoip-devel

База GeoIP находится в директории /usr/share/GeoIP/GeoIP.dat

Обновим базу геолокации

Создаем копию старой базы:

mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak

Переходим в каталог GeoIP:

cd /usr/share/GeoIP/

Скачиваем архив обновленной базы:

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

Распаковываем архив:

gunzip GeoIP.dat.gz

Настраиваем Nginx

Правим конфигурационный файл /etc/nginx/nginx.conf и добавляем в него блок http в самое начало:

geoip_country /usr/share/GeoIP/GeoIP.dat;

map $geoip_country_code $allowed_country {

default no;

BY yes;

RU yes;

}

В данном случае сайт будет доступен только пользователям России и Белоруссии.

Перезагружаем Nginx

systemctl restart nginx

На этом настройка блокировки завершена.

2-й вариант блокировка доступа к серверу linux используя брандмауэр

Настройку GEOIP блокировки с помощью UFW демонстрирую на Ubuntu 22.04LTS

Установка необходимых компонентов:

apt-get install curl unzip perl xtables-addons-common libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl

Создадим каталог для базы данных:

mkdir -p /usr/share/xt_geoip

Создаем скрипт для скачивания и обновления GeoIP данных:

nano /usr/local/bin/geoip-update.sh

#!/bin/bash

MON=$(date +"%m")

YR=$(date +"%Y")

wget https://download.db-ip.com/free/dbip-country-lite-${YR}-${MON}.csv.gz -O /usr/share/xt_geoip/dbip-country-lite.csv.gz

gunzip /usr/share/xt_geoip/dbip-country-lite.csv.gz

/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip/ -S /usr/share/xt_geoip/

rm /usr/share/xt_geoip/dbip-country-lite.csv

Запускаем скрипт для получения данных GeoIP для нашей базы данных. Настройте планировщик cron на запуск скрипта /usr/local/bin/geoip-update.sh для регулярного обновления базы данных.

Убедиться, что все работает можно выполнив:

modprobe xt_geoip

lsmod | grep ^xt_geoip

Мы должны увидеть следующее:

xt_geoip 16384 2

Добавление правил блокировки:

iptables -A INPUT -m geoip -p tcp --dport 80,443 --src-cc US,CN -j DROP ----- и через запятую хоть все страны

Если вы используете UFW, то нам нужно добавить пользовательские правила брандмауэра для использования модуля geoip:

  • /etc/ufw/before.rules
  • /etc/ufw/before6.rules

Пример использования, просто добавьте правила в цепочку, чтобы заблокировать доступ с IP-адресов из США и Украины к нашему веб-приложению по порту 80,443:

-A ufw-before-input -p tcp --dport 80,443 -m geoip --src-cc US,UA -j DROP ----- и через запятую хоть все страны

Как то так!

Если в статье есть какие то опечатки или что-то забыл, не пинайте, напишите об этом и я поправлюсь.