Вышел
релиз iptables 1.4.8 — интерфейса к Linux-фаерволу netfilter.

Наиболее интересным новшеством данного релиза является поддержка
conntrack zones — механизма,
позволяющего корректно отслеживать соединения в случае подключения хоста к двум
или более сетям с одинаковыми адресными пространствами через разные сетевые
интерфейсы. Такая ситуация является достаточно редкой, но тем не менее довольно
неприятной, особенно в том случае, если вы не можете ничего изменить.

Стандартный Linux-фаервол netfilter использует для отслеживания соединений
интегрированную в ядро подсистему conntrack. Полученная информация затем может
использоваться при фильтрации и преобразовании пакетов. Например, именно на базе
этой информации работают критерии conntrack (проверка состояния соединения, его
устаревшая версия известна как state), connlimit (ограничение количества
одновременных соединений с одного адреса или подсети), connbytes (ограничение
соединений по количеству пакетов или байт, переданных в одном или в обоих
направлениях), connmark (работает с маркировкой ctmark, общей для всех пакетов в
соединении). Также информация conntrack автоматически используется всеми
операциями преобразования адресов и портов (SNAT, MASQUERADE, DNAT, REDIRECT,
SAME, NETMAP).

Эта информация хранится в специальной таблице (просмотреть ее можно,
например, выполнив cat /proc/net/nf_conntrack). Каждое соединение описывается
так называемым кортежем (tuple) — набором значений, в который входят адреса и
порты (в случае ICMP — типы и коды ICMP) источника и назначения при передаче
данных в прямом и обратном направлении. Очевидно, что при наличии нескольких
подсетей с одинаковыми адресными пространствами, возможно возникновение
путаницы, когда сразу нескольким соединениям ставится в соответствие одна и та
же запись в таблице соединений. Чтобы избежать такой ситуации, в кортеж был
добавлен идентификатор зоны conntrack — целое число, которое можно устанавливать
через специальное правило в таблице raw в зависимости от входящего интерфейса
(цепочку PREROUTING таблицы raw пакеты проходят еще до обработки их conntrack’ом).
Кроме того, это значение можно задать для каждого интерфейса через sysfs, минуя
iptables (псевдофайл /sys/class/net/имя_интерфейса/nf_ct_zone). Таким образом,
сетевые администраторы получили эффективный инструмент, позволяющей изящно
решить даже такую сложную задачу.

Стоит отметить, что большинство вопросов маршрутизации в описанных условиях
уже давно решено средствами iproute2 (используя ip rule, можно направить пакеты
с определенного интерфейса в соответствующую таблицу маршрутизации).

Операция установки значения conntrack zone реализуется в netfilter/iptables
новым действием CT. Это действие используется в таблице raw и позволяет задать
настройки conntrack для новых соединений. В частности, с его помощью можно:

  • Отключить отслеживание соединений для данного класса пакетов (опция —notrack).
    Ранее это выполнялось отдельным действием NOTRACK, которое теперь, видимо,
    будет объявлено устаревшим. Отслеживание отдельных соединений имеет смысл
    отключать, например, в том случае, если ты находишься под DDoS-атакой,
    локализовал ее источники и используешь средства активного противодействия,
    такие, как TARPIT. Если ты не отключишь трекинг для таких соединений, это
    оружие может больно ударить и тебя самого.
  • Установить для конкретного соединения нужный вспомогательный модуль (conntrack
    helper). Вспомогательные модули используются системой conntrack для
    отслеживания сложных протоколов, использующих несколько соединений в рамках
    одного сеанса (например, FTP, SIP, IRC, H.323 и т.п.). Теперь, если ты
    используешь нестандартный порт для FTP, совсем не обязательно править
    конфигурацию modprobe.conf, чтобы прописать нужный параметр для
    соответствующего модуля ядра — достаточно выполнить привязку хелпера к порту
    через правило netfilter’а.
  • Ограничить список событий conntrack, генерируемых для данного соединения
    (например, реагировать только на открытие и закрытие соединения, игнорируя
    изменения его состояния).

Надо заметить, что поддержка действия CT и conntrack zones была добавлена в
netfilter (т.е. в ядро) еще в начале февраля, поэтому присутствовала уже в
релизе 2.6.33. Однако модули netfilter сами по себе не могут быть использованы
без соответствующих управляющих команд из userspace, которые обычно отдаются
через утилиту iptables.

Помимо добавления поддержки действия CT, в код iptables также было внесено
несколько менее значительных изменений:

  • Полная поддержка ядра 2.6.34.
  • Исправлена ошибка парсинга диапазона адресов в критерии iprange.
  • Улучшен парсинг номеров портов для действий MASQUERADE и REDIRECT.
  • В проект импортирована утилита nfnl_osf, обеспечивающая подгрузку базы
    сигнатур для критерия
    osf.
  • Улучшена документация.



Оставить мнение