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