Мы рассмотрим простую защиту веб-сервера от частого обновления страницы(ctrl+F5) и от небольших Dos атак на него.
Давайте проверим, насколько ваш веб-сервер защищен от атаки с помощью двух простых способов:
1. Самый простой способ вырубить ваш сайт — Ctrl+F5
Немногие знают, что если открыть страничку сайта и постоянно обновлять ее, не отпуская Ctrl+F5 , через небольшой промежуток времени ваш сайт будет недоступен. Это произойдет из-за огромного количества запросов, с которыми ваш веб-сервер не смог справится. В результате любой школьник, таким простым способом может уложить ваш сайт.
2. Программа для тестирования веб-сервера
Давайте проверим веб сервер на устойчивость к мелким атакам на него. Для этого нам понадобится программа SwitchBlade. Загружаем программу отсюда и запускаем файл run-DDos.
Программа очень проста в использовании. В поле «URL» впишите имя тестируемого сайта, а в поле «Connections» количество одновременных подключений. После нажатия кнопки «Run attack», на ваш сайт посыпятся запросы и через несколько секунд он станет недоступен.
Как защитить веб-сервер от атаки?
Если любой из выше перечисленных способов уложил ваш сайт, читаем далее.
В обоих случаях, при нагрузке на веб-сервер, возникала ошибка, и сайт становился недоступен. Что можно предпринять?
Ограничиваем число одновременных подключений к серверу с одного ip адреса.
Для этого нам понадобится скрипт DoS Deflate. Он проверяет по логам, сколько подключений осуществляется, и когда превышен лимит блокирует атакующий ip.
Установка DoS Deflate
Для установки заходим с консоли под правами root и делаем, как написано ниже.
Скачиваем скрипт:
wget http://www.inetbase.com/scripts/ddos/install.sh
Меняем права на запуск:
chmod 0700 install.sh
Инсталлируем:
./install.sh
Запускаем:
sh /usr/local/ddos/ddos.sh
Настройка DoS Deflate
Нужно настроить скрипт для наших нужд. Заходим в каталог /usr/local/ddos и редактируем ddos.conf.
Выставляем параметры, согласно требованиям вашего веб-сервера. Ниже пример подходящий для большинства серверов.
- NO_OF_CONNECTIONS=100 — максимальное количество соединений с одного ip;
- APF_BAN=0 — выбираем способ блокировки посредством iptables;
- BAN_PERIOD=600 — период блокирования атакующего в секундах;
- KILL=1 — оставляем по умолчанию;
- EMAIL_TO= «[email protected]» — отправка почтовых уведомлений при атаке;
- IGNORE_IP_LIST= «/usr/local/ddos/ignore.ip.list» — список ip адресов, которые не должны блокироваться;
Важно: в файле ignore.ip.list после указания в строчку всех ip адресов, которые не должны блокироваться, перейдите на две строчки вниз с помощью Enter, что бы скрипт мог туда временно вписывать и затем удалять заблокированные адреса(чтобы два раза подряд не блокировать один и тотже ip). Иначе он может ошибочно удалить или дописать адрес в конец вашего исключенного ip
Скрипт записывается в cron (планировщик) и автоматически запускается каждую минуту, для проверки атаки на сервер. Также скрипт автоматически добавляет в белый список ip вашего сервера и ваш ip, с которого вы подключились с консоли.
Как разблокировать ip, который попал в черный список.
Набираем в консоли команду и смотрим заблокированные номер ip
iptables -L INPUT -n —line-numbers
После номера стоит DROP all — (заблокированный ip типа 91.219.219.62)
Для удаления заблокированного ip вводим команду, где указываем наш заблокированный номер. (В нашем случае заблокированный ip был под номером «1»)
iptables -D INPUT 1
После этого наш ip 91.219.219.62 будет разблокирован.
Выводы
В статье мы рассмотрели один из самых простых способов защиты веб-сервера, который отлично подойдет для новичков. Установив на веб-сервер DoS Deflate, мы сделали его более защищенным от небольших атак.
При более серьезных атаках, когда Dos осуществляется с тысячи разных ip существуют другие способы, которые мы рассмотрим в следующих статьях.
Отлично работает! А как сделать проверку по крону раз в 30 секунд, потому как если досят, то сервер может лежать целую минуту пока не сработает крон.
Не рекомендую проверять чаще, это дополнительная нагрузка на сервер. Но если хочется, то можно прописать в кроне что то типа этого:
*/1 * * * * /usr/local/ddos/ddos.sh
*/1 * * * * ( sleep 30; /usr/local/ddos/ddos.sh )
тогда вторая задача выполнится с задержкой в 30 секунд.