Apache 如何使用 htaccess 进行 IP 限制

2023-11-06原创,版权声明见本文尾部

【双12】主会场 低至1折

Apache 服务器或虚拟机,有时候为了防止网站被垃圾留言、镜像、刷流量等恶意骚扰,需要通过 htaccess 来屏蔽一些 IP、IP 段禁止访问。

htaccess 屏蔽 IP 有两种方法

第一种方案:

Order Deny, Allow
Deny from x.x.x.x #屏蔽某个IP:x.x.x.x
Deny from x.x.x   #屏蔽IP段:x.x.x.1 ~ x.x.x.255 之间的IP
Deny from x.x     #屏蔽IP段:以x.x开头的IP

这种方法确实可以实现屏蔽的效果,但如果 IP 被转化或者被伪装,他就失效了。

例如网站使用了 WAF 防火墙,这种屏蔽 IP 的方法就会失效,不信你可以试一下,这种情况可以使用第二种方案 。

第二种方案:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-For} (x.x.x.x) [NC]
RewriteRule (.*) - [F]
</IfModule>

此时在访问,访问已被禁止了。虽然用了 waf 前端防火墙改变了访客IP,当访问依然被禁止了,也就是说此时屏蔽的是真实IP,而不是访客IP。

屏蔽多个 IP 的配置方法:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-For} (x1.x1.x1.x1|x2.x2.x2.*|x3.x3.*.*) [NC]
RewriteRule (.*) - [F]
</IfModule>

配置说明:

在配置中既包含了真实访客 IP,不管 IP 有没有被伪装都可以获取到真实的 IP ,所以实际屏蔽 IP 效果这种方法比第一种更好。

RewriteCond %{HTTP:X-Forwarded-For}

简单地阻止请求(403禁止)并且不重定向:

RewriteRule ^ - [F]

如果您有一个自定义 403 ErrorDocument,则需要创建一个异常,将上方的阻止请求修改为以下配置。

RewriteRule !^403\.html$ /403.html [R,L]

希望本文可以对你解决问题有所帮助。

收藏

提示信息