IIS 7.5 限制子目录上的 IP,使用代理检测
IIS 7.5 Restrict IPs on a Subdirectory, with Proxy detection
我有一个旧的 IIS Web 服务器 (2008 R2),它托管了一些 WordPress 网站。我需要将对 WordPress(/wp-admin 目录)的登录功能的访问限制为仅几个已知的 IP 地址。使这个问题复杂化的是这个 Web 服务器位于 F5 负载平衡器之后,它覆盖了真实的客户端 IP(尽管我通过普通 XFF header 获得了真实 IP)。
据我了解,IP 地址和域限制 IIS 模块可以允许 blacklist/whitelist of a sub-directory,就像我需要的那样,但是它不够智能,无法处理 proxy/Load-Balancer 客户端 IP 转换。然后是 Dynamic IP Restrictions IIS 模块,它足够智能来处理 proxy/Load-Balancer 客户端 IP 转换,但它不能处理在子目录上创建规则(仅 website-level粒度)。
在 IIS 中是否有处理此类限制的已知方法?我确定我可以在防火墙或 L/B 处进行限制,但如果可能的话,我正在尝试在 IIS 中完成它。
看起来 URL 重写模块是满足此需求的一种相当直接的方法。类似下面的规则将完成限制网站下的某些 URL(例如,如果需要,所使用的模式只能抓取某个目录)。
<rule name="wordpress-login-restrictions" enabled="true" stopProcessing="true">
<match url="(^wp-admin)|(^wp-login.php)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_X_FORWARDED_FOR}" pattern="(^55\.55\.555\.555$)" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="404" subStatusCode="44" statusReason="File or directory not found" statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>
我有一个旧的 IIS Web 服务器 (2008 R2),它托管了一些 WordPress 网站。我需要将对 WordPress(/wp-admin 目录)的登录功能的访问限制为仅几个已知的 IP 地址。使这个问题复杂化的是这个 Web 服务器位于 F5 负载平衡器之后,它覆盖了真实的客户端 IP(尽管我通过普通 XFF header 获得了真实 IP)。
据我了解,IP 地址和域限制 IIS 模块可以允许 blacklist/whitelist of a sub-directory,就像我需要的那样,但是它不够智能,无法处理 proxy/Load-Balancer 客户端 IP 转换。然后是 Dynamic IP Restrictions IIS 模块,它足够智能来处理 proxy/Load-Balancer 客户端 IP 转换,但它不能处理在子目录上创建规则(仅 website-level粒度)。
在 IIS 中是否有处理此类限制的已知方法?我确定我可以在防火墙或 L/B 处进行限制,但如果可能的话,我正在尝试在 IIS 中完成它。
看起来 URL 重写模块是满足此需求的一种相当直接的方法。类似下面的规则将完成限制网站下的某些 URL(例如,如果需要,所使用的模式只能抓取某个目录)。
<rule name="wordpress-login-restrictions" enabled="true" stopProcessing="true">
<match url="(^wp-admin)|(^wp-login.php)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_X_FORWARDED_FOR}" pattern="(^55\.55\.555\.555$)" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="404" subStatusCode="44" statusReason="File or directory not found" statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>