Brendan
Специалист
Задача c наименьшими усилиями и затратами привести в порядок конфиги установленного вэб-сервера apache2, произвести тюнинг MySQL и произвести простейшую защиту от DoS/DDoS сервера. Имеем 1 сервер, на нем apache2, отдача файлов осуществляется им же, также на сервере производится конвертация видео, на нем же хранятся файлы, задач много, конфиги мягко говоря странные, всякие «левые» скрипты, самописный CMS, плюс ко всему «инициативный» владелец сервера, но раз он платит, то надо делать =)
С apache2 и MySQL проблем не возникло, благо опыт в подобных манипуляциях имелся. А вот с DDoS и его имитацией пришлось повозиться. Основная проблема заключалась в том, что кто-то из пользователей сайта мог находиться за nat’ом, кто-то злонамеренно генерировать tcp соединения, кто-то медленными запросами баловаться.
Так вот небольшой и очень простой способ примитивной защиты нашелся быстро:
Просматриваем сетевые соединения, формируем список из двух колонок, первая — количество соединений, вторая — IP-адрес, чем больше соединений на 1 IP-адрес, тем больше вероятности, что нас атакуют. Суть атаки, на сколько я понимаю, в том, чтобы забить всё разрешённое пространство tcp-соединений вэб-сервера и привести к его отказу.
После того, как мы получили список, можно в ручную, при помощи iptables блокировать IP-адреса,
но это долго, муторно, и практически всегда бессмысленно.
Еще одно из соображений на тему — ограничение количества соединений на 1 IP-адрес:
к примеру 10 содинений на один адрес.
Еще один из способов анализа, выявления аномалий и последующего блокирования «виновника торжества»
Пишем весь трафик в файл, сортируем и получаем IP и количество соединений, после благополучно ручками блокируем полученный списочек.
Так как все выше перечисленное требует непосредственного участия в процессе, то не всегда удобно. Более оптимальный вариант нашелся также очень быстро.
Идем на сайт:
Создаем папку для утилитки и переходим в неё:
Качаем скрипт установщика:
Даем права на исполнение:
Устанавливаем:
Смотрим, что у нас появилось в папке:
правим файл ddos.conf
если нас вполне устраивает iptables, то соответственно ставим 0
указываем пороговое значение, при достяжении которого будет сделан вывод об аномалии и IP-адрес сгенерировавший указанное количество соединений будет забанен.
указываем количество секунд, в течение которого IP-адрес будет в бане.
Есть одно большое НО:
Скрипт ddos.sh упорно отказывался запускаться до того момента пока в него не внесли изменения:
После внесенных изменений пробуем запустить скрипт со следующим ключом, который означает, что нужно создать задачу по cron, забегая вперед, в ней тоже небольшая неточность:
Далее идем в папку /etc/cron.d/ и переименовываем файл ddos.cron (точка) в ddoscron (без точки)
Собственно все.
Источник:
С apache2 и MySQL проблем не возникло, благо опыт в подобных манипуляциях имелся. А вот с DDoS и его имитацией пришлось повозиться. Основная проблема заключалась в том, что кто-то из пользователей сайта мог находиться за nat’ом, кто-то злонамеренно генерировать tcp соединения, кто-то медленными запросами баловаться.
Так вот небольшой и очень простой способ примитивной защиты нашелся быстро:
PHP:
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
После того, как мы получили список, можно в ручную, при помощи iptables блокировать IP-адреса,
PHP:
iptables -A INPUT -s IP_address -j DROP
Еще одно из соображений на тему — ограничение количества соединений на 1 IP-адрес:
PHP:
iptables -A INPUT -p udp —dport 80 -m connlimit —connlimit-above 10 -j DROP
iptables -A INPUT -p tcp —dport 80 -m connlimit —connlimit-above 10 -j DROP
Еще один из способов анализа, выявления аномалий и последующего блокирования «виновника торжества»
PHP:
tcpdump -v -n -w attack.log dst port 80
tcpdump -nr attack.log |awk ‘{print $3}’ |grep -oE ‘[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}’ |sort |uniq -c |sort -rn | head -20
Так как все выше перечисленное требует непосредственного участия в процессе, то не всегда удобно. Более оптимальный вариант нашелся также очень быстро.
Идем на сайт:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Создаем папку для утилитки и переходим в неё:
PHP:
mkdir -p /usr/local/ddos
PHP:
wget http://www.inetbase.com/scripts/ddos/install.sh
PHP:
chmod 0700 install.sh
PHP:
./install.sh
HTML:
-rw-r—r— 1 root staff 972 Dec 12 15:25 ddos.conf
-rwxr-xr-x 1 root staff 3934 Dec 12 14:57 ddos.sh
-rw——- 1 root root 806 Dec 12 16:56 ignore.ip.list
-rw-r—r— 1 root staff 10113 Jan 10 2006 LICENSE
PHP:
nano ddos.conf
PHP:
##### APF_BAN=1 (Make sure your APF version is atleast 0.96)
##### APF_BAN=0 (Uses iptables for banning ips instead of APF)
APF_BAN=0
PHP:
##### How many connections define a bad IP? Indicate that below.
NO_OF_CONNECTIONS=200
PHP:
##### Number of seconds the banned ip should remain in blacklist.
BAN_PERIOD=6000
Есть одно большое НО:
Скрипт ddos.sh упорно отказывался запускаться до того момента пока в него не внесли изменения:
PHP:
{
CONF=»/usr/local/ddos/ddos.conf»
if [ -f «$CONF» -a «$CONF» != «» ]; then
. $CONF
else
head
echo «\$CONF not found.»
exit 1
fi
}
PHP:
/usr/local/ddos# ./ddos.sh -h
DDoS-Deflate version 0.6
Copyright (C) 2005, Zaf <zaf@vsnl.com>
Usage: ddos.sh [OPTIONS] [N]
N : number of tcp/udp connections (default 150)
OPTIONS:
-h | —help: Show this help screen
-c | —cron: Create cron job to run this script regularly (default 1 mins)
-k | —kill: Block the offending ip making more than N connections
./ddos.sh -c
Собственно все.
Источник:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
(Не реклама)
