Мы проходим через крупномасштабную DDOS-атаку, но это не типичная бот-сеть, с которой может справиться Cisco Guard, это атака BitTorrent. Для меня это в новинку, поэтому я не знаю, как это остановить.
Вот статистика, которую IIS обрабатывает от 40 до 100 запросов в секунду от клиентов BitTorrent. У нас есть около 20% пользовательских агентов, но остальные 75% пусты.
Мы хотим заблокировать пустые пользовательские агенты на уровне сервера.
Какой подход лучше?
Если фильтрация запросов не справляется с этим, вы можете попробовать 'Перезапись URL'бесплатное дополнение от Microsoft и в любом случае очень полезное.
Создайте такое правило:
<rule name="NoUserAgent" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="^$" />
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="You did not present a User-Agent header which is required for this site" />
</rule>
Во время быстрого теста это сработало как для пустого User-Agent, так и для отсутствующего.
Я использую регулярное выражение «^ $», которое действительно только для пустой строки.
Вы также можете вернуть 404 или что угодно, а не 403.
Если вы используете для этого графический интерфейс IIS вместо web.cofig, вы можете использовать предоставленные шаблоны IIS для достижения того же результата:
Войти в IIS -> Перезапись URL -> Добавить правило (я) ... -> Выбрать "Запросить блокировку"из шаблонов. Затем просто введите свое правило, используя доступные раскрывающиеся меню:
Правило будет таким же, как и другие ответы, данные с оговоркой, что вы не можете его переименовать. Кроме того, в моем примере используется запрос на прерывание, а не настраиваемый ответ, хотя вы можете выбрать другие ответы 40X из шаблона, если хотите.
40-100 запросов в секунду - это не DoS.
Тем не менее, если вы хотите заблокировать определенный пользовательский агент, вы можете использовать IIS <filteringRules>
указание сделать это (см. http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/filteringRules).
Работа приведенного ниже примера не гарантируется (у меня нет систем IIS для тестирования):
<requestFiltering>
<filteringRules>
<filteringRule name="Block bad UAs" scanUrl="false" scanQueryString="false" scanAllRaw="false">
<scanHeaders>
<add requestHeader="User-agent" />
</scanHeaders>
<appliesTo>
</appliesTo>
<denyStrings>
<add string="bad-user-agent" />
<add string="" />
</denyStrings>
</filteringRule>
</filteringRules>
</requestFiltering>