понедельник, 15 сентября 2008 г.

iptables + ipset

IPSET позволяет сократить количество правил в iptables.
Если у вас используются одинаковые правила, но для разных критериев (IP, PORT, MAC, ...) вы можете объединить их в одно правило с помощью ipset.

Пример:

-A FORWARD -s 192.168.0.200 -m tcp -p tcp --dport 25 -j ACCEPT
-A FORWARD -s 192.168.0.201 -m tcp -p tcp --dport 25 -j ACCEPT
-A FORWARD -s 192.168.0.210 -m tcp -p tcp --dport 25 -j ACCEPT
...
-A FORWARD -s 192.168.0.225 -m tcp -p tcp --dport 25 -j ACCEPT

можно заменить одним правилом:

-A FORWARD -m set --set accept_email src,src -j ACCEPT


Компиляция ipset.

Для начала качаем исходник ядра и ipset (ipset-2.3.3a.tar.bz2)
Конфигурируем ядро как обычно + включаем xtables в "Y" ("*")
Качаем последний patch-o-matic-ng, патчим ядро с параметром set

cd patch-o-matic-ng-yyyymmdd
./runme set

Далее, возвращаемся в папку с исходником ядра и собираем его с поддержкой ipset:

cd /usr/src/linux/
make config

все что касается ipset можно оставить по умолчанию.

make && make modules && make install && make modules_install


Далее распаковываем и ставил ipset, сейчас мы только добавили поддержку ipset в ядро и iptables. Не забываем пересобрать iptables.

Пример использования

ipset -N accept_email iphash --resize 0 #Создаем новый set с именем foo
ipset -A accept_email 192.168.0.200 #Добавляем данные в Set
ipset -A accept_email 192.168.0.201
...
ipset -A accept_email 192.168.0.225

#И наконец, само правило:
iptables -t filter -A FORWARD -m set --set accept_email src,src -j ACCEPT


Более подробно можно прочитать на офф сайте.

Комментариев нет: