Na minha rede tenho um servidor com proxy que as máquinas cliente
usam para acessar Internet. Nesse mesmo servidor tive que instalar
o Apache para rodar algumas aplicações na rede interna. Porém
precisava que somente algumas máquinas conseguissem acessar o
servidor pelo Apache, sem prejudicar o acesso das demais à Internet.
Na verdade a saída é bem simples. Mesmo que a máquina cliente acesse
uma página da rede interna, essa requisição passa pelo proxy. Então a
solução é controlar isso pelas próprias ACLs do proxy, nada de firewall.
Então peguemos um exemplo: digamos que nosso servidor se chame galadriel,
seu ip seja 192.168.0.1 e queremos que apenas a máquina com ip 192.168.0.10
tenha acesso às páginas do servidor da rede interna. Sem o controle desejado,
quando o usuário digita o nome do servidor no browser, isso o leva direto
às páginas do Apache.
No squid.conf criamos então uma ACL chamada "palavra" referente ao
nome do servidor e, em seguida, uma outra ACL chamada "liberado"
referente ao nome da máquina que deve ter acesso ao servidor:
acl palavra url_regex -i galadriel
acl liberado src 192.168.0.10/32
Depois tratamos das permissões:
http_access allow palavra liberado # permite o acesso apenas à maquina especificada
http_access deny palavra # nega acesso para toda rede
Parece estranha a ordem das tags, mas é assim mesmo. O Squid lê
isso tudo de baixo para cima, então primeiro ele vai negar pra rede
inteira e depois liberar para a especificada.
No meu caso, precisava dar permissão para mais de uma máquina, então
bastou criar mais uma ACL "liberado" logo abaixo da primeira e assim por
diante, para quantas máquinas mais forem necessárias:
acl liberado src 192.168.0.10/32
acl liberado src 192.168.0.1/32
acl liberado src 192.168.0.8/32
Você pode optar por utilizar faixas de ip também. Por exemplo, vamos
liberar para todas máquinas entre 192.168.0.2 e 192.168.0.15:
acl liberado src 192.168.0.2-192.168.0.15/32
Uma dica: dessa forma bloqueamos o acesso caso o usuário digite o nome
do servidor no browser, mas e se ele digitar o ip do servidor? O que
acontece? O que acontece é que ele vai acessar normalmente, pois estamos
bloqueando o nome do servidor e não o ip dele. Simples, basta criar mais
uma ACL "palavra" logo abaixo da primeira, porém com o ip do servidor ao
invés do nome dele:
acl palavra url_regex -i 192.168.0.17