Краткое руководство по борьбе с DDOS-атаками на http-сервер
Автор Алексей | HiTex.BY на 18 декабря 2011 13:44
|
|
Проявление атакиПроявляется в огромном количестве процессов apache, сервер недоступен из-за превышения максимального числа процессов, или, что наиболее вероятно, недоступен из-за нехватки оперативной памяти. ДиагностикаЕсли есть возможность зайдите на сервер по ssh. Командами ps и top отметьте большое количество процессов httpd. Если на сервер по ssh войти не удается, то воспользуйтесь VDSmanager (ссылка на него есть в клиентской зоне) Посмотрите меню Запущенные процессы и Текущая нагрузка. Перезагрузите сервер через VDSmanager, попробуйте зайти по ssh, если падает, из-за apache, то остановите его, как вариант, можете убить все процессы httpd через него же.) Действия администратораВключите firewall - отредактируйте /etc/rc.conf прописав в нем строки (редактировать файлы можно через VDSmanager) firewall_enable="YES" Создайте файл /etc/firewall.conf и пропишите в нем add allow ip from ip-адрес с_которого_администрируете_сервер Тем самым после перезагрузки сервера у вас будет недоступен apache извне и не будет приводить к зависанию сервера. Теперь надо определить на какой именно сайт идет атака. У apache есть замечательный модуль mod_status http://httpd.apache.org/docs/2.2/mod/mod_status.html mod_status позволяет в реальном времени осуществлять мониторинг загрузки сервера. Подключение mod_status в Apache 2.2В apache2.2 отредактируйте /usr/local/etc/apache22/httpd.conf Раскомментируйте строки #LoadModule status_module libexec/apache22/mod_status.so Отредактируйте файл конфигурации /usr/local/etc/apache22/extra/httpd-info.conf <Location /server-status> Поменяйте на <Location /server-status> Раскомментируйте строку #ExtendedStatus On Перезапустите apache Подключение mod_status в apache 1.3В apache 1.3 подключение server_status осуществляется аналогично apache 2.2, за исключением того, что все настраивается только в /usr/local/etc/apache/httpd.conf Использование server-statusТеперь по адресу http://ip-aдрес.сервера/server-status доступна статистика запросов к нему. Аккуратно удалите правило запрещащие запросы к серверу по 80 порту # ipfw delete 200 И посмотрите http://ip-aдрес.сервера/server-status Нас интересует следующее 0-0 86795 0/31/31 W 0.54 0 0 0.0 0.09 0.09 89.18.166.89 example.com GET / HTTP/1.0 В данном случае, атака идет пустыми запросами GET / к серверу example.com Вам следует его отключить. Выполнить это лучше всего создав файл .htaccess в корневой директории домена с содержимым Deny from All Теперь при обращении к сайту будет выдаваться ошибка 403 Forbidden и нагрузка на остальные сайты значительно снизится. Как правило, флуд-боты обращаются по имени сервера, соответственно, пропишите DNS для этого домена на IP-адрес 127.0.0.1 и когда обновится кэш DNS, то поток пустых запросов полностью прекратится. Дополнительная оптимизация сервераВ качестве дополнительных параметров, которые следует использовать, при настройке сервера /usr/local/etc/apache22/extra/httpd-mpm.conf <IfModule mpm_prefork_module> Измените MaxClients (максимальное число процессов) в меньшую сторону до количества процессов, которые не роняют ваш сервер по нехватке оперативной памяти. Каждый процесс apache занимает в среднем 4-8 мегабайт памяти и необходимо чтобы суммарное количество помешалось в оперативной памяти. Отредактируйте /usr/local/etc/apache22/extra/httpd-default.conf Следует уменьшить параметры Timeout 300 До 60 и 50 соответственно, чтобы как можно более скорее старые процессы apache прекращали свое существование Firewall Пропишите правило allow tcp from any to me dst-port 80 limit src-addr 4 Этим вы ограничите максимальное число одновременных подключений (не стоит его делать меньше) с одного IP-адреса. Используйте также утилиту netstat # netstat -na | grep 80 для определения большого количества подключений с одного IP-адреса Использование nginxПри использовании nginx в качестве Front-End к Apache (стандартная конфигурация при установки nginx совместно с ISPmanager) WWW домен следует отключать в конфигурации nginx в описании соответствующего виртуалхоста Например server { Пропишите ниже server_name строку deny all; И тем самым уже nginx будет выдавать ответ 403 Forbidden и не перенаправлять запросы к web-серверу apache. | |
|