Предварительная диагностика
При возникновения подозрения на наличие DDoS на Ваш сайт проанализируйте нагрузку на Ваш сервер с помощью лога команды atop
atop -r /var/log/atop/atop_XXXXXXX
где /var/log/atop/atop_XXXXXXX - путь к логу atop за дату, когда нужно отследить нагрузку на сервер.
Навигацию по логу Вы можете осуществлять кнопкой t (вперед) и shift-t (назад), переход на определенное время с помощью кнопки b
После определения времени резкого повышения нагрузки на Ваш сервер Вам необходимо проанализировать логи Вашего веб-сервера.
Описание работы с логами веб-сервера находится по адресу http://freehost.com.ua/faq/faq/logi-web-servera-apache/
Если у Вас настроена часовая ротация логов, определите, какой файл лога содержит нужную Вам информацию. Проще всего определить, посмотрев начало файла лога
zcat /var/www/вашпользователь/data/logs/ваш.сайт.access.log.1.gz | head -5
После того, как будет определен необходимый файл, сделайте анализ его на количество запросов с одного айпи адреса.
zcat /var/www/вашпользователь/data/logs/ваш.сайт.access.log.1.gz | awk '{ print $1 }' | sort | uniq -c | sort -nr | head
Если ротация суточная, и атака произошла в ближайшие сутки, то анализ лога выполняйте следующей командой
zcat /var/www/httpd-logs/ваш.сайт.access.log | grep "DD/Mon/YEAR:HH" | awk '{ print $1 }' | sort | uniq -c | sort -nr | head
где DD - дата, Mon - месяц сокращеннно, YEAR год полностью и HH - часы.
Если количество запросов с одного или нескольких адресов аномально отличается от остальных, в таком случае именно с этих адресов осуществляется атака на Ваш сервер. Это могут быть как злоумышленники, также это может быть признаком, что Ваши сайты парсятся на изменение информации. Вы можете закрыть данные адреса с помощью файрвола в панели ISPManager. Для этого перейдите в панель, выберите меню Брандмауэр (firewall), после чего выделите строку WWW server:80 и нажмите кнопку изменить в верхнем правом углу панели. В появившемся окне выберите в выпадающем меню во второй строке "Частично закрытый" вместо "Открытый" и добавьте обнаруженные адреса злоумышленников в список "Запретить IP-адресам".
В случае, если атака производится с множества адресов Вы можете выполнить следующие операции. В первую очередь, лучшим вариантом для защиты от DDoS будет подключение Вашего сайта к CloudFlare. Все следующие рекомендации могут быть дополнением или альтернативой этого, но они не гарантируют результат и являются менее эффективными.
Настройка модулей nginx.
Вы можете ограничить количество подключений к Вашему сайту с одного адреса и/или количество запросов с одного адреса с помощью модулей nginx ngx_http_limit_req_module и ngx_http_limit_conn_module. Обращаем Ваше внимание, что слишком жесткие настройки в этих модулях могут привести к частичной или полность недоступности Вашего сайта для пользователей.
Настройка ограничения количества запросов к сайту:
Добавьте эти строки в файл настроек /etc/nginx/nginx.conf в секцию http {
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
limit_req_log_level error;
В данном случае состояния хранятся в зоне "one" размером 10 мегабайт, и средняя скорость обработки запросов для этой зоны не может превышать 1 запроса в секунду.
Добавьте включение этой зоны
limit_req zone=one burst=10;
где burst - разовый "всплеск" запросов с одного адреса.
Вы можете добавить эту строку как в секцию http {, тогда она будет действовать для всех сайтов Вашего сервера, так и в секции server или location сайта, который находится под DDoS
Настройка ограничения количества подключений к сайту:
Добавьте эти строку в файл настроек /etc/nginx/nginx.conf в секцию http {
limit_conn_zone $binary_remote_addr zone=two:10m;
limit_conn_log_level error;
И добавьте включение этой зоны в одну из секций http, server или location
limit_conn two;
Использование fail2ban для защиты от DDoS.
Установите fail2ban если он не был установлен
yum install fail2ban
для Centos
apt-get install fail2ban
для Ubuntu и Debian
Для защиты от простых ботов Вам с помощью fail2ban выполните следующие рекомендации.
В файле /etc/fail2ban/jail.conf приведите секцию apache-badbots к следующему виду:
[apache-badbots]
enabled = true
port = http,https
logpath = /var/www/httpd-logs/yoursite.com.access.log
bantime = 172800
action = iptables[name=Bad, port=http, protocol=tcp]
maxretry = 10
Если ddos выполняется однотипными запросами по http Вы можете создать свое правило для fail2ban
Например для простого запроса к корню сайта:
Создайте файл фильтра
vi /etc/fail2ban/filter.d/apache-get.conf
Добавьте в него строки
[Definition]
failregex = ^<HOST> .*GET.*/\ HTTP/*
В файле /etc/fail2ban/jail.conf добавьте описание правила
[apache-get]
enabled = true
port = http,https
logpath = /var/www/httpd-logs/yoursite.com.access.log
bantime = 172800
action = iptables[name=Bad, port=http, protocol=tcp]
maxretry = 100
Данное правило будет банить все айпи адреса, с которых производился запрос к корню сайта больше 100 раз. При таком использовании fail2ban мы рекомендуем Вам настроить ротацию логов Вашего сайта раз в час.
При повторяющемся запросе к index.php регулярное выражение в фильтре примет следующий вид
failregex = ^<HOST> .*GET.*/index.php HTTP/*
Заказав услугу аренда сервера у компании FREEhst.UA Вы можете быть уверенными в том, что наши специалисты помогут Вам в настройке сервера. А еще, при покупке выделенного сервера можно зарегистрировать домен бесплатно.
Дата: 25.03.2016 Автор: Эдуард
|
|
Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:
comments powered by Disqus