[TUT] Squid Proxy-Server unter Windows & Linux

  • #1
R

RavensMetaller

Guest
Hallöchen zusammen,

KerstenG ist ja so wild auf meine Proxy-Server-Dokumentation, das ich Euch diese nicht länger vorenthalten möchte. Entstanden ist das ganze aus einem Thread in der Linux-Rubrik des Wintotal-Forums.

Diese Dokumentation richtet sich an alle, die unter Windows UND unter Linux gerne mal einen vernünftigen Proxyserver aufsetzten wollen.

Was ist ein Proxyserver ? Ein Proxyserver dient dazu, häufig besuchte Webseiten zwischenzuspeichern um so den entstehenden Traffic zu reduzieren.

Fangen wir an...

Wir brauchen:

- Ein funktionierendes Windows (sollte mindestens Windows NT sein, da es unter den 16Bit-ern(98/ME) zu Problemen kommt)
- Wahlweise eine Linux-Distribution Eurer Wahl (SuSE, Debian, LFS, Mandrake, Fedora...)
- Die portierten Squid-Dateien (wenn der Server unter Windows laufen soll)
- Etwa eine halbe Stunde Zeit

Als erstes laden wir den Windows-Port des Squiddies herrunter. Damit wir nachher nicht allzu viel konfigurieren müssen, entpacken wir diesen nach C:\squid.
squid1.jpg


Zum Editieren der Konfigurations-Datei empfiehlt sich ein verbünftiger Editor (also kein Notepad).
Ich persönlich verwende Ultraedit... Dazu wechseln wir in das Verzeichnis C:\squid\etc. Dort befinden sich zwei Dateien - einmal die squid.conf.default und einmal die mime.conf.default. Bei beiden Dateien entfernen wir das .default, so das daraus die squid.conf und die mime.conf entsteht. Nun öffnen wir die squid.conf und suchen folgende Zeile:

# http_port 3128
Diese ändern wir in:
http_port 3128

Hierzu möchte ich anmerken, das der Standardport 3128 ist, aber im Prinzip auch andere Ports kein Problem darstellen. Häufge Beispiele sind Port 8080 oder sogar 80 (welcher aber im Zusammenspiel mit einem Webserver zu Probleme führt).

Je nach Zugriffsanzahlen des späteren Proxyservers kann man optional auch den Speicherverbrauch etwas erhöhen. Dazu suchen wir folgende Zeile:
# cache_mem 8 MB
und ändern diese in
cache_mem 64 MB

Die Cache-Größe spielt bei einem Proxy-Server natürlich eine entscheidende Rolle. Wir suchen folgende Zeile:
# cache_dir ufs c:/squid/var/cache 100 16 256
und ändern diese ab in
cache_dir ufs c:/squid/var/cache 250 16 256

Dadurch erhält squid die Möglichkeit unter C:\squid\var\cache 250MB an Daten zwischenzulagern.
Die anderen beiden Werte geben Auskunft über die Beschaffenheit des Caches. 16 Cache-Verzeichnisse der ersten Ebene und 256 Verzeichnisse der zweiten Ebene. Hier können die Standardwerte übernommen werden. WICHTIG: unter Windows darf das Dateisystem (ufs) NICHT geändert werden!
Da wir die Aktionen unseres Proxy-Servers auch überwachen möchten, müssen wir die Logdateien aktivieren.

Dazu ändern wir 3 Zeilen von
# cache_access_log c:/squid/var/logs/access.log
# cache_log c:/squid/var/logs/cache.log
# cache_store_log c:/squid/var/logs/store.log

in
cache_access_log c:/squid/var/logs/access.log
cache_log c:/squid/var/logs/cache.log
cache_store_log c:/squid/var/logs/store.log

Der Speicherort der Logdateien kann natürlich Euren Bedürfnissen entsprechend angepasst werden.

Die Mime-Types sollen ebenfalls aktiviert werden, damit zum Beisiel PHP-Dateien nicht downgeloaded, sondern angeschaut werden.

Wir ändern
# mime_table c:/squid/etc/mime.conf
in
mime_table c:/squid/etc/mime.conf

Aktives FTP ist out, darum ändern wir die entsprechende Zeile ab:

Vorher:
# ftp_passive on
Nachher:
ftp_passive on

Falls im eigenen Netzwerk kein DNS-Server zur Verfügung steht, müssen wir Squid sagen, wo er die Namensauflösung erledigen kann:

Wir suchen folgende Zeile
# Example: dns_nameservers 10.0.0.1 192.172.0.4
und ändern diese ab
dns_nameservers <die ip adresse eines DNS-Server> <noch eine ip adresse>

In meinem Beispiel:
dns_nameservers 192.168.0.1 145.253.2.11 145.253.2.75 145.253.2.203

Eine Liste frei Verfügbarer DNS-Server erhaltet ihr .

Damit wir aber überhaupt in den Genuss unseres Proxy-Servers kommen können, müssen wir die ACL's bearbeiten.
Dazu suchen wir folgende Zeile:
acl all src 0.0.0.0/0.0.0.0

und fügen direkt darunter folgendes ein:
acl lokal src 192.168.0.0/255.255.255.0

Diese Netzwerk-Maske muss natürlich den Gegebenheiten in Eurem Netzwerk entsprechen.

Nun muss diese ACL aktiviert werden. Dazu diese Zeichenfolge suchen:
# http_access deny all
Direkt darunter fügen wir folgendes ein:
http_access allow lokal

Dadurch werden alle Rechner mit der IP 192.168.0.xxx autorisiert den Squid überhaupt nutzen zu können.

Die Reihenfolge der ACL's spielt dabei eine Rolle. Wir können über http_access deny all den Zugriff für ALLE verbieten und danach über http_access allow lokal für die lokalen Rechner aktivieren. Dazu muss http_access allow lokal allerdings NACH http_access deny all in der Konfigurationsdatei stehen. Mit anderen Worten... Erst einmal alles verbieten und dann einzelne Rechner/Segmente erlauben.

Damit Squid überhaupt starten kann, müssen wir ihm natürlich noch unserer eigenen FQDN-Namen angeben. Dazu suchen wir nach visible_hostname und fügen entsprechend unseren Hostnamen ein:
visible_hostname asterix.intern.gallien.de

Zum Schluss muss der Cache noch initialisiert werden. Dies geschieht über die Kommandozeile.
Dazu wechseln wir in das Verzeichniss C:\squid\sbin und geben folgendes ein:
squid -z

Folgende Ausgabe müsste nun erscheinen:
squid2.jpg


Nun sind wir soweit, das wir den Squid in Betrieb nehmen können.
Dazu tragen wir den Hostnamen oder die IP-Adresse unseres Proxy-Servers in den Interneteigenschaften ein. Das ganze ist zu finden unter Systemsteuerung - Internetoptionen und dort unter Verbindungen - LAN-Einstellungen Hier das Ergebnis:
squid3.jpg


Der Squid kann nun testweise gestartet werden.
Dazu gehen wir wieder in die Kommandozeile und geben im Verzeichnis C:\squid\sbin ein:
squid

Wenn keine Fehlermeldung erscheint, dann läuft Squid und sollte betriebsbereit sein.
squid4.jpg


Das überprüfen wir, indem wir den Internetexplorer öffnen und eine Webseite unserer Wahl eingeben:
squid5.jpg


Um festzustellen, ob Squid nun tatsächlich die Seiten angefordert hat, werfen wir einen Blick in die Logfiles, welche unter C:\squid\var\logs zu finden sind:
squid6.jpg


Wir öffnen die Datei C:\squid\var\logs\access.log
squid7.jpg


Zur Erklärung:
192.168.0.5 TCP_MISS/200 3273 GET - DIRECT/213.133.111.171 text/css
Die IP 192.168.0.5 hat die Datei angefordert.
Squid konnte diese Datei jedoch nicht aus dem Cache bedienen (wie auch, Squid ist ja noch jungfräulich gewesen) Daher hat Squid diese Datei heruntergeladen (DIRECT)

Surfen wir wiederholt auf diese Webseite, ändert sich der Eintrag:
192.168.0.5 TCP_IMS_HIT/304 221 GET - NONE/- text/css
Die IP 192.168.0.5 hat die Datei angefordert.
Squid konnte die Datei aus dem Cache bedienen (TCP_IMS_HIT) und hat diese aus dem Cache an den Browser gesendet.

Damit Squid auch als Dienst unter Windows NT/2000/XP läuft, könnt ihr unter Windows XP das Kommandozeilen-Tools sc einsetzen, um einen Dienst zu erstellen.
Unter NT oder Windows 2000 müsst ihr leider auf das Resourcekit-Tool srvany.exe zurückgreifen.

Die Konfiguration unter Linux läuft analog dazu, auch unterscheidet sich die Konfigurationsdatei nicht wesentlich.
(Lediglich die Verzeichnisse werden hier anders dargestellt)

So, das wars ;-)

Weiter Konfigurationsmöglichkeiten:
In Verbidnung mit eignet sich Squid hervorragend zur Inhaltskontrolle besuchter Webseiten. Ebenso ist es möglich, den Zugriff auf bestimmte Webseiten zu verbieten oder anhand gewisser Keywords zu blockieren.

Abschliessend noch zwei Links:



Noch eine Anmerkung: Das hier ist eine recht spezielle Dokumentation und eigentlich mehr aus einem Gespräch entstanden. Aber vielleich hat ja der eine oder andere Lust, sich das ganze mal auf dem eigenen Rechner zu installieren.

Anregungen und Kritik wie immer bitte über das Forum.

Gruß
Sven

P.S.: Kersten: Die Firewall-Doku dauert noch a bisle ;)
 
  • #2
Ein paar Anmerkungen:
- Da squid (oder generell Proxyserver) immer wieder das Ziel von Angriffen sind, sollte squid immer Jailed also z.B. unter Linux in einer chroot- oder UML- Umgebung laufen. Dadurch wird im Fall eines erfolgreichen Angriffs nicht das gesamte System kompromittiert.
- Aus diesem Grund verbietet sich, zumindest auf Servern mit sensiblen Daten und Diensten, der Einsatz unter Windows von selbst, da Windows solche Mechanismen nicht kennt.
- Die gesamte Netzwerksicherheit läßt sich enorm erhöhen, wenn ein Antiviren Daemon ständig alle Schreibzugriffe auf squid's Cacheverzeichnis überwacht. Da auch einige Angriffe auf squid selbst auf dem Unterschieben manipulierter Webseiten bzw. darin enthaltener Dateien basieren, wird auch dessen Sicherheit erhöht. Gute Erfahrungen habe ich mit HBEDV's AntiVir gemacht, der sich in dieser Beziehung wunderbar konfigurieren läßt und für Privatanwender kostenlos ist.
- Läßt sich der Einsatz unter Windows nicht umgehen, sollte in Erwägung gezogen werden, squid in einer VM unter Linux laufen zu lassen. Eine gute, kostenlose Möglichkeit dazu bietet CoLinux .
- Wird squid als transparenter Proxy betrieben, erübrigt sich Masquerading/Routing, so daß kein Client mehr direkten Zugriff zum Internet hat. Ein Sicherheitsplus.
- Über die ACL's lassen sich umfangreiche Zugriffskontrollen, auch auf Nutzerebene, realisieren, z.B. der Zugriff auf bestimmte Adressen für bestimmte User sperren.
Für fast alle diese Aspekte gibt es auch eine fertige Lösung, IPCop-UML, eine sehr sichere Version der IPCop Distribution, die als UserModeLinux abgeschottet vom restlichen System läuft. Ein Beitrag dazu findet sich in ct, Heft 4/2005, Seite 105.
Nicht zuletzt: wer (aber nicht nur) einen squid betreibt, sollte regelmäßig einen Blick nach werfen, wo immer sehr schnell auf gefundene Sicherheitslöcher und entsprechende Patches hingewiesen wird.

MfG
 
  • #3
Hello! I´m new here and would be very thankful if someone could solve my problem. Please, do that in english, ok? :)

I want Squid to intercept HTTP requests, deliver them to the server, receive them from the server, make some adjusts on the HTML file and deliver them to the hosts.

I got a PC running both a HTTP server (Apache Tomcat 4.1.24) and Squid 2.5 STABLE 3 () under Windows XP. For test purposes, Tomcat is listening port 8080 and Squid port 80. Among other tags, mainly, my squid.conf is:

http_port 80
httpd_accel_host 127.0.0.1
httpd_accel_port 8080
acl acceleratedHost dst 127.0.0.1/255.255.255.255
acl acceleratedPort port 8080
acl all src 0.0.0.0/0.0.0.0
acl myNet src 10.0.0.0-200.0.0.1/255.255.255.0
http_access allow acceleratedHost acceleratedPort
http_access allow myNet
http_access deny all

This way, Squid makes the interception correctly for localhost's tests, lilke calling on a browser. But when I connect a laptop to it, and suposing the IP of the PC server is 169.254.243.112 in this small LAN, Squid rejects because of an access denied problem. On the laptop, I can only reach the server bypassing Squid through a calling like on the browser. What am I doing wrong?

Thanks for your attention!

Rodrigo de Oliveira
 
  • #4
Rodrigo schrieb:
Hello! I´m new here and would be very thankful if someone could solve my problem. Please, do that in english, ok? :)

I want Squid to intercept HTTP requests, deliver them to the server, receive them from the server, make some adjusts on the HTML file and deliver them to the hosts.

I got a PC running both a HTTP server (Apache Tomcat 4.1.24) and Squid 2.5 STABLE 3 () under Windows XP. For test purposes, Tomcat is listening port 8080 and Squid port 80. Among other tags, mainly, my squid.conf is:

http_port 80
httpd_accel_host 127.0.0.1
httpd_accel_port 8080
acl acceleratedHost dst 127.0.0.1/255.255.255.255
acl acceleratedPort port 8080
acl all src 0.0.0.0/0.0.0.0
acl myNet src 10.0.0.0-200.0.0.1/255.255.255.0
http_access allow acceleratedHost acceleratedPort
http_access allow myNet
http_access deny all

This way, Squid makes the interception correctly for localhost's tests, lilke calling on a browser. But when I connect a laptop to it, and suposing the IP of the PC server is 169.254.243.112 in this small LAN, Squid rejects because of an access denied problem. On the laptop, I can only reach the server bypassing Squid through a calling like on the browser. What am I doing wrong?

Thanks for your attention!

Rodrigo de Oliveira

Dear Rodrigo,

you should add/change these lines to your squid.conf:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Then ensure that squid is listening to port 8080 and NOT port 80 and your webserver is listening to port 80.

greets
Sven
 
  • #5
Dear Sven,

Thank you for answering that so quickly! I did that. Tomcat is now listening at port 80 and squid at 8080. I also turned on the tags httpd_accel_with_proxy and httpd_accel_uses_host_header. Now both PC server and laptop (using that same small
LAN scenario...) can reach the HTTP server through callings like on the browser. But this way, squid isn't intercepting the HTTP requests, is it? I checked the access.log file and no entries were added. Isn't that wrong? To force squid acting, I tried to make calls on its port, like and now I got new entries in the access.log file, which means squid is working. But, again, the same error web page :-\:

Access denied. Access control configuration prevents your request from being allowed at this time. Please contact your service provider if you feel this is incorrect.

Got any other ideas? Thanks for the attention. Now you're my guide!! :)

Rodrigo
 
  • #6
Dear Rodrigo,

You have two directives for listening (one is your http_port directive and one is your httpd_accel_port directive)
Please ensure, that your iptables configurations redirects enquiries for Port 80 to your Squid Port (http_port).

A really simple iptables configuration ensures this:
Code:
LAN=192.168.0.0/16
i=eth0
$IPTABLES -A PREROUTING -t nat -i $i -p tcp -d ! $LAN --dport 80 -s $LAN -j REDIRECT --to-port 3128

You can find a really good but simple Configuration (unfortunately in German)
Anonther Sample is
If you have problems translating it to engslich, you can use

greets
Sven
 
  • #7
Thank you Sven. That hint about the google translation really worked (for almost the entire page). But the way you´re heading the solution, seems that squid will just cache the pages. I know that´s it´s real purpose, but my interest in squid is that I want someone between server and host. Someone that could intercept the http server responses and make some adjustments on the web page delivered to the host. So squid MUST be the one who is going to deliver the page at last. And I´m hopping there´s a way to implement in any programming language a module for squid to make these adjustments on the page being delivered. Is that possible? If so, how can I do it? Or better, where can I find full information about doing that?

Thanks a lot for your attention. This forum is my hope.

Rodrigo
 
  • #8
Dear Rodrigo,

Obviously we have a little misunderstanding ;)
So, if i understand you correctly, the only think you want to do with your squid is to modify the transfered webpages ? Is this correct ? AFAIK you can to this also with the Apache integrated proxyfunction.

The other way of solution is to implement the squid-guard, which makes it possible to filter, deny and modify the transfered webpages.

A transparent proxy function as you have it at the moment is only for redirecting http transfers without modifing the browsers configuration.

I hope i understand you correctly, if not please tell me exactly what's your intension.

greets
Sven
 
  • #9
Sorry if I gave you the wrong picture about what I want. That´s because I really don´t know exactly how to do this. And yes: you got it now. I just want something on the server side that intercepts it´s http responses and make some adjustments on the web page being delivered to the host (let´s say, put a logo on the bottom of the page, summarizes the text, etc.). Now you gave me some new ideas like implementing squidGuard or using the Apache integrated proxyfunction. I don´t think this last one would be the best because I want something general, that could be used whatever is the http server. So I got excited about the squidGuard option and went to it´s site (). My disbelief started when I read at the introduction that:

...neither squidGuard nor Squid can be used to (1) filter/censor/edit text inside documents or (2) filter/censor/edit embeded scripting languages like JavaScript or VBscript inside HTML

As you can see, that´s exactly what I want. Do you really think there´s a way to use squidGuard to make those adjustments on the page? Or do you have any other ideas to do this?

Just to mention, I belong to the official squid forum (squid-users) and no one have answered my questions with your ability and attention. I really appreciate that.

Rodrigo
 
  • #10
Dear Sven,

Sorry if I am annoying you. But if you could answer my question, I´m here waiting.

Best wishes

Rodrigo
 
  • #11
Dear Rodrigo,

I'm sorry about my late answer - just forgot to answer you yesterday ;)
AFAIK the squid-guard is the only program which can modify the cached HTML files. But you're right - ONLY HTML files can be modified. There are also a few products which make this possible, but non of them are for free. One of this non free products is - IMHO the best content manipulating products.
I just found a good arcticle on the IBM Pages, which MIGHT help you. Just take a look at

Sorry, i don't have any other ideas for your problem.

greets
Sven
 
  • #12
Dear Sven,

You gave me great hints I couldn´t find in other forums. Thanks for all your attention and kindness! Keep up with the good work!

Best wishes

Rodrigo
 
  • #13
Dear Rodrigo,

Thank you for this commendation ;)
If you have any questions don't hesitate to post ist here...

greets
Sven
 
  • #14
Hallo,

zunächst mal danke für die supereinfache anleitung für einen proxy unter NT.

Das hat wirklich nur 30 min gedauert.

Jetzt bräuchte ich aber noch mal ein bissi hilfe bei SquidGuard.

Was muss ich da alles tun um das unter NT ans laufen zu bekommen ?
Und falls nicht wieder son geiles tut gibt, vielleicht ein paar webadressen (möglichst in deutsch, sorry) wo ich des nachlesen kann ?
meine eigene Googlesuche hat nix gescheites hervorgebracht.

danke im voraus

proxy_squid
 
  • #15
erstmal super anleitung! ging reibungslos unter suse!

nur noch eine frage...
ist es möglich eine username/passwort abfrage in die conf einzuschreiben?!
denn ich habe das problem das ich nur bestimmte user auf meinen proxy lassen will (is ja verständlich) jedoch befinden die sich nicht im netzwerk also haben die leute pysiche ips und keine festen adressen....

ich habe es shcon ausprobiert ne bestimmte adresse freizugeben, hat auch super geklappt jedoch ändern sich die ips ja :(

wäre cool wenn mir jemand helfen könnte

danke

thomas
 
  • #16
Hallo,

eine Benutzer/Passwordabfrage incl. Trafficbegrenzung ist möglich
per
- WinNT Authentifizierung
- LDAP
- MySQL
- ncsd oder so ähnlich
 
  • #17
ui danke für die rasche antwort!
und wie soll die umsetzung im squid dann gehen?!
was muss ich in der config eintragen?

aber eine generelle abfrage von benu und passwort ist nicht möglich? also so das man beispielsweise in der config bzw. in einer extra config benus und passwörter hinterlegen kann die sich beim proxy anmelden können...

bin leider in sachen proxy bzw. netzwerk noch in den kinderschuhen...aber man lernt ja immer dazu ;)
 
  • #18
Hallo,

jenachdem was du benutzt

wenn du nscd benutzt benötigst du eine extra Benutzer/Password-Datei

für LDAP erfolgt die Authentifizierung eben per LDAP und

wenn du per WinNT-Domänencontroller das machen willst erfolgt die Authentifizierung darüber.

bei den letzten beiden Varianten müßen die User dem System bekannt sein beim ersten ist das völlig unabhängig
 
  • #19
Hallo,

ich habe ein Problem mit meinem Squid. Ich habe einen Windows 2003 Server mit AD und DNS auf aufgesetzt, auf diesem soll auch der Squid laufen.
Folgendes Problem wenn ich den Squid starten will, bekomme ich die Fehlermeldung DNS name lookup test failed. Ich meine aber das ich die lokalen DNS-Server richtig eingetragen habe!! Nochwas, der Server hat noch keine Verbindung ins Internet, er steht noch zu testzwecken ohne Netz da. Trotzdem sollte doch aber der Dienst zu starten sein!

Was mache ich falsch??

Gruss Maik
 
  • #20
maik.kuennemann schrieb:
Hallo,

ich habe ein Problem mit meinem Squid. Ich habe einen Windows 2003 Server mit AD und DNS auf aufgesetzt, auf diesem soll auch der Squid laufen.
Folgendes Problem wenn ich den Squid starten will, bekomme ich die Fehlermeldung DNS name lookup test failed. Ich meine aber das ich die lokalen DNS-Server richtig eingetragen habe!! Nochwas, der Server hat noch keine Verbindung ins Internet, er steht noch zu testzwecken ohne Netz da. Trotzdem sollte doch aber der Dienst zu starten sein!

Was mache ich falsch??

Gruss Maik

Poste mal die squid.conf.

Gruß
Sven
 
Thema:

[TUT] Squid Proxy-Server unter Windows & Linux

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.841
Beiträge
707.970
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben