Релиз xtables-addons 1.32 с поддержкой ipset 5

04.01.2011 20:06

Вышел очередной релиз проекта xtables-addons, предоставляющего набор расширений для фреймворка netfilter. Данный релиз xtables-addons особо примечателен тем, что в него, помимо старой стабильной версии ipset 4, включена и представленная недавно версия ipset 5.

Проект xtables-addons представляет собой набор модулей-расширений для входящего в ядро Linux фреймворка фильтрации и преобразования пакетов netfilter. В этот набор включаются расширения, которые по тем или иным причинам пока не были приняты в основную ветку разработки ядра Linux. Таким образом, данный проект является альтернативой устаревшему patch-o-matic(-ng). Ключевое отличие xtables-addons от предшественника состоит в отсутствии необходимости в наложении патчей на ядро и iptables, что значительно упрощает процесс сопровождения и установки расширений. Во времена patch-o-matic часто бывало сложно найти версию патча, совместимую с нужной версией ядра и/или iptables, в то время как для работы xtables-addons достаточно наличия ядра версии >=2.6.17 и iptables >= 1.4.3 (впрочем, в случае использования ipset 5 требования становятся несколько более жесткими — версия ядра не менее 2.6.35, дополнительно требуется библиотека libmnl). В числе других преимуществ xtables-addons над patch-o-matic(-ng) можно упомянуть расширенную поддержку IPv6 и более высокое качество кода. Подробнее эти вопросы рассмотрены в презентации разработчика xtables-addons Яна Энгельгардта, представленной на конференции Netfilter Workshop 2010.

Стоит особо подчеркнуть, что версия ipset 5, распространяемая в составе xtables-addons, не требует наложения патчей на ядро, в отличие от стандартной версии ipset 5. Это было достигнуто путем внесения некоторых изменений в код, в частности, заменой специализированного протокола взаимодействия ядро-userspace nfnetlink на genetlink. Таким образом, установка ipset 5 становится столь же простой, как и установка ipset 4.

Помимо уже упомянутых выше двух версий ipset, в состав xtables-addons входит множество других полезных модулей (критериев и действий iptables/netfilter), в частности,

  • TARPIT — широко известный в узких кругах инструмент для активного противодействия (D)DoS-атакам и сканированиям TCP-портов, способный в определенный обстоятельствах неплохо проучить атакующего. Суть его работы сводится к следующему: он подтверждает открытие входящего TCP-соединения, после чего устанавливает размер окна TCP равным нулю, что блокирует возможность корректного закрытия соединения. В результате система атакующего получает очередное «повисшее» соединение, в то время как ваша система ничего не замечает (хуки netfilter отрабатывают раньше, чем стандартный сетевой стек ядра, дополнительно может потребоваться отключение трекинга соединений в conntrack через действие NOTRACK). При агрессивной атаке подобная тактика может вызвать у атакующего серьезные проблемы. Особенно сильно такому воздействию подвержены системы семейства Windows, на которых, как правило, и работают атакующие ботнеты.
  • DELUDE — не столь опасный, но тем не менее тоже полезный инструмент противодействия сканированию TCP-портов. Работает он следующим образом: на SYN-пакеты он отвечает SYN,ACK-пакетами, создавая видимость открытого порта, на все остальные пакеты он отвечает RST (чтобы не создавать лишних проблем). Таким образом, DELUDE позволяет ввести атакующего в заблуждение, создав у него неверное впечатление о состоянии ваших портов.
  • CHAOS — еще один инструмент, позволяющий поставить атакующего в глупое положение. С заданной вероятностью он применяет к входящему пакету операцию TARPIT или DELUDE (в зависимости от настроек), либо стандартную операцию REJECT (отправка ICMP-уведомления о недоступности порта), либо операцию DROP (блокирование пакета без уведомления отправляющей стороны). По умолчанию вероятности применения TARPIT/DELUDE и REJECT составляют порядка одного процента, к остальному трафику применяется DROP.

    Подробное описание принципов работы трех вышеприведенных действий можно найти в работе Detecting and deceiving network scans with Chaostables (автором документа является разработчик xtables-addons Ян Энгельгардт).

  • IPMARK — действие, позволяющее присвоить пакету маркировку, определенную в результате арифметических операций над его исходным адресом (либо адресом назначения). Таким образом, грамотная организация адресного пространства в сочетании с элементарными арифметическими и побитовыми операциями могут заменить монструозные таблицы соответствия «адрес — маркировка», поиск по которым может отнимать значительную долю системных ресурсов. Особенно полезна данная операция при организации гибких систем шейпинга, когда несколькими командами можно настроить работу многих тысяч очередей.
  • LOGMARK — действие, дополняющее набор данных, выводимых стандартной операцией LOG, такими сведениями, как маркировка, идентификатор, состояние и статус соединения в системе conntrack, маркировка SELinux и классификационный код шейпера для данного пакета, имя родительского хука, внутренний код интерфейса и т.п.
  • RAWDNAT/RAWSNAT — операции «сырой» трансляции адресов, не использующие трекинг соединений. Могут быть использованы для увеличения гибкости стандартного NAT либо при ограниченности ресурсов в сочетании с большим количеством соединений, когда трекинг становится чересчур накладным.
  • ACCOUNT — простая, высокопроизводительная система учета трафика, поддерживающая работу с клиентскими сетями большого размера (вплоть до /8).
  • SYSRQ — инструмент, позволяющий при получении специальным образом сформированных (защищенных паролем) пакетов обращаться к системному триггеру. В частности, можно удаленно инициировать сброс кэша (sync) или даже выполнить ту самую последовательность REISUB, вне зависимости от работоспособности userspace.
  • DHCPMAC/dhcpmac — сочетание одноименных критерия и действия позволяет выделять и подменять MAC-адреса, фигурирующие в запросах и ответах DHCP.
  • condition — критерий, срабатывающий в зависимости от значения соответствующей булевой переменной, которое может быть задано из userspace (через procfs). Таким образом, работой правил netfilter можно управлять, не вмешиваясь в их структуру.
  • fuzzy — критерий, выделяющий пакеты на основании нечеткой логики (при скорости поступления пакетов ниже пороговой величины a, вероятность соответствия пакета критерию равна нулю, в диапазоне скоростей от a до b вероятность плавно возрастает до единицы, и при скорости выше b пакеты всегда соответствуют критерию).
  • geoip — критерий, позволяющий выделять пакеты на основании принадлежности их исходного адреса или адреса назначения заданному государству. Можно использовать базы данных от MaxMind или WIPmania.
  • iface — критерий, срабатывающий в зависимости от состояния заданного сетевого интерфейса. В частности, с его помощью можно организовывать отказоустойчивый доступ в интернет при наличии нескольких независимых каналов, с автоматическим исключением неработающих каналов.
  • ipp2p — критерий, позволяющий выделять трафик различных P2P-сетей, в частности, BitTorrent, eDonkey/eMule, DC, Gnutella, AppleJuice, WinMX, SoulSeek, Ares, KaZaA. Чрезвычайно удобен при организации эффективного шейпинга трафика. Является неплохой альтернативой критерию l7filter, который требует наложения патчей на ядро и поэтому не включен в проект xtables-addons.
  • lscan — разработанный Яном Энгельгардтом инструмент для выявления скрытных операций по сканированию TCP-портов. Подробное описание принципов его работы можно найти в уже упомянутом документе Detecting and deceiving network scans with Chaostables.
  • psd — более простой инструмент для выявления массовых сканирований TCP- и UDP-портов, основанный на принципе взвешенной суммы. С подробным обсуждением этого принципа можно познакомиться в статье Solar Designer'а Designing and Attacking Port Scan Detection Tools.
  • pknock — позволяет организовать защиту портов посредством технологии port knocking. Возможно дополнительное усиление защиты за счет использования HMAC256-шифрования отправляемых пакетов.
  • quota2, length2 — расширяют возможности стандартных критериев netfilter quota и length.

В заключение, хотелось бы упомянуть написанное все тем же Энгельгардтом руководство Writing your own Netfilter modules. В предисловии автор подчеркивает, что netfilter/iptables являются не только и не сколько законченным и замкнутым на себя продуктом, но и гибким фреймворком, позволяющим создавать и интегрировать модули, которые могут решать самые различные задачи по фильтрации и преобразованию трафика — и все это без каких-либо модификаций других компонентов ядра. «In fact, you can do almost everything you want in this world» — отмечает Энгельгардт.

Проект xtables-addons может выступать в качестве накопителя для тех модулей, у авторов которых не хватает духу отослать свои творения непосредственно в основную ветку разработки ядра Linux. В частности, недавно принятые в ядро модули TEE и CHECKSUM начинали свой путь в xtables-addons.