Thank you for reading this post, don't forget to subscribe!
Мы узнаем, как мы можем блокировать трафик исходящий от конкретных IP-адресов стран с помощью базы данных GeoIP и Linux IPTables. Iptables является командой на основе утилиты для настройки ядра брандмауэра Линукса, который реализуется в рамках проекта Netfilter. В то время как GeoIP представляет собой набор IP-адресов, соответствующих географическим местам, где географическое положение сопоставляется с IP-адресами, выделяемых на тех конкретной организации, городов, областей и страны. Географические координаты в базе данных GeoIP часто находятся вблизи центра населения, поэтому их не следует использовать для определения конкретного адреса или домохозяйства. С помощью модуля под названием xt_geoip, состоящий из расширения Iptables xtables-addon и базы данных GeoIP.
Обновление и установка зависимостей
Прежде всего, мы должны модернизировать нашу систему Linux, а затем мы будем двигаться вперед для установки зависимостей, которые необходимы для xtables-addons. Для того, чтобы сделать это, мы выполним следующие команды соответствующих дистрибутивам, работающих в нашей машине.
Система RedHat, основанная (CentOS, RHEL, Fedora)
1 2 |
# yum update # yum install gcc-c++ make automake kernel-devel-`uname -r` wget unzip iptables-devel perl-Text-CSV_XS |
Установка xtables-addons
После того, как наша система будет модернизирована и будут установлены все зависимости, мы установим xtables-addons в нашей машине. Для этого мы скачаем последний tar-архив с официального сайта проекта xtables-addons с помощью wget. После того, как он будет загружен, мы распакуем архив, а затем скомпилируем и установим его на нашей машине.
1 2 3 4 5 6 |
# wget http://downloads.sourceforge.net/project/xtables-addons/Xtables-addons/xtables-addons-2.13.tar.xz # tar xf xtables-addons-2.13.tar.xz # cd xtables-addons-2.13 # ./configure # make # make install |
Разрешить SELinux для загрузки модулей (на основе системы RedHat)
Поскольку дистрибутивы на основе RedHat т.е. CentOS, RHEL, Fedora имеют включенную SELinux по умолчанию, мы должны скорректировать политику SELinux следующим образом. В противном случае, SELinux будет препятствовать IPTables для модуля загрузки xt_geoip.
1 2 |
# chcon -vR --user=system_u /lib/modules/$(uname -r)/extra/*.ko # chcon -vR --type=lib_t /lib64/xtables/*.so |
Установка базы данных GeoIP
Далее, мы запустим модуль под названием xt_geoip , который поставляется с расширением Xtables-addons, который загружает базу данных GeoIP из MaxMind и преобразует его в двоичную форму, признанной в xt_geoip. После того, как он будет загружен, мы создадим его и переместим их к нужному в xt_geoip пути, т.е. /usr/share/xt_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/ |
Блокировка трафика из страны
Если все прошло, как и следовало ожидать, мы должны в состоянии использовать на нашем брандмауэре утилиты программы IPTables, чтобы использовать модуль GeoIP.
Использование Iptables
Вот основной синтаксис для использования IPTables с модулем GeoIP для того, чтобы блокировать трафик, исходящий из или предназначенных для страны. Здесь мы должны использовать двух-буквенный код ISO3166 вместо страны, например, RU для России, IE для Ирландии, IN для Индии, CN для Китая и так далее.
1 |
# iptables -m geoip --src-cc country[,country…] --dst-cc country[,country…] |
1 |
# iptables -I INPUT -m geoip --src-cc IN,US -j DROP |
1 |
# iptables -I INPUT -m geoip ! --src-cc RU -j DROP |
1 2 |
root@destroyer:~# ping 213.159.209.228 PING 213.159.209.228 (213.159.209.228) 56(84) bytes of data. |
1 |
# iptables -A OUTPUT -m geoip --dst-cc IN -j DROP |
Использование firewalld
Если мы зайдем в систему, основанную на Systemd и firewalld в качестве контроллера для внешнего интерфейса IPTables, мы можем также использовать firewalld для вышеуказанной задачи.
1 2 3 4 5 |
# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip --src-cc IN,UN -j DROP # firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m geoip ! --src-cc RU -j DROP # firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -m geoip --dst-cc IN -j DROP |
Iptables с модулем GeoIP является очень важным для предотвращения DOS, DDOS атаки, исходящие из некоторых стран. Это также очень эффективно, если вы хотите ограничить доступ к вашему веб-сайту/серверу из определенной страны. Таким образом, имея модуль GeoIP установленный с Iptables-addons является обязательным иметь установку для разрешения или запрета определенных стран.