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 Ubuntu
Derivat 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 ubuntu
Derivate gibt es squid
im Repository ein Paket, das einfach mit apt
oder installiert werden kann synaptic
. Beginnen Sie nach der Installation mit der Bearbeitung von /etc/squid/squid.conf
und 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 DNAT
und den Datenverkehr an Ihren squid
Proxy 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 https
den Datenverkehr hat, da https
es 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 auchSquidGuard
in 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
, undNO_PROXY
in/etc/environment
. - Einrichten der http-, https- und ftp-Proxys für apt in
/etc/apt/apt.conf.d/80proxy
(mit der SyntaxAcquire::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.