Welcome to Энциклопедия сетевых протоколов
Поиск

Модули
· Титульная страница
· Мир протоколов
· Моя страница
· Основные темы
· Архив публикаций
· Парад популярности
· Поиск
· Приватная почта
· Каталог ссылок
· Написать нам
· Сообщить новость
· Рекомендовать сайт
· Участники
· Документы и программы

Выбор языка
Язык интерфейса:


Статистика
20436548
запросов с 22 сентября 2005

Внешняя статистика
Rambler's Top100

  
Очередные странности ipset
Опубликовано 07 марта 2006 (Вт.) в 13:40:35
Тема: Вопросы безопасности

 Николай Малых ([email protected])

В системе фильтрации Netfilter/iptables уже достаточно давно поддерживается модуль ipset, предназначенный для работы с наборами адресов/номеров портов в фильтрах iptables. Этот модуль обеспечивает мощные средства создания динамических фильтров (см., например, статью "Создание динамических правил фильтрации пакетов"). Однако поддерживаемые модулем средства восстановления наборов из файлов, отличаются рядом странностей, о которых я неоднократно писал автору модуля1, но обсуждение всякий раз завершалось ответом типа: “Это не ошибка, а особенность программы”.



На сей раз обнаружилась еще одна странность, которая на мой взгляд весьма осложняет использование возможностей ipset и позволяет с легкостью создавать пакетные фильтры, которые будут вести себя совершенно неадекватно. Рассмотрим простой пример. Предположим, что мы используем фильтрацию для достаточно крупных блоков адресов IP (например, фильтрация спама из сетей ADSL). Для снижения числа правил зачастую приходиться использовать конструкции, которые блокируют диапазон адресов (префикс), но из этого диапазона нужно исключить несколько более узких диапазонов. Например, вы хотите заблокировать прием почты из блока адресов американских сетей кабельного телевидения 24.0.0.0/8, но по каким-то причинам хотите сохранить возможность приема почты из блока 24.77.77.0/24. В таком случае логично будет создать два набора адресов типа nethash. Ниже приведен пример такой конструкции с использованием синтаксиса ipset

-N NetBlockReturn nethash --hashsize 7776 --probes 2 --resize 50

-A NetBlockReturn 24.77.77.0/24

-N NetBlockSMTP nethash --hashsize 60000 --probes 8 --resize 50

-A NetBlockSMTP 24.0.0.0/8


Первая пара правил будет исключать из списка блокировки сеть 24.77.77.0/24, а вторая – блокировать весь префикс 24.0.0.0/8. В фильтрах iptables создаются два правила, в соответствии с которыми весь почтовый трафик из адресов набора NetBlockSMTP, фильтруется, а трафик из набора NetBlockReturn беспрепятственно проходит через фильтр. Например, это можно сделать так.

-A RejectBySet-SMTP -j LOG --log-prefix "IPTABLES-RejectBySet-SMTP: "

-A RejectBySet-SMTP -j REJECT --reject-with icmp-host-unreachable-A MailProcessing -m set --set HostBlockReturn src -j RETURN

-A MailProcessing -m set --set NetBlockReturn src -j RETURN

-A MailProcessing -m set --set HostBlockSMTP src -j RejectBySet-SMTP

-A MailProcessing -m set --set NetBlockSMTP src -j RejectBySet-SMTP


Все работает замечательно, но есть несколько особенностей, связанных с большим количеством включаемых в наборы блоков. В этом случае для хранения наборов удобней использовать формат, подобный приведенному ниже

-N NetBlockReturn nethash --hashsize 7776 --probes 2 --resize 50

-N NetBlockSMTP nethash --hashsize 60000 --probes 8 --resize 50

-A NetBlockReturn SmallBlock1

-A NetBlockReturn SmallBlock2

...

-A NetBlockReturn SmallBlockN

-A NetBlockSMTP BigBlock


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

 

 

Но автор ipset приготовил нам очередной сюрприз и если вы создадите файл по типу показанного в последнем примере и потом загрузите наборы с помощью команды ipset -R, то результат просмотра списка вас немало удивит. Логично предположить, что в результате загрузки набор из файла, содержащего показанные в примере наборы адресов мы по команде ipset -L NetBlockReturn увидим

SmallBlock1

SmallBlock2

...

а по команде ipset -L NetBlockSMTP

BigBlock

...



Однако на практике все выглядит иначе и набор NetBlockReturn для приведенного выше примера окажется пустым, а набор NetBlockSMTP будет содержать

SmallBlock1

SmallBlock2

...

BigBlock

...


Таким образом, мы вместо того, чтобы принимать почтовый трафик из блоков SmallBlockN, будем фильтровать его наряду с трафиком из BigBlock. Как говорили наши деды: “Вот тебе, бабушка, и Юрьев день.”

 


1 См. например, https://bugzilla.netfilter.org/bugzilla/show_bug.cgi?id=388

 
Вход
Регистрационное имя

Пароль

[Восстановить пароль]

Если у Вас еще нет учетной записи, Вы можете зарегистрироваться.


Связанные ссылки
· Поиск в разделе Вопросы безопасности
· Статьи пользователя Николай Малых


Самая популярная статья раздела Вопросы безопасности:
Соответствия для правил iptables (часть 3)


Оценка статьи
Средняя оценка: 1
голос.: 1


Оцените эту публикацию:

Отлично
Очень хорошо
Хорошо
Приемлемо
Плохо


Параметры

 Вариант для печати Вариант для печати


Связанные темы

Контроль сетевого трафикаНастройка сетевых параметров хостовДетектирование попыток вторжения в сетьВопросы маршрутизации

"Вход" | Вход/регистрация | 0 коммент.
Комментарии выражают мнение их авторов. Администрация сайта не несет никакой ответственности за достоверность представленных в комментариях посетителей сведений, а также за содержание таких комментариев.

Для публикации своих комментариев Вам нужно зарегистрироваться..
Copyright © Nikolai Malykh
Все права на опубликованные на сайте материалы принадлежат Nikolai Malykh, если в опубликованном на сайте документе явно не указано иное.
Не разрешается воспроизведение опубликованных на сайте документов без согласия правообладателя.

Hosted By Web Hosting by iPage

Copyright © 2005 by Nikolai Malykh
Based on PHP-Nuke by Francisco Burzi. This is free software, and you may redistribute it under the GPL. Author comes with absolutely no warranty.
Время генерации страницы: 0.14 сек.