<- содержание

 

GeoIP. Установка и настройка.

 

1. Подготовка сервера Ubuntu к установке GeoIP.

2. Получение ключа Maxmind для GeoIP.

3. Получаем базы GeoIP и адаптируем для Iptables.

4. Знакомим Iptables с GeoIP и блокируем страны.

 

1. Подготовка сервера Ubuntu к установке GeoIP.

 

Для начала обновим локальные индексы пакетов до последних изменений в репозиториях

 

$ sudo apt-get update

 

Теперь установим пакеты необходимые для распаковки и сборки базы GeoIP

 

$ sudo apt-get install curl unzip perl

$ sudo apt-get install libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl

 

Установим xtables-addons-common который содержит в себе модули необходимые для состыковки Iptables и GeoIP

 

$ sudo apt-get install xtables-addons-common

 

Создадим папку для geoip баз:

 

$ sudo mkdir /usr/share/xt_geoip

 

С этим этапом закончили.

 

2. Получение ключа Maxmind для GeoIP.

 

Для регистрации идём сюда https://www.maxmind.com/en/geolite2/signup

 

Заполняем форму регистрации и ждем письмо в котором будет указаны ссылка на генерацию пароля к личному кабинету. Сгенерировав пароль, заходим в кабинет и жмем на пункт My License Key, а затем Generate new license key.

 

Новое окно нам покажет заветный ключик для скачивания и обновления баз GeoIP, а также будет возможность скачать уже готовый конфиг для обновления баз.

 

3. Получаем базы GeoIP и адаптируем для Iptables.

 

Описание скрипта можно почитать тут. Опять таки спасибо добрым людям. https://github.com/mschmitt/GeoLite2xtables

 

Возвращаемся на наш сервер и переходим в директорию в которую скачаем необходимые скрипты

 

$ cd /usr/local/src

 

Скачиваем

 

$ sudo wget https://github.com/mschmitt/GeoLite2xtables/archive/master.zip

 

Распаковываем и переходим в появившуюся папку

 

$ sudo unzip master.zip

$ cd /usr/local/src/GeoLite2xtables-master/

 

Чтобы у скриптов все получилось их нужно сделать исполняемыми

 

$ sudo chmod 0740 ./00_download_geolite2

$ sudo chmod 0740 ./10_download_countryinfo

$ sudo chmod 0740 ./20_convert_geolite2

 

Теперь нужно создать файлик с ключем который нам выдал maxmind.

 

$ touch geolite2.license

 

И вносим свой ключ

 

YOUR_LICENSE_KEY='ВАШ КЛЮЧ'

 

Далее запускаем каждый скрипт по порядку и на выходе получаем собранную базу GeoIP

 

$ sudo ./00_download_geolite2

$ sudo ./10_download_countryinfo

$ sudo cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv |./20_convert_geolite2 /tmp/CountryInfo.txt > /usr/share/xt_geoip/GeoIP-legacy.csv

$ sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip /usr/share/xt_geoip/GeoIP-legacy.csv

 

Вот всё и готово. Для проверки можно перейти в папку с собранными базами

 

$ cd /usr/share/xt_geoip

 

4. Знакомим Iptables с GeoIP и блокируем страны.

 

Чтобы Iptables мог работать с базами, нужно включить модуль ядра. Для этого вводим

 

$ modprobe xt_geoip

$ lsmod | grep ^xt_geoip

 

Без этих двух команд система будет ругаться на отсутствие modprobe и xtables-addon.

 

После всего выше проделанного, можно переходить к правилам блокировки.

 

Блокировать можно как отдельный порт:

 

$ iptables -A INPUT -m geoip -p tcp –dport 25 –src-cc CN,HK -j DROP

 

В данном случае Китай и Корея не смогут писать нам письма обращаясь к 25 порту.

 

Или заблокировать доступ к http-серверу для всех клиентов из Китая:

 

$ iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc CN -j DROP

$ iptables -A INPUT -p tcp --dport 80 -j ACCEPT

 

Или сделать более хитро и разрешить доступ к http-серверу только с конкретно указанных стран (например, России и Белоруссии):

 

$ iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc RU,BY -j ACCEPT

$ iptables -A INPUT -p tcp --dport 80 -j DROP

 

Или просто заблокировать доступ к нашему серверу из Китая и Кореи:

 

$ iptables -A INPUT -m geoip --source-country CN,HK -j REJECT --reject-with icmp-port-unreachable