Как заблокировать доступ к сайту для определённой страны? Решение — связка Iptables + модуль geoip.
Ставим зависимости:
1 |
yum install gcc gcc-c++ make automake unzip zip xz kernel-devel-`uname -r` iptables-devel perl-Text-CSV_XS |
выкачиваем последнюю версию и ставим
(Для ядер < 3.7 -> xtables-addons-1.47
Для ядер > 3.7 -> xtables-addons-2)
1 2 3 4 5 6 |
wget https://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-1.47.1.tar.xz tar xvf xtables-addons-1.47.1.tar.xz cd xtables-addons-1.47.1 ./configure make make install |
если вылезет ошибка
1 2 3 4 5 6 7 8 9 10 11 12 |
make[3]: Entering directory `/usr/src/kernels/2.6.32-431.17.1.el6.x86_64' CC [M] /opt/xtables-addons-1.47.1/extensions/compat_xtables.o /opt/xtables-addons-1.47.1/extensions/compat_xtables.c: В функции ‘xtnu_ipv6_find_hdr’: /opt/xtables-addons-1.47.1/extensions/compat_xtables.c:633: ошибка: слишком мало аргументов в вызове функции ‘ipv6_find_hdr’ make[4]: *** [/opt/xtables-addons-1.47.1/extensions/compat_xtables.o] Ошибка 1 make[3]: *** [_module_/opt/xtables-addons-1.47.1/extensions] Ошибка 2 make[3]: Leaving directory `/usr/src/kernels/2.6.32-431.17.1.el6.x86_64' make[2]: *** [modules] Ошибка 2 make[2]: Leaving directory `/opt/xtables-addons-1.47.1/extensions' make[1]: *** [all-recursive] Ошибка 1 make[1]: Leaving directory `/opt/xtables-addons-1.47.1' make: *** [all] Ошибка 2 |
то правим
1 |
vim /lib/modules/`uname -r`/build/include/linux/autoconf.h |
Найдите строку:
1 |
#define CONFIG_IP6_NF_IPTABLES_MODULE 1 |
Замените на:
1 |
/*#define CONFIG_IP6_NF_IPTABLES_MODULE 1*/ |
выкачиваем базу GeoIP
1 2 3 4 5 |
cd geoip/ ./xt_geoip_dl ./xt_geoip_build GeoIPCountryWhois.csv mkdir -p /usr/share/xt_geoip/ cp -r {BE,LE} /usr/share/xt_geoip/ |
загружаем модуль для фаерволла (добавьте эту строку в /etc/rc.d/rc.local)
1 |
modprobe xt_geoip |
добавим пример блокировки Китая, для этого
1 |
vim /etc/sysconfig/iptables |
и добавим строку
1 |
-A INPUT -m geoip --src-cc CN -j DROP |
Перезагружаем iptables:
1 |
service iptables reload |
Готово!