magnify
Home arrow Posts tagged "connlimit"
formats

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

Опубликовано: 21.05.2008 Автор: в

В этой статье я опишу процесс установки модуля IPTables — connlimit. Для чего же он нужен? В последнее время начинает остро вставать проблема (D)DOS-атак на сервера. К сожалению, эта проблема и не минула один из веб-серверов, находящихся под моим контролем. Внезапно стал «падать» Apache. Пронаблюдав один из таких моментов с помощью netstat -an | sort -k 5, я обнаружил ненормальное количество открытых соединений на 80 порт с некоторых IP-адресов (очевидно, зомби-машин), что и приводило к непомерному увеличению нагрузки и, затем, отказу веб-сервера.

Поэтому было принято решение ограничить количество одновременных ограничений с одного IP-адреса. Поскольку на сервере установлен дистрибутив Debian 4.0, то, соответственно буду описывать действия, производимые именно для этой системы. Я реализовал данное ограничение с помощью модуля IPTables — connlimit, который собрал без перекомпиляции(переустановки) ядра.

1. Подготовка:

# Ставим исходники ядра
apt-get install linux-source-2.6.18 dpkg-dev
cd /usr/src/
# Распаковываем ядро
tar --use-compress-program bzip2 -xvf linux-source-2.6.18.tar.bz2
# Делаем симлинк на ядро (чтобы было проще потом)
ln -s /usr/src/linux-source-2.6.18 /usr/src/linux
# Копируем для совместимости
cp /boot/config-2.6.18-4-686 /usr/src/linux/.config
# Берем исходники IPTables и копируем их в /usr/src/iptables
cd /tmp
apt-get source iptables
cp -r /tmp/iptables-1.3.6.0debian1/iptables/ usr/src

2. Редактируем файл /usr/src/linux/Makefile, чтобы в начале файла было

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 18
EXTRAVERSION = -12etch2
NAME=Avast! A bilge rat!

3. Установка и запуск patch-o-matic

# Скачиваем и распаковываем patch-o-matic
wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070401.tar.bz2
tar --use-compress-program bzip2 -xvf patch-o-matic-ng-20070401.tar.bz2
# Запускаем патч
cd patch-o-matic-ng-20070401
./runme --download connlimit
# На вопрос установки патча отвечаем 'y'

4. Конфигурируем ядро

cd /usr/src/linux
make menuconfig
# Идем в Networking  --- Networking options  ---  Network packet filtering (replaces ipchains)  --- IP: Netfilter Configuration
# Ставим M возле Connections/IP limit match support
# Выходим, не забыв сохранить конфиг

5. Собираем ядро

# Трюк с прерыванием сборки и запуском make M=net/ipv4/netfilter/ у меня не сработал,
# поэтому я подождал полной сборки, благо никуда не спешил..8)
make

6. Пробуем подключить модуль

cp /usr/src/linux/net/ipv4/netfilter/ipt_connlimit.ko /lib/modules/2.6.18-4-686/kernel/net/ipv4/netfilter/
depmod -a
insmod ipt_connlimit.ko

Если ошибок не возникло, то радуемся и начинаем ограничивать количество одновременный соединений. Для этого необходимо добавить одно правило IPTables (куда — зависит от вашей текущей конфигурации):

# Ставим ограничение на 5 соединений на 80 порт.
-A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j REJECT

Замечу, что после включения этого правила, нагрузка на Apache сильно снизилась и он перестал «падать». Не уверен, что этот метод поможет от массированной DDOS-атаки, но с отдельными злодеями справится замечательно. Кстати, ничто не мешает таким образом ограничивать соединения на другие порты, например на 25. В случае других дистрибутивов, установка в общих чертах происходит таким же образом.

Ссылки:

  1. http://www.netfilter.org/projects/patch-o-matic/index.html
  2. http://www.opennet.ru/base/net/connlimit_fedora.txt.html
 
Просмотров: 5 075 | Комментариев нет  comments