none
IIS ARR redirect: фильтрация по IP клиента {REMOTE_ADDR}

    Вопрос

  • Добрый день,

    настраиваю правили IIS ARR redirect 301.

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

    К сожалению, я обнаружил, что IIS ARR не может работать с длинными регулярными выражениями, хотя встроенную проверку они проходят.

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

    <rule name="Block_access_to_Site_denied" enabled="false" patternSyntax="ECMAScript" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REMOTE_ADDR}" pattern="(?!^.*(^192\.168\.(\d|\d\d|[0-2][0-5][0-5])\.(\d|\d\d|[0-2][0-5][0-5])$)|(^172\.([1][6-9]|[2]\d|[3][0-1])\.(\d|\d\d|[0-2][0-5][0-5])\.(\d|\d\d|[0-2][0-5][0-5])$)|(^10\.(\d|\d\d|[0-2][0-5][0-5])\.(\d|\d\d|[0-2][0-5][0-5])\.(\d|\d\d|[0-2][0-5][0-5])$).*$)^.+" />
    <add input="{HTTP_HOST}" pattern="^example\.domaine\.com$" />
    <add input="{PATH_INFO}" pattern="^\/site$|^\/site\/.*$" />
    </conditions>
    <action type="CustomResponse" statusCode="403" statusReason="&quot;external access to Site denied&quot;" statusDescription="&quot;external access to Site denied&quot;" />
    </rule>

    Если указывать меньший диапазон IP-адресов - один октет, то правило работает.

    Скажите, пожалуйста, как корректно проверять принадлежность IP-адреса клиента к публичному диапазону?

Ответы

Все ответы