IIS 7 - ограничение приложения по IP-адресу за балансировщиком нагрузки - PullRequest
12 голосов
/ 23 июля 2011

Я пытаюсь ограничить приложение в IIS 7 по IP-адресу на моем веб-сервере за балансировщиком нагрузки.Заголовок X-Forwarded-For устанавливается балансировщиком нагрузки с IP-адресом клиента.

Каков наилучший способ извлечь этот IP-адрес в IIS 7 для настройки фильтрации IP-адресов в моем приложении?Если нет лучшего способа, я использую HTTPModule для этого.

Ответы [ 3 ]

6 голосов
/ 18 апреля 2016

Использование модуля перезаписи URL IIS для нормализации REMOTE_ADDR и реализации ограничений IP.

При следующем рецепте REMOTE_ADDR будет установлен на real Client-IP независимо от того, существует ли доверенный обратный прокси-сервер для установки HTTP_X_FORWARDED_FOR.Это означает, что вы можете удалить обратный прокси-сервер перед IIS, и эти ограничения IP-адресов будут продолжать работать, как и ожидалось.

Нормализовать REMOTE_ADDR в applicationHost.config

Установите это в глобальномIIS applicationHost.config:

<rewrite>
    <allowedServerVariables>
        <add name="REMOTE_ADDR" />
        <add name="REMOTE_HOST" />
    </allowedServerVariables>
    <globalRules>
        <rule name="Remote" patternSyntax="ECMAScript">
            <match url=".*" ignoreCase="false" />
            <conditions>
                <add input="{REMOTE_ADDR}" pattern="^10\.1\.1\.[123]$" ignoreCase="false" />
                <add input="{HTTP_X_FORWARDED_FOR}" pattern="\d+\.\d+\.\d+\.\d+$" ignoreCase="false" />
            </conditions>
            <serverVariables>
                <set name="REMOTE_ADDR" value="{C:0}" />
                <set name="REMOTE_HOST" value="{C:0}" />
            </serverVariables>
            <action type="None" />
        </rule>
    </globalRules>
</rewrite>

Приведенный выше рецепт копирует последний найденный IP-адрес в HTTP_X_FORWARDED_FOR в REMOTE_ADDR и REMOTE_HOST <serverVariables>, только если исходное значение в REMOTE_ADDR соответствуетIP-адрес доверенного обратного прокси-сервера.

Чтобы этот рецепт работал, должно быть установлено первое условие, соответствующее IP-адресу (ам) обратного прокси-сервера:

<add input="{REMOTE_ADDR}" pattern="^10\.1\.1\.[123]$" ignoreCase="false" />

В примеревыше, IP-адрес клиента в HTTP_X_FORWARDED_FOR является доверенным, только если он задан обратным прокси-сервером на одном из следующих IP-адресов:

10.1.1.1 or 10.1.1.2 or 10.1.1.3

, который заботится о настройке REMOTE_ADDR в real Client-IP.

IP-ограничения в web.config

IP-ограничения можно установить с помощью IIS URL Rewrite в сайте web.config, используя этот рецепт:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="IP Restricted" patternSyntax="ECMAScript" stopProcessing="true">
                <match url=".*" ignoreCase="false" />
                <conditions>
                    <add input="{REMOTE_ADDR}" pattern="^(127\.|10\.20\.74\.|10\.25\.182\.|10\.64\.105\.10)" ignoreCase="false" negate="true" />
                </conditions>
                <action type="Rewrite" url="/403.html" appendQueryString="false" logRewrittenUrl="true" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

Измените pattern= так, чтобы он совпадал только с IP-адресами или блокировал вас.нужно впустить.

Измените <action /> на все необходимое.

Поскольку рецепт web.config выше фильтрует стандартную переменную REMOTE_ADDR, он работает с HTTP_X_FORWARDED_FOR и без него,Рецепт в applicationHost.config <rewrite> <globalRules> гарантирует, что REMOTE_ADDR всегда будет установлен в real Client-IP для всего, что позже может ссылаться на REMOTE_ADDR.

5 голосов
/ 25 июля 2011

Для этого можно использовать модуль перезаписи URL-адреса IIS .

Добавить новое правило входящих событий с условиями, которые проверяют, не совпадает ли IP-адрес {HTTP_X_Forwarded_For}.Затем вы можете установить правило для перенаправления, перезаписи или отмены запроса.

Вы можете установить новое условие для каждого IP-адреса, который вы хотите добавить в белый список.

1 голос
/ 19 мая 2019

IIS 7 и более поздние версии включают модуль Dynamic IP Restrictions , который поддерживает фильтрацию клиентских запросов по заголовку X-Forwarded-For, который добавляется к запросу при использовании балансировщика нагрузки AWS :

Поддержка веб-серверов за прокси-сервером - если ваш веб-сервер находится за прокси-сервером, вы можете настроить модуль на использование IP-адреса клиента из заголовка X-Forwarded-For.

Вы можете включить поддержку режима прокси , установив флажок «Прокси» на странице конфигурации модуля, а затем написать правила, разрешающие / запрещающие диапазоны IP / CIDR через модуль.

...