Squid + ipfw + NAT - Ajuda
Oi pessoal
Tudo blz?
tenho um problema que eh o seguinte:
preciso redirecionar todo o meu trafego da porta 80 para 443 (para conexoes com a internet) de forma que quando o usuario digitar http://meusite, ele seja redirecionado para https://meusite.
Estou usando o squid no modo accelerator.
tentei com o ipfw e nat mas nao esta dando certo.
eis minhas regras:
Trafego de entrada
$ipfw_cmd add divert natd tcp from not 10.0.0.0:255.255.240.0 to me 80 via en0 in
$ipfw_cmd add divert natd udp from not 10.0.0.0:255.255.240.0 to me 80 via en0 in
Trafego de saida
$ipfw_cmd add divert natd tcp from not 10.0.0.0:255.255.240.0 to me 80 via en0 out
$ipfw_cmd add divert natd udp from not 10.0.0.0:255.255.240.0 to me 80 via en0 out
regras de nat:
interface en0
dynamic yes
use_sockets yes
redirect_port tcp 192.168.0.73:443 80
redirect_port udp 192.168.0.73:443 80
192.168.0.73 eh o meu ip.
jah tentei inverter os argumentos colocar 443 no lugar de 80 e vice versa, mas nao funciona. Quando aplico estas regras soh o https funciona.
A rede 10.0.0.0 eh onde estao os servidores reais de http e eh a minha rede interna. Eles nao falam https.
O esquema atual esta assim:
_______(http)_________(http)
cliente----------> squid -----------> servidor 1 (2, 3 ...n)
E eu preciso deixa-lo assim:
_______(https)_________(http)
cliente-----------> squid -----------> servidor 1 (2, 3 ...n)
O que estah acontecendo eh que na estrutura anterior (sem as regras dp ipfw e nat), quando um dos servidores respondem pro squid em http (o que eh desejavel) ele repassa para o cliente em http de novo e nao em https que eh o que deve ser.
Lembrando que o cliente esta na internet, o squid tem conexao direta com a internet (na verdade ele esta atras de um firewall, mas nao ha restricoes quanto aos servicos http e https) e tudo isso deve ser transparente pro usuario (cliente).
ufa! acho que eh isso!
Estou usando um Darwin (Mac OS X) (baseado em BSD 4.4).
Se alguem puder me ajudar agradeco.
Valeu!!
Squid + ipfw + NAT - Ajuda
Sinto informar, o que esta fazendo não funciona, observe o seguinte, o cliente fez uma requisição http, não adianta responder usando protocolo https, é como jogar uma requisição de ftp na porta 80, por exemplo.
A solução é colocar no seu server de páginas, para requisições na porta 80, uma tag html de redirect indicando https://seu.server, isto vai fazer os clientes repetirem a requisição, só que usando o protocolo https, o que por default é feito na 443, e para a porta https fica a página normal.
Squid + ipfw + NAT - Ajuda
Ateh aih tudo bem, eu jah tentei fazer isso, mas observe:
o squid e os servidores internos se comunicam falando http (e isso eh desejavel, pois os servidores internos nao falam https), ou seja o que esta acontecendo atualmente eh o seguinte:
1 - o cliente na intert faz um pedido http.
2 - eu coloquei o redirect pra https, ou seja o pedido http e redirecionado pra um pedido https.
3 - o cliente e o squid falam https agora (a tela de login da aplicacao aparece em https, e.g. https://pagina).
4 - o squid repassa o pedido pro servidor que estah por tras, em http, por que estes servidores nao falam https, e isto eh o comportamento que eu quero que ele tenha para com os servidores internos.
5 - o servidor responde pro squid em http, o que tambem eh desejavel.
6 - o squid responde em http pro cliente na internet.
Eh justamente o que acontece no passo 6 que eh o que eu NAO quero. O ideal eh que ele responda em https pra conexoes fora da rede 10.0.0.0, que eh a minha rede interna.
Estou pensando em usar o apache com mod_proxy.
Mas eh um saco setar o apache com ssl no Mac OS X. Por isso soh quero usar essa solucao se nao tiver jeito mesmo.
Squid + ipfw + NAT - Ajuda
Qual é a versão do squid?
Sua aplicação gera telas ou sua página possui links que indicam o protocolo http? vc precisa continuar passando para o cliente links com https://
Squid + ipfw + NAT - Ajuda
[webmail:/usr/local/squid] root# sbin/squid -v
Squid Cache: Version 2.5.STABLE6
configure options: --enable-ssl
o script que faz o redirecionamento da pagina eh algo como:
#!/usr/bin/perl -p
BEGIN { $| = 1; }
s%^http://servidor.externo.1%http://ip.servidor.interno.1% && next;
s%^http://servidor.externo.2%http://ip.servidor.interno.2% && next;
s%^http://servidor.externo.3%http://ip.servidor.interno.3% && next;
e assim por diante.
Funciona da seguinte forma:
O cliente da internet digita http://servidor.externo.1, o squid intercepta o pedido e repassa para o servidor interno.
A aplicacao tem varios links.
Citação:
vc precisa continuar passando para o cliente links com https://
Eh justamente isso que eu queria que o squid fizesse, mas quando o servidor interno me responde em http (o que eh desejavel) o squid responde ao cliente na internet em http tambem e nao em https que eh o que deve ser.
Valeu!