Iptables e Squid em servidores diferentes

1. Iptables e Squid em servidores diferentes

Rodrigo
rgtobr

(usa CentOS)

Enviado em 16/06/2014 - 12:40h

Prezados,

No servidor 192.168.0.5 tenho o meu ROTEADOR em Linux.

No servidor 192.168.0.2 tenho o meu SQUID 3.1.10.

Em uma máquina cliente A, configurei o proxy da seguinte maneira: 192.168.0.2, porta 3128. Pronto! A Internet está funcionando.

Substituí em squid.conf a linha "http_port 192.168.0.2:3128" por "http_port 192.168.0.2:3128 transparent", e reiniciei o squid.

No meu ROTEADOR, adicionei a seguinte regra no Iptables:
# iptables -t nat -A PREROUTING -p tcp -d 192.168.0.5/32 --dport 80 -j DNAT --to-destination 192.168.0.2:3128
# iptables -t filter -A FORWARD -p tcp -d 192.168.0.5/32 --dport 80 -j ACCEPT

Em uma máquina cliente B, eu não configurei o proxy, deixei a configuração sem proxy. Não funciona!

O que falta fazer para que as máquinas clientes acessem a Internet de forma transparente?

OBS: já substitui "http_port 192.168.0.2:3128 transparent" por "http_port 192.168.0.2:3128 intercept" e não resolveu.


  


2. Re: Iptables e Squid em servidores diferentes

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 16/06/2014 - 13:31h

Na seguinte regra:


# iptables -t nat -A PREROUTING -p tcp -d 192.168.0.5/32 --dport 80 -j DNAT --to-destination 192.168.0.2:3128


Deixe assim:


# iptables -t nat -A PREROUTING -p tcp -s 192.168.0.0/24 --dport 80 -j DNAT --to-destination 192.168.0.2:3128


Estou considerando q o seu proxy seja 192.168.0.2.


3. Re: Iptables e Squid em servidores diferentes

Diogo
dmap

(usa Ubuntu)

Enviado em 16/06/2014 - 13:50h

Para poder ajudar:
Como é a topologia da rede?
Pelo que entendi a maquina B --> roteador --> squid --> roteador --> internet.
Maquina b e squid na mesma lan ?



4. Re: Iptables e Squid em servidores diferentes

Rodrigo
rgtobr

(usa CentOS)

Enviado em 16/06/2014 - 14:13h

renato_pacheco escreveu:

Na seguinte regra:


# iptables -t nat -A PREROUTING -p tcp -d 192.168.0.5/32 --dport 80 -j DNAT --to-destination 192.168.0.2:3128


Deixe assim:


# iptables -t nat -A PREROUTING -p tcp -s 192.168.0.0/24 --dport 80 -j DNAT --to-destination 192.168.0.2:3128


Estou considerando q o seu proxy seja 192.168.0.2.


Renato,

Exato, meu proxy é 192.168.0.2 e o roteador final 5. Não funcionou, veja meu iptables após o seu comando (aqui a subnet é 22):


[root@192.168.0.5 ~]# service iptables status
Table: nat
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DNAT tcp -- 192.168.0.0/22 0.0.0.0/0 tcp dpt:80 to:192.168.0.2:3128

Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

[root@192.168.0.5 ~]#


Na cliente sem proxy configurado, que possui só o Windows XP, ao tentar acessar um site qualquer aparece o seguinte (sem retorno do squid):


C:\Documents and Settings\Administrador>netstat -an

Conexões ativas

Proto Endereço local Endereço externo Estado
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 192.168.0.239:139 0.0.0.0:0 LISTENING
TCP 192.168.0.239:1332 200.221.2.45:80 SYN_SENT
TCP 192.168.0.239:1333 200.221.2.45:80 SYN_SENT
TCP 192.168.0.239:1334 200.221.2.45:80 SYN_SENT
TCP 127.0.0.1:1029 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1328 127.0.0.1:1329 ESTABLISHED
TCP 127.0.0.1:1329 127.0.0.1:1328 ESTABLISHED
UDP 0.0.0.0:445 *:*
UDP 0.0.0.0:500 *:*
UDP 0.0.0.0:1025 *:*
UDP 0.0.0.0:1056 *:*
UDP 0.0.0.0:1057 *:*
UDP 0.0.0.0:4500 *:*
UDP 192.168.0.239:123 *:*
UDP 192.168.0.239:137 *:*
UDP 192.168.0.239:138 *:*
UDP 192.168.0.239:1900 *:*
UDP 127.0.0.1:123 *:*
UDP 127.0.0.1:1900 *:*

C:\Documents and Settings\Administrador>



5. Re: Iptables e Squid em servidores diferentes

Rodrigo
rgtobr

(usa CentOS)

Enviado em 16/06/2014 - 14:16h

dmap escreveu:

Para poder ajudar:
Como é a topologia da rede?
Pelo que entendi a maquina B --> roteador --> squid --> roteador --> internet.
Maquina b e squid na mesma lan ?


Prezado dmap,

Isso mesmo, o único que tem IP externo é o SQUID com a eth0 configurado como 192.168.0.2 e eth1 com IP externo (que possui acesso a web).

O roteador é interno configurado com uma única placa (eth0) como 192.168.0.5.

A máquina B é um IP aleatório fornecido pelo AD que também possui DHCP Server.


6. Re: Iptables e Squid em servidores diferentes

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 16/06/2014 - 14:24h

Faça um teste. Pra saber se os pacotes estão chegando ao seu squid, use o tcpdump:


tcpdump net 192.168.0.0/22 and dst port 80


Se estiverem chegando, o problema pode estar no squid.


7. Re: Iptables e Squid em servidores diferentes

Rodrigo
rgtobr

(usa CentOS)

Enviado em 16/06/2014 - 14:57h

renato_pacheco escreveu:

Faça um teste. Pra saber se os pacotes estão chegando ao seu squid, use o tcpdump:


tcpdump net 192.168.0.0/22 and dst port 80


Se estiverem chegando, o problema pode estar no squid.


Renato,

Executei o comando "tcpdump net 192.168.0.0/22 and dst port 3128 | grep 192.168.0.100" no meu SQUID, onde o IP 192.168.0.100 é o Windows XP (máquina de testes) e sim, retornou vários pacotes quando eu tentava acessar um URL qualquer. Lembro que o firewall do meu SQUID só libera comunicação com a porta 3128, na dúvida desliguei o firewall, o problema persiste.

Meu Squid está configurado corretamente, e por se tratar da versão 3.1.10, o http_port é configurado com "http_port 192.168.0.2:3128 intercept", ou seja, é intercept ao invés de transparent a partir da versão 3 (é o que entendi lendo a documentação do Squid).

Então suponho que o problema também não esteja no Squid e sim no retorno da informação para a máquina solicitante (no caso do SQUID para 192.168.0.100).

Será que existe mais algum outro tipo de teste a ser feito para tentar identificar a origem do problema?


8. Re: Iptables e Squid em servidores diferentes

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 16/06/2014 - 15:06h

Sobre a config do squid, tá correta. Agora é mitigar o lance.

- Olhe nos logs do squid pra saber se ele está tratando (/var/log/squid/access.log)
- Use o tcpdump no servidor squid pra saber se ele tá enviando os pacotes de volta pra máquina solicitante (tcpdump ip dst 192.168.0.100 and src port 3128)
- Veja, no firewall, se ele tá recebendo o pacote de volta do servidor squid (tcpdump ip src 192.168.0.2) e se ele tá conseguindo repassar o pacote para o destino (tcpdump ip dst 192.168.0.100).

Um desses passos vai falhar e ae a gente v o q tá ocorrendo.


9. Re: Iptables e Squid em servidores diferentes

Diogo
dmap

(usa Ubuntu)

Enviado em 16/06/2014 - 15:08h

rgtobr escreveu:

renato_pacheco escreveu:

Na seguinte regra:


# iptables -t nat -A PREROUTING -p tcp -d 192.168.0.5/32 --dport 80 -j DNAT --to-destination 192.168.0.2:3128


Deixe assim:


# iptables -t nat -A PREROUTING -p tcp -s 192.168.0.0/24 --dport 80 -j DNAT --to-destination 192.168.0.2:3128


Estou considerando q o seu proxy seja 192.168.0.2.


Renato,

Exato, meu proxy é 192.168.0.2 e o roteador final 5. Não funcionou, veja meu iptables após o seu comando (aqui a subnet é 22):


[root@192.168.0.5 ~]# service iptables status
Table: nat
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DNAT tcp -- 192.168.0.0/22 0.0.0.0/0 tcp dpt:80 to:192.168.0.2:3128

Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination

[root@192.168.0.5 ~]#


Na cliente sem proxy configurado, que possui só o Windows XP, ao tentar acessar um site qualquer aparece o seguinte (sem retorno do squid):


C:\Documents and Settings\Administrador>netstat -an

Conexões ativas

Proto Endereço local Endereço externo Estado
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 192.168.0.239:139 0.0.0.0:0 LISTENING
TCP 192.168.0.239:1332 200.221.2.45:80 SYN_SENT
TCP 192.168.0.239:1333 200.221.2.45:80 SYN_SENT
TCP 192.168.0.239:1334 200.221.2.45:80 SYN_SENT
TCP 127.0.0.1:1029 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1328 127.0.0.1:1329 ESTABLISHED
TCP 127.0.0.1:1329 127.0.0.1:1328 ESTABLISHED
UDP 0.0.0.0:445 *:*
UDP 0.0.0.0:500 *:*
UDP 0.0.0.0:1025 *:*
UDP 0.0.0.0:1056 *:*
UDP 0.0.0.0:1057 *:*
UDP 0.0.0.0:4500 *:*
UDP 192.168.0.239:123 *:*
UDP 192.168.0.239:137 *:*
UDP 192.168.0.239:138 *:*
UDP 192.168.0.239:1900 *:*
UDP 127.0.0.1:123 *:*
UDP 127.0.0.1:1900 *:*

C:\Documents and Settings\Administrador>


Nao precisa inserir as regras accept na tabela filter, ja que a politica esta accept. Eu nao vejo a necessidade do roteador, tu ja pode fazer tudo na maquina que esta o squid. Se nao puder da o retorno que a gente busca a soluçao do jeito que esta


10. Re: Iptables e Squid em servidores diferentes

Rodrigo
rgtobr

(usa CentOS)

Enviado em 16/06/2014 - 15:42h

renato_pacheco escreveu:

Sobre a config do squid, tá correta. Agora é mitigar o lance.

- Olhe nos logs do squid pra saber se ele está tratando (/var/log/squid/access.log)
- Use o tcpdump no servidor squid pra saber se ele tá enviando os pacotes de volta pra máquina solicitante (tcpdump ip dst 192.168.0.100 and src port 3128)
- Veja, no firewall, se ele tá recebendo o pacote de volta do servidor squid (tcpdump ip src 192.168.0.2) e se ele tá conseguindo repassar o pacote para o destino (tcpdump ip dst 192.168.0.100).

Um desses passos vai falhar e ae a gente v o q tá ocorrendo.


Pessoal, resolvi!

Renato, valeu pelas dicas. Era o que eu estava imaginando, o Squid está configurado correto, o Iptables era o problema, vou explicar como solucionei, segue as regras:

1. Logo que o pacote chega na eth0, exceto se vier do squid, destinado a porta 80, encaminhar para o squid porta 3128:

# iptables -t nat -A PREROUTING -i eth0 -s ! 192.168.0.2 -p tcp --dport 80 -j DNAT --to 192.168.0.2:3128


2. Após o roteamento, o que sair da eth0 vindo da rede local com destino ao squid, receber no próprio roteador:

# iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/22 -d 192.168.0.2 -j SNAT --to 192.168.0.5


3. Então aceita todos os pacotes da rede local com destino ao squid, que entram pela eth0 e saem pela eth0 na porta 3128:

# iptables -A FORWARD -s 192.168.0.0/22 -d 192.168.0.2 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT


Ufa! Agora só falta eu descobrir como fazer autenticação no proxy transparente, se é que é possível.


11. Re: Iptables e Squid em servidores diferentes

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 16/06/2014 - 15:49h

Ah, legal, eu já ia sugerir o SNAT, dependendo do erro. Mas com essas regras, deveria funcionar o proxy transparente, por causa do redirecionamento. Pra falar a verdade, eu nunca vi um squid separado do firewall q funciona como transparente. É bom pesquisar na net se dessa forma é possível fazer. Deveria funcionar, ao meu ver.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts