debian: добавляем в iptables поддержку ip sets (ipset)

IP Sets – расширение пакетного фильтра ядра iptables, которое позволяет комфортно работать с большими наборами адресов/сетей. При написании правил iptables при этом мы оперируем именованными списками.

Это, пожалуй, единственный на сегодняшний день доступный способ писать правила для большого количества хостов/сетей, не перечисляя каждый из них в отдельном правиле. Если ваш сайт, работающий под linux, подвергается DDOS, вы наверняка уже знаете про IP Sets. Если нет - http://ipset.netfilter.org/.

Утилита ipset живет в одноименном пакете, а все необходимые патчи ядра входят в состав пакета netfilter-extensions-source, который собирается и устанавливается при помощи утилиты module-assistant (которая для удобства имеет более короткое имя: m-a).

Примерный сценарий установки ip sets выглядит так:

  1. $ sudo apt-get install ipset
  2. $ sudo apt-get install netfilter-extensions-source
  3. $ uname -a
  4. Linux host.domain.tld 2.6.26-1-686 #1 SMP Fri Mar 13 18:08:45 UTC 2009 i686 GNU/Linux
  5. # версия пакета linux-headers должна совпадать с версией ядра, для которого собирается netfilter-extensions
  6. $ sudo apt-get install linux-headers-2.6.26-1-686
  7. $ sudo m-a build netfilter-extensions
  8. $ sudo m-a update && m-a a-i netfilter-extensions

Версия пакета заголовков ядра должна точно соответствовать версии активного ядра, для которого собирается ipset.

Комментарии (10) на “debian: добавляем в iptables поддержку ip sets (ipset)”

  1. Руслан:

    Спасибо большое. Собрал себе кучу всего:
    find /lib/modules/2.6.26-2-686/ | grep -i TARPIT
    /lib/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/ipt_TARPIT.ko
    Но, почему-то:
    # iptables -t filter -A INPUT -s 1.2.3.4 -j TARPIT
    iptables v1.4.2: Couldn’t load target `TARPIT’:/lib/xtables/libipt_TARPIT.so: cannot open shared object file: No such file or directory

    Для пользователей Debian Lenny и других версий универсальный вариант поставить сабж (а может и тарпит?).
    1. Указываем основную ветку системы в apt:
    # echo ‘APT::Default-Release «stable»;’ > /etc/apt/apt.conf.d/45local-settings

    2. Дублируем желаемые репозитории, мне достаточно было такого:
    # grep -E ‘lenny|testing’ /etc/apt/sources.list
    deb http://mirror.yandex.ru/debian/ testing main non-free contrib
    deb http://mirror.yandex.ru/debian/ lenny main non-free contrib
    deb-src http://mirror.yandex.ru/debian/ lenny main non-free contrib
    deb http://security.debian.org/ lenny/updates main contrib non-free
    deb-src http://security.debian.org/ lenny/updates main contrib non-free
    deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
    deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
    То есть, только основной репозиторий делаем «двойным» — и lenny, и testing.

    3. Обновляем списки пакетов
    # apt-get update

    4. Установить netfilter-extensions-source
    # apt-get install netfilter-extensions-source

    Получено:1 http://mirror.yandex.ru lenny/main module-assistant 0.10.11.0 [103kB]
    Получено:2 http://mirror.yandex.ru testing/main netfilter-extensions-source 20080719+debian-1 [40,0kB]

    Обратите внимание, одно из lenny, другое из testing. Это безопасно доставляет только недостающее в stable (lenny) из testing.

    5. Ставим заголовочные файлы действующего ядра (автоматически)
    # apt-get install linux-headers-$(uname -r)

    6. Соберем пакет netfilter-extensions:
    # m-a build netfilter-extensions

    7. Выполним обновление базы module-assistant (кстати, зачем?) и произведем установку собранного пакета netfilter-extensions
    # m-a update && m-a a-i netfilter-extensions
    Кстати, последние команды можно было бы заменить на то, о чем мне сказал их вывод:

    Extracting the package tarball, /usr/src/netfilter-extensions.tar.bz2, please wait…
    Целевой файл пакета /usr/src/netfilter-extensions-modules-2.6.26-2-686_20080719+debian-1+2.6.26-19lenny1_i386.deb уже существует, не будем пересобирать!
    (however, you could use the -f switch to ignore it)
    *** dpkg -Ei /usr/src/netfilter-extensions-modules-2.6.26-2-686_20080719+debian-1+2.6.26-19lenny1_i386.deb ***
    Выбор ранее не выбранного пакета netfilter-extensions-modules-2.6.26-2-686.
    (Чтение базы данных… на данный момент установлено 143462 файлов и каталогов.)
    Распаковывается пакет netfilter-extensions-modules-2.6.26-2-686 (из файла …/netfilter-extensions-modules-2.6.26-2-686_20080719+debian-1+2.6.26-19lenny1_i386.deb)…
    Настраивается пакет netfilter-extensions-modules-2.6.26-2-686 (20080719+debian-1+2.6.26-19lenny1) …

    Полный список собранных модулей:
    # ls -l /lib/modules/2.6.26-2-686/kernel/net/ipv4/netfilter/|grep «Ноя 2″
    -rw-r—r— 1 root root 10864 Ноя 2 20:18 ip_set_iphash.ko
    -rw-r—r— 1 root root 6232 Ноя 2 20:18 ip_set_ipmap.ko
    -rw-r—r— 1 root root 11666 Ноя 2 20:18 ip_set_ipporthash.ko
    -rw-r—r— 1 root root 10010 Ноя 2 20:18 ip_set_iptree.ko
    -rw-r—r— 1 root root 14320 Ноя 2 20:18 ip_set_iptreemap.ko
    -rw-r—r— 1 root root 24568 Ноя 2 20:18 ip_set.ko
    -rw-r—r— 1 root root 7095 Ноя 2 20:18 ip_set_macipmap.ko
    -rw-r—r— 1 root root 11964 Ноя 2 20:18 ip_set_nethash.ko
    -rw-r—r— 1 root root 6417 Ноя 2 20:18 ip_set_portmap.ko
    -rw-r—r— 1 root root 3262 Ноя 2 20:18 ipt_ipv4options.ko
    -rw-r—r— 1 root root 4138 Ноя 2 20:18 ipt_set.ko
    -rw-r—r— 1 root root 4429 Ноя 2 20:18 ipt_SET.ko
    -rw-r—r— 1 root root 5867 Ноя 2 20:18 ipt_TARPIT.ko
    -rw-r—r— 1 root root 4285 Ноя 2 20:18 ipt_u32.ko

    P.S. Очень надеюсь на культурное форматирование — отсутствует кнопка предварительного просмотра комментария.

  2. bot:

    Ядро 2.6.30, не нашло

  3. UncleJohn:

    Для 2.6.30 с трудом отрыл, вот что надо делать:
    http://www.wzdftpd.net/blog/index.php?2008/11/06/30-xtables-addons-accepted-in-debian

  4. [...] reaper, on Октябрь 13th, 2010 Попытался поставить ipset в Debian 6.0 по доке для 5.0, но увы, сборка заканчивается [...]

    • neol:

      В sueeze пакет называется ipset source. Последовательность действия такая:
      m-a prepare # Ставит необходимые заголовочные файлы ядра
      m-a get ipset-source
      m-a build ipset-source
      m-a install ipset-source

  5. Niemi:

    гм, не собрался ipset-source, но получилось через xtables-addons-source
    ховтушка тут
    https://www.wzdftpd.net/blog/index.php?post/2008/11/06/30-xtables-addons-accepted-in-debian

  6. remonik:

    проект ipset устарел и более не поддерживается его функции выполняет
    xtables-addons (по данным журнала Хакер)

  7. Zva:

    Извините плз. В xtables-addons____вылетает такая же ошибка
    ____________________________________________________
    /lib/xtables/libxt_TARPIT.so: libxtables.so.5: cannot open shared object file: No such file or directory
    /lib/xtables/libipt_TARPIT.so: /lib/xtables/libipt_TARPIT.so: file too short
    /lib/xtables/libxt_TARPIT.so: libxtables.so.5: cannot open shared object file: No such file or directory
    /lib/xtables/libipt_TARPIT.so: /lib/xtables/libipt_TARPIT.so: file too short
    iptables v1.4.4: Couldn’t load target `TARPIT’:(null)
    _____________________________________________________

    тоесть не может найти libxtables.so.5,подскажите куда копать?

Оставить комментарий