我正在尝试将Apache中的RewriteMap指令用于“白名单”(仅允许)某些IP范围和特定IP的混合。这对我来说很棘手的是白名单将包含大量IP的混合,例如131.132。*(或在CIDR表示法中它将是131.132.0.0/16)以及同一列表中的特定IP。我的理解是你不能在mod_rewrite中使用CIDR表示法,因为RewriteConds只是进行简单的文本字符串/字符比较(这是正确的吗?)。到目前为止,这是我为RewriteMap指令提出的,但不确定它是否会起作用。您是否认为以下内容适用于131.132中的IP白名单。。(131.132.0.0/16)...即启动范围131.132.0.0到结束范围131.132.255.255)和范围121.122 .123。*(即启动范围121.122.123.0到结束范围121.122.123.255)和特定IP 111.112.113.114,并将阻止所有其他IP?此外,最后三个RewriteCond行中的后向引用(%1,%2,%3,%4)(注意RewriteCond行是“OR”)是否正常工作,返回所有引用的第一个RewriteCond行?
RewriteMap ipslist txt:"/path/to/whitelist.txt"
RewriteCond %{REMOTE_ADDR} ^(\d+)\.(\d+)\.(\d+)\.(\d+)$
RewriteCond ${ipslist:%1.%2.%3.%4|block} ^block$ [OR]
RewriteCond ${ipslist:%1.%2.%3.*|block} ^block$ [OR]
RewriteCond ${ipslist:%1.%2.*.*|block} ^block$
RewriteRule (.*) - [F]
####
#### in whitelist.txt file
####
111.112.113.114 allow
121.122.123.* allow
131.132.*.* allow
答案 0 :(得分:0)
使用指令Require
的更简单的解决方案,这尚未经过深度测试,但似乎有效:
Require ip 10.20.30.40/27 111.112.113.114 131.132