Estoy ejecutando una máquina Linux (Lubuntu 12.04) en un entorno Windows donde se usa un archivo pac para configurar el acceso a Internet.
Archivo 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, hasta donde yo sé, no tiene un sistema de proxy global.
En lugar de intentar jugar con variables de shell como HTTP_PROXY que solo algunos programas respetan (no Chromium, por ejemplo), estaba pensando que iptables podría usarse para redirigir de forma transparente todo el tráfico a través del proxy, implementando efectivamente un proxy global.
¿Es esto posible y, si lo es, cómo lo haría?
EDITAR: Debo aclarar que no soy administrador ni estoy intentando configurar un proxy. El proxy ya está configurado y para que las máquinas se conecten a Internet es necesario habilitar la configuración automática del proxy y apuntarlo al archivo pac anterior. Las conexiones directas están bloqueadas.
En lugar de configurar cada aplicación individualmente, esperaba usar iptables para enrutar automáticamente el tráfico a través del proxy.
Respuesta1
Confieso que nunca lo he usado Lubuntu
antes, pero sospecho que es solo un Ubuntu
derivado que se ejecuta en una máquina virtual. Confiar en javascript para realizar el proxy es algo muy tonto, ya que en muchos casos se omite fácilmente o se ignora por completo... lo que, en última instancia, anula las ventajas de usar un proxy para empezar.
Yo comenzaría configurando un sistema proxy adecuado usandosquid
. Para ubuntu
los derivados, hay un squid
paquete en el repositorio que se instala fácilmente usando apt
o synaptic
. Después de la instalación, comience editando /etc/squid/squid.conf
y agregue o modifique las siguientes configuraciones con las que considere apropiadas:
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
Hay muchas más opciones de configuración que puedes usar, pero son un buen comienzo para la mayoría de los usos. Después de eso, el siguiente paso es simplemente configurar iptables en su enrutador predeterminado DNAT
y redirigir el tráfico a su 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
Por supuesto, querrás poner eso en algún tipo de script de inicio para que las reglas se apliquen cada vez que arranca tu enrutador. Además, tenga en cuenta que esto no afectará https
el tráfico, ya que https
está diseñado deliberadamente para NO permitir que el tráfico sea proxy (o interceptado/descifrado/etc. por alguien en el medio). Si desea filtrar el tráfico (a sitios cuestionables), también puede tirarSquidGuard
en la mezcla.
Es posible representar el tráfico https, pero no es muy recomendable. Si realmente desea implementar esa funcionalidad, hay una buena guíaaquí.
Respuesta2
Esto es lo que terminé haciendo:
- Configuración de las variables de entorno
ALL_PROXY
,HTTP_PROXY
,HTTPS_PROXY
,FTP_PROXY
yNO_PROXY
en/etc/environment
. - Configuración de los servidores proxy http, https y ftp para apt in
/etc/apt/apt.conf.d/80proxy
(usando la sintaxisAcquire::http::proxy "http://xxx.xxx.xxx.xxx:8000";
) - Usandocadenas proxypara cualquier programa restante que no respete las variables de entorno y no tenga soporte integrado para proxies.