Implementando um proxy global com iptables

0

Estou executando uma caixa do 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;
}

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

Ao invés de tentar mexer com variáveis 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 todo o tráfego através do proxy, implementando efetivamente um proxy global.

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

EDIT: Eu deveria esclarecer que eu não sou um administrador, nem estou tentando configurar um proxy. O proxy já está configurado e fazer com que as máquinas se conectem ao interent requer a ativação da configuração automática do proxy e o apontamento no arquivo pac acima. 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.

    
por pR0Ps 30.05.2012 / 18:02

2 respostas

0

Isso foi o que acabei fazendo:

  • Definindo as variáveis de ambiente ALL_PROXY , HTTP_PROXY , HTTPS_PROXY , FTP_PROXY e NO_PROXY em /etc/environment .
  • Definindo os proxies http, https e ftp para o apt em /etc/apt/apt.conf.d/80proxy (usando a sintaxe Acquire::http::proxy "http://xxx.xxx.xxx.xxx:8000"; )
  • Usando proxies para qualquer programa que não respeite as variáveis de ambiente e não tenha suporte interno para proxies.
por 14.08.2012 / 17:24
2

Confesso que nunca usei Lubuntu antes, mas suspeito que seja apenas um derivado Ubuntu em execução em uma máquina virtual. Confiar em javascript para fazer seu proxy é uma coisa muito boba de se fazer, já que é facilmente contornado ou completamente ignorado em muitos casos ... o que acaba por anular as vantagens de usar um proxy para começar.

Eu começaria configurando um sistema de proxy adequado usando squid . Para ubuntu derivadas, há um pacote squid no repositório que é facilmente instalado usando apt ou synaptic . Após a instalação, comece editando o /etc/squid/squid.conf e adicione ou modifique as seguintes configurações com as que julgar 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 estas 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 para DNAT e redirecionar o tráfego para o seu proxy squid .

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 que você gostaria de colocar isso em algum tipo de script de inicialização para que as regras sejam aplicadas toda vez que o roteador inicializar. Além disso, lembre-se de que isso não afetará o tráfego https , pois https foi deliberadamente projetado para NÃO permitir que o tráfego seja intermediado por proxy (ou interceptado / descriptografado / etc por alguém no meio). Se você deseja filtrar o tráfego (para sites questionáveis), você também pode lançar SquidGuard no mix.

É possível fazer proxy no tráfego de https, mas não é altamente recomendável. Se você está realmente querendo implementar essa funcionalidade, há um bom guia aqui .

    
por 30.05.2012 / 18:20