есть такой модуль для iptables – geoip. нужен он для того, чтобы фильтровать пакеты по географическому признаку.
по умолчанию в комплект поставки это счастье не входит, тк что собирать его придётся руками.
неполохое описание этого процесса есть здесь на русском или здесь на английском. версии немного отличаются.
если коротко:
подготовительная операция
# apt-get install dpkg-dev build-essential
скачать и распаковать сырцы ядра, сырцы iptables, type-o-matic, патч geoip.
# apt-get install linux-source-2.6.18
# tar xjf /usr/src/linux-source-<version>.tar.bz2 -C /usr/src/
# mkdir ~/geoip
# cd ~/geoip/
# apt-get source iptables
# wget http://people.netfilter.org/peejix/patchlets/geoip.tar.gz
# wget http://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/
пропатчить iptables свежескачанным geoip
# KERNEL_DIR=/usr/src/linux-source-<version>/ IPTABLES_DIR=~/geoip/iptables-<version>/iptables/ ./runme geoip
на самом деле можно geoip не скачивать, и расположение сырцов ядра и iptables не указывть. patch-o-matic спрашивает при их размещение, а geoip подкидывается командой
# ./runme –download geip
загрузит и пропатчит. ни куда не денется.
а дальше есть два варианта.
поскольку, для подключения модуля надо целых два файла – модуль ядра и библиотеку iptables, то можно особо не заморачиваясь их собрать и положить куда надо. или собирать полноценные пакеты ядра и iptables и ставить их в штатном режиме.
первый вариант:
применим на ядро старый конфиг
# cd /usr/src/linux-source-<version>/
# make oldconfig
на вопрос
geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW)
отвечаем “m”
после чего подготавливаем сборку модулей и собираем модули netfilter (правда все сразу, как собрать отдельный я не в курсе)
# make modules_prepare
# make -C $(pwd) M=net/ipv4/netfilter/ modules
копируем ядерный модуль на штатное место
# 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
# cd ~/geoip/iptables-<version>/iptables/
# make KERNEL_DIR=/usr/src/linux-source-<version>/ extensions/libipt_geoip.so
и ставим файл на место
# cp extensions/libipt_geoip.so /lib/iptables/
после чего подкидываем модулю базу ардресов с привязкой к странам
ну и второй вариант:
точно так же конфигурим ядро
применим на ядро старый конфиг
# cd /usr/src/linux-source-<version>/
# make oldconfig
на вопрос
geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW)
отвечаем “m”
и собираем ядерный пакет
# make-kpkg –initrd kernel_image
после чего получаем собраный пакет с пропатченым ядром годный для установки
ну и сооружаем дебиановский пакет с пропатченным iptables. руководство берём здесь
/* чесслово, мне лениво прямо сейчас переписывать всё что там есть. лучше по дебианизации отдельную статью написать, если она действительно нужна. */
в общем получили на выходе готовый пакет iptables-чего_то_там-geoip.deb, опять же готовый к установке.
остаётся саме простое – подсунуть географическому модулю базу адресов
# cd ~/geoip/
# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
# unzip GeoIPCountryCSV.zip
# wget http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
# tar xzf csv2bin-20041103.tar.gz
# cd csv2bin/
# make
# ./csv2bin ../GeoIPCountryWhois.csv
# mkdir /var/geoip
# mv geoipdb.* /var/geoip/
всё. в /var/geoip лежит готоая к употреблению база. можно писать правила в iptables
# iptables -m geoip –help