All pastes #736724 Raw Edit

SLAED CONNLIMIT

public text v1 · immutable
·published 2007-10-14 19:35 UTC
rendered paste body
С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