Implementando un proxy global con iptables

Implementando un proxy global con iptables

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 Lubuntuantes, pero sospecho que es solo un Ubuntuderivado 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 ubuntulos derivados, hay un squidpaquete en el repositorio que se instala fácilmente usando apto synaptic. Después de la instalación, comience editando /etc/squid/squid.confy 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 DNATy redirigir el tráfico a su 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

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á httpsel tráfico, ya que httpsestá 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 tirarSquidGuarden 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_PROXYy NO_PROXYen /etc/environment.
  • Configuración de los servidores proxy http, https y ftp para apt in /etc/apt/apt.conf.d/80proxy(usando la sintaxis Acquire::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.

información relacionada