Squid Proxy unter Ubuntu 14.04 LTS Linux einrichten als HTTP Proxy

Squid Proxy unter Ubuntu 14.04 LTS Linux einrichten als HTTP Proxy

Da ich eine Vielzahl von Servern betreibe (primär zur Entwicklung/Test), und damit einhergehend über eine gewisse Anzahl von IP Adressen verfüge, habe ich mir überlegt, könnte ich dies doch zusammenführen und auf den Servern einen Proxy installieren, um dann unter anderer (eigener) IP oder sogar aus einem anderen Land heraus flexibel surfen zu können.

(Letztes geht z. B. auch recht gut mit dem Hola Unblocker, wobei ich diesen bislang nur für gelegentliche Einkäufe und eine Umgehung von Beschränkungen auf bestimmte Regionen benutzt habe – also z. B. um an gewisse Angebote in USA oder Brasilien zu kommen.)

Vorteile

Wenn man ohnehin Server oder virtuelle Server betreibt, die eine ausreichend schnelle Anbindung haben (das sollte eigentlich leicht der Fall sein – bei allem ab 100MBit/s sollte man selbst Filme gut über einen Proxy sehen können) und insbesondere über eine ausreichende Trafficerlaubnis verfügen, erhält man für kleinen Mehraufwand die Möglichkeit, von überall aus die Identität des Servers anzunehmen.

Hier zeige ich, wie ein anonymer Proxy aufgesetzt werden kann, bei dem man sich von überall auf der Welt per Login authentifizieren und diesen benutzen kann.

Anonym ist natürlich hier nur bedingt richtig.. aufgrund der IP läßt sich normalerweise nachverfolgen, wer der Urheber einer ungewünschten Aktion war, insofern eignet sich diese Methode auch nur, um Sperren zu umgehen oder das aktuelle Endgerät zu verschleiern, und definitiv nicht für rechtlich Fragwürdiges.

Auf alle Fälle kann man die aktuelle IP, mit der man unterwegs ist, so gut verstecken.

Installation Squid

Eine gute Anleitung findet sich hier.

Ich benutze ungerne vim/vi, bei denen ich jedesmal die Tastaturkürzel googeln muß, stattdessen installiere ich mir schnell Nano – sofern er nicht bereits vorhanden ist.

apt-get install nano

Anschließend werden noch squid3 sowie, falls benötigt, die http-utils (für htpasswd) installiert:

apt-get install squid3
apt-get install http-utils

Nun können wir für einen Benutzer proxyuser ein Passwort in die Passwortdatei eintragen.

cd /etc/squid3
htpasswd -c squid_passwd <proxyuser>

Benötigen wir mehrere Benutzer, muß man sich die Optionen von htpasswd einmal genauer ansehen, insbesondere das c weglassen. Ob das b wirklich benötigt wird, weiß ich nicht – zumal hier die Anzahl der Zeichen im Passwort auf 8 begrenzt wird, was die Sicherheit vermindert.

Jetzt können wir die squid.conf sichern (z. B. kopieren oder verschieben), ich habe sie verschoben, da diese Datei doch extrem lang ist, und man so leicht die Übersicht verliert.

Anschließend befülle ich per

nano /etc/squid3/squid.conf

sowie copy&paste des Textes unten (paste geht im Putty mit der rechten Maustaste) die Squid-Konfig-Datei.

1.2.3.4 und 1.2.3.5 sind hierbei die beiden IPs, die der Server hat, diese Liste läßt sich kürzen, wie auch erweitern. In dieser Konfiguration werden Anfragen, die an 1.2.3.4 gehen, auch von 1.2.3.4 abgehen, das gleiche gilt für 1.2.3.5. Hier sollte man die eigene(n) IP(s) eintragen.

Als Port nehme ich nicht den Standard 3128, sondern 3456, das macht den Proxy minimal robuster gegen Portscans/Attacken.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
acl ip1 myip 1.2.3.4
acl ip2 myip 1.2.3.5
tcp_outgoing_address 1.2.3.4 ip1
tcp_outgoing_address 1.2.3.5 ip2
http_port 3456
#use password file created with htpasswd
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/squid_passwd
auth_param basic realm proxy
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
#typically, the entries in /etc/resolv.conf are taken, and sufficient
#dns_nameservers 8.8.8.8 8.8.4.4 208.56.222.222 208.67.220.220
#in my case, servers only had ip4 protocol, but proxy tried to use ip6 with preference, which resulted in failed connections
dns_v4_first on
#squid3 typically is a caching proxy server, here only the redirection is used
cache deny all
#forwarded_for transparent
#anonymize
forwarded_for off
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-Location 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
#range option is omitted in most samples, it is needed for resume
request_header_access Range allow all
request_header_access Referer 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 Proxy-Connection allow all
#either pass on user-agent unchanged
request_header_access User-Agent allow all
#or change user-agent to be mozilla/linux with following 2 lines
#request_header_access User-Agent deny all
#request_header_replace User-Agent Mozilla/5.0 (X11; Linux x86_64)
request_header_access Cookie allow all
request_header_access All deny all
acl CONNECT method CONNECT
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access deny all
coredump_dir /var/spool/squid3
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

Anschließend können wir den squid3-Service (neu) starten:

service squid3 restart

Führen wir diesen Befehl 2x aus, sehen wir auch, ob der squid3 gestartet wurde (dann beendet er sich nämlich bevor er erneut gestartet wird, sonst steht dort, daß er nicht beendet werden konnte als Fehlermeldung).

root@myserver:~# service squid3 restart
squid3 stop/waiting
squid3 start/running, process 17512
root@myserver:~#

Die Konfigurationsdatei läßt sich übrigens recht komfortabel ohne Kommentare (#) folgendermaßen anzeigen:

root@myserver:/etc/squid3# grep ^[^#] squid.conf

Hier werden nur Zeilen angezeigt, die nicht mit einem # (dem Beginn eines Kommentares) anfangen.

Jetzt können wir den Proxy mit IP, Port, Benutzernamen und Passwort (wie oben vergeben) von jedem Rechner aus benutzen.

Abschließend

Eine Beschränkung der Zugreifer auf IP Bereiche wäre ebenfalls möglich, ist aber oft nicht sinnvoll, da man an den meisten Anschlüssen (DSL, mobil, …) wechselnde IP Adressen hat. Hier ist also die Authentifizierung besser geeignet.

In meinem Fall war insbesondere wichtig, daß ich ipv4 als Default setze, sonst sind viele (aber nicht alle) Anfragen fehlgelaufen (man erhält einen Timeout, Webseiten laden nur teilweise, es scheint generell sehr langsam zu sein u. ä.). Auch die Option, range im Header zu erlauben, findet sich in vielen Anleitungen nicht, wird jedoch für das Fortsetzen (Pause/Resume) eines Downloads benötigt.

Ferner habe ich den Cache ausgestellt (da in meinem Falle sinnlos) und eben die Anonymisierung im Header angeschaltet.

Mit den von mir aufgesetzten Proxies, auf ausreichend schnellen Servern, komme ich so auf 1MB/s+ bei Dateitransfers und bemerke kaum eine Verzögerung beim Browsen.

Das Ergebnis können wir uns, wenn wir Proxy ein-/aus-/umschalten bei Webseiten wie

ifconfig <- langsam, bietet aber Zusatzinfos wie den user-agent whatismyip <- schnell, mit wenig Info Google <- Suche nach „what is my ip” , ansehen. Viel Freude und Erfolg! 🙂

7 thoughts on “Squid Proxy unter Ubuntu 14.04 LTS Linux einrichten als HTTP Proxy

    1. Well.. it all depends on what you want to do.
      Squid is a proxy primarily used for http and some other web protocols.
      The Wifi part does not really matter: any networking connection is fine, and using WiFi or LAN makes no difference – you have to be able to identify each device you want to use here though, be it by name or IP.
      Also, the „2 wifi usb“ I assume refers to WiFi USB dongles, probably connected to the Linux machine with squid? That should not be a problem, see above.
      What I am missing is where this should go: if the WiFi Router is connected to the Internet or where else, and what the whole purpose should be (bridging WiFis? I suppose there should be better solutions for this though).
      Even so, the very short answer to the question is yes, though I assume the question would need to be put in a different way to really tell for the case.

  1. In den „Autostart” sollte squid3 auch noch, ähnlich wie hier bei SO beschrieben.

    Also dort in der Datei /etc/irc.local vor der letzten Zeile exit 0

    service start squid3
    exit 0

    einfügen (also nur die „service” Zeile, exit 0 stand ja schon vorher da).

  2. Das Ganze funktioniert auch unter Centos7, squid3 heißt dort squid (und ist ebenfall Version 3 von squid), eine Anleitung findet sich hier.

    Die Konfigurationsdatei sieht dann aufgrund anderer Pfade auch leicht anders aus, bei mir:

    1
    
    auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd

    Installiert wird squid mit

    yum install squid

    gestartet sowie als Service aktiviert wird er per

    service squid start
    chkconfig squid on

    Sollte das firewall-cmd Kommando nicht funktionieren, so hat man keine Firewall aktiviert. Ouch..

  3. Evtl. findet man die http-utils nicht, dann sollte man

    apt-get install apache2-utils

    verwenden.

    Evtl. muß man noch den Port in ufw freigeben:

    ufw allow 3456/tcp
  4. Danke für diese Info. Ich habe auch gerade für eine Schule einen Ubuntu Server aufgesetzt, auf dem Squid zusammen mit dem Dansguardian läuft. Ursprünglich hat Squid aber das browsen sehr verlangsamt und ich habe mich dann entschlossen die o.a Config mal zu kopieren und den Proxy damit zu betreiben. Das funktioniert jetzt super und ohne merkliche Verzögerung. Allerdings habe ich die Authentifizierung herausgenommen, damit sich die Schüler (Grundschule) zum browsen nicht extra anmelden müssen. Bis auf die IP Adressen habe ich alles so belassen und ich hoffe, ich habe dadurch keine Sicherheitslücke eröffnet? Ich sehe das doch richtig, dass die ACL’s nur den Zugriff aus dem lokalen Netz regeln? Da soll es ja keine Beschränkungen geben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.