Author: 891rpm

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

    Появилась задача: блокировать доступ некоторому списку пользователей доступ в сеть 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