Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Введение
Модуль динамических ограничений IP-адресов (DIPR) для IIS 7.0 и выше обеспечивает защиту от атак типа "отказ в обслуживании" и атак на веб-серверы и веб-сайты. Чтобы обеспечить эту защиту, модуль временно блокирует IP-адреса HTTP-клиентов, которые делают необычно большое количество одновременных запросов или делают большое количество запросов в течение небольшого периода времени.
Когда следует использовать ограничения динамических IP-адресов?
Если необходимо разрешить или запретить доступ к веб-сайту (или разрешить все, но при этом регистрировать выполнение условий) на основе количества одновременных запросов, исходящих из IP-адреса, или на основе количества запросов от IP-адреса в течение определенного периода времени.
Функции
Модуль динамических ограничений IP-адресов включает следующие ключевые функции:
- Блокировка IP-адресов на основе числа одновременных запросов. Если HTTP-клиент превышает допустимое число одновременных запросов, IP-адрес клиента временно блокируется.
- Блокировка IP-адреса на основе количества запросов за определенный период времени. Если HTTP-клиент превышает количество запросов, сделанных через указанный интервал времени, IP-адрес клиента временно блокируется.
- Список разрешенных IP-адресов, которые не будут заблокированы. Вы можете добавить список IP-адресов клиентов, которые вы хотите исключить из блокировки модуля независимо от другой конфигурации.
- Различные действия запрета — вы можете указать, какой ответ возвращается HTTP-клиенту, если его IP-адрес заблокирован. Модуль может возвращать коды состояния 403 и 404 или просто завершить HTTP-подключение и не возвращать никакой ответ.
- Поддержка веб-серверов за прокси-сервером. Если веб-сервер находится за прокси-сервером, можно настроить модуль для использования IP-адреса клиента из заголовка X-Forwarded-For.
- IPv6 — модуль обеспечивает полную поддержку адресов IPv6.
Установка модуля DIPR
Чтобы установить ограничения динамических IP-адресов, можно попробовать следующие методы.
На экране "Выбор служб ролей" перейдите к веб-серверу (IIS) > Веб-сервер > Безопасность. Отметьте флажок "Ограничения IP и домена" и нажмите "Далее", чтобы продолжить.
Предпосылки
У вас должна быть одна из следующих операционных систем.
- Windows Server 2008
- Windows Vista с пакетом обновления 1 (SP1)
- Windows Server 2008 R2
- Windows 7
Удаление бета-версии модуля DIPR
Если вы используете первыйбета-выпуск модуля DIPR, необходимо удалить его перед установкой предварительного выпуска, иначе возникнет ошибка, и установка не удастся. Перед удалением бета-версии убедитесь, что вы создайте резервную копию конфигурации.
Если вы используете релиз Beta 2 модуля DIPR, можно обновить непосредственно до финальной версии. Параметры конфигурации будут сохранены.
Доступ и настройка динамических ограничений IP-адресов
Примечание. При настройке ограничений IP-адресов необходимо учитывать как уровень IIS, так и конфигурацию уровня сайта, так как уровень сайта переопределяет уровень IIS (это обычное поведение IIS и не зависит от функции ограничений IP- адресов).
Динамические ограничения IP-адресов можно настроить с помощью диспетчера IIS, API конфигурации IIS или с помощью appcmd программы командной строки.
Чтобы получить доступ к параметрам динамического ограничения IP-адресов в диспетчере IIS, выполните следующие действия.
- Открытие диспетчера IIS
- В представлении дерева слева выберите узел сервера, если вы хотите настроить параметры на уровне сервера или выбрать узел сайта для настройки параметров для конкретного сайта.
- В представлении функций щелкните "Динамические ОГРАНИЧЕНИЯ IP-адресов"
Пример 1. Блокировка IP-адреса на основе количества одновременных запросов с помощью appcmd
При использовании этого параметра сервер позволит любому IP-адресу клиента сделать только настраиваемое число одновременных запросов. Любые дополнительные запросы, превышающие указанное ограничение, будут отклонены.
Простой способ проверить эту функцию — задать максимальное количество одновременных запросов 2, выполнив команду appcmd:
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity
/denyByConcurrentRequests.enabled:"True"
/denyByConcurrentRequests.maxConcurrentRequests:"2"
/commit:apphost
Это важно
При настройке числа одновременных запросов для реального веб-приложения тщательно проверьте ограничение, которое вы выбираете, чтобы убедиться, что допустимые HTTP-клиенты не блокируются. Это особенно важно для расширенных интернет-приложений, имеющих веб-страницы с поддержкой AJAX и обслуживающих содержимое мультимедиа.
Пример 2. Блокировка IP-адресов на основе количества запросов с течением времени с помощью appcmd
При использовании этого параметра сервер отклонит запросы от IP-адреса любого КЛИЕНТА HTTP, который делает более чем настраиваемое количество запросов за период времени. IP-адрес остается заблокированным до тех пор, пока количество запросов в течение определенного периода времени не будет превышать настроенное ограничение.
Чтобы проверить эту функцию, установите для параметра "Максимальное число запросов" значение 5 и "Период времени" значение 5000, выполнив команду appcmd:
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"5" /denyByRequestRate.requestIntervalInMilliseconds:"5000" /commit:apphost
Откройте веб-браузер, запрос http://localhost/welcome.png и нажмите клавишу F5, чтобы непрерывно обновить страницу. Это приведет к созданию более 5 запросов в течение 5 секунд, и сервер ответит кодом состояния 403 — доступ запрещён.
Если вы ожидаете еще 5 секунд, когда все предыдущие запросы выполнены, а затем выполните запрос, запрос будет выполнен успешно.
Это важно
При настройке количества разрешенных запросов с течением времени для реального веб-приложения тщательно проверьте выбранные ограничения, чтобы убедиться, что допустимые HTTP-клиенты не блокируются. Это особенно важно для расширенных интернет-приложений, имеющих веб-страницы с поддержкой AJAX и обслуживающих содержимое мультимедиа.
Пример 3. Блокировка IP-адреса на основе количества одновременных запросов с помощью пользовательского интерфейса
На моем уровне IIS у меня есть следующая конфигурация:
В разделе "Изменение параметров компонентов":
В разделе "Изменение параметров динамического ограничения...":
На моем уровне сайта у меня есть следующая конфигурация:
Это означает, что на сайт будет разрешено до 2 одновременных запросов (из-за числа 2, указанного выше), а код состояния 403 будет получен для любого другого параллельного запроса (из-за действия "Запрещено", настроенного выше), как можно увидеть в средствах разработчика браузера (я щелкнул "Отключить кэш", чтобы избежать кэширования на стороне браузера):
Примечание. Возможно, вы задаетесь вопросом, почему вы видите 3 разрешенных запроса, а не только два. Это потому, что первые два запроса были открыты одновременно, и когда они завершились, оказалось, что третий запрос достиг приложения. Таким образом, на тот момент третий запрос был единственным, то есть только 1 одновременный запрос.
Действие "Разрешить", настроенное выше, означает, что любой IP-адрес подходит для отправки запросов и что правила, настроенные для определения условий, при которых разрешенным IP-адресам будет отказано в доступе.
Как вы заметили, конфигурация уровня сайта "Разрешить" переопределяет уровень IIS "Запретить", а конфигурация уровня сайта "Запрещено" переопределяет конфигурацию уровня IIS "Not Found", и поэтому код состояния 403 был отправлен вместо 404.
Если я однако изменю уровень сайта "Разрешить" на "Запретить", все IP-адреса будут отказано в доступе независимо от того, сделали ли они 2 одновременных запроса или в противном случае:
Пример 4. Блокировка IP-адреса на основе числа одновременных запросов и количества запросов с течением времени с помощью пользовательского интерфейса
Теперь давайте изменим конфигурацию из примера 3 на уровне сайта. Уровень IIS совпадает с уровнем ранее в примере 3.
Хотя конфигурация уровня сайта теперь:
Теперь при выполнении запроса из браузера:
Каждая цветная строка (выделенный пример) представляет время существования одного запроса. Правило задает два условия, как можно увидеть. Это означает, что, как только выполнится любое условие, будет применен отказ. Правило разрешает только два запроса в пределах 200 мс, и любые дальнейшие запросы в течение этого периода времени будут отклонены. Как видно, третий запрос был активирован почти через 20 мс после первого, то есть теперь у нас более двух запросов в течение 200 мс, и, следовательно, третий будет отклонён, как и четвёртый, пятый и шестой.
Лесозаготовка
Вы увидите следующую информацию в журналах IIS (как в Примере 2 выше):
2024-07-22 14:17:48 ::1 GET / - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 0 0 1
2024-07-22 14:17:48 ::1 GET /Content/css v=7n95mJcoE9tVcdjbEUwG1-urp8oL9Yf2bFpa2lb4Nq41 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 0 0 3
2024-07-22 14:17:48 ::1 GET /bundles/modernizr v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 5
2024-07-22 14:17:48 ::1 GET /bundles/jquery v=JVBM4Dk7eZ-fjWvmxvoCeVR5MAt_3YXn4K7MRdHsuR81 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 7
2024-07-22 14:17:48 ::1 GET /bundles/bootstrap v=X8gnNIYDSsAzCxLBuTaZy64Jqo9mzWM5GPsE4TJLNI1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 7
2024-07-22 14:17:48 ::1 GET /favicon.ico - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 403 502 0 0
2024-07-22 14:17:48 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 403 502 0 0
Код состояния HTTP для отклоненных запросов в этом примере будет иметь значение 403, а код вложенного состояния будет иметь значение 502. Таким образом можно определить разницу между обычным кодом состояния "Запрещено", заданным кодом приложения, и между параметром "Запрещено", установленным функцией ограничений IP-адресов IIS. Ниже описан список (кодов состояния), заданных функцией ограничения IP.
Запрет действий
Модуль можно настроить для выполнения следующих действий при запрете запросов на IP-адреса:
• Запрещено: 403 • Не авторизовано: 401 • Не найдено: 404 • Прерывание: TCP-подключение будет просто сброшено и http не будет установлено. Это также удобно в случае, если доступ к главной странице ограничен, и вы не хотите, чтобы конечный пользователь видел код вложенного состояния 502 (чтобы он не знал, что это связано с функцией ограничения IP-адресов). Вместо этого пользователь увидит .
Вот возможные (коды подстатуса) для функции ограничения IP: 501, 502.
Код подстатуса будет иметь значение 501 или 502 в зависимости от того, какое из двух условий было выполнено, и поэтому клиент был отказано в доступе: 501 —> динамическое ограничение IP-адресов: слишком много одновременных запросов было выполнено из одного IP-адреса клиента.
502 —> динамическое ограничение IP-адресов: достигнуто максимальное количество запросов с одного и того же IP-адреса клиента в течение указанного срока.
Приведенные выше коды описаны здесь: обзор кодов состояния HTTP — Службы Интернета (Internet Information Services) | Microsoft Learn
Включите режим только для ведения журнала:
Теперь в случае включения режима только для ведения журнала клиенты не будут отклонены этой функцией, то есть код состояния будет ожидаемым результатом (обычно 200, но он также зависит от приложения), и клиенты получат ожидаемый обычный ответ, однако код подстатуса, указывающий, что одно из двух условий будет выполнено в журналах IIS. Ниже приведен пример:
2024-07-28 06:57:35 ::1 GET / - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 0 0 3 2024-07-28 06:57:35 ::1 GET /bundles/modernizr v=inCVuEFe6J4Q07A0AcRsbJic_UE5MwpRMNGcOtk94TE1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 501 0 3
2024-07-28 06:57:35 ::1 GET /bundles/bootstrap v=X8gnNIYDSsAzCxLBuTaZy64JJqo9mzWM5GPsE4TJLNI1 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 502 0 8
2024-07-28 06:57:35 ::1 GET /Content/css v=7n95mJcoE9tVcdjbEUwG1-urp8oL9Yf2bFpa2lb4Nq41 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 0 0 9
2024-07-28 06:57:35 ::1 GET /bundles/jquery v=JVBM4Dk7eZ-fjWvmxvoCeVR5MAt_3YXn4K7MRdHsuR81 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 http://localhost:8090/ 200 501 0 8 2024-07-28 06:57:35 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 502 0 19
2024-07-28 06:57:35 ::1 GET /Content/bootstrap.min.css.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0+Safari/537.36+Edg/126.0.0.0 - 200 502 0 37
2024-07-28 06:57:35 ::1 GET /bundles/bootstrap.min.js.map - 8090 - ::1 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/126.0.0.0.0+Safari/537.36+Edg/126.0.0.0 - 404 502 2 0
И клиент получит это на своей стороне.
Поддержка веб-серверов за прокси-сервером
Если веб-серверы находятся за брандмауэром или прокси-компьютером, IP-адрес клиента для всех запросов может отображаться как IP-адрес прокси-сервера или сервера брандмауэра. Это помешает эффективному использованию модуля динамического IP-ограничения. Большинство таких серверов добавляют заголовок X-Forwarded-For в HTTP-запрос, содержащий IP-адрес исходного клиента. Установите флажок "Прокси-сервер" на главной странице конфигурации динамических ограничений IP-адресов, чтобы сначала проверить IP-адрес клиента в этом заголовке.