Современные информационные технологии

Компьютерная инженерия

И.А. Гаврилов, Р.В. Бараненко

Херсонский национальный технический университет

Использование IPSET для блокировки пользователей и уменьшения нагрузки

 

В настоящее время в виду роста количества пользователей сети Internet перед Ethernet-провайдерами стоит проблема ограничения несанкционированного доступа к глобальной сети некоторым пользователям, независимо от технологии, по которой он предоставляется, будь-то обычный Ethernet, либо VPN. Казалось бы, во втором случае клиенту, которому ограничивается доступ, можно просто отказать в авторизации при соединении путем отсылки RADIUS-сервером ответа Access-reject VPN-серверу при попытке соединения. Но это вызовет ошибку при соединении, которая не всегда может быть правильно истолкована клиентом, что в свою очередь увеличит нагрузку на службу технической поддержки. Таким образом, провайдеры чаще всего используют перенаправление всего www-трафика клиента на внутренний web-сервер с сообщением о блокировке. Т.е. для каждого клиента в брандмауэре на BRASe создается запись, запрещающая прохождение трафика к/от клиента и перенаправляющая web-запросы на внутренний сервер, либо, наоборот, разрешающая трафик всех клиентов, для которых доступ не заблокирован (в случае Ethernet-провайдинга). У небольших провайдеров BRASы обычно построены на ПК с установленной системой Linux или *BSD. И если в брандмауэрах *BSD систем (ipfw) возможно использование таблиц IP-адресов, то в Linux обычно для каждого IP биллинговой системой создается отдельное правило:

Chain FORWARD (policy DROP)

target     prot opt source               destination

ACCEPT      all  --  10.0.0.15          0.0.0.0/0

ACCEPT      all  --  10.0.0.18          0.0.0.0/0

ACCEPT      all  --  10.0.0.21          0.0.0.0/0

ACCEPT      all  --  10.0.1.87          0.0.0.0/0

...

ACCEPT      all  --  10.0.99.152        0.0.0.0/0

ACCEPT      all  --  10.0.100.14        0.0.0.0/0

ACCEPT      all  --  10.0.100.71        0.0.0.0/0

 

В результате получается большая нагрузка на BRAS, на который к тому же возложена задача VPN-сервера и шейпера.

Целью работы является оптимизация брандмауэра на ОС Linux для снижения нагрузки при больших потоках с использованием программы ipset.

Ipset представляет собой программу для работы с наборами адресов IP (IP set) в ядре Linux. Программа позволяет создавать, изменять и проверять наборы адресов IP, с которыми работает ядро Linux (включая netfilter/iptables). IP set может включать в себя адреса IP, номера портов TCP и UDP, а также дополнительную информацию.

Ipset позволяет сократить количество проверок в iptables до одной. Далее приводится пример настройки ipset для приведенной выше задачи.

Для начала создается новый набор с именем allowed типа iphash, который служит для создания произвольных наборов адресов IP и использует для хранения IP-адресов хэш-таблицу:

ipset -N allowed iphash

Далее при успешной авторизации клиента биллинговой системой в набор allowed заносится выданный клиенту адрес:

ipset -A allowed 10.0.1.87

После завершения клиентской сессии адрес может быть удален командой:

ipset -D allowed 10.0.1.87

После этого в iptables добавляется единственное правило, проверяющее наличие src или dst IP в наборе allowed:

iptables -A FORWARD -m set -–set allowed src,dst -j ACCEPT

Более того, созданный набор адресов также можно использовать для перенаправления www-трафика заблокированных клиентов на внутренний сервер:

iptables -t nat -A PREROUTING -s 10.0.0.0/8 -d ! 10.0.0.0/8 -m set ! -–set allowed src -p 6 --dport 80 -j DNAT --to-destination 10.1.1.1

Также можно создать набор типа nethash, в который можно добавлять префиксы сетей разных размеров и проверять принадлежность IP-адреса к сетям, содержащимся в наборе.

Для создания такого типа набора и добавления префиксов к нему можно использовать команды

ipset -N allowed nethash

ipset -A allowed 1.2.3.0/24

Это может быть полезно для фильтрации нежелательного трафика из глобальной сети, либо разрешения доступа клиентам, которым выделены диапазоны адресов.

Правила iptables для проверки принадлежности IP-адреса одной из сетей, содержащихся в наборе, совпадает с правилами, приведенными выше.

В итоге рассмотрен мощный многофункциональный инструмент, позволяющий снизить нагрузку на ПК, выполняющий роль брандмауэра до 5-10 раз путем уменьшения количества правил iptables, что позволяет увеличить пропускную способность и снизить задержки проходящих через него пакетов.

 

Литература:

1. http://www.opennet.ru/docs/RUS/LARTC/index.html

2. http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2