força hosts da LAN a passar pelo proxy

1

Eu tenho um firewall IPTables em um servidor Debian, com um monte de hosts por trás dele com o mascaramento. Na rede upstream eu não tenho acesso direto à internet, e eu preciso passar por um servidor proxy para acessar sites.

Eu quero que os hosts atrás do meu firewall passem automaticamente pelo servidor proxy sem que cada host precise configurar o proxy por conta própria (principalmente porque eu quero poder alterar o endereço do proxy em um único ponto, porque tenho diferentes proxies para diferentes cenários de rede).

Existe uma maneira de o IPTables forçar todo o tráfego de saída nas portas 80 e 443 a passar pelo proxy? Se não, posso usar algum outro software prontamente disponível para obter o comportamento de que preciso?

    
por Guss 07.10.2013 / 17:22

2 respostas

2

Existem pelo menos duas maneiras de fazer isso:

  1. URL de configuração automática de proxy via DHCP
  2. Redirecionamento de proxy transparente com iptables

A primeira opção usa o mecanismo WPAD :

Na configuração do seu servidor DHCP, você deve incluir a opção 252 (por exemplo, para dhcpd):

option local-proxy-config code 252 = text;
...
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.20 192.168.0.30;
  ...
  option local-proxy-config "http://your_http_server/proxy.pac";
}

Seu proxy.pac é apenas um pouco de JS que informa ao navegador o que deve ser procurado (por exemplo):

function FindProxyForURL(url, host) {
    var proxy = "PROXY your_proxy_server:3128; DIRECT";
    var direct = "DIRECT";

    // no proxy for local hosts without domain:
    if(isPlainHostName(host)) return direct;

    // proxy everything else:
    return proxy;
}

A segunda opção é usar iptables para redirecionar o tráfego HTTP de forma transparente (por exemplo):

iptables -t nat -A PREROUTING -i eth0 -s ! your_proxy_server -p tcp --dport 80 -j DNAT --to your_proxy_server:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d your_proxy_server -j SNAT --to iptables-box
iptables -A FORWARD -s local-network -d your_proxy_server -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
    
por 07.10.2013 / 17:49
0

Sim, você pode, ele é chamado de proxy de intercepção transparente. Apenas redirecione o tráfego para o squid e configure-o para atuar como proxy transparente.

A propósito, ter implementado manualmente a configuração de proxy nos clientes é benéfico. Se alguma coisa está falando diretamente com o seu proxy, você sabe que há algo estranho. E você pode definir proxy não por IP, mas por um nome de host, assim você pode mudar o IP referindo-se a este nome de host.

    
por 07.10.2013 / 17:27