Использование ipset в CentOS 5

Сети > Маршрутизация
Появилась задача: блокировать доступ некоторому списку пользователей доступ в сеть Internet, трафик пользователей проходит через софтварный (программный) Linux маршрутизатор (роутер).
Первая мысль — блокировать в iptables. Мысль это безусловна верная, но при большом количестве правил, это будет создавать излишнюю нагрузку на CPU. Так например линейный список из 1000 правил убьет производительность роутера под нуль.
Каким образом можно увеличить производительность данной схемы ?
Выход был найден – ipset.
Установка ipset для CentOS i386 занимает 1 минуту:

Подключаем CentALT:
rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

Устанавливаем нужные пакеты:
yum install ipset kmod-ipset

Обновляем iptables — пересобран штатный для CentOS iptables, только добавлен модуль SET.

yum update iptables

Создаем файл /etc/ipset.conf в который будем писать ip которым запрещен доступ следующего содержания
#!/bin/bash
# Создаем новую цепочку правил
ipset -N access iphash
# добавляем список доступа
ipset -A access 192.168.0.2
ipset -A access 192.168.0.3
ipset -A access 192.168.0.4

добавляем в автоматический запуск в файл /etc/rc.d/rc.local

добавляем последней строку
/bin/bash /etc/ipset.conf

Затем добавляем в /etc/sysconfig/iptables единственную строку которая закроет доступ всем ip адресам из выше приведенного списка
-A FORWARD -m set --set access src -j DROP
перегружаем правила iptables

# service iptables restart

Все.
Переход от блокировки в iptables на блокировку в ipset снизил нагрузку на систему более чем в 2 раза при количестве правил >1000, сетевой трафик проходящий через роутер в районе 100 kpps.
Подобным образом можно успешно защищаться от простых DDOS атак.

Источник: http://centos.alt.ru/?p=402 

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>