Frage zu Linux Proxy Squid
Mister X
- webserver
0 Vinzenz0 Axel Richter0 Mister X0 Axel Richter0 Mister X
Hi,
ich möchte testhalber einen Linux Proxy Server (Squid) konfigurieren. Die Konfiguration wird ja in der squid.conf vorgenommen. Im Rechner auf welchem Squid läuft hat es zwei Netzwerkkarten und das sieht dann so aus:
eth0 eth1
Intranet¦---192.168.1.10 ¦ PROXY ¦ 192.168.0.10 ---¦ADSL-Modem/Router
Dazu folgende Fragen:
Stimmt die Vergabe der IP-Adressen?
Jetzt sollen ja eigentlich alle Anfragen die auf eth0 gelangen nach eth1 weitergeleitet werden. Wie und wo konfiguriere ich das?
Damit man später auch noch z.B. mit Telnet oder per FTP ins Internet gelangen kann, müssen ja sämtliche Ports von eth0 auf eth1 umgeleitet werden, oder? Wie kann ich das festlegen damit ich nicht jeden einzelnen Port in der config aufführen muss? Oder muss ich das gar nicht in der squid.conf machen?
Ich habe das Gefühl, dass beim Linux-Rechner mit den beiden Netzwerkkarten nicht immer die gleiche Netzwerkkarte die gleiche IP bekommt. Kann das sein? (Ich habe statische IP's vergeben) Eth0 solle doch immer dieselbe Netzwerkkarte sein? Wie kann ich das sicherstellen?
Vielen Dank einmal für eure Hilfe.
Gruss Mister X
Hallo Mister X,
ehrlich gesagt, ist mir nach Durchlesen Deines Postings unklar, was Du genau vorhast.
Hast Du vor, Dein Intranet durch ein Gateway (ISO-OSI-Schicht 7, Anwendungsschicht) abzusichern, so ist Deine Konfiguration in Ordnung. Sie wirft jedoch Probleme auf, wenn Du eine Anwendung verwendest, für die Du keinen Proxy hast, bzw. die nicht proxy-fähig ist.
Willst Du squid hingegen deswegen verwenden, weil Du von einem cachenden Proxy profitieren willst, dann wirf die zweite Netzwerkkarte hinaus und verbinde Deinen DSL-Router direkt mit einem Switch/Hub im Intranet. Hier gehe ich davon aus, dass der DSL-Router über eine ordentliche Firewall verfügt.
Ein Mix dieser beiden Möglichkeiten, wäre die Verwendung Deines Linuxrechners als Router _und_ Proxy. Dann benötigen Deine Rechner im Intranet nur das korrekt konfigurierte Standardgateway, d.h. die IP-Adresse Deiner Linuxkiste. Über Firewall-Funktionalität kannst Du die Verwendung des Proxy-Servers erzwingen. Weiterhin könntest Du Deinen DSL-Router ausser Betrieb nehmen, und diese Aufgabe Deinem Linuxrechner übertragen.
Bitte beachte, was ich im weiteren Text gebetsmühlenhaft wiederholen werde:
squid ist _kein_ Router.
squid ist ein Proxy.
ich möchte testhalber einen Linux Proxy Server (Squid) konfigurieren. Die Konfiguration wird ja in der squid.conf vorgenommen. Im Rechner auf welchem Squid läuft hat es zwei Netzwerkkarten und das sieht dann so aus:
eth0 eth1
Intranet¦---192.168.1.10 ¦ PROXY ¦ 192.168.0.10 ---¦ADSL-Modem/RouterDazu folgende Fragen:
- Stimmt die Vergabe der IP-Adressen?
Wenn Du in Deinem Intranet IP-Adressen aus dem Bereich 192.168.1.x verwendest, wenn Dein DSL-Router intern eine IP aus dem Bereich 192.168.0.x hat, die Subnetmask dazu passt, Du keine IP-Adresse zweimal vergeben hast, dann ja.
- Jetzt sollen ja eigentlich alle Anfragen die auf eth0 gelangen nach eth1 weitergeleitet werden.
Nein, das ist falsch. Du verwechselst einen Proxy mit einem Router. squid vorrangig ein http-Proxy, siehe http://www.squid-cache.org/
Wie und wo konfiguriere ich das?
Schau mal unter http://squid.visolve.com/squid/squid24s1/contents.htm nach, was Du alles konfigurieren kannst.
- Damit man später auch noch z.B. mit Telnet oder per FTP ins Internet gelangen kann, müssen ja sämtliche Ports von eth0 auf eth1 umgeleitet werden, oder?
Du suchst schon wieder Routerfunktionalität. Konfiguriere Deine Linux-Kiste als Router.
Wie kann ich das festlegen damit ich nicht jeden einzelnen Port in der config aufführen muss? Oder muss ich das gar nicht in der squid.conf machen?
Nein, squid ist _kein_ Router.
- Ich habe das Gefühl, dass beim Linux-Rechner mit den beiden Netzwerkkarten nicht immer die gleiche Netzwerkkarte die gleiche IP bekommt. Kann das sein?
Nein, das kann nicht sein. Dein Gefühl trügt.
(Ich habe statische IP's vergeben) Eth0 solle doch immer dieselbe Netzwerkkarte sein? Wie kann ich das sicherstellen?
Bei statischen Konfiguration erhält jede Netzwerkkarte bei jedem Start die gleiche IP-Adresse.
Ich empfehle Dir, Dich mit den Netzwerkgrundlagen auseinanderzusetzen, einen guten Ausgangspunkt bietet die Dokumentation, die Du unter http://www.netfilter.org/documentation/index.html#documentation-howto findest.
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz
ehrlich gesagt, ist mir nach Durchlesen Deines Postings unklar, was Du genau vorhast.
Hab mich wohl unklar ausgedrückt.
Hast Du vor, Dein Intranet durch ein Gateway (ISO-OSI-Schicht 7, Anwendungsschicht) abzusichern, so ist Deine Konfiguration in Ordnung. Sie wirft jedoch Probleme auf, wenn Du eine Anwendung verwendest, für die Du keinen Proxy hast, bzw. die nicht proxy-fähig ist.
Ich dachte es werden nur Anfragen über bestimmte Ports (80,3128..) vom Proxy behandelt, der Rest könnte ich ja einfach filtern und forwarden.
Willst Du squid hingegen deswegen verwenden, weil Du von einem cachenden Proxy profitieren willst, dann wirf die zweite Netzwerkkarte hinaus und verbinde Deinen DSL-Router direkt mit einem Switch/Hub im Intranet. Hier gehe ich davon aus, dass der DSL-Router über eine ordentliche Firewall verfügt.
Wenn ich die zweite Netzwerkkarte rausnehme und das ganze mit einem Switch löse, dann kann ich ja nicht sicherstellen, dass alle User über den Proxy ins Internet gelangen...?:
Client-------Switch----------ADSL Modem/Internet
¦
¦
Proxy
Es besteht ja theoretisch die Möglichkeit direkt mit dem Modem zu verbinden...
Ein Mix dieser beiden Möglichkeiten, wäre die Verwendung Deines Linuxrechners als Router _und_ Proxy. Dann benötigen Deine Rechner im Intranet nur das korrekt konfigurierte Standardgateway, d.h. die IP-Adresse Deiner Linuxkiste. Über Firewall-Funktionalität kannst Du die Verwendung des Proxy-Servers erzwingen. Weiterhin könntest Du Deinen DSL-Router ausser Betrieb nehmen, und diese Aufgabe Deinem Linuxrechner übertragen.
Genau das möchte ich tun.
Bitte beachte, was ich im weiteren Text gebetsmühlenhaft wiederholen werde:
squid ist _kein_ Router.
squid ist ein Proxy.
OK, kapiert.
Ich empfehle Dir, Dich mit den Netzwerkgrundlagen auseinanderzusetzen, einen guten Ausgangspunkt bietet die Dokumentation, die Du unter http://www.netfilter.org/documentation/index.html#documentation-howto findest.
Danke
Gruss Mister X
Hallo Mister,
Wenn ich die zweite Netzwerkkarte rausnehme und das ganze mit einem Switch löse, dann kann ich ja nicht sicherstellen, dass alle User über den Proxy ins Internet gelangen...?:
Client-------Switch----------ADSL Modem/Internet
¦
¦
ProxyEs besteht ja theoretisch die Möglichkeit direkt mit dem Modem zu verbinden...
In Deinem Ausgangsposting bezeichnest Du das noch als ADSL-Router. Wenn Du einen Router mit vernünftig zu konfigurierender Firewall hast, dann filterst Du alle internen Anfragen aus, die nicht von Deiner Linuxkiste kommen. Präzisiere bitte, was die einzelnen Clients dürfen und was nicht.
Ein Mix dieser beiden Möglichkeiten, wäre die Verwendung Deines Linuxrechners als Router _und_ Proxy. Dann benötigen Deine Rechner im Intranet nur das korrekt konfigurierte Standardgateway, d.h. die IP-Adresse Deiner Linuxkiste. Über Firewall-Funktionalität kannst Du die Verwendung des Proxy-Servers erzwingen. Weiterhin könntest Du Deinen DSL-Router ausser Betrieb nehmen, und diese Aufgabe Deinem Linuxrechner übertragen.
Genau das möchte ich tun.
Du möchtest also Deine Linuxkiste als Router und Proxy verwenden?
---------------------------------
| | | |
C_1 C_2 .... C_n Linux-Kiste (Router, Firewall, beides mit NAT, Proxy, ...)
|
DSL-Modem
|
Internet
Möchtest Du es so haben?
Wenn ja, gib nun bitte an, welche Zugriffe auf das Internet von den Clients aus gestattet sein sollen und welche nicht. Welche nur einen Proxy benutzen dürfen, welche direkt zugreifen dürfen, welche überhaupt nicht zur Verfügung stehen sollen.
Freundliche Grüsse,
Vinzenz
Hallo Vinzenz
Hallo Mister,
Wenn ich die zweite Netzwerkkarte rausnehme und das ganze mit einem Switch löse, dann kann ich ja nicht sicherstellen, dass alle User über den Proxy ins Internet gelangen...?:
Client-------Switch----------ADSL Modem/Internet
¦
¦
ProxyEs besteht ja theoretisch die Möglichkeit direkt mit dem Modem zu verbinden...
In Deinem Ausgangsposting bezeichnest Du das noch als ADSL-Router. Wenn Du einen Router mit vernünftig zu konfigurierender Firewall hast, dann filterst Du alle internen Anfragen aus, die nicht von Deiner Linuxkiste kommen. Präzisiere bitte, was die einzelnen Clients dürfen und was nicht.
Sorry, ADSL-Modem/Router ist korrekt. Aber ich bin fast sicher dass ich nicht herausfiltern kann von welchem internen Client die Anfragen kommen...? (Netopia Cayman 3341)
Du möchtest also Deine Linuxkiste als Router und Proxy verwenden?
| | | |
C_1 C_2 .... C_n Linux-Kiste (Router, Firewall, beides mit NAT, Proxy, ...)
|
DSL-Modem
|
InternetMöchtest Du es so haben?
Ja
Wenn ja, gib nun bitte an, welche Zugriffe auf das Internet von den Clients aus gestattet sein sollen und welche nicht. Welche nur einen Proxy benutzen dürfen, welche direkt zugreifen dürfen, welche überhaupt nicht zur Verfügung stehen sollen.
Wie meinst du das? _alle_ Clients sollen über den Proxy ins Web...
Gruss Mister X
Hallo,
ich möchte testhalber einen Linux Proxy Server (Squid) konfigurieren. Die Konfiguration wird ja in der squid.conf vorgenommen. Im Rechner auf welchem Squid läuft hat es zwei Netzwerkkarten und das sieht dann so aus:
eth0 eth1
Intranet¦---192.168.1.10 ¦ PROXY ¦ 192.168.0.10 ---¦ADSL-Modem/RouterDazu folgende Fragen:
- Stimmt die Vergabe der IP-Adressen?
Ja, wenn Dein lokales Netz das Netz 192.168.1.0/24 ist und ADSL die Netzwerkkarte eth1 nutzt.
Das heißt alle Deine lokalen IPs sind im Bereich 192.168.1.x, das x steht für (1-254), und die Netzmaske ist 255.255.255.0.
Die ADSL-Konfiguration (pppoe?) ist so eingerichtet, dass sie eth1 nutzt. Die IP von eth1(192.168.0.10) wird dann nur gebraucht, damit beim booten nicht ewig nach einem DHCP-Server gesucht wird. Sie wird beim Start der ADSL-Verbindung vom Provider dynamisch zugeteilt.
- Jetzt sollen ja eigentlich alle Anfragen die auf eth0 gelangen nach eth1 weitergeleitet werden.
Nein, warum? Wenn es für die Anfragen auf dem Server mit der IP 192.168.1.10 zuständige Dienste gibt, warum sollte er sie dann weiterleiten? Du meinst Anfragen an andere IPs außerhalb Deines Netzes sollen weitergeleitet werden? Das nennt man routing. Das legst Du bei der Netzwerkkonfiguration fest, indem Du festlegst dass default gateway für eth0 die eth1(192.168.0.10) ist. Zuständig ist das Kommando route. Je nach Linux-Distribution gibt es Konfigurationstools.
- Damit man später auch noch z.B. mit Telnet oder per FTP ins Internet gelangen kann, müssen ja sämtliche Ports von eth0 auf eth1 umgeleitet werden, oder?
Nein. Zunächst mal wird das kein reines Umleiten, sondern ein maskiertes Umleiten. Informiere Dich über NAT (Network Address Translation) und/oder Masquerading und/oder Port Forwarding. Dann solltest Du aber _keinesfalls_ einfach alle IP-Pakete weiterleiten, sondern _nur_ die, welche Du benötigst und auch nicht alle IP-Pakete in alle Richtungn lassen (Firewalling).
Wie kann ich das festlegen damit ich nicht jeden einzelnen Port in der config aufführen muss? Oder muss ich das gar nicht in der squid.conf machen?
Nein. Squid ist ein HTTP-Proxy. Er kann _nur_ als Stellvetreter für HTTP- und FTP-Anforderungen arbeiten. Ein Proxy ist auch etwas anders als Port-Forwarding. Squid läuft als Dienst auf dem Server (default Port 3128). Der Client (Bei Dir ein Browser eines PCs im Netz 192.168.1.0/24) hat als Information, dass HTTP-Anforderungen über den Proxy (192.168.1.10:3128) gehen. Wenn also der Nutzer im Browser http://www.google.de/ anfordert, wird diese Anforderung stellvertretend vom Proxy-Dienst (squid) beantwortet. Dieser hat ja vom Server über das default Gateway Zugang zum Provider. Er kann sich also die Seite holen, zwischenspeichern und ausliefern. Hierbei wird _keine_ direkte Weiterleitung vom Client zum Provider erfolgen. Man kann alle benötigten Dienste über Proxys bedienen. Das wäre sehr sicher aber auch sehr aufwändig, weil für jeden weitern Dienst (Telnet, SSH, SMTP ...) weitere Proxy-Dienste erforderlich wären.
- Ich habe das Gefühl, dass beim Linux-Rechner mit den beiden Netzwerkkarten nicht immer die gleiche Netzwerkkarte die gleiche IP bekommt. Kann das sein? (Ich habe statische IP's vergeben) Eth0 solle doch immer dieselbe Netzwerkkarte sein? Wie kann ich das sicherstellen?
Das Problem hatte ich bisher nur bei SuSE-Linux und, wenn beide Netzwerkkarten baugleich sind, und auch nur bis jede Netzwerkkarte einmal korrekt initialisiert war. Sprich: Es sollte sich nichts mehr ändern, wenn der Rechner einmal vom lokalen Netz erreichbar und zum ADSL verbunden war.
viele Grüße
Axel
Hallo Axel
Nein, warum? Wenn es für die Anfragen auf dem Server mit der IP 192.168.1.10 zuständige Dienste gibt, warum sollte er sie dann weiterleiten? Du meinst Anfragen an andere IPs außerhalb Deines Netzes sollen weitergeleitet werden? Das nennt man routing. Das legst Du bei der Netzwerkkonfiguration fest, indem Du festlegst dass default gateway für eth0 die eth1(192.168.0.10) ist. Zuständig ist das Kommando route. Je nach Linux-Distribution gibt es Konfigurationstools.
Müsste es nicht umgekehrt sein, bzw. müsste nicht jeweils bei beiden Netzwerkkarten als Gateway die IP der anderen Netzwerkkarte angegeben werden?
Nein. Zunächst mal wird das kein reines Umleiten, sondern ein maskiertes Umleiten. Informiere Dich über NAT (Network Address Translation) und/oder Masquerading und/oder Port Forwarding. Dann solltest Du aber _keinesfalls_ einfach alle IP-Pakete weiterleiten, sondern _nur_ die, welche Du benötigst und auch nicht alle IP-Pakete in alle Richtungn lassen (Firewalling).
Aha, ich kann also mit Squid nur den Web-Traffic, bzw. das Surfen der User kontrollieren und einschränken, nicht aber kontrollieren ob sich ein User per SSH mit der Aussenwelt verbindet...und wenn ich dich richtig verstanden habe, sieht das so aus:
Linux-Server
¦----------------------¦
¦ ¦
¦80----¦------¦------80¦
¦3128--¦Squid ¦----3128¦
¦21----¦------¦------21¦
---¦ ¦----->ADSL Modem/Router
¦22----¦--------¦----22¦
¦9999--¦iptables¦--9999¦
¦ ¦--------¦ ¦
¦----------------------¦
-Anfragen über Port 80, 3228 und 21 werden über Squid kontrolliert gelangen dann zum ADSL Modem.
-Anfragen über die restlichen Ports werden gemäss Richtlinien in iptables an das ADSL Modem weitergeleitet und wenn ich den iptables nichts zum Handling einer Anfrage auf einem bestimmten Port steht, dann geschieht mit dem Paket gar nichts und es wird abgelehnt.
Richtig?
Gruss Mister X
Hallo Axel
Müsste es nicht umgekehrt sein, bzw. müsste nicht jeweils bei beiden Netzwerkkarten als Gateway die IP der anderen Netzwerkkarte angegeben werden?
Nein. Allerdings war auch meine Aussage nicht hanzkorrekt. Das _default_ Gateway (Standard-Ausgangstor) gilt natürlich Systemweit, nicht nur für ein Netzwerkinterface. Hier kommt allerdings nur die eth0 in Frage.
http://www.klaus.franken.de/DE-ISDN-HOWTO/html/DE-ISDN-HOWTO-7.html
Aha, ich kann also mit Squid nur den Web-Traffic, bzw. das Surfen der User kontrollieren und einschränken, nicht aber kontrollieren ob sich ein User per SSH mit der Aussenwelt verbindet
Korrekt.
...und wenn ich dich richtig verstanden habe, sieht das so aus:
Linux-Server
¦--------------------------¦
¦ ¦
¦ ¦------¦-80--| ¦
¦--3128--¦Squid ¦ | ¦
¦ ¦------¦-21-|| ¦
---¦ || ¦----->ADSL Modem/Router
¦ |------------------|| ¦
¦ ||------------------| ¦
¦ || ¦
¦ ||-| ¦--------¦ ¦
¦ |--|-allPorts-¦iptables¦-¦
¦----| ¦--------¦ ¦
¦ ¦
¦--------------------------¦
viele Grüße
Axel
Hallo Axel
Müsste es nicht umgekehrt sein, bzw. müsste nicht jeweils bei beiden Netzwerkkarten als Gateway die IP der anderen Netzwerkkarte angegeben werden?
Nein. Allerdings war auch meine Aussage nicht hanzkorrekt. Das _default_ Gateway (Standard-Ausgangstor) gilt natürlich Systemweit, nicht nur für ein Netzwerkinterface. Hier kommt allerdings nur die eth0 in Frage.
http://www.klaus.franken.de/DE-ISDN-HOWTO/html/DE-ISDN-HOWTO-7.html
Ok. Danke.
Aha, ich kann also mit Squid nur den Web-Traffic, bzw. das Surfen der User kontrollieren und einschränken, nicht aber kontrollieren ob sich ein User per SSH mit der Aussenwelt verbindet
Korrekt....und wenn ich dich richtig verstanden habe, sieht das so aus:
Linux-Server
¦--------------------------¦
¦ ¦
¦ ¦------¦-80--| ¦
¦--3128--¦Squid ¦ | ¦
¦ ¦------¦-21-|| ¦
---¦ || ¦----->ADSL Modem/Router
¦ |------------------|| ¦
¦ ||------------------| ¦
¦ || ¦
¦ ||-| ¦--------¦ ¦
¦ |--|-allPorts-¦iptables¦-¦
¦----| ¦--------¦ ¦
¦ ¦
¦--------------------------¦viele Grüße
Axel
In dem Fall werden _alle_ Anfragen in den iptables behandelt...
Danke.
Gruss Mister X