Dot-Net

IIS 7 - 通過負載均衡器後面的 IP 地址限制應用程序

  • May 19, 2019

我正在嘗試通過負載均衡器後面的 Web 伺服器上的 IP 地址來限制 IIS 7 中的應用程序。X-Forwarded-For 標頭由負載均衡器使用客戶端的 IP 地址設置。

在 IIS 7 中提取該 IP 地址以在我的應用程序上設置 IP 地址過濾的最佳方法是什麼?如果沒有最好的方法,我最終會使用 HTTPModule 來為我處理這個問題。

您可以使用IIS URL 重寫模組來完成此操作。

添加一個新的入站規則,其中包含檢查 IP 地址是否與 {HTTP_X_Forwarded_For} 不匹配的條件。然後,您可以設置規則以重定向、重寫或中止請求。

您可以為要列入白名單的每個 IP 地址設置一個新條件。

使用IIS URL 重寫模組來規範REMOTE_ADDR和實施 IP 限制。

使用以下配方REMOTE_ADDR將設置為真實的客戶端 IP,無論前面是否有可信的反向代理來設置HTTP_X_FORWARDED_FOR。這意味著您可以從 IIS 前面刪除反向代理,並且這些 IP 限制仍將繼續按預期工作。

歸一REMOTE_ADDRapplicationHost.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_FORREMOTE_ADDR並且REMOTE_HOST <serverVariables>僅當原始值REMOTE_ADDR與受信任的反向代理的 IP 地址匹配時。

要讓這個秘籍工作,第一個條件必須設置為匹配你的反向代理的 IP 地址:

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

HTTP_X_FORWARDED_FOR在上面的範例中,只有在以下 IP 地址之一由反向代理設置時,客戶端 IP才受信任:

10.1.1.1 or 10.1.1.2 or 10.1.1.3

這需要設置REMOTE_ADDR真正的客戶端 IP。

智慧財產權限制web.config

IP 限制可以使用站點中的IIS URL 重寫模組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始終將其設置為真實的客戶端 IP,以供以後可能引用的任何內容REMOTE_ADDR

引用自:https://stackoverflow.com/questions/6796165