ipset в CentOS

CentOS отличается некоторой консервативностью в версиях установленного ПО, что иногда приводит к проблемам с установкой нужной программы, не исключением стал и ipset.
Первым делом я проверил, есть ли ipset в базовой системе, конечно же его не было. Пробежавшись по сайтам из найденных google по запросу “ipset centos”, так же не нашел готового решения. Проблема есть, а вот методы решения ее самые разные. Большинство отказывались от ядра CentOS в пользу “чистого” ядра с kernel.org, патчили и ставили его. Мне такой подход не понравился, так как обновлять ядро хочется все тем же yum, а не каждый раз путем пересборки.
Погуглив еще немного, я нашел способ поставить утилиту ipset и модуль ядра через yum. Для этого нужно подключить дополнительные репозитории: CentALT и epel.
Сразу скажу, что CentALT заточен во многом под ALT Linux, так что софтом из него стоит пользоваться осторожно в CentOS. Устанавливаем:

# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
# wget http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm
# rpm -iv epel-release-5-3.noarch.rpm
# rpm -iv centalt-release-5-3.noarch.rpm
# yum check-update

Если у вас x86_64 архитектура, то просто смените i386 на x86_64 в ссылках.
Теперь можно поставить модуль ядра и утилиту ipset, после проверяем все ли работает:

# yum install kmod-ipset.i688 ipset.i386
# modprobe ip_set
# lsmod | fgrep ip_set
ip_set                 23708  0
# ipset -V
ipset v2.5.0 Protocol version 2.
# iptables -m set -h
iptables v1.3.5: Couldn't load match `set':/lib/iptables/libipt_set.so: cannot open shared object file: No such file or directory

Try `iptables -h' or 'iptables --help' for more information.

Не все так гладко, как хотелось бы! Модуль и утилита ipset есть, а iptables не может с ней работать. Дело в версии iptables, нужна версия старше 1.4, но в CentOS ее нет. Так что придется все же пойти на определенные жертвы. Будем ставить iptables из сорцов. Сносим “родной” iptables и ставим более новую версию. Перед этим добавляем в систему gcc, если еще нет:

# cp /etc/init.d/iptables /root/
# yum erase iptables
# yum install gcc
# cd /usr/src/
# wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.7.tar.bz2
# tar xjf iptables-1.4.7.tar.bz2
# cd iptables-1.4.7
# ./configure
# make
# make install
# hash -r

Создаем тестовую таблицу и проверяем, что все работает:

# ipset -N badip iphash
# ipset -A badip 10.10.1.10
# iptables -A INPUT -p icmp -m set --set badip src -j DROP
# iptables -vL
Chain INPUT (policy ACCEPT 24372 packets, 2261K bytes)
 pkts bytes target     prot opt in     out     source               destination
    4   240 DROP       icmp --  any    any     anywhere             anywhere            match-set badip src

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 489 packets, 45302 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain RH-Firewall-1-INPUT (0 references)
 pkts bytes target     prot opt in     out     source               destination

Теперь про ложку дегтя, как же без нее. После удаления родного iptables и установки нового произошло несколько неприятных событий:
1) По умолчанию iptables из сорцов ставится в /usr/local/sbin/iptables, в родной был в /sbin/iptables. В принципе не проблема пересобрать нужными опциями (внимательно смотрим ./configure –help)
2) При удалении родного iptables, удаляется и /etc/init.d/iptables, так что я его я специально сохранил
3) Удаляется несколько полезный утилит типа iptstate
4) Все эти суммарные изменения могут где-нибудь неожиданно вылезти, так что перед вводом сервера в продакшен нужно очень хорошо все проверить.

UPDATE!!!
В репозитории CentAlt есть обновление для iptables с поддержкой ipset, так что достаточно

# yum update iptables

чтобы все заработало!


Tags: , , ,

Вторник, Апрель 20th, 2010 Советы
Tinkerbell Personal Checks |Garden Planters | Jewellery For Women | Best Dog Foods | Budget Wedding Gowns | Shop For Jewellery | Vintage Jewellery| Diamante Jewellery | Car Finance Credit | DoorStep Loans