Hallo zusammen,
hier zeige ich euch, wie ihr auf eurem VPS / Root einen anonymen Proxy einrichtet. Im Netz gibt es dazu bereits einige Tutorials, die aber größtenteils auf die Einrichtung eines sog. Transparent Proxy abzielen. Wer sich hier dann mit copy&paste begnügt, ist nicht anonym und kann den Proxy genauso gut in die Tonne treten
Proxy Services
Transparent Proxy
Diese Art von Proxy funktionieren so, wie sie sollen. Die gesendete IP-Adresse ist immer die von eurem genutzten Proxy, also scheinbar verschleiert. Hier ist allerdings zu beachten, dass die eigentliche IP-Adresse (also eure) im HTTP Header mitgesendet wird und sich der Proxy auch als Proxy identifiziert. Transparent Proxy sind also nicht wirklich anonym und werden meist zum Cachen von Websites benutzt.
Anonymous Proxy
Ein anonymer Proxy sendet keine IP-Adresse im HTTP Header mit, identifiziert sich aber selbst als Proxy.
Highly Anonymous Proxy
Dieser Proxy sendet ebenfalls keine IP-Adresse im HTTP Header mit und identifiziert sich auch nicht als Proxy. Ob sich ein Proxy als solcher identifiziert, kann man beispielsweise
prüfen.
Proxy einrichten mit Squid
Squid installieren
Verbindet euch auf euren VPS / Root via SSH und eignet euch am besten gleich Root-Rechte an, falls nicht schon durch den Login-Auth geschehen. Das erspart euch jedes Mal die sudo-Anweisung vor den Befehlen. Danach aktualisiert ihr die Paketquellen
apt-get update
und installiert den Squid Proxy-Service
apt-get install squid3
Squid Standard-Konfiguration
Der Squid-Dienst muss jetzt natürlich noch richtig konfiguriert werden. Schließlich wollen wir einen Highly Anonymous Proxy.
Hierfür wechseln wir in das Verzeichnis, in welchem die Konfigurationsdatei von Squid liegt
cd /etc/squid3
Mit dem Befehl
ls
könnt ihr euch anschauen, welche Dateien dort vorhanden sind. Wir benötigen die Datei squid.conf. Um sicher zu gehen, legen wir zuerst eine Sicherungskopie der Datei an
cp squid.conf squid.backup
Die originale Konfiguration ist nun unter squid.backup gesichert und wir können mit der eigentlichen squid.conf arbeiten. Ich bevorzuge zum Bearbeiten von Dateien den Editor nano
nano squid.conf
In der Standard-Konfiguration steht ziemlich viel, einiges davon ist auskommentiert (= deaktiviert) und mit vielen Notizen versehen. Wir können nun die einzelnen Parameter mühsam raussuchen (Strg + W), oder wir erstellen uns selbst eine neue Konfiguration und löschen die bisherige. Wir beenden den Editor (Strg + X) und entfernen die Datei
rm squid.conf
Jetzt geben wir wieder
nano squid.conf
ein um eine neue und leere Squid-Konfiguration zu erstellen. Kommentare könnt ihr mit einer vorangestellten Raute # erstellen.
Squid konfigurieren
Wir fügen nun mehrere Blöcke ein, welcher wir sauber voneinander trennen. Das erhöht die Übersichtlichkeit und erleichtert die Fehlersuche. In einigen Blöcken sind grün markierte Zeilen. Diese sind notwendig, wenn später eine Authentifizierung durchgeführt werden soll. Sprich, man kann sich nur mit Benutzername und Passwort mit dem Proxy verbinden (empfohlen). Wer das ganze als Public Proxy laufen lassen will, muss diese Zeilen auskommentieren oder entfernen. Orange markierte Werte innerhalb der Blöcke sind von euch individuell anzupassen.
Access Control List
Zuerst richten wir die Zugriffssteuerung ein, da ohne diese jeder Benutzer Vollzugriff auf unseren Dienst hätte. Folgender erste Block wird in die Datei squid.conf eingefügt.
# Access Control List
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl ncsa_users proxy_auth REQUIRED
Einige Protokolle sind in ihrem inneren Aufbau recht ähnlich (z.B. SMTP und HTTP). Um zu verhindern, dass der Proxy als SMTP-Gateway missbraucht wird (und schnell in die Mailabuse Blacklist rutscht), werden hier sog. Safe_ports festgelegt. Anders ausgedrückt: Protokolle, welche an ihrem hier festgelegten Port klopfen, werden eingelassen. Um auch Programme wie Pidgin, Adium, etc. tunneln zu können, werden die dynamischen Ports ab 1025 ebenfalls geöffnet.
HTTP Access Rules
Hier werden Regeln für Pakete, welche über HTTP, HTTPS oder FTP versendet werden und die oben definierten ACL-Elemente festgelegt.
# HTTP Access Rules
http_port 8899 transparent
http_access allow manager localhost
http_access allow manager
http_access allow !Safe_ports
http_access allow CONNECT !SSL_ports
http_access allow localhost
http_access allow ncsa_users
http_access deny all
Zuerst legt ihr euch euren Proxy-Port fest (hier 8899). Achtet darauf, dass ihr keine reservierten Ports belegt. Eine umfassende Liste der standardisierten Ports gibt es
. Danach erfolgen die Zugriffsberechtigungen der definierten ACL-Elemente. allow heißt, Zugriff wird gewährt, deny dementsprechend geblockt.
Konfiguration des HTTP Header
Folgender Block überschreibt die Standard-Werte des HTTP Header und nutzt unsere eigene Konfiguration.
# Changing HTTP Header
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Cookie allow all
request_header_access Proxy-Connection allow all
request_header_access All deny all
request_header_replace User-Agent Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0
Eine Erklärung der einzelnen HTTP Headerfelder gibt es
, das würde an dieser Stelle eher den Rahmen sprengen. Interessant für uns ist auch, dass wir an dieser Stelle den User-Agent ändern können. So tauchen wir beispielsweise als Firefox-Benutzer der Version 36 mit Windows 8.1 auf. Eine Liste der verfügbaren User-Agents findet ihr .
X-Forwarded-For deaktivieren
Eine der wichtigsten, wenn nicht sogar DIE wichtigste Regel. Wie im Eingangstext bereits beschrieben, sendet Squid in der Standardkonfiguration eure IP-Adresse im HTTP Header (X-Forwarded-For) mit. Um das zu verhindern, setzen wir eine extra Regel auf, ohne den o.g. Header zu beeinflussen
forwarded_for off
Logging deaktivieren
Standardmäßig loggt Squid Zugriffe in die Log-Datei /var/log/squid3/access.log. Um dies auszuschalten, könnt ihr folgenden Parameter setzen
access_log none
Die Konfiguration wäre an dieser Stelle abgeschlossen. Solltet ihr euch für eine Authentifizierung entschließen (was ich euch dringend rate), dann fahrt mit der Anleitung fort. Ansonsten speichert ihr die Datei (Strg + O) und schließt diese (Strg + X). Anschließend wird der Squid-Dienst neu gestartet, damit die Konfiguration eingelesen werden kann
service squid3 restart
Sollte ein Fehler auftauchen, siehe Fehlerbehung am Ende der Anleitung. Achtet darauf, dass ihr die grün gefärbten Zeilen entfernt habt, wenn ihr keine Authentifizierung benutzen wollt!
Proxy Authentifizierung
Um sich nun mit einem Benutzernamen und Passwort zum Proxy verbinden zu können, müssen wir noch ein paar weitere Konfigurationen erstellen. Zuerst öffnet ihr wieder die squid.conf Datei und fügen ganz am Anfang der Datei - noch vor der ACL - folgenden Block ein
# Proxy Authentification
auth_param basic realm Proxy Login
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/squid_passwd
auth_param basic credentialsttl 4 hours
auth_param basic children 5
In der ersten Zeile könnt ihr einen Text eingeben, welcher dann bei der Login-Aufforderung erscheint. Die zweite Zeile definiert die ausgelagerten Authentifizierungsdateien (kennt man auch vom htaccess-Verzeichnisschutz). Weiter geht es mit der Zeitangabe der timetolive-Direktive, also wie lange eine Benutzername-Passwort-Kombination gilt. Hier wird alle 4h nach dem Benutzernamen und Passwort gefragt (kann man sich aber auch einspeichern / merken lassen). Wer das nicht will, entfernt die Zeile oder nimmt einen sehr hohen Wert, z.B. 24h. Die letzte Zeile legt die Anzahl der Authentifizierungsprozesse fest. Mit dem Wert 5 können sich 5 Benutzer beim Proxy anmelden, mit dem Wert 1 eben nur einer.
Vorausgesetzt, ihr habt die in den anderen Blöcken grün eingefärbten Zeilen belassen, könnt ihr nun speichern und schließen.
Benutzername und Passwort anlegen
Hierfür benötigen wir ein Modul, welches mit dem Apache2-Paket kommt. Eventuell müsst ihr dieses Modul erst installieren
apt-get install apache2-utils
Ich arbeite hier mit der Basis-Authentifizierung htpasswd. Nachteil ist, dass hierbei das Passwort im Klartext via dem HTTP Header übermittelt wird (allerdings an unseren eigenen VPS). Die sichere Methode wäre htdigest, welche das Passwort hashed. Ich habe allerdings auf meinem VPS immer Probleme damit, sodass ich wieder zur Basis-Authentifizierung übergegangen bin.
htpasswd -c /etc/squid3/squid_passwd Benutzername
Gebt hier euren Benutzernamen ein. Um Probleme bzgl. der Kompatibilität zu vermeiden, hier am besten auch keine Umlaute und keine Leerzeichen verwenden. Mit der Flagge -c legt ihr eine neue Datei an. Jetzt werdet ihr nach einem UNIX-konformen Passwort gefragt. Weitere Benutzer legt ihr mit dem gleichen Befehl an, lasst aber die Flagge -c weg. Die Datei besteht ja schon und würde ansonsten überschrieben werden.
Startet jetzt euren Squid-Dienst neu
service squid3 restart
Fehlerbehebung
Squid sollte sauber neustarten und dabei folgende Meldung auswerfen
[ ok ] Restarting Squid HTTP Proxy 3.x: squid3.
Wenn dies nicht der Fall ist und ein Fehler aufgetreten ist (z.B. fehlerhafte Konfiguration), schaut das z.B. so aus
2015/05/16 06:20:13| Can't use proxy auth because no authentication schemes are fully configured.
FATAL: ERROR: Invalid ACL: acl auth_users proxy_auth REQUIRED
Squid Cache (Version 3.1.20): Terminated abnormally.
CPU Usage: 0.004 seconds = 0.004 user + 0.000 sys
Maximum Resident Size: 17552 KB
Page faults with physical i/o: 0
failed!
In diesem Fall gab es einen Fehler, nämlich mit der Authentifizierung. Netterweise wird euch auch gleich die Wurzel des Bösen angezeigt, sodass ihr gleich den Fehler beheben könnt. Hier wäre das in der Datei squid.conf
FATAL: ERROR: Invalid ACL: acl auth_users proxy_auth REQUIRED
Dies ist nur ein Beispiel. Der o.g. Fehler entsteht auf meinem VPS, wenn ich die Authenifizierungsmethode htdigest verwende.
Proxy anwenden
Ihr könnt nun euren eingerichteten Proxy mit der IP-Adresse eures VPS und dem festgelegten Port verwenden. Je nach Programm könnt ihr dort gleich Benutzername und Passwort eingeben, ansonsten bekommt ihr (z.B. beim Browser) eine WWW-Auth angezeigt, in welche ihr die Daten dann eingeben müsst.
Überprüft euren Proxy mit manipuliertem User-Agent z.B.
.
Hier noch einmal die komplette Konfigurationsdatei an einem Stück (mit Authentifizierung). Orange markierte Werte bitte anpassen