在国内做互联网,总免不了要封这个,杀那个的。这不,刚收到要封禁N个IP段的需求,而且要求的还贼急。
有如下几个方法:
1) 改业务代码,封禁逻辑放在这里 -- 放弃了,业务不得慢死!
2) 改接入机IPTABLES -- 没敢做,怕把自己给ban了,要打电话到机房重启就惨了
3) 修改接入机上的haproxy -- 幸亏peterwang提醒了一下啊
这里就讲一下如何用haproxy满足这类封禁需求。
haproxy的简要介绍如下:
HAProxy提供高可用性、负载均衡 以及基于TCP和HTTP应用的代理,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会氨3只蚱卟愦 怼?HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
更详细的信息请看:http://cn.haproxy.org/
我们需要用到的是haproxy的 acl功能,例子如下:
acl invalid_src src 0.0.0.0/7 224.0.0.0/3
acl invalid_src src_port 0:1023
acl local_dst hdr(host) -i localhost
block if invalid_src || local_dst
用acl定义一些规则,而用(block|use_backend)指定满足这些规则怎么做,我们当然选择block!
上述这段配置可以位于如下section
keyword defaults frontend listen backend
----------------------+----------+----------+---------+---------
acl - X X X
----------------------------------------------------------------
有点:
快速、高效;只需要改动一下配置文件即可,特别是应对突发事件。
缺点:
用户会得到一个403页面。不是很友好。
最好是业务端有封禁server,可以给出更友好的提示。