СТРАНИЦА ДЛЯ ПЕЧАТИ

Фильтрация пользователе по IP адресу, настройка Линукс сервера

Фильтрация пользователе по IP адресу, настройка Линукс сервера Фильтрация пользователе по IP адресу, настройка Линукс сервера Работая над одной партнерской программой для сайта знакомств столкнулся с задачей фильтрации трафика по странам. Причин такой настрой ки сервера очень много - одна из главных это американские женихи! Как не странно наши Иваны и Андреи за сервис платить не желают! Их в бан! Да и спама меньше при таких настройках сервера. Мне задали задачу заблокировать зону RU, а 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 match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW) Тут нужно сказать «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/ Использовать проще пареной репы: geo $country { default no; include /etc/nginx/geo.conf; 127.0.0.0/24 ru; } Пример с RU трафиком: if ($country ~* ru ) { rewrite ^(.*)$ baidu.com/; } Как всегда у быстрого решения всегда найдется минус — в этом случае в виде паузы перед запуском nginx, так как база читается в память. Запись сделана 2009-10-23

Protected by Copyscape Web Plagiarism Checker

Фильтрация пользователе по IP адресу, настройка Линукс сервера

<<< главная >>><<<< назад >>>>

СТРАНИЦА ДЛЯ ПЕЧАТИ