Луганский информационный порталЛуганский блог • Пользователь • 10102228 • kolka73

Фильтрация пользователе по 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
<<<< назад >>>>

Анонс поста для вставки в блог или на сайт:

RSS экспорт записей блога:

1 2 3 4
Кликните по понравившейся кнопке чтобы получить её код.

У нас ищут:

Лучшие мысли в сети!


Автомобиль Илона Маска пролетел мимо Марса Автомобиль Илона Маска пролетел мимо Марса Отправленный в космос электромобиль пролетел Марс, с одной стороны это как бы и не плохо, если бы он упал на Марс, то возможно было бы техногенное заражение пока еще как бы стерильной планеты, но то факт, что авто пролете...

Какая же на самом деле планета Земля с удаления в 43 3 млн км Какая же на самом деле планета Земля с удаления в 43 3 млн км Наверное меня скорее новость о том, что в сети появились качественные снимки поверхности Земля с удаления в 43.3 миллиона км слегка улыбнула. Ведь в свободном доступе нет снимка земли с высоты в 300 или даже в 400 км це...

BLOGS - NEWS

помощью vargeoip сервера


Яндекс.Метрика