Criar regra de exceção no iptables

1. Criar regra de exceção no iptables

Victor Figueira
mrjeday

(usa Debian)

Enviado em 23/02/2013 - 11:38h

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!


  


2. Re: Criar regra de exceção no iptables

Marcelo Corrêa
exercitobr

(usa Debian)

Enviado em 23/02/2013 - 12:24h

"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."

Essa situação que você citou acontece por horário ou a pedido?
Se for a pedido, perde o sentido de ficar bloqueando acesso... esse é meu ponto de vista.
Agora se for por horário, aí tudo bem.
Pergunto isso, pois sou chato quando alguém pede pra bloquear algo, pois vou quebrar a cabeça pra bloquear, aí o infeliz vem e pede pra desbloquear... só matando mesmo!
rsrsrrsrsr



3. Re: Criar regra de exceção no iptables

Victor Figueira
mrjeday

(usa Debian)

Enviado em 23/02/2013 - 14:07h

É por pedido, exatamente por isso tenho que criar uma forma de o iptables se comunicar com minha acl de liberação/bloqueio.

Pensei em algo como:

Tenho uma acl com o iprange de cada laboratório.

Exemplo: 172.16.0.100-172.16.0.120

Para esta acl chamos de LAB1 e toda vez que quero liberar ou bloquear basta alterar o deny por allow e vice versa.
Porém, o iptables continua bloqueando o facebook independente de minha acl está liberando ou bloqueando a internet.

Seria uma regra do iptables ! (com exceção) $liberados.

Essa variável liberados que ta fod@ fazer. Queria ao menos o "como fazer" para adicionar tal regra, para relacionar o squid e iptables me viro depois e posto aqui o resultado.

Ou se alguém tiver uma outra idéia de como implementar tal bloqueio, mas com outra regra agradeço.

A liberação do acesso feito pelo squid é feito por secretárias que trabalham aqui via webmin. Daí a necessidade de relacionar.

Com relação ao seu ponto de vista até entendo, mas como temos 10 laboratórios. Imagine uma aula de windows ou word, por exemplo, tu querendo explicar um assunto e o aluno acessando o facebook pois ele não tá nem aí. A internet está bloqueada, mas se ele usar a porta 443 acessa pois o proxy é transparente. Daí a necessidade se bloquear o acesso, inclusive o facebook e só liberar quando for aula de internet ou outro curso que necessite dela.

Agradeço a quem poder ajudar.


4. Re: Criar regra de exceção no iptables

Rafael Silva Domingos
raffael_sd

(usa Ubuntu)

Enviado em 09/10/2013 - 18:38h

Caro mrjeday,

Estou passando por uma situação bem parecida. Utilizo proxy transparente pois temos 90 computadores no parque, e assim fica inviável configurar máquina por máquina. A maioria dos sites deu para bloquear no squid, mas o facebook também funciona na porta 443 e os usuários começaram a adicionar https na hora de logar.
Consegui fazer o bloqueio da rede e liberar o acesso para algumas máquinas, segue o script:

#!/bin/bash
#
# /etc/init.d/firewall
#
# Limpa e inicializa os modulos do iptables
#******************************************
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
modprobe iptable_nat
#
# Compartilha Internet - eth0 -> Placa de rede da internet
#********************************************************
#
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
#
#
# Proxy transparente (Redireciona para o squid) - eth1 -> Placa de rede da intranet
#********************************************************
#
iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
#
#
# Acesso Facebook
#
#
# Liberando acesso para ips privilegiados
for i in `cat /etc/squid3/listas/ips_liberados`; do
iptables -I INPUT -s $i -j ACCEPT
iptables -I FORWARD -s $i -j ACCEPT
iptables -I FORWARD -d $i -j ACCEPT
done
#
# Bloqueando acesso para o restante da rede
#
iptables -A FORWARD -m string --algo bm --string "facebook.com" -j DROP




Agora estou quebrando a cabeça para liberar o acesso no horário do almoço.

Flw.


5. Re: Criar regra de exceção no iptables

Buckminster
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.


6. Re: Criar regra de exceção no iptables

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 09/10/2013 - 22:14h

raffael_sd escreveu:

Caro mrjeday,

Estou passando por uma situação bem parecida. Utilizo proxy transparente pois temos 90 computadores no parque, e assim fica inviável configurar máquina por máquina. A maioria dos sites deu para bloquear no squid, mas o facebook também funciona na porta 443 e os usuários começaram a adicionar https na hora de logar.
Consegui fazer o bloqueio da rede e liberar o acesso para algumas máquinas, segue o script:

#!/bin/bash
#
# /etc/init.d/firewall
#
# Limpa e inicializa os modulos do iptables
#******************************************
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
modprobe iptable_nat
#
# Compartilha Internet - eth0 -> Placa de rede da internet
#********************************************************
#
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
#
#
# Proxy transparente (Redireciona para o squid) - eth1 -> Placa de rede da intranet
#********************************************************
#
iptables -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
#
#
# Acesso Facebook
#
#
# Liberando acesso para ips privilegiados
for i in `cat /etc/squid3/listas/ips_liberados`; do
iptables -I INPUT -s $i -j ACCEPT
iptables -I FORWARD -s $i -j ACCEPT
iptables -I FORWARD -d $i -j ACCEPT
done
#
# Bloqueando acesso para o restante da rede
#
iptables -A FORWARD -m string --algo bm --string "facebook.com" -j DROP




Agora estou quebrando a cabeça para liberar o acesso no horário do almoço.

Flw.


Ja fiz coisa de liberar pelo iptables em certos horários usando scripts diferente agendados no cron funcionava bem.


7. Re: Criar regra de exceção no iptables

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 09/10/2013 - 22:26h

Só deixando minha opinião temos um parque de mais de 120 maquinas na unidade que trabalho e todas foram configuradas proxy manualmente. (Atualmente não mais agora é feito automaticamente para novos usuários via GPO NO AD.

Proxy transparente é uma merd... a soluçaõ para 90% de todos os problemas é bloquear o FORWARD de todos impedindo navegar sem o proxy definido e liberando o forward da chefia ou IP's liberados.

Isso vai dar trabalho configurar proxy em 90 maquinas... talvez uma hora ou duas já no proxy transparente as dores de cabeça com usuário burlando vai ser eterna muitas vezes de horas a fio testando regras milagrosas, enfim o barato sai caro.


8. Re: Criar regra de exceção no iptables

Ricardo Cardoso
ricardo cardoso

(usa Debian)

Enviado em 09/10/2013 - 22:41h

iptables -A FORWARD -s rede/máscara -d facebook.com -j ACCEPT


9. Re: Criar regra de exceção no iptables

Victor Figueira
mrjeday

(usa Debian)

Enviado em 16/10/2013 - 19:59h

vou tentar e posto o resultado. Agradeço desde já.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts