Современные информационные
технологии
Компьютерная инженерия
И.А. Гаврилов,
Р.В. Бараненко
Херсонский национальный технический университет
Использование 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