按 IP 禁止并自动重定向到 HTTPS

按 IP 禁止并自动重定向到 HTTPS

我正在尝试阻止某些 IP 地址访问网站。为此,我有一个文件,ipblacklist.conf其中列出了以下格式的 IP,每个 IP 一行:

Require not ip xxx.xxx.xxx.xxx

然后httpd.config我有这个:

<Location />
   <RequireAll>
      Require all granted
      Include ipblacklist.conf
   </RequireAll>
</Location>

这工作正常;但是,我也可以https借助mod-rewrite,在 的末尾自动重定向到httpd.config

RewriteEngine On
RewriteOptions InheritDown
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

这两个功能都运行良好,但是,当我http从被禁 IP 访问页面时,它不会403立即显示错误,它会先重定向到https然后显示403。有没有办法避免将被禁 IP 重定向到https

答案1

下面的内容可能会有帮助。

在您的 httpd.conf 文件中,添加以下行来创建地图:

RewriteMap ipblacklist txt:/etc/ipblacklist.txt

修改 RewriteCond 以在重定向到 HTTPS 之前根据地图检查 IP 地址:

RewriteCond ${ipblacklist:%{REMOTE_ADDR}} !=1
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

在我提供的示例中,%{REMOTE_ADDR}用作 RewriteMap 中的参数,用于将客户端的 IP 地址与 ipblacklist.txt 文件中的禁止 IP 地址进行对比。如果在映射中找到该 IP 地址,则条件 ${ipblacklist:%{REMOTE_ADDR}} !=1 为真,请求不会重定向到 HTTPS,而是会显示 403 错误。

相关内容