apache服务器或虚拟机,有时候为了防止网站被垃圾留言、镜像、刷流量等恶意骚扰,需要通过htaccess来屏蔽一些IP、IP段禁止访问。
htaccess 屏蔽ip有两种方法
第一种方法:
RewriteEngine on RewriteBase / Order Deny,Allow Deny from 59.42.239.150 ##屏蔽某个ip:59.42.239.150 Deny from 59.42.239 ##屏蔽IP段:59.42.239.1~59.42.239.255 之间的ip Deny from 59.42 #屏蔽IP段:以59.42开头的ip
这种方法确实可以实现屏蔽的效果,但如果ip被转化或者被伪装,他就失效了。
例如网站使用了万网的 waf 前端防火墙,这种屏蔽IP的方法就会失效,不相信的话可以查看网站日志,开启 waf前端防火墙后查一下,网站日志中记录的 IP 是不是真实的访问 IP 。
上图是一台开启了 waf 前端防火墙的服务器,使用了第一种屏蔽IP的方法,但ip屏蔽并没有生效,为什么会失效呢?从图中可以看到访客 IP 和实际 IP 并不一致,而 Deny 阻止的是访客 IP,所以才会导致屏蔽功能失效。那有什么更好的屏蔽IP的方法吗?请看第二种方法。
RewriteEngine on RewriteBase / Order Deny,Allow Deny from 59.42.239.150
第二种方法:
RewriteEngine on <IfModule mod_rewrite.c> RewriteCond %{http:X-Forwarded-For} (59.42.239.150) [NC] RewriteRule (.*) - [F] </IfModule>
在来看访问结果:
此时在访问,访问已被禁止了。虽然用了 waf 前端防火墙改变了访客IP,当访问依然被禁止了,也就是说此时屏蔽的是真实IP,而不是访客IP。
下面在来看看第二种方法的配置:
RewriteCond %{http:X-Forwarded-For}
在配置中既包含了真实访客 IP ,不管IP有没有被伪装都可以获取到真实的IP ,所以实际屏蔽IP效果这种方法比第一种更好。
第二种方法屏蔽IP段以及屏蔽多个ip的配置方法:
RewriteEngine on <IfModule mod_rewrite.c> RewriteCond %{http:X-Forwarded-For} (59.42.239.150|65.8.157.*|61.214.*.*) [NC] RewriteRule (.*) - [F] </IfModule>