Implementieren eines globalen Proxys mit iptables

Implementieren eines globalen Proxys mit iptables

Ich verwende eine Linux-Box (Lubuntu 12.04) in einer Windows-Umgebung, in der zum Konfigurieren des Internetzugriffs eine PAC-Datei verwendet wird.

Proxy.pac-Datei:

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 hat, soweit ich weiß, kein globales Proxysystem.

Anstatt zu versuchen, mit Shell-Variablen wie HTTP_PROXY herumzuspielen, die nur von manchen Programmen respektiert werden (beispielsweise nicht von Chromium), dachte ich, dass man mit iptables den gesamten Datenverkehr transparent über den Proxy umleiten und so effektiv einen globalen Proxy implementieren könnte.

Ist das möglich und wenn ja, wie würde ich dabei vorgehen?

EDIT: Ich sollte klarstellen, dass ich kein Administrator bin und auch nicht versuche, einen Proxy einzurichten. Der Proxy ist bereits eingerichtet und um Maschinen mit dem Internet zu verbinden, muss die automatische Proxy-Konfiguration aktiviert und auf die obige PAC-Datei verwiesen werden. Direkte Verbindungen sind blockiert.

Anstatt jede Anwendung einzeln zu konfigurieren, wollte ich iptables verwenden, um den Datenverkehr automatisch über den Proxy zu leiten.

Antwort1

Ich muss gestehen, dass ich es noch nie zuvor verwendet habe Lubuntu, aber ich vermute, dass es sich nur um ein UbuntuDerivat handelt, das in einer virtuellen Maschine ausgeführt wird. Sich beim Proxying auf JavaScript zu verlassen, ist sehr dumm, da es in vielen Fällen leicht umgangen oder vollständig ignoriert werden kann ... was letztendlich die Vorteile der Verwendung eines Proxys von vornherein zunichte macht.

Ich würde zunächst ein richtiges Proxy-System einrichten mitsquid. Für ubuntuDerivate gibt es squidim Repository ein Paket, das einfach mit aptoder installiert werden kann synaptic. Beginnen Sie nach der Installation mit der Bearbeitung von /etc/squid/squid.confund fügen Sie die folgenden Einstellungen hinzu oder ändern Sie sie mit denen, die Sie für angemessen halten:

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

Es gibt noch viele weitere Konfigurationsoptionen, die Sie verwenden können, aber diese sind für die meisten Anwendungen ein ziemlich guter Anfang. Danach besteht der nächste Schritt einfach darin, iptables in Ihrem Standardrouter zu konfigurieren DNATund den Datenverkehr an Ihren squidProxy umzuleiten.

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

Natürlich möchten Sie das in eine Art Startskript einfügen, damit die Regeln bei jedem Start Ihres Routers angewendet werden. Denken Sie außerdem daran, dass dies keinen Einfluss auf httpsden Datenverkehr hat, da httpses absichtlich so konzipiert ist, dass der Datenverkehr NICHT weitergeleitet werden kann (oder von jemandem in der Mitte abgefangen/entschlüsselt/usw.). Wenn Sie Datenverkehr (zu fragwürdigen Websites) herausfiltern möchten, können Sie auchSquidGuardin die Mischung.

Es ist möglich, HTTPS-Verkehr zu proxyen, aber es wird dringend davon abgeraten. Wenn Sie diese Funktionalität wirklich implementieren möchten, gibt es eine gute AnleitungHier.

Antwort2

Das ist, was ich letztendlich gemacht habe:

  • Festlegen der Umgebungsvariablen ALL_PROXY, HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, und NO_PROXYin /etc/environment.
  • Einrichten der http-, https- und ftp-Proxys für apt in /etc/apt/apt.conf.d/80proxy(mit der Syntax Acquire::http::proxy "http://xxx.xxx.xxx.xxx:8000";)
  • Verwenden vonProxy-Kettenfür alle verbleibenden Programme, die die Umgebungsvariablen nicht respektieren und keine integrierte Unterstützung für Proxys haben.

verwandte Informationen