我正在尝试阻止某些 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 错误。