Apache nega do intervalo do CIDR, mas permite do IP dentro desse intervalo

2

Estou usando uma longa lista negra do CIDR para bloquear vários países de um site, mas preciso permitir endereços IP específicos nos intervalos do CIDR bloqueados. Aqui está um trecho do meu arquivo conf (esta é a ordem que estou tentando atualmente, embora eu tenha tentado mover as linhas "allow" acima das linhas "deny"):

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

A lista negra funciona bem, mas as linhas "permitir" não são respeitadas, quer eu as coloque acima da seção "negar" ou abaixo dela. Existe alguma outra configuração que eu precise para que isso funcione? A documentação do Apache levou-me a acreditar que "permitir" deveria vir depois de "negar", mas não parecia responder diretamente a essa pergunta de qualquer forma.

    
por Chase 12.04.2011 / 09:47

2 respostas

6

A seção do manual do Apache em mod_authz_host é instrutiva aqui. A ordem de suas declarações de permissão e negação não importa. Com order allow,deny , você deve corresponder a pelo menos uma permissão e nenhuma diretiva de negação para que sua solicitação seja aceita. Eu acho que você quer order deny,allow .

    
por 12.04.2011 / 10:07
1

O Apache primeiro processa todas as diretivas Negar e Permitir. Em seguida, funciona através das regras de correspondência baseadas na declaração Order - a correspondência última vence. Isso significa que sua regra deny from 83.140.0.0/16 será correspondida após sua regra allow from 83.140.19.38 e você terá o acesso negado. Para resolver isso, altere o pedido para Order Deny,Allow .

    
por 12.04.2011 / 10:15