Apache允许/拒绝IP正则表达式

时间:2012-01-09 05:59:32

标签: regex apache http-headers ip rewrite

我有一个有趣的问题。我的公司正在为客户端托管一个小型应用服务器,他们希望限制只访问少量IP。客户是一家拥有多个部门的大型公司,每个部门都有自己的网络结构。

我不会详细介绍,但由于我公司的Web服务器内部结构,我们不能在Apache中使用传统的allow,deny语法。我们有负载均衡器,它们转发到Web服务器,然后转发给应用服务器本身。相反,我们在Apache配置中使用类似下面的内容:

RewriteCond %{HTTP:X-Forwarded-For} !^213.212.45.54

我们使用X-Forwarded-For标头来匹配外部IP。问题是我们客户的一个部门(称为部门A)的Internet设置是通过内部代理。他们的内部代理将每个用户的工作站IP 转发到我们的Web服务器。这意味着这些用户的X-Forwarded-For标头看起来像这样:

10.123.16.23, 213.212.45.54, 172.20.162.2

10地址是其网络中每个用户的工作站IP,213是该部门的WAN IP,172是我公司的负载均衡器。

我的公司已确认,如果我们将用户的工作站IP添加到Apache配置,他们就可以毫无问题地访问该页面。但是,添加每一个IP都会很乏味。

有没有办法告诉Apache只关注使用正则表达式的中间IP(WAN IP)?或者有更好的方法来配置Apache吗?

1 个答案:

答案 0 :(得分:0)

我没有对此进行过测试,但您可以构建一个在该字段中的任何位置搜索IP字符串的正则表达式。你的正则表达式中的第一个^意味着它必须匹配字符串的开头,这不是这里的情况。

这样简单的事情可以起作用:

RewriteCond %{HTTP:X-Forwarded-For} !213\.212\.45\.54

在点前面需要反斜杠,否则就是。匹配任何字符的任何数字,包括不匹配,它相当于通配符语法中的*。

像这样,如果在X-Forwarded-For标头中找到字符串213.212.45.54,则正则表达式将匹配。