Proxy Transparent e Iptables

Iniciado por Vava, 20 de Maio de 2011, 15:27

tópico anterior - próximo tópico

Vava

Boa tarde a todos!
Sou iniciante no Linux e resolvi me aventurar à 1 semana para configurar um servidor proxy.
Até então consegui com muita pesquisa configurar o Squid no Ubuntu, porém estou enfrentando alguns problemas com o firewall.
Explico:
Tenho um micro com o Ubuntu e Squid instalados. A 'eth0' é minha placa que recebe o sinal de internet e a 'eth1' conectada na rede local.

1º Teste ( configurando o IP do Proxy como gateway  e Proxy no browser da estação)
O controle de banda, bloqueio de sites e palavras está funcionando certinho nas estações que estão atrás do proxy. Contudo, quando tento usar o 'Acesso Remoto', ou 'Outlook', 'MSN', etc, nas estações não funcionam.

2º Teste ( Colocando um Router como gateway  e usando o Ubuntu somente com Proxy no browser da estação)
O controle de banda, bloqueio de sites e palavras está funcionando certinho.  O 'Acesso Remoto', ou 'Outlook', 'MSN', etc, nas estações Também funcionam normalmente.

Minha dúvida é baseada na primeira situação, pois quero usar o Servidor Proxy como Firewall também e não estou conseguindo configurar o Iptables.
Já tentei configurar e rodar um script e não funcionou. Como sou um iniciante acredito que seja algo até muito bobo ou algo complicado que não tenho conhecimento ainda.
Segue meu arquivo squid.conf e script:
Obs: estou fazendo tudo logado como 'root'

SQUID.CONF

http_port 3128 transparent
visible_hostname xxxx
############# CONFIG CACHE ##############
cache_mem 400 MB
maximum_object_size_in_memory 64 KB
maximum_object_size 512 MB
minimum_object_size 0 KB
cache_swap_low 90
cache_swap_high 95
cache_dir ufs /var/spool/squid 10048 16 256
cache_access_log /var/log/squid/access.log
refresh_pattern ^ftp: 15 20% 2280
refresh_pattern ^gopher: 15 0% 2280
refresh_pattern . 15 20% 2280

########### DECLARANDO ACL #####################

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 21 80 443 563 70 210 280 488 59 777 901 3389 1025-65535

acl purge method PURGE
acl CONNECT method CONNECT

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

acl site dstdomain caixa.gov caixa.com
always_direct allow site

# REGRAS DE BLOQUEIOS

# ACESSO TOTALMENTE LIBERADO
acl acessototal src "/etc/squid/acessototal"
http_access allow acessototal

# SITES BLOQUEADOS
acl sitesbloqueado url_regex -i "/etc/squid/sitesbloqueado"
acl sitesliberado url_regex -i "/etc/squid/sitesliberado"
http_access deny sitesbloqueado !sitesliberado

# EXTENSÕES BLOQUEADAS
acl downloadbloqueado url_regex -i "/etc/squid/downloadbloqueado"
acl downloadliberado url_regex -i "/etc/squid/downloadliberado"
http_access deny downloadbloqueado !downloadliberado

error_directory /usr/share/squid/errors/pt


# REDE COM CONTROLE DE BANDA
acl redelocal src 192.168.1.0/24
delay_pools 1
delay_class 1 2
delay_parameters 1 224688/224688 35384/35384
delay_access 1
allow redelocal
http_access
allow localhost
http_access allow redelocal

http_access deny all
_______________________________________
SCRIPT QUE PEGUEI NA NET COM ALGUMAS CONFIG

#!/bin/bash
iniciar(){
   # Abre para a faixa de endereços da rede local:
   iptables -A INPUT -s 192.168.1.0/255.255.255.0 -j ACCEPT
   # Faz a mesma coisa, só que especificando a interface, pode ser
   # usada em substituição à regra anterior:
   # iptables -A INPUT -i eth0 -j ACCEPT
   # Abre uma porta (inclusive para a internet):
   iptables -A INPUT -p tcp --dport 3389 -j ACCEPT
   # Ignora pings:
   iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
   # Protege contra IP spoofing:
   echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
   # Descarta pacotes malformados, protegendo contra ataques diversos
   iptables -A INPUT -m state --state INVALID -j DROP
   # Abre para a interface de loopback. Esta regra é essencial para que
   # o KDE e outros programas gráficos funcionem adequadamente.
   iptables -A INPUT -i lo -j ACCEPT
   # Impede a abertura de novas conexões, efetivamente bloqueando o acesso
   # externo ao seu servidor, com exceção das portas e faixas de endereços
   # manualmente especificadas anteriormente.
   iptables -A INPUT -p tcp --syn -j DROP
}
parar(){
   iptables -F
   iptables -P INPUT ACCEPT
   iptables -P OUTPUT ACCEPT
   echo "Regras de firewall desativadas"
}
case "$1" in
   "start") iniciar ;;
   "stop") parar ;;
   "restart") parar; iniciar ;;
   *) echo "Use os parâmetros start ou stop"
esac

zekkerj

Olá Vava, tudo bem?

Seguinte, antes de colocar o squid em modo transparente, teste-o configurando uma ou duas estações. Quando vc tiver certeza de que tudo funciona configurando o navegador, vc ativa o modo transparente.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Vava

Olá Zekkerj,
Fiz o que vc me falou mas ainda sim não consigo usar outros aplicativos nas estações quando configuro o meu gateway com o IP do Proxy.
Acredito que esse script que coloquei acima não está funcionando ou eu não estou conseguindo aplicar-lo.
Como faço para rodar esse script?
A configuração desse script deveria abrir a porta 3389 do TS para o uso?
Me desculpe a perguntas, mas sou iniciante no Linux.
Valew!

zekkerj

Então vc confirma que quando configura o proxy no navegador, o squid funciona corretamente? OK.

Vc disse que "não consegue usar outros aplicativos". Que aplicativos são esses? Nem todo aplicativo passa pelo squid, mesmo usando proxy transparente.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Vava

Zekkerj,
Conforme comentei em minha primeira mensagem lá em cima, o Squid está funcionando Ok. Somente o Acesso Remoto, MSN, Outlook, etc, que usam portas TCP ou UDP pra conexão com a internet é que não estão funcionando nas estações. Isso quando coloco o IP do servidor Proxy no gateway das estações.

Fiz dois testes que citei anteriormente e cito novamente para esclarecer a situação:

1º Teste ( configurando o IP do Proxy como gateway  e Proxy no browser da estação)
O controle de banda, bloqueio de sites e palavras está funcionando certinho nas estações que estão atrás do proxy. Contudo, quando tento usar o 'Acesso Remoto', ou 'Outlook', 'MSN', etc, nas estações não funcionam.

2º Teste ( Colocando um Router como gateway  e usando o Ubuntu somente com Proxy no browser da estação)
O controle de banda, bloqueio de sites e palavras está funcionando certinho.  O 'Acesso Remoto', ou 'Outlook', 'MSN', etc, nas estações Também funcionam normalmente.
Por isso acredito que o meu problema seja a configuração do Firewall do Ubuntu.
Não estou sabendo criar e rodar um script de configuração do IPTABLES.

Agradeço pela atenção.

zekkerj

CitarContudo, quando tento usar o 'Acesso Remoto', ou 'Outlook', 'MSN', etc, nas estações não funcionam.
OK. Observe que esses acessos não passam pelo Squid, eles dependem de outras configurações pra funcionar.

Primeiro de tudo, você precisa ativar o repasse de pacotes.

sudo sysctl net.ipv4.ip_forward=1

Depois, você tem que ativar o NAT de saída. Supondo que sua interface de saída seja a eth0, o comando fica:

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Se sua máquina vai ser gateway da rede, é bom verificar se o ufw não está ativo, ele pode te atrapalhar.

sudo ufw status
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Vava

Cara,
se eu digitar somente esses comandos de nada me resolve!
sou iniciante e preciso saber passo a passo os comandos que devo digitar para liberar esses acessos de portas, qual digito primeiro, com devo digitar?

Obs: verifiquei o UFW está inativo / estou fazendo os teste logado como root já/ estou usando o Ubuntu 11.04


zekkerj

Esses comandos são o passo-a-passo.

Tudo que você precisa, depois disso, é criar um script pra executá-los todos de uma vez, e talvez colocá-los na inicialização (exceto a verificação do status do ufw).

Observe que nenhum dos dois comandos estava no script que você estava usando.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Vava

Digitei todos os comandos um a um e nada de dar certo.
a imprensão que tenho é que as regras não estão sendo aplicadas ou a ordem está errada. Mas quem sou eu pra dar um diagnóstico correto.

Esse iptables é complicado demais. O Squid com um pouco de leitura entendi o funcionamento.
Estou quase desistindo.

zekkerj

CitarEsse iptables é complicado demais.
E um pouquinho mais...
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Vava

Cara, pois é.
Pra começar eu tentei fazer o redirecionamento da porta 80 para 3128 e testar o proxy-transparent. Fiz isso para testar se estou digitando as regras corretamente.
Fui no terminal, logado como root e digitei os seguintes comandos:
________________
sysctl net.ipv4.ip_forward=1

iptables -F
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# Aqui ativamos o mascaramento dos pacotes da rede local:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Libera pacotes entrando na eth1 e lo, já que a política INPUT é DROP:
iptables -t filter -A INPUT -i eth1 -j ACCEPT
iptables -t filter -A INPUT -i lo -j ACCEPT

# Proxy Transparente eth01 é a placa da rede local
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
# testetei também:
#iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
____________________________________
Fui na estação que está com o ip do Servidor-Proxy como gateway, e desmarquei a configuração de proxy no browser para testar o 'proxy-transparent. Sem sucesso!!! Não funcionou!!!

Quero somente uma luz para aplicar o proxy transparent e posteriormente, começar a liberar as portas que quero.
Desde já agradeço

   

zekkerj

Não precisa colocar "-t filter", a tabela filter já é a default.

Execute os comandos abaixo no seu gateway e cole o resultado aqui.

sudo iptables -L -v -n
sudo iptables -t nat -L -v -n
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Vava

#12
root@servidor-proxy:~# ifconfig



eth0    Link encap:Ethernet  Endereço de HW xx:xx:xx:xx:xx:xx
          inet end.: 192.168.0.197  Bcast:192.168.0.255  Masc:255.255.255.0
          endereço inet6: xxxx::xxx:xxxx:xxxx:xxxx/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:768 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:44 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000
          RX bytes:69853 (69.8 KB) TX bytes:5998 (5.9 KB)
          IRQ:23 Endereço de E/S:0x8000

eth1    Link encap:Ethernet  Endereço de HW yy:yy:yy:yy:yy:yy
          inet end.: 192.168.10.10  Bcast:192.168.10.255  Masc:255.255.255.0
          endereço inet6: xxxx::xxx:xxxx:xxxx:xxxx/64 Escopo:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:223 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:146 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000
          RX bytes:20661 (20.6 KB) TX bytes:17019 (17.0 KB)
          IRQ:17 Endereço de E/S:0xe000

lo        Link encap:Loopback Local
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACK RUNNING  MTU:16436  Métrica:1
          pacotes RX:4 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:4 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:0
          RX bytes:240 (240.0 B) TX bytes:240 (240.0 B)
_________________________________________________

root@servidor-proxy:~# iptables -L -v -n

Chain INPUT (policy ACCEPT 267 packets, 26565 bytes)

pkts  bytes target    prot opt in     out     source               destination
  212 16269 ACCEPT    all  --  eth1   *       0.0.0.0/0            0.0.0.0/0
    0         0 ACCEPT    all  --  lo      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 40 packets, 3833 bytes)
pkts bytes target     prot opt in     out     source               destination
_________________________________________________

root@servidor-proxy:~# iptables -t nat -L -v -n

Chain PREROUTING (policy ACCEPT 105 packets, 13206 bytes)
pkts bytes target     prot opt in     out     source               destination
    0     0 REDIRECT   tcp  --  eth1   *       0.0.0.0/0            0.0.0.0/0
        tcp dpt:80 redir ports 3128

Chain POSTROUTING (policy ACCEPT 1 packets, 68 bytes)
pkts bytes target            prot opt in     out     source               destination
   43  3443 MASQUERADE      all  -- *    eth0    0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 3 packets, 168 bytes)
pkts bytes target     prot opt in     out     source               destination   

zekkerj

Vava, confirma que essa máquina (192.168.10.10) é o gateway padrão das estações de trabalho.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Vava