Назад | Перейти на главную страницу

Как заблокировать пустые / пустые пользовательские агенты в IIS 7.5

Мы проходим через крупномасштабную 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>