Buckminster
(usa Debian)
Enviado em 09/10/2013 - 20:43h
mrjeday escreveu:
Como eu poderia criar uma regra de exceção para ip ou iprange na seguinte regra:
iptables -I FORWARD -m string --algo bm --string "facebook.com" -j DROP
?
Deixa eu tentar expor o motivo, antes que me perguntem...
Tenho uma rede com 70 computadores gerenciados por um servidor debian com firewall+squid implementados e rodando perfeitamente.
Estava com o problema do proxy transparente não gerenciar a porta 443, testei utilizando um certificado próprio, consegui mas algum tempo de depois tive problemas. Descartado desde então.
Migrar para proxy não transparente fora de questão.
Então bloqueei o facebook da forma citada acima, mas agora preciso criar regras de exceção a esta regra.
Possuo uma rede classe B subnetada em 10 laboratórios.
As vezes tenho a seguinte situação: Laboratório 1 está liberado o acesso a internet, mas o Laboratório 2 está bloqueado. Fiz isso com o squid, perfeito. Mas preciso agora que ao liberar internet para um determinado laboratório ele também libere o facebook. E quando bloquear o acesso a este laboratório ele bloqueie o facebook.
Pensei em algo como uma ! $variável de exceção a regra, mas não consegui implementar.
===============
Galera já tentei várias regras, até já tentei criar uma regra de excessão, mas até agora nada.
Ninguém tem alguma idéia aí?
Agradeço!
Coloque esta regra antes da regra de bloqueio do facebook:
iptables -A FORWARD -m iprange --src-range 172.16.0.100-172.16.0.120 -j ACCEPT
Mas preste atenção, caso você queira algum bloqueio para esse range deverá colocar a(s) regra(s) antes dela.
Ou crie algo assim:
IP_RANGE="172.16.0.100-172.16.0.120 192.168.1.2-192.168.1.100" << aqui coloque o máximo de 10 ranges. Coloquei dois como exemplo.
iptables -N REGRA << aqui estamos criando uma chain chamada REGRA, pode colocar o nome que quiser. Lembrando que chains criadas pelo usuário não entram nas políticas padrões.
for libs in $IP_RANGE; do
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range $libs --dport 443 -j REGRA
iptables -I FORWARD -m tcp -p tcp -m iprange --dst-range $libs --dport 80 -j REGRA
done
iptables -A REGRA -j ACCEPT
Lembrando que -I insere a regra no topo da chain e -A insere a regra na sequência que ela for colocada no script. Ou seja, com -I a última regra colocada no script será a primeira a ser executada, com -A a última regra colocada é a última a ser executada.
Isso acontece porque o Iptables (bem como o Squid) lê as regras de cima para baixo no script.
Mas veja bem, isso acontece dentro de cada chain, por exemplo, uma regra na chain INPUT colocada antes ou depois de uma regra da chain FORWARD só influenciará uma com a outra se as duas tiverem conflito de portas, IPs, etc, mas a ordem de colocação delas uma em relação à outra não influencia para e execução delas no script.
E veja isto:
http://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras/
Página 2:
iprange :: Combina um determinado intervalo arbitrário de endereços IP:
[!] --src-range from[-to] :: Combina IP de origem no intervalo especificado.
[!] --dst-range from[-to] :: Combina o IP de destino com o intervalo especificado.