Использование связки 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-м порту и попробуйте открыть сайт размещенный на вашем сервере, если ничего не открылось, блокировка работает исправно ). Удачи

Комментарии

похоже что баз нету больше по тому адресу что проверяет скрипт
Шикарная статья. Спасибо, очень помог.
не блокирует, хотя всё установилось
Заработало, забыл про 443 порт. а как сделать, чтоб не блокировало и отправляло на определённый домен?))
Ещё заметил глюк, если с той же машины выйти себе на сайт, он будет заблокирован. Пока не нашёл решения

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

Содержание этого поля является приватным и не предназначено к показу.
Регистр имеет значение
   .oooo.        .                         .oooooo.           o8o  oooo  
.dP""Y88b .o8 d8P' `Y8b `"' `888
]8P' .o888oo ooo. .oo. .oo. 888 888 oooo 888
.d8P' 888 `888P"Y88bP"Y88b 888 888 `888 888
.dP' 888 888 888 888 888 888 888 888
.oP .o 888 . 888 888 888 `88b d88b 888 888
8888888888 "888" o888o o888o o888o `Y8bood8P'Ybd' 888 o888o
888
.o. 88P
`Y888P
Введите код, изображенный в стиле ASCII-арт.