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 Lubuntu
antes, mas suspeito que seja apenas um Ubuntu
derivado 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 ubuntu
derivados, existe um squid
pacote no repositório que é facilmente instalado usando apt
ou synaptic
. Após a instalação, comece editando /etc/squid/squid.conf
e 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 DNAT
e redirecionar o tráfego para seu squid
proxy.
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á https
o tráfego, pois https
foi 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çarSquidGuard
na 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_PROXY
eNO_PROXY
in/etc/environment
. - Configurando os proxies http, https e ftp para apt in
/etc/apt/apt.conf.d/80proxy
(usando a sintaxeAcquire::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.