Использование связки iptables - geoip

Модуль geoip, не входит в список стандартных модулей iptables, его нужно установить вместе с остальными дополнительными модулями фаервола.

root@vmstat:# apt-get install xtables-addons-common

если сейчас попытаться добавить блокирующее правило в iptables, получим такой выхлоп:

root@vmstat:# iptables -I INPUT ! -i lo -p tcp --dport 80 -m geoip --src-cc US -j DROP
Could not open /usr/share/xt_geoip/LE/US.iv4: No such file or directory

это говорит о том, что базы с диапазонами IP адресов стран отсутствуют. Что-бы исправить данный косяк, нужно скачать базы и приготовить их для использования в iptables geoip. Для этого вместе с модулями, в папку /usr/lib/xtables-addons, были установлены 2 perl скрипта, один для скачивания, второй для сборки geoip баз, но что-бы второй скрипт отработал нормально, необходимо доставить в систему perl модуль libtext-csv-xs-perl, что мы и делаем:

root@vmstat:# apt-get install libtext-csv-xs-perl

создаем папку для geoip баз:

root@vmstat:# mkdir /usr/share/xt_geoip

что-бы слить базы на сервер, достаточно запустить один из perl скриптов:

root@vmstat:# cd /usr/lib/xtables-addons
root@vmstat:/usr/lib/xtables-addons# ./xt_geoip_dl

ну и собственно собираем, указав в качестве папки назначения /usr/share/xt_geoip, а в качестве источника все csv файлы в текущей папке

root@vmstat:/usr/lib/xtables-addons# ./xt_geoip_build -D /usr/share/xt_geoip *.csv

вновь пробуем добавить правило

root@vmstat:# iptables -I INPUT ! -i lo -p tcp --dport 80 -m geoip --src-cc US -j DROP

если ошибка не вылезла, значит все хорошо.

В данном случае будут заблокированы все пакеты приходящие из США на любой сетевой интерфейс кроме локального, на порт 80. Обратите особое внимание на то, что команда iptables -I вставит правило самым первым в цепочку INPUT, поэтому сначала проанализируйте уже имеющиеся правила и подумайте куда конкретно разместить блокировку по geoip ( я бы создал отдельную цепочку для размещения в ней блокировок по geoip признаку ).

В целом структура правил полностью соответствует остальным правилам iptables, например такой вариант ( ! --src-cc US ):

root@vmstat:# iptables -I INPUT ! -i lo -p tcp --dport 80 -m geoip ! --src-cc US -j DROP

заблокирует все страны кроме(!) США.

Что-бы проверить работоспособность модуля, забаньте свою страну например на 80-м порту и попробуйте открыть сайт размещенный на вашем сервере, если ничего не открылось, блокировка работает исправно ).

Удачи

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
              oooooo     oooo  oooooo     oooo  ooo        ooooo  oooooo     oooo   .oooooo..o 
`888. .8' `888. .8' `88. .888' `888. .8' d8P' `Y8
ooo. .oo. `888. .8' `888. .8' 888b d'888 `888. .8' Y88bo.
`888P"Y88b `888. .8' `888. .8' 8 Y88. .P 888 `888. .8' `"Y8888o.
888 888 `888.8' `888.8' 8 `888' 888 `888.8' `"Y88b
888 888 `888' `888' 8 Y 888 `888' oo .d8P
o888o o888o `8' `8' o8o o888o `8' 8""88888P'


Введите код, изображенный в стиле ASCII-арт.