我正在使用一个较长的 CIDR 黑名单来阻止多个国家/地区访问某个网站,但我需要允许被阻止的 CIDR 范围内的特定 IP 地址。以下是我的 conf 文件的摘录(这是我当前尝试的顺序,尽管我也尝试过将“允许”行移到“拒绝”行上方):
order allow,deny
deny from 27.116.56.0/22
deny from 58.147.128.0/19
deny from 61.5.192.0/20
deny from 83.140.0.0/16
# ...
allow from 83.140.19.38
黑名单工作正常,但无论我将“允许”行放在“拒绝”部分上方还是下方,都不会被接受。是否需要进行其他配置才能使其正常工作?Apache 文档让我相信“允许”应该位于“拒绝”之后,但无论如何它似乎都没有直接回答这个问题。
答案1
Apache 手册中有关 mod_authz_host 的部分在这里很有启发。允许和拒绝语句的顺序无关紧要。使用order allow,deny
,您必须匹配至少一个允许和不拒绝指令才能接受您的请求。我认为你想要order deny,allow
。
答案2
Apache 首先处理所有 Deny 和所有 Allow 指令。然后根据 Order 语句对它们进行匹配规则处理 -最后的匹配获胜。这意味着您的deny from 83.140.0.0/16
规则将匹配后您的allow from 83.140.19.38
规则,您被拒绝访问。要解决此问题,请将顺序更改为Order Deny,Allow
。