Iptables/ipset Centos 5

Материал из Webko Wiki
Перейти к навигации Перейти к поиску

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 и установки нового произошло несколько неприятных событий:

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