Liberar internet para IP específico. [RESOLVIDO]

1. Liberar internet para IP específico. [RESOLVIDO]

Fabio
fabinho_sp83

(usa Debian)

Enviado em 11/11/2013 - 11:58h

Olá pessoal.

Tenho um debian wheezy com squid como proxy transparente bloqueando algumas coisas, dhcp server e uma regra de iptables que nega qualquer pedido de acesso às redes sociais.

No meu squid.conf tenho uma acl que tem os ip's liberados assim:

#ACL IP Liberado
acl ip src "/etc/squid/ip"
http_access allow ip

Mesmo assim não acessa, pois o meu iptables tem as seguintes regras:


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -I FORWARD -m string --algo bm --string "facebook" -j DROP
iptables -I FORWARD -m string --algo bm --string "twitter" -j DROP
iptables -I FORWARD -m string --algo bm --string "instagram" -j DROP

Ou seja, as regras acima matam qualquer acl que o squid.conf tenha liberado, pois se eu comentar essas três linhas acima, das redes sociais, a minha regra IP Liberado funciona, porém as redes sociais entram por https.

Existe alguma regra de iptables que libere tudo para um ip específico? Algo que retire o ip do filtro do iptables, ou que redirecio o ip exclusivo diretamente para a porta 80, passando direto?

Agradeço!




  


2. MELHOR RESPOSTA

Buckminster
Buckminster

(usa Debian)

Enviado em 11/11/2013 - 18:33h

fabioperucio escreveu:

Obrigado pela dica.

Seguia sua dica e coloquei meu firewall assim, mas não funcionou.


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -I INPUT 1 -m string --algo bm --string "facebook" -j DROP
iptables -I INPUT 2 -m string --algo bm --string "twitter" -j DROP
iptables -I INPUT 3 -m string --algo bm --string "instagram" -j DROP
iptables -A FORWARD -s 192.168.1.101 -j ACCEPT

O pc navega em qualquer site, exceto nos da regra acima.


Tente assim:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -A FORWARD -d 192.168.1.101 -j ACCEPT
iptables -A FORWARD -s 192.168.1.101 -j ACCEPT
iptables -I INPUT 1 -m string --algo bm --string "facebook" -j DROP
iptables -I INPUT 2 -m string --algo bm --string "twitter" -j DROP
iptables -I INPUT 3 -m string --algo bm --string "instagram" -j DROP

Caso não dê certo, deve ser porque você tem mais regras com FORWARD e provavelmente estão com -I. Daí coloque -I nas duas regras para liberar o IP acima e comece a numeração delas com 1 e 2.

Caso você queira que o IP acima não passe pelo proxy é só colocar as duas regras antes da regra de redirecionamento.


3. Re: Liberar internet para IP específico. [RESOLVIDO]

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 11/11/2013 - 12:55h

Estas regras no Iptables negam para toda a rede o acesso a estes sites independente de liberar no squid


4. Re: Liberar internet para IP específico. [RESOLVIDO]

Fabio
fabinho_sp83

(usa Debian)

Enviado em 11/11/2013 - 13:24h

Pois é.

Dei uma garimpada aqui no vol sobre o assunto, porém nenhuma dica de iptables que peguei funcionou.


5. Re: Liberar internet para IP específico. [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 11/11/2013 - 14:39h

Para liberar para um IP específico:

iptables -I FORWARD -s ip_liberado -j ACCEPT

Atente bem para a ordem de colocação desta regra.

O -I coloca a regra no topo da chain, o -A coloca a regra na ordem de sequência que está no script.

Um regra com -I que esteja por último no script é a primeira regra que será executada.

No teu caso você tem essas regras:

iptables -I FORWARD -m string --algo bm --string "facebook" -j DROP
iptables -I FORWARD -m string --algo bm --string "twitter" -j DROP
iptables -I FORWARD -m string --algo bm --string "instagram" -j DROP << essa será executada primeiro.

Com -I você pode numerar as regras para melhor organização:

iptables -I FORWARD 1 -m string --algo bm --string "facebook" -j DROP
iptables -I FORWARD 2 -m string --algo bm --string "twitter" -j DROP
iptables -I FORWARD 3 -m string --algo bm --string "instagram" -j DROP

Assim ele executará na sequência que você quiser.
Mas a numeração só vale dentro de cada chain, ou seja, se for na chain INPUT, por exemplo, seria assim:

iptables -I INPUT 1 -m string --algo bm --string "facebook" -j DROP
iptables -I INPUT 2 -m string --algo bm --string "twitter" -j DROP
iptables -I INPUT 3 -m string --algo bm --string "instagram" -j DROP

E não haveriam problemas entre as chains INPUT e FORWARD. É lógico que na sequência que estão acima as regras, ele bloquearia primeiro na chain FORWARD e depois na INPUT. Caso colocasse as regras INPUT antes da FORWARD, ele bloquearia primeiro o INPUT, mas dependendo dos bloqueios/liberações colocados ali, sendo conflitantes, causariam problemas.

INPUT (entrada) bloqueia ou libera pacotes com destino à própria máquina onde está o Iptables;
FORWARD (adiante, para a frente)) bloqueia ou libera pacotes que passam pela máquina onde está o Iptables;
OUTPUT (saída) bloqueia ou libera pacotes que saem da máquina onde está o Iptables, ou seja, pacotes gerados pela própria máquina onde está o Iptables como, por exemplo, quando você abre um site no servidor onde está o Iptables e esteja tudo bloqueado na chain OUTPUT, ele bloqueará somente para o servidor.

Essas regras

iptables -I FORWARD 1 -m string --algo bm --string "facebook" -j DROP
iptables -I FORWARD 2 -m string --algo bm --string "twitter" -j DROP
iptables -I FORWARD 3 -m string --algo bm --string "instagram" -j DROP

aconselharia a deixar assim

iptables -I FORWARD 1 -m string --algo bm --string "facebook.com" -j DROP
iptables -I FORWARD 2 -m string --algo bm --string "twitter.com" -j DROP
iptables -I FORWARD 3 -m string --algo bm --string "instagram.com" -j DROP

pois como estão, o Iptables está bloqueando todo e qualquer pacote que contenha a sequência de caracteres "facebook", por exemplo, ele bloqueará todo site que, mesmo não sendo o facebook, mas que tenha essa palavra no cabeçalho.


Veja o Manuel:
http://www.vivaolinux.com.br/artigo/Manual-do-IPtables-Comentarios-e-sugestoes-de-regras/


6. Re: Liberar internet para IP específico. [RESOLVIDO]

Fabio
fabinho_sp83

(usa Debian)

Enviado em 11/11/2013 - 15:26h

Obrigado pela dica.

Seguia sua dica e coloquei meu firewall assim, mas não funcionou.


iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -I INPUT 1 -m string --algo bm --string "facebook" -j DROP
iptables -I INPUT 2 -m string --algo bm --string "twitter" -j DROP
iptables -I INPUT 3 -m string --algo bm --string "instagram" -j DROP
iptables -A FORWARD -s 192.168.1.101 -j ACCEPT

O pc navega em qualquer site, exceto nos da regra acima.



7. Re: Liberar internet para IP específico. [RESOLVIDO]

Fabio
fabinho_sp83

(usa Debian)

Enviado em 12/11/2013 - 07:36h

Funcionou!!!!

Segui a dica do Buckminster e deu certinho. Ficou show.

Obrigado!


8. Re: Liberar internet para IP específico. [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 12/11/2013 - 14:51h

fabioperucio escreveu:

Funcionou!!!!

Segui a dica do Buckminster e deu certinho. Ficou show.

Obrigado!


De nada.


9. Re: Liberar internet para IP específico. [RESOLVIDO]

Fabio
fabinho_sp83

(usa Debian)

Enviado em 12/11/2013 - 15:57h

Peço desculpas por ressucitar o tópico, mas aconteceu algo bem estranho.

Após liberar a navegação aos sites proibidos para o ip 192.168.1.101, o servidor que parou de acessar os sites.
Copie a regra mudando apenas os endereços ip e mesmo assim não navega nesses sites.

Desculpem a ignorância, mas sou leigo em iptables e preciso disso funcionando. Resolvi um problema e criei outro.

Posso colocar dois ip's na mesma regra? Se sim como faço?

Segue a conf. atual do meu firewall



1 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
2 iptables -A FORWARD -d 192.168.1.101 -j ACCEPT
3 iptables -A FORWARD -d 192.168.1.100 -j ACCEPT -------- coloquei pra testar
4 iptables -A FORWARD -s 192.168.1.101 -j ACCEPT
5 iptables -A FORWARD -s 192.168.1.100 -j ACCEPT -------- coloquei pra testar
6 iptables -I INPUT 1 -m string --algo bm --string "facebook" -j DROP
7 iptables -I INPUT 2 -m string --algo bm --string "twitter" -j DROP
8 iptables -I INPUT 3 -m string --algo bm --string "instagram" -j DROP

Só por curiosidade, minha eth0 é a rede local e a eth1 é rede wan. Se eu comentar da linha 2 pra baixo libera tudo pra todo mundo inclusive o servidor.



10. Re: Liberar internet para IP específico. [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 25/10/2015 - 10:03h

iptables -I INPUT 1 -m string --algo bm --string "facebook" -j DROP

Tu deve ter cuidado com regras como acima. Uma regra como acima faz a busca e bloqueia por string, ou seja, caso alguém acessar um site que não seja o próprio facebook, mas no endereço (URL) tiver a palavra 'facebook', o Iptables irá bloquear esse site mesmo não sendo o Facebook.
E é assim com todas as outras regras por string.

Sugiro colocar www.facebook, www.twitter, etc.

E se tu quer liberar IPs do Squid troque a ordem das regras:

iptables -A FORWARD -d 192.168.1.101 -j ACCEPT <<< as regras com os IPs a serem liberados devem vir antes da regra do redirecionamento para o Squid.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts