пятница, января 11, 2013

CentOS: ipset

### OS

Используемая ОС: centos 5.8 x32 на виртуальной машине.

shell> uname -a
Linux localhost.localdomain 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux

Система обновлена до последней версии. Стоит отметить, что когда я было начинал настройку на x64 то пакет ipset был в стандартном репозитории. А в x32 в стандартном репозитории ipset нет. По этому пришлось установить репозиторий centalt. В силу обстоятельств мне нужно было именно заставить работать ipset на x32.

### INSTALL AND RUN

Все манипуляции проводились от пользователя root.

shell> yum install ipset kmod-ipset
shell> modprobe ip_set

В файле /etc/sysconfig/iptables-config в параметр IPTABLES_MODULES надо добавить ip_set.

### UPDATE IPTABLES

После установки ipset сам по себе он и iptables друг с дружкой работать не будут. То что у iptables нет библиотеки для работы с ipset можно убедится так:

shell> iptables -m set
iptables v1.3.5: Couldn't load match `set':/lib/iptables/libipt_set.so: cannot open shared object file: No such file or directory

Проблема в том что в стандартном репозитории лежит более новая версия. А в репозиторий centalt версия старая версия пакета iptables (с поддержкой ipset). Через yum не поставить, будет предложена последняя версия. Можно конечно отключить стандартные репозитории. Но мне не хотелось ставить старую версию iptables. Тем более после обновления нужная библиотека будет утеряна. Но нам нужна всего одна библиотека libipt_set.so. Потому надо вытащить из rpm из репозитория centalt нужный нам файл.

shell> cd /tmp/
shell> wget http://centos.alt.ru/repository/centos/5/i386/iptables-1.3.5-5.6.1.el5.i386.rpm
shell> rpm2cpio iptables-1.3.5-5.6.1.el5.i386.rpm |cpio -idmv
shell> cp /tmp/lib/iptables/libipt_set.so /lib/iptables/
shell> iptables -m set
iptables v1.3.5: You must specify `--set' with proper arguments
Try `iptables -h' or 'iptables --help' for more information.

Видим что ipset теперь работает без проблем. Судя по исходникам там уже давно ничего не менялось. Думаю должно работать как надо.

### TEST/USAGE

shell> ipset -N test iphash
shell> ipset -A test 192.168.40.153
shell> ipset -A test 192.168.42.4
shell> ipset -L
Name: test
Type: iphash
References: 0
Header: hashsize: 1024 probes: 8 resize: 50
Members:
192.168.42.4
192.168.40.153
shell> iptables -A INPUT -m set --set test src -j DROP

Ключик -N создает новую таблицу, далее указываем как эта таблица будет называться и способ хеширования. Далее добавляем ip. С ключом -L можно посмотреть какие в памяти есть таблицы. В правиле iptables указано, что те ip которые в таблице test, являются источниками и все что с этих адресов поступает надо блокировать.

### END

После успешного тестирования библиотека была скопирована на действующий шлюз. По понятным причинам мне совершенно не хотелось экспериментировать на рабочей машине. И по тем же причинам мне не хотелось устанавливать из исходников одну из последних версий iptables.

Вот сама библиотека: libipt_set.so.

В очередной раз задумался о переходе на centos 6.3. Уже не первый раз когда нужных, новых пакетов нет под 5.8.

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

Отправить комментарий