Implementando um proxy global com iptables

Implementando um proxy global com iptables

Estou executando uma caixa Linux (Lubuntu 12.04) em um ambiente Windows onde um arquivo pac é usado para configurar o acesso à Internet.

arquivo proxy.pac:

function FindProxyForURL(url, host){
  var proxy_yes = "PROXY xxx.xxx.xxx.xxx:8000";
  var proxy_no = "DIRECT";
  if (shExpMatch(url, "*//yyy.*")) { return proxy_no; }
  if (shExpMatch(url, "*//zzz.zzz.*")) { return proxy_no; }
  if (shExpMatch(url, "*foo.com*")) { return proxy_no; }
  //Proxy anything else
  return proxy_yes;
}

O Lubuntu, até onde eu sei, não possui um sistema de proxy global.

Em vez de tentar mexer com variáveis ​​​​de shell como HTTP_PROXY que apenas alguns programas respeitam (não o Chromium, por exemplo), eu estava pensando que o iptables poderia ser usado para redirecionar de forma transparente todo o tráfego através do proxy, implementando efetivamente um proxy global.

Isso é possível e, se for, como eu faria isso?

EDITAR: Devo esclarecer que não sou administrador e nem estou tentando configurar um proxy. O proxy já está configurado e fazer com que as máquinas se conectem à Internet requer a ativação da configuração automática do proxy e o direcionamento para o arquivo pac acima. As conexões diretas estão bloqueadas.

Em vez de configurar cada aplicativo individualmente, eu esperava usar o iptables para rotear automaticamente o tráfego pelo proxy.

Responder1

Confesso que nunca usei Lubuntuantes, mas suspeito que seja apenas um Ubuntuderivado rodando em uma máquina virtual. Depender de javascript para fazer seu proxy é uma coisa muito boba de se fazer, pois é facilmente contornado ou completamente ignorado em muitos casos... o que acaba anulando as vantagens de usar um proxy para começar.

Eu começaria configurando um sistema proxy adequado usandosquid. Para ubuntuderivados, existe um squidpacote no repositório que é facilmente instalado usando aptou synaptic. Após a instalação, comece editando /etc/squid/squid.confe adicione ou modifique as seguintes configurações com as que você considerar apropriadas:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan

Existem muito mais opções de configuração que você pode usar, mas essas são um bom começo para a maioria dos usos. Depois disso, o próximo passo é simplesmente configurar o iptables em seu roteador padrão DNATe redirecionar o tráfego para seu squidproxy.

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Claro, você gostaria de colocar isso em algum tipo de script de inicialização para que as regras sejam aplicadas sempre que o roteador inicializar. Além disso, tenha em mente que isso não afetará httpso tráfego, pois httpsfoi deliberadamente projetado para NÃO permitir que o tráfego seja proxy (ou interceptado/descriptografado/etc por alguém intermediário). Se desejar filtrar o tráfego (para sites questionáveis), você também pode lançarSquidGuardna mistura.

É possível fazer proxy do tráfego https, mas é altamente não recomendado. Se você realmente deseja implementar essa funcionalidade, há um bom guiaaqui.

Responder2

Isto é o que acabei fazendo:

  • Configurando as variáveis ​​de ambiente ALL_PROXY, HTTP_PROXY, HTTPS_PROXY, FTP_PROXYe NO_PROXYin /etc/environment.
  • Configurando os proxies http, https e ftp para apt in /etc/apt/apt.conf.d/80proxy(usando a sintaxe Acquire::http::proxy "http://xxx.xxx.xxx.xxx:8000";)
  • Usandocadeias proxypara quaisquer programas restantes que não respeitem as variáveis ​​de ambiente e não tenham suporte integrado para proxies.

informação relacionada