Iptables/ipset Centos 5
CentOS отличается некоторой консервативностью в версиях установленного ПО, что иногда приводит к проблемам с установкой нужной программы, не исключением стал и ipset. Первым делом я проверил, есть ли ipset в базовой системе, конечно же его не было. Пробежавшись по сайтам из найденных google по запросу «ipset centos», так же не нашел готового решения. Проблема есть, а вот методы решения ее самые разные. Большинство отказывались от ядра CentOS в пользу «чистого» ядра с kernel.org, патчили и ставили его. Мне такой подход не понравился, так как обновлять ядро хочется все тем же yum, а не каждый раз путем пересборки. Погуглив еще немного, я нашел способ поставить утилиту ipset и модуль ядра через yum.
Для этого нужно подключить дополнительные репозитории и epel.
wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm rpm -iv epel-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 Файл:Iptables-1.4.7.tar.bz2.zip tar xjf iptables-1.4.7.tar.bz2 cd iptables-1.4.7 ./configure make make install hash -r
Теперь про ложку дегтя, как же без нее. После удаления родного iptables и установки нового произошло несколько неприятных событий:
- По умолчанию iptables из сорцов ставится в /usr/local/sbin/iptables, в родной был в /sbin/iptables. В принципе не проблема пересобрать нужными опциями (внимательно смотрим ./configure —help);
- При удалении родного iptables, удаляется и /etc/init.d/iptables, так что я его специально сохранил;
- Удаляется несколько полезный утилит типа iptstate;
- Все эти суммарные изменения могут где-нибудь неожиданно вылезти, так что перед вводом сервера в продакшен нужно очень хорошо все проверить.