Сonnlimit без переустановки ядра HOW-TO.
Скачиваем rpm с иходниками ядра и iptables
Создаём временны каталог с правами 777
kernelsrcrpm/
Временный каталог для работы
# cd ~/kernelsrcrpm
# wget http://download.opensuse.org/distribution/SL-10.0-OSS/inst-source/suse/src/kernel-source-2.6.13-15.src.rpm
# wget http://download.opensuse.org/distribution/SL-10.0-OSS/inst-source/suse/src/iptables-1.3.3-3.src.rpm
Устанавливаем их
# rpm -Uhv kernel-source-2.6.13-15.src.rpm
# rpm -Uhv iptables-1.3.3-3.src.rpm
Проверяем зависимости для сборки, распаковываем исходники, накладываем патчи
# cd /usr/src/packages/SPECS/
# rpmbuild -bp --target $(uname -m) kernel-source.spec
Если на этом этапе и далее будет сообщение о установке необходимых пакетов, то соответственно их ставим. Например, изначально у Вас нехватало такого набора для успешной компиляции:
# //sbin/yast --install bison cvs flex gdbm-devel gettext-devel m4 ncurses-devel rcs strace texinfo zlib-devel autoconf automake
# rpmbuild -bp --target $(uname -m) iptables.spec
Здесь мне нехватало пакета с имходниками ядра kernel-source (получилось некоторое дублирование со скачанным пакетом с исходниками и kernel-source, но в случае скачанного src.rpm легче отследить зависимости компиляции). Экономить дисковое пространство я не стал, ведь потом все исходики можно спокойно удалить.
# yast --install kernel-source
Теперь нам нужно наложить патч connlimit на исходники ядра. .
# cd ~/kernelsrcrpm/
Набор патчей для расширения функциональности iptalbes называются patch-o-matic-ng
# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070221.tar.bz2
# tar xfj patch-o-matic-ng-20070221.tar.bz2
# cd patch-o-matic-ng-20070221/
Делаем символическую ссылку на исходники iptables
# ln -s /usr/src/packages/BUILD/iptables-1.3.3/ /usr/src/iptables
# ./runme --download connlimit
Здесь жмем ентер, принимая варианты по умолчанию (мы уже специально соблюли дефолт для удобства) и "y" на вопрос о применении патча.
Приступаем непосредственно к компиляции модуля ядра.
# cd /usr/src/linux
Нужно не забыть тот факт, что ядро у нас крутое - bigsmp и нужно сохранить его особенности и при компиляции модуля. Для этого используем опции уже откомпилированного ядра и потом включим туда поддержку connlimit
# cp /boot/config-2.6.13-15.13-bigsmp ./.config
# make menuconfig
Идем в Networking >> Networking options >> Network packet filtering (replaces ipchains) >> IP: Netfilter Configuration
Жмем "М" возле пункта "Connections/IP limit match support" (внизу страницы)
Выходим из меню конфигурирования, не забыв при этом сохранить новую конфигурацию ядра
# make
Ждать , пока ядро откомпилируется целиком совершенно необязательно, ведь нам нужен лишь модуль.
CHK include/linux/version.h
CHK include/linux/utsrelease.h
CC init/main.o
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
CC init/do_mounts.o
CC init/do_mounts_rd.o
CC init/do_mounts_initrd.o
CC init/do_mounts_md.o
LD init/mounts.o
CC init/initramfs.o
CC init/calibrate.o
LD init/built-in.o
HOSTCC usr/gen_init_cpio
GEN usr/initramfs_data.cpio.gz
AS usr/initramfs_data.o
LD usr/built-in.o
После этого можно смело давить Ctrl+C
Теперь компилируем модули netfilter :
# make M=net/ipv4/netfilter/
Копируем свежескомпиленный connlimit в каталог с модулями
# cp net/ipv4/netfilter/ipt_connlimit.ko /lib/modules/2.6.13-15.13-bigsmp/kernel/net/ipv4/netfilter/
Обновляем дерево зависимости модулей
# depmod -a
Подключаем модуль
# modprobe ipt_connlimit
Тестируем работу
# iptables -A INPUT -p tcp -m connlimit --connlimit-above 10 -j REJECT