Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Шаблоны правил используются для предоставления простого способа создания одного или нескольких правил перезаписи для определенного сценария. Модуль переопределения URL-адресов 2 включает несколько шаблонов правил для некоторых распространенных сценариев использования. Помимо этого, пользовательский интерфейс модуля переопределения URL-адресов предоставляет платформу для интеграции пользовательских шаблонов правил. В этом пошаговом руководстве описано, как использовать шаблон правила обратного прокси-сервера, который входит в модуль перезаписи URL-адресов. Дополнительные сведения о настройке обратного прокси-сервера с помощью модуля переопределения URL-адресов IIS и маршрутизации запросов приложений IIS см. в обратном прокси-сервере с помощью переопределения URL-адресов версии 2 и маршрутизации запросов приложений.
Предпосылки
В этом пошаговом руководстве требуются следующие предварительные требования:
- IIS 7 или более поздней версии с включенной службой ролей ASP.NET;
- Установлен модуль переопределения URL-адресов 2.0;
- Установленная маршрутизация запросов приложений IIS.
Создание примера веб-сайта
Для простоты сценарий с обратным прокси-сервером, с которым вы будете работать в этом пошаговом руководстве, будет реализован на одном сервере. IIS "Веб-сайт 'По Умолчанию'" будет выполнять роль обратного прокси-сайта, в то время как приложение контента будет размещено на отдельных веб-сайтах IIS на том же сервере.
Чтобы создать пример веб-сайта содержимого, выполните следующие действия.
Создайте папку с именем contentsite в следующей папке:
%SystemDrive%\inetpub\ folder.Создайте веб-сайт IIS с именем "содержимое", указывающий на соответствующую папку в разделе
%SystemDrive%\inetpub\. Используйте порт 8081 для сайта.
Для создания сайтов можно использовать следующие команды:%windir%\System32\inetsrv\appcmd.exe add site /name:"contentsite" /bindings:http/*:8081: /physicalPath:"%SystemDrive%\inetpub\contentsiteСоздайте файл с именем default.aspx в следующей папке:
%SystemDrive%\inetpub\contentsiteСкопируйте следующую ASP.NET разметку, вставьте его в файл и сохраните файл как default.aspx:
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Reverse Proxy Test Application</title> </head> <body> <h1>Reverse Proxy Test Page</h1> <p>Requested URL path is <%= Request.ServerVariables["SCRIPT_NAME"] %></p> <p><a href="http://<%= Request.ServerVariables["HTTP_HOST"] + Request.ServerVariables["SCRIPT_NAME"] %>">Here</a> is the link to this page.</p> </body> </html>Чтобы убедиться, что сайт работает правильно, откройте веб-обзор и запросите следующие URL-адреса:
http://localhost:8081/default.aspx
Создание правил для входящего и исходящего трафика с помощью шаблона обратного прокси-сервера
Шаблон правила обратного прокси-сервера можно использовать для создания правила перезаписи входящего трафика, которое используется для прокси-запросов HTTP на другой сервер. При необходимости шаблон также может создать правило перезаписи для исходящего трафика, которое исправляет имена хостов в URL-адресах ссылок в HTML-ответах. В примере, описанном в этом пошаговом руководстве, имя узла прокси-сервера — localhost , а имя узла сервера контента — localhost:8081. Веб-приложение на сервере содержимого создает ссылку в HTML-ответе, использующем внутреннее имя узла, например. http://localhost:8081/default.aspx Правило исходящего трафика исправляет эту ссылку, чтобы использовать имя узла прокси-сервера, например. http://localhost/default.aspx
Чтобы создать правила с помощью шаблона правила, выполните следующие действия.
- В диспетчере IIS выберите "Веб-сайт по умолчанию" в представлении дерева слева.
- Откройте представление функции перезаписи URL-адресов.
- В представлении функций переопределения URL-адресов выберите "Добавить правила...". действие и выберите шаблон обратного прокси-сервера:
- В диалоговом окне "Добавление правил обратного прокси-сервера" введите следующее:
Имя сервера или IP-адрес, в котором будут перенаправлены HTTP-запросы: localhost:8081
Установите флажок "Переписать доменные имена ссылок в ответах HTTP" и введите:
От: localhost:8081
To: localhost
- Нажмите кнопку "ОК". Будут созданы правила для входящих и исходящих соединений.
Тестирование обратного прокси-сервера
Чтобы проверить, правильно ли работают правила перезаписи, созданные шаблоном правил, откройте веб-браузер и отправьте запрос http://localhost/default.aspx. IIS "Веб-сайт по умолчанию" получит этот запрос и перенаправит его в http://localhost:8081/default.aspx соответствии с правилом входящего переопределения. Когда HTTP-ответ возвращается с сайта contentsite, правило перезаписи исходящих данных перезаписывает URL-адрес ссылки в HTML, чтобы изменить имя узла с localhost:8081 на localhost:
Использование обратного прокси-сервера ARR для Tomcat Servlets
Чтобы обеспечить многоуровневую защиту при размещении сервлетов Tomcat за обратным прокси-сервером IIS + ARR, используйте правила перезаписи URL-адресов для смягчения атак методом обхода директорий. Эти атаки часто используют несоответствия в том, как Tomcat обрабатывает параметры пути в сегментах URL-адресов, например "/.; a=b/" как описано в рекомендациях по безопасности Apache Tomcat.
Почему это важно
Tomcat интерпретирует параметры пути, основанные на точке с запятой, отлично от IIS, что может привести к неожиданному поведению при обходе. Блокировка или нормализация таких шаблонов перед обработкой модуля ARR помогает предотвратить эксплуатацию.
Если ваша цель — просто блокировать запросы, содержащие обходные попытки (например, "/.". a=b/"), используйте синтаксис подстановочного знака или регулярного выражения.
Пример правила подстановочного знака
<rule name="BlockDotDotWildcard" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*/..;*/*" />
<action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="" />
</rule>
Пример правила RegEx
<rule name="BlockDotDotRegEx" stopProcessing="true">
<match url="\/\.\.;.*\/" />
<action type="CustomResponse" statusCode="404" statusReason="Not Found" statusDescription="" />
</rule>
Важные примечания
- Тщательно протестируйте в среде полного цикла. Вам могут потребоваться дополнительные правила для закодированных или двойных шаблонов (например, %252F.%253Bfoo%252F).
- Порядок выполнения правил имеет значение: убедитесь, что правила блокировки выполняются перед правилами, связанными с прокси-сервером ARR.
- Компромисс с производительностью: RegEx предлагает гибкость, но вызывает более высокие издержки.
Расширенный сценарий: ренормализация URL-адресов
Если вы хотите удалить параметры пути и нормализовать URL-адрес, чтобы все правила URL-перезаписи применялись к нормализованному URL-адресу, потребуется обратное перенаправление. Например: входные данные:
/abc/..;boo/xyz/ Перенаправлено на: /abc/../xyz/ → нормализовано → /xyz/ повторно вычисляется правилами перезаписи.
Пример правила
<rule name="RenormalizeURL_SSL" stopProcessing="true">
<match url="^([^;]*)(;[^/]*)(/.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="ON" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}{R:3}" redirectType="Found" />
</rule>
<rule name="RenormalizeURL" stopProcessing="true">
<match url="^([^;]*)(;[^/]*)(/.*)$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTPS}" pattern="OFF" />
</conditions>
<action type="Redirect" url="http://{HTTP_HOST}/{R:1}{R:3}" redirectType="Found" />
</rule>
Когда RegEx становится слишком сложным
В очень сложных случаях рекомендуется написать кастомизированного провайдера переадресации URL.
Сводка
В этом пошаговом руководстве вы узнали, как использовать шаблон правила обратного прокси-сервера для создания правил перезаписи, реализующих простую конфигурацию обратного прокси-сервера в IIS. Используйте этот шаблон правила в качестве отправной точки для создания базовых правил. Эти правила можно изменить позже, чтобы решить конкретные требования к маршрутизации и перезаписи веб-приложения.