Защита от L7-flood Windows

Материал из Энциклопедия хостинга
Перейти к: навигация, поиск

Содержание

Диагностика

Для диагностики возможной DDoS-атаки будем использовать LogParser Studio. Если атака большой мощности, на время установки ПО, можно отключить IIS.

Log Parser 2.2 — это многофункциональное и универсальное средство, которое предоставляет универсальный доступ по запросу к таким текстовым данным, как файлы журнала, XML- и CSV-файлы, а также к основным источникам данных в операционной системе Windows, например журналу событий, реестру, файловой системе и службе каталогов Active Directory. Для работы с Log Parser необходимо указать требуемый источник данных и способ их обработки. Результаты запроса можно представить в пользовательском текстовом формате вывода или в более специализированных форматах, например SQL, SYSLOG или в виде диаграммы. Большинство программных продуктов разработано для выполнения ограниченного числа конкретных задач. Log Parser существенно отличается от подобных программных продуктов. Число вариантов его использования ограничено только потребностями и воображением пользователя. LogParser Скачать LogParser - очень емкий инструмент, но для удобства мы будем использовать LogParser Studio. LogParser Studio Скачать LogParser Studio - графический интерфейс для LogParser, в котором присутствует библиотека запросов.

Перед анализом LogParser следует оценить размер логов, стандартно, если велась атака, один из логов будет отличаться по размеру. Как правило, логи IIS находятся по пути C:\inetpub\logs\LogFiles. C:\WINDOWS\system32\LogFiles\HTTPERR - журналы http-errors.

Анализ журналов http-errors

Для анализа будем использовать HTTPERR будем использовать 3 команды. Запускаем LogParser Studio. Создаем новый запрос:

Logparser.jpg

Указываем директорию/файл с логом, напомню, сейчас мы анализируем HTTPERR-лог, который находится по пути C:\WINDOWS\system32\LogFiles\HTTPERR (LogParser Studio не видит директории, возможно вам придется скопировать лог в другую директорию) Выбираем тип лога HTTPERRLOG В нижнюю половину окна вводим запрос

SELECT s-reason, Count(*) as Errors FROM '[LOGFILEPATH]' GROUP BY s-reason ORDER BY Errors DESC

Анализируем результаты вывода, в результате этого запроса мы увидим причины отключений клиентов. Анализируем на наличие ошибок, Общие ошибки HTTP 400, Timer_MinBytesPerSecond и Timer_ConnectionIdle. Timer_ConnectionIdle это на самом деле не ошибка, этот параметр указывает, что клиент был отключен по таймауту. Обратите внимание, что по умолчанию HTTP Keepalive тайм-аут в IIS составляет 120 секунд, а браузер, такой как Internet Explorer использует HTTP Keep Alive значение тайм-аута 60 секунд. В этом случае IE всегда разрывает соединение первым, и это не должно вызывать Timer_ConnectionIdle-ошибку. Если в HTTPERR большое количество Timer_ConnectionIdle, можно косвенно говорить о DOS / DDOS,но нужно не забывать, что у клиента может быть таймаут больше 120с. Если много Timer_MinBytesPerSecond - можно говорить, что злоумышленник пытается “забить соединения”, посылая "медленные запросы".

Logparser1.jpg

Следующим выполняем запрос, в результате этого запроса, мы получим список адресов клиентов и количество ошибок.

SELECT c-ip, Count(*) as Errors FROM '[LOGFILEPATH]' GROUP BY c-ip ORDER BY Errors DESC

В результате этого запроса мы получим количество ошибок в определенное время.

SELECT QUANTIZE(TO_TIMESTAMP(date, time), 3600) AS Hour, COUNT(*) AS Total FROM '[LOGFILEPATH]' GROUP BY Hour ORDER BY Hour

Примеры дополнительных запросов Этот запрос нам выведет Ip, с которых чаще всего была ошибка Timer_ConnectionIdle.

SELECT c-ip, Count(*) as Errors FROM '[LOGFILEPATH]' WHERE s-reason LIKE '%Timer_ConnectionIdle%' GROUP BY c-ip ORDER BY Errors DESC

Показывает количество ошибок, время и Ip клиента.

SELECT QUANTIZE(TO_TIMESTAMP(date, time), 3600) AS Hour, COUNT(*) AS Total FROM '[LOGFILEPATH]' WHERE c-ip='188.120.252.222' GROUP BY Hour ORDER BY Hour

Анализ логов IIS

Аналогично логам HTTPERROR загружаем логи IIS, которые находятся в C:\inetpub\logs\LogFiles.

Выставляем тип лога IISW3CLOG

Выполняем запрос, в результате этого запроса мы получим список страниц и количество обращений к ним.

SELECT cs-uri-stem, Count(*) AS Hits FROM '[LOGFILEPATH]' GROUP BY cs-uri-stem ORDER BY Hits DESC

Следующим запросом мы получим список Ip и количество подключений с них:

SELECT c-ip, count(*) as Hits FROM '[LOGFILEPATH]' GROUP BY c-ip ORDER BY Hits DESC

Получаем дату, время и количество подключений:

SELECT QUANTIZE(TO_TIMESTAMP(date, time), 3600) AS Hour, COUNT(*) AS Total FROM '[LOGFILEPATH]' GROUP BY Hour ORDER BY Hour

Получаем дату, время и количество полученных ошибок в данный промежуток времени. Ошибки имеют код больше или равно 400.

SELECT QUANTIZE(TO_TIMESTAMP(date, time), 3600) AS Hour, sc-status as Status, count(*) AS ErrorCount FROM '[LOGFILEPATH]' WHERE sc-status >= 400 GROUP BY date, hour, sc-status ORDER BY ErrorCount DESC

Защита от DDoS

IIS-Dynamic IP Address Restrictions

Устанавливаем Dynamic IP Address Restrictions, подробнее об установке Перенос_сайтов_Windows

Logparser.png

Заходим в IISmanager, заходим в IP Address and Domain restrictions (можно настраивать для всего сервера или конкретного домена).

Logparser2.jpg

Выбираем пункт Edit Dynamic Restriction Settings

Logparser3.jpg

Настраиваем блокировку:

Logparser4.jpg

Можно настроить блокировку на основании количества одновременных подключений. Можно включить блокировку на основании количества подключений за период времени.

В разделе IP Address and Domain restrictions - Add Allow Entry… можно добавить Ip, с которых разрешен доступ. В разделе IP Address and Domain restrictions - Add Deny Entry… можно добавить заблокированные Ip. В разделе IP Address and Domain restrictions - можно настроить ответ сервера при блокировке.

IIS-Dynamic URL Rewrite

В статье Перенос_сайтов_Windows описана установка модуля URL Rewrite, он может пригодиться в блокировке. Заходим в IISmanager, далее в раздел URL Rewite

Logparser5.jpg

В разделе URL Rewrite выбираем Add Rules… Далее в Inbound Rules - Request Blocking

Logparser6.jpg

Блокировку можно осуществлять по запрашиваемому URL, по User-Agent, Ip-адресу, рефереру.

Firewall

Если необходимо быстро осуществить блокировку, то можно в Powershell выполнить команду

netsh advfirewall firewall add rule name=BLACKIPS dir=in interface=any action=block remoteip=x.x.x.x 

Данная команда создает правило для Ip x.x.x.x в фаерволе названием BLACKIPS, при котором Ip блокируется.

Можно экспортировать список Ip, с которых больше всего подключений, из LogParserStudio в CSV-файл. Допустим файл назвали my.csv Получаем из файла только Ip:

cat my.csv | %{ $_.Split(“,”)[0]; } > 1.txt

Удаляем первую строку:

(get-content 1.txt) -nomatch “c-ip” | out-file 1.txt

Выбираем первые 10 Ip

get-content -path 1.txt -totalcount 10 > 2.txt
$var=”netsh advfirewall firewall add rule name=BLACKIPS dir=in interface=any action=block remoteip=”
gc 2.txt | Foreach {“{0}{1}” -f $var,$_} > 1.ps1

И запускаем на исполнение файл 1.ps1

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты

Заметили ошибку?

Выделите ее и нажмите CTRL+ENTER