- PVSM.RU - https://www.pvsm.ru -
Заказчик, чьи сайты я поддерживал ранее, обратился с тем, что сайт лежит и отдает 500 ошибку. У него стандартный сайт на ASP.NET WebForms, не скажу, что очень нагруженный, но бывали проблемы с производительностью базы данных (MS SQL Server на отдельном сервере). Недавно сервер БД поменяли и перенесли данные.
Этот сайт не основной бизнес заказчика, поэтому практически не обслуживался. У него не настроено никакого мониторинга и сбора метрик и вообще за ним особо не следят.
Какие аномалии бросились в глаза:
Первая моя гипотеза была связана с неполадками на стороне сервера БД из-за его переноса: забыли что-то настроить, не отрабатывает джоб по сбору статистики и перестроению индекса и т.п.
Память — сразу стало ясно, что при переносе СУБД забыли ограничить использование оперативной памяти на новом сервере — ограничиваем. По прошлому опыту этой конфигурации вполне хватало 24Гб (из общих 32).
Проверям джобы — все норм. Запускаем Tuning Advisor и достраиваем недостающие индексы (среди них был и индекс для горячего запроса из профайлера). Выхлоп близок к нулю: сайт лежит.
Захожу в логи и сразу все становится понятно — DDoS:

Первый раз такая ситуация, неясно кому понадобилось. Запросов стало на порядок больше, что же в логах?
В логах видим около 200 запросов в секунду (обычные пользователи генерят до десяти в минуту по метрике). Все запросы с разных IP, объединяет их только схожий user-agent:
| GET | 101.200.177.82 | WordPress/4.2.2; www.renwenqifei.com;+verifying+pingback+from+37.1.211.155 [1] | 503 |
| GET | 54.69.1.242 | WordPress/4.2.10; 54.69.1.242;+verifying+pingback+from+37.1.211.155 [2] | 503 |
| GET | 123.57.33.117 | WordPress/4.0; www.phenomenon.net.cn;+verifying+pingback+from+37.1.211.155 [3] | 503 |
| GET | 54.69.236.133 | WordPress/4.3.1;+http://www.the-call-button.com;+verifying+pingback+from+37.1.211.155 | 503 |
| GET | 52.19.227.86 | WordPress/4.3.6; 52.19.227.86;+verifying+pingback+from+37.1.211.155 [4] | 503 |
| GET | 52.27.233.237 | WordPress/4.1.13; 52.27.233.237; [5] verifying+pingback+from+37.1.211.155 | 503 |
| GET | 202.244.241.54 | WordPress/3.5.1; www.fm.geidai.ac.jp [6] | 503 |
| GET | 52.34.12.105 | WordPress/4.3.6; 52.34.12.105; [7] verifying+pingback+from+37.1.211.155 | 503 |
| GET | 128.199.195.155 | WordPress/4.3.6; www.glamasia.com;+verifying+pingback+from+37.1.211.155 [8] | 503 |
| GET | 61.194.65.94 | WordPress/4.2.10; wpwewill.help;+verifying+pingback+from+37.1.211.155 [9] | 503 |
| GET | 23.226.237.2 | WordPress/4.3.1; hypergridder.com;+verifying+pingback+from+37.1.211.155 [10] | 503 |
| GET | 104.239.228.203 | WordPress/4.2.5; pjtpartners.com;+verifying+pingback+from+37.1.211.155 [11] | 503 |
| GET | 104.239.168.88 | WordPress/4.2.10; creatorinitiative.com;+verifying+pingback+from+37.1.211.155 [12] | 503 |
| GET | 166.78.66.195 | WordPress/3.6; remote.wisys.com/website [13] | 503 |
| GET | 212.34.236.214 | WordPress/3.5.1; nuevavista.am [14] | 503 |
Это известный тип атаки: WordPress сайт с включенным Pingback (включен по умолчанию), может использоваться в DDOS-атаке на другие сайты. Более подробная статья [15] на Хабре.
Есть несколько уровней где можно фильтровать запросы. Первый — это файрвол. Грепаем ip — добавляем их в файрволл, по расписанию собираем вновь появившиеся. Плюсы — отличная скорость, нет мусорных запросов в логах. Минусы — надо писать скрипты и следить.
Второй уровень — сам IIS (из явных минусов — мусорные запросы попадают в логи). Третий уровень — написать модуль и использовать его. Это самый гибкий подход, но трудоемкий и имеет невысокую производительность.
Я остановился на втором уровне из соображений получить решение совершив минимум действий.
У IIS много возможностей по фильтрации запросов. В данном случае подходит Request Filtering. Более подробно об установке и настройке. [16]
Выбираем сайт → Request Filtering → Rules → Add filtering rules

И указываем, что мы хотим отфильтровать все запросы где в Header: User-Agent есть слово WordPress.

Или можно указать соответствующие настройки в файле web.config:
<system.webServer>
<security>
<requestFiltering>
<filteringRules>
<filteringRule name="ddos" scanUrl="false" scanQueryString="false">
<scanHeaders>
<clear />
<add requestHeader="User-Agent" />
</scanHeaders>
<denyStrings>
<clear />
<add string="WordPress" />
</denyStrings>
</filteringRule>
</filteringRules>
</requestFiltering>
</security>
</system.webServer>
Сразу после применения этого фильтра сайт заработал. Все показатели вернулись к норме. Если бы я сразу проверил логи — на все ушло бы менее получаса.
IIS — очень крутой и производительный сервер для веб-приложений. Помимо передачи запроса в управляемую среду он много что умеет делать и по производительности сильно обыгрывает managed-решения.
В разделе Request Filtering вы можете настроить еще много различных фильтров: по методам, сегментам урла, query-параметрам, расширению и т.д. Можно запретить в asp.net проекте специфичные для PHP query-параметры (попытка получить доступ к htaccess или файлу с паролями). Можно запретить злонамеренные запросы, например, содержащие sql-инъекции. Это делается не как защита от этих атак, а в целях экономии ресурса сервера: IIS самостоятельно откинет эти запросы и сделает это быстро с минимальными затратами памяти и процессорного времени.
Еще один механизм называется IP Address and Domain Restrictions. Этот механизм позволяет составлять белые и черные списки IP-адресов для ограничения доступа к сайту. Вы можете заблокировать злобного парсера или наоборот открыть доступ на тестовый сайт или админку только с определенных IP. Более подробно читать в официальной документации [17].
И третий механизм, который может вам помочь противодействовать ддос-атакам и нежелательным парсерам — Dynamic IP Address Restrictions.
Не всегда мы можем следить за постоянно меняющимися ip-адресами злоумышленника. Но с помощью этого инструмента мы можем ограничить частоту запросов. Таким образом, IIS на аномально большое количество запросов с одного IP-адреса будет быстро отдавать 403 или 404. Будьте аккуратнее с поисковыми ботами. Официальная документация [18].
Не отключайте логи, настраивайте мониторинг, который явно вас предупредит об аномалиях в показателях. Это можно сделать быстро и недорого, и сэкономит вам время при расследованиях инцидентов. Настройку мониторинга, а также административные и организационные меры противодействия оставим за рамками этой статьи.
Автор: GraDea
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/215601
Ссылки в тексте:
[1] www.renwenqifei.com;+verifying+pingback+from+37.1.211.155: http://www.renwenqifei.com;+verifying+pingback+from+37.1.211.155
[2] 54.69.1.242;+verifying+pingback+from+37.1.211.155: http://54.69.1.242;+verifying+pingback+from+37.1.211.155
[3] www.phenomenon.net.cn;+verifying+pingback+from+37.1.211.155: http://www.phenomenon.net.cn;+verifying+pingback+from+37.1.211.155
[4] 52.19.227.86;+verifying+pingback+from+37.1.211.155: http://52.19.227.86;+verifying+pingback+from+37.1.211.155
[5] 52.27.233.237;: http://52.27.233.237;
[6] www.fm.geidai.ac.jp: http://www.fm.geidai.ac.jp
[7] 52.34.12.105;: http://52.34.12.105;
[8] www.glamasia.com;+verifying+pingback+from+37.1.211.155: http://www.glamasia.com;+verifying+pingback+from+37.1.211.155
[9] wpwewill.help;+verifying+pingback+from+37.1.211.155: http://wpwewill.help;+verifying+pingback+from+37.1.211.155
[10] hypergridder.com;+verifying+pingback+from+37.1.211.155: http://hypergridder.com;+verifying+pingback+from+37.1.211.155
[11] pjtpartners.com;+verifying+pingback+from+37.1.211.155: http://pjtpartners.com;+verifying+pingback+from+37.1.211.155
[12] creatorinitiative.com;+verifying+pingback+from+37.1.211.155: http://creatorinitiative.com;+verifying+pingback+from+37.1.211.155
[13] remote.wisys.com/website: http://remote.wisys.com/website
[14] nuevavista.am: http://nuevavista.am
[15] статья: https://habrahabr.ru/post/215543/
[16] Более подробно об установке и настройке.: https://www.iis.net/configreference/system.webserver/security/requestfiltering
[17] официальной документации: https://www.iis.net/configreference/system.webserver/security/ipsecurity
[18] Официальная документация: https://www.iis.net/downloads/microsoft/dynamic-ip-restrictions
[19] Источник: https://habrahabr.ru/post/316550/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.