Как Защитить Свой Сервер От Посетителей Из Нежелательных Стран

Мне очень часто приходят довольно интересные и нестандартные задания по настройке серверов.

Сегодня, например, меня попросили настроить ряд серверов для фильтрации любого трафика из определенных стран.

Причин для такой защиты много – снижение спама и атак, выравнивание коэффициентов и многое другое.

В моем случае нужно было заблокировать CN полностью, отдать полный канал РУ и вдвое меньше другим странам.

Конечно, полностью вводить все подсети вручную неудобно, да и они часто меняются.

Логичнее всего было использовать geoip. Самое эффективное это, конечно, привязать geoip к ядру.

В моем случае серверами были Debian, поэтому и даю рецепт именно на него.



Сначала скачайте исходники


apt-get install linux-source-2.6.18 tar xjf /usr/src/linux-source-2.6.18.tar.bz2 -C /usr/src/ apt-get source iptables wget people.netfilter.org/peejix/patchlets/geoip.tar.gz wget ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070414.tar.bz2 tar xjf patch-o-matic-ng-20070414.tar.bz2 tar xzf geoip.tar.gz -C patch-o-matic-ng-20070414/patchlets/



Теперь мы будем собирать


cd patch-o-matic-ng-20070407/ KERNEL_DIR=/usr/src/linux-source-2.6.18/ .

/runme geoip

Говорим «да» и уходим.

Теперь самое время установить все необходимое для сборки, если вы еще этого не сделали:

apt-get install build-essential

После копирования текущей конфигурации ядра я просто вношу изменения:

cd /usr/src/linux-source-2.6.18/ make oldconfig

поддержка сопоставления geoip (IP_NF_MATCH_GEOIP) [N/m/?] (НОВОЕ) Здесь нужно сказать «м», чтобы собрать модуль.

Затем:

make modules_prepare cp net/ipv4/netfilter/ipt_geoip.ko /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/ depmod modprobe ipt_geoip echo "ipt_geoip" >> /etc/modules

Аналогично собираем библиотеку для iptables:

make KERNEL_DIR=/usr/src/linux-source-2.6.18/ extensions/libipt_geoip.so cp extensions/libipt_geoip.so /lib/iptables/



Совсем немного - база данных GeoIP
Для подготовки необходимо скачать бесплатную базу, хотя лучше взять платную версию – она более точная.

В любом случае база данных будет подготовлена с помощью csv2bin, который необходимо скомпилировать:

wget people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz tar xzf csv2bin-20041103.tar.gz cd csv2bin/ make

Что ж, давайте собственно конвертируем бесплатную версию базы данных: wget www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

unzip GeoIPCountryCSV.zip .

/csv2bin .

/GeoIPCountryWhois.csv

Появляются 2 файла, geoipdb.bin и geoipdb.idx, которые необходимо закинуть в /var/geoip:

mkdir /var/geoip mv geoipdb.* /var/geoip/

После этого вы можете работать с mod_geoip, например так:

iptables -A INPUT -p tcp --dport 80 -m geoip --src-cc CN -j REJECT

Отбрасываем трафик из CN. Вы также можете отмечать и менять полосы движения с помощью TC.

Вариант применения: NGINX

Если вы не собираете ядро или даже VDS, то вы можете сделать почти то же самое, установив nginx с mod_geoip на фронтенде.

Во-первых, убедитесь, что nginx создан с поддержкой mod_goip. Я установил его; тем, у кого его нет, придется собирать заново, но это несложно.

Саму базу необходимо преобразовать с помощью geo2nginx.pl (находится в архиве с исходниками nginx) и добавить в конфиг:

perl geo2nginx.pl < GeoIPCountryWhois.csv > geo.conf cp geo.conf /etc/nginx/

Проще использовать пареную репу: гео $country { по умолчанию нет; включите /etc/nginx/geo.conf; 127.0.0.0/24 ру; } Пример с трафиком CN:

if ($country ~* cn ) { rewrite ^(.

*)$ baidu.com/; }

Как всегда, быстрое решение всегда имеет недостаток — в данном случае в виде паузы перед запуском nginx, так как база данных считывается в память.

Теги: #linux #Nginx #настройка Linux #защита #geoip

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.