• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Unverständnis bei Routing und Proxying mit zwei NICs und DSL

slotti

Newbie
Hallo Leute!

Ich begrüße euch alle als neues Mitglied hier im Forum.

Ich habe ein kleines Verständnisproblem: ich benutze SuSE 9.3 auf einem alten 500 MHz-AMD zu Testzwecken. Das Gerät hat zwei Netzwerkkarten: eth0 (intern) 192.168.2.2/24 und eth1 (extern) 192.168.178.2/30. An das Internet bin ich mit einem DSL-Router IP 192.168.178.1/30 angebunden. Auf der internen Seite (.2.2/24) hängt ein Test-Client (Win2K 192.168.2.X -> dhcpd auf SuSE) mittels X-Over-Kabel. Auf dem Linux-Server laufen zusätzlich folgende Dienste: dynDNS-Server, apache2 (Port 80 auf 192.168.178.2 funktioniert aus dem Internet), nfs-Server, Samba-Server (PDC), ftp-Server... und SQUID (Port 3128) als Proxy-Server.

Nun zu meinem Verständnisproblem: ich möchte, dass der Client (W2K) auf das Internet Zugriff hat, indem die ganze Geschichte über den Squid läuft. Sonst soll auf Client-Seite keine Möglichkeit bestehen ins Internet zu gelangen. Also muss doch Forwarding und Masquerading wegfallen, oder? Es soll ja nur der Proxy genutzt werden...

Der Client erhält von dhcpd folgendes: IP 192.168.2.x (x=20 - 30), Subnetmask 255.255.255.0, Gateway 192.168.2.2, 1. DNS 192.168.2.2, 2. DNS 192.168.178.1 (hierfür wäre aber Forwarding nötig, oder?).

Mein nächstes Problem, was sich wahrscheinlich aus dem vorherigen ergibt, ist, dass ich den Proxy einfach nicht transparent bekomme, obwohl ich sämtlich Anleitungen und Tips schon durchgearbeitet habe. Dort ist es aber immer so, dass der Linux-Server an ethX (X=extern) mit einem DSL-Modem oder sonst wie ins Internet kommuniziert - also nicht wie bei mir (so meine ich jedenfalls...).

Außerdem komme ich nicht bei den "iptables" mit. In der SuSEfirewall2 gibt es doch den "FW_REDIRECT"-Befehl. Sollte er die manuelle Eingabe von iptables nicht überflüssig machen? Bei mir sieht dieser gerade so aus (ist aber sicherlich falsch, es läuft ja nicht transparent!): 192.168.2.0/24,192.168.178.0/30,tcp,80,3128 - das Ganze dann halt noch mit udp und das Ganze wiederum noch für ftp.

So viele Fragen auf einmal... aber ich bin mir sicher, dass es da draußen jemanden gibt, der mir helfen kann!!! Ich danke schon mal im Voraus.

LG slotti :)
 

basman

Member
Masquerading und IP-Forwarding muss man tatsächlich ausgeschaltet lassen.

Mit UDP wirst Du kein Glück haben. Squid kann das nicht. Dazu braucht man IP-Forwarding.

FTP durch squid geht schon, aber vermutlich keine Uploads.

Ob der FW_REDIRECT-Eintrag richtig ist, kann ich nicht sagen. Schaue im Logfile /var/log/squid..., ob squid die Anfragen wirklich bekommt. Wenn das nicht aufschlussreich ist, kann man mit netcat und runtergefahrenem squid mal testen, ob die Port-Umleitung klappt:
netcat -l -p 3128 auf der Squid-Kiste starten und von einem Client aus auf TCP Port 80 connecten (telnet 192.168.2.2 80).

Wenn Du dann etwas im telnet tippst, sollte es im netcat erscheinen und umgekehrt. Wenn das nicht geht, musst Du das FORWARDING in Ordnung bringen. Wenn schon, ist bei squid noch etwas nicht rund.

Netcat gibts auch für Windows. Anstelle des telnet-Befehls startet man dann: nc 192.168.2.2 80
 
OP
S

slotti

Newbie
Hallo basman!

Zunächst vielen Dank für deine Antwort. Ich hatte schon nicht mehr daran geglaubt, dass mir jemand helfen wird. Zwischendurch war ich auch noch für eine Woche im Krankenhaus...

Also: tail -f /var/log/squid/access.log zeigt bei mir nichts an - genauso wie der Browser des W2K-Clients. Wenn ich die Proxy-Einstellungen dort jedoch konfiguriere (192.168.2.2:3128), dann funktioniert es und auch die access.log zeigt an, wer zugreift. Daher schätze ich einmal, dass irgend etwas in der SuSEfirewall2 nicht stimmt. Ich habe mal die Konfigurationsdatei der Firewall2 und von Squid von Kommentaren bereinigt und unten aufgelistet. Vielleicht erkennt ja jemand, wo der Haken ist. Ich schaffe es nicht... :-( Die von mir veränderten Zeilen habe ich markiert:

squid.conf:

http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
# emulate_httpd_log off
emulate_httpd_log on
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
# # # #
acl our_networks src 192.168.178.0/30 192.168.2.0/24
http_access allow our_networks
# # # #
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
# # # #
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
# # # #
coredump_dir /var/cache/squid



SuSEfirewall2:

START_FW="yes"
FW_DEV_EXT="eth-id-00:10:60:xx:xx:xx"
FW_DEV_INT="eth-id-00:06:5b:xx:xx:xx"
FW_DEV_DMZ=""
FW_ROUTE="no"
FW_MASQUERADE="no"
FW_MASQ_DEV="$FW_DEV_EXT"
FW_MASQ_NETS=""
FW_SERVICES_EXT_TCP="www"
FW_SERVICES_EXT_UDP=""
FW_SERVICES_EXT_IP=""
FW_SERVICES_EXT_RPC=""
FW_SERVICES_DMZ_TCP=""
FW_SERVICES_DMZ_UDP=""
FW_SERVICES_DMZ_IP=""
FW_SERVICES_DMZ_RPC=""
FW_SERVICES_INT_TCP="3128 5801 5901 domain microsoft-ds netbios-dgm netbios-ns netbios-ssn ssh tftp www"
FW_SERVICES_INT_UDP="domain netbios-ns"
FW_SERVICES_INT_IP=""
FW_SERVICES_INT_RPC="mountd nfs nfs_acl nlockmgr portmap status"
FW_SERVICES_DROP_EXT=""
FW_SERVICES_REJECT_EXT="0/0,tcp,113"
FW_TRUSTED_NETS=""
FW_ALLOW_INCOMING_HIGHPORTS_TCP=""
FW_ALLOW_INCOMING_HIGHPORTS_UDP=""
FW_FORWARD=""
FW_FORWARD_MASQ=""
FW_SERVICE_DNS="yes"
FW_REDIRECT_TCP="192.168.2.0/24,192.168.178.0/30,tcp,80,3128 192.168.2.0/24,192.168.178.0/30,tcp,21,3128"
# folgende Zeile ist dem Administrationshandbuch von SuSE 9.2 entnommen
FW_REDIRECT_UDP="192.168.2.0/24,192.168.178.0/30,udp,80,3128 192.168.2.0/24,192.168.178.0/30,udp,21,3128"
FW_LOG_DROP_CRIT="yes"
FW_LOG_DROP_ALL="no"
FW_LOG_ACCEPT_CRIT="yes"
FW_LOG_ACCEPT_ALL="no"
FW_LOG_LIMIT=""
FW_LOG=""
FW_KERNEL_SECURITY="yes"
FW_STOP_KEEP_ROUTING_STATE="no"
FW_ALLOW_PING_FW="yes"
FW_ALLOW_PING_DMZ="no"
FW_ALLOW_PING_EXT="no"
FW_ALLOW_FW_SOURCEQUENCH="yes"
FW_ALLOW_CLASS_ROUTING="no"
FW_CUSTOMRULES=""
FW_REJECT="no"
FW_HTB_TUNE_DEV=""
FW_IPv6=""
FW_IPv6_REJECT_OUTGOING="yes"
FW_IPSEC_TRUST="no"
FW_PROTECT_FROM_INT="yes"
FW_SERVICES_ACCEPT_EXT=""
FW_ALLOW_FW_BROADCAST_EXT=""
FW_ALLOW_FW_BROADCAST_INT="netbios-ns"
FW_ALLOW_FW_BROADCAST_DMZ=""
FW_IGNORE_FW_BROADCAST_EXT="yes"
FW_IGNORE_FW_BROADCAST_INT="yes"
FW_IGNORE_FW_BROADCAST_DMZ="yes"
FW_ZONES=""


Außerdem verstehe ich nicht, warum ich vom Client (192.168.2.13) auf die externe Schnittstelle des Linux-Servers pingen kann (192.168.178.2), nicht aber bis zum DSL-Router (192.168.178.1). Vom Linux-Server funktioniert ein Ping dort hin... Hat bestimmt alles mit der Firewall2 zu tun. Der Tipp mit netcat -l -p 3128 hat bei mir keine Wirkung gezeigt. Der W2K-Client konnte keine Verbindung herstellen.

Schönen Dank fürs Helfen!

Gruß slotti
 

Martin Breidenbach

Ultimate Guru
slotti schrieb:
Außerdem verstehe ich nicht, warum ich vom Client (192.168.2.13) auf die externe Schnittstelle des Linux-Servers pingen kann (192.168.178.2), nicht aber bis zum DSL-Router (192.168.178.1).

Kennt der DSL-Router einen Weg zurück ? Hat der eine Route nach 192.168.2.x ?

Hier gibts noch etwas Lesestoff zum Thema:

http://www.linux-club.de/viewtopic.php?t=25525
 
OP
S

slotti

Newbie
Martin Breidenbach schrieb:
Kennt der DSL-Router einen Weg zurück ? Hat der eine Route nach 192.168.2.x ?

Hier gibts noch etwas Lesestoff zum Thema:

http://www.linux-club.de/viewtopic.php?t=25525

Hallo Martin!

Danke für den Tipp. Hat mir für mein Verständnis wieder einiges gebracht. Mein Problem, dass der transparente Proxy nicht transparent sein will, besteht deshalb aber bestimmt immer noch. An dieser statischen Route im DSL-Router kann das ja nicht liegen, weil die Proxyfunktionalität ja eigentlich geben ist. Ich habe am Dienstag das Ganze nochmal auf meinem Laptop nachvollzogen. Aber auch dort will der Proxy nicht transparent funktionieren. Meine Vermutung mit der Firewallkonfiguration ist bestimmt richtig. Ich tippe, wie bereits erwähnt, auf den Redirect-Eintrag. Aber ich bekomme nicht raus, wie ich ihn abändern sollte, damit der Kladderadatsch endlich wie gewünscht seinen Dienst verrichtet. Vielleicht hast du dazu auch noch so einen hilfreichen Tipp?! :)

Schöne Grüße

Slotti
 
OP
S

slotti

Newbie
jengelh schrieb:
(Source-)Transparent-Proxying und NAT stehen im Widerspruch.

Jetzt erklär mir doch bitte auch noch, was das (Source-) bedeutet, und in wiefern du auf NAT kommst. Dein Beitrag hat mir leider nicht weitergeholfen. Vielleicht könntest du dich etwas präziser darüber auslassen, wo mein Denkfehler liegt. Ich wäre dir sehr dankbar dafür. Schließlich möchte ich hierbei etwas lernen.

Bis dahin

Gruß Slotti
 
OP
S

slotti

Newbie
Hallo mal wieder!

Ihr könnt mich doch nicht so alleine im Wald stehen lassen: ich habe mir das mit dem Beitrag von jengelh noch mehrmals durch den Kopf gehen lassen. Aber ich steig da nicht durch. NAT -> OK, das macht mein DSL-Router, wenn er die Pakete ins interne Netz schickt. Unter Source-Transparent-Proxying kann ich mir nur denken, dass eben ein transparenter Proxy die Daten von einer öffentlichen Adresse erwartet, nicht aber von einer privaten. Wenn dem so ist, dann gibt es doch aber bestimmt eine Möglichkeit, dem Proxy das Transparentsein beizubringen. Sonst ist ja auch alles möglich mit Linux.

Was ich nun gar nicht verstehe ist, dass der Proxy unter Zuhilfenahme der Einstellungen im Browser funktioniert - nicht aber ohne!

Bitte helft mir. Ich verzweifel bald.

P.S.: das mit der statischen Route am DSL-Router hat sich bei mir als ein Problem herausgestellt. Ich benutze ein Siemens Gigaset SX541 als DSL-Router, und ich habe nirgends eine Einstellung für dieses Vorhaben gefunden.

Bis demnächst wieder

Slotti
 

wenf

Hacker
1.) wozu hast du in deiner Squid.conf die Auth_Param gesetzt ?
du verlangst doch gar keine Authentifikation.
2.) deine Squid.conf sieht gut aus, als ob sie für "HiddenProxying" verwendet werden könnte.
2.) NAT und ein Redirect für einen hidden Proxy stehen nicht im Wiederspruch zueinander.
Vielleicht kommt die SuSE Firewall damit nicht klar, aber ich habe auf meinen Gateways verwende ich eine Kombination aus Screening-Router (S-NAT) und Application Level Gateways (verschiedenste Proxies) welche wunderbar harmonieren
Iptables redirected einige Datenpakete bevor noch NAT zur Anwendung kommt. z.B. NTP HTTP DNS

Ich schreibe meine Firewalls immer mit IPTABLES selber, und kann deswegen nichts näheres zur SuSE Firewall sagen. (die gibt es auf Debian auch nicht)

MFG FLO
 
OP
S

slotti

Newbie
Hallo Flo!

Zunächst vielen Dank für die superschnelle Antwort.

zu 1.) das hat SuSE selbst so gemacht; wer weiß, vielleicht experimentiere ich auch einmal damit.

zu 2.) unter HiddenProxying meinst du das gleiche wie TransparentProxying? Ich denke ja. Invisible wäre auch nicht schlecht... 8)

zu 3.) schön das zu hören. Ich denke auch, dass die SuSE-Firewall irgendwelchen Unsinn treibt. Ich werde da wohl irgendwann noch etwas mit dem "Firewallbuilder" rumbasteln. Mit IPtables hab ich es wie gesagt nicht so sehr... Neulich hatte ich es mit Webmin probiert die Firewall zu konfigurieren. Ich bin der Meinung, dass nun meine Einstellungen in der SuSE-Firewall2 nicht mehr zum Tragen kommen. Da muss irgendwo ein anderes Script entstanden sein, welches jetzt die Regeln setzt - ich hab nur keinen blassen Schimmer wo!

Warum kann es außerdem nicht so eine Möglichkeit unter Linux geben wie Zone-Alarm für Win? Dass man entscheiden kann, ob man nun das Programm oder den Dienst rein bzw. raus lassen will, wenn es gerade akut wird?! Das wäre auch ganz nett. Nun gut. Am WE komme ich nicht mehr dazu etwas zu machen. Aber dann nächste Woche wieder.

Nochmals dankeschön und bis demnächst wieder.

LG Slotti
 

4077

Newbie
Ich habe in einem meiner Skripten was gefunden. Vielleicht hilft das weiter.

Transparenter Proxy
Ist der Proxy-Rechner auch gleichzeitig das default-gateway des Netzes, kann mit folgender Zeile ein sogenannter Transparent-Proxy aufgebaut werden. Hiermit ist es nicht mehr nötig, einen Proxyserver einzutragen. Alle http-Pakete an Port 80 über das gateway werden automatisch an den lokalen Proxy auf Port 3128 (Standard-Port des Squid) weitergeleitet.

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 \ -j REDIRECT --to-ports 3128
 

wenf

Hacker
stimmt so in etwa;
Problematisch ist das nur bei HTTPS verbindungen - da mußt du dann einen Proxy - Server eintragen

ansonsten würde ja auch ein Maninthemiddle Angiff auch ganz leicht möglich sein.

HiddenProxying = TransparentProxying (unterschiedliche Proxies bezeichnen diese Funktionen auch unterschiedlich)

Invisible kannst du deinen Proxy für HTTP-Verbindungen einrichten, aber nicht für HTTPS und auch nicht für den Fall, dass der Proxy eine Authentifizierung erfordert.

mein IPTABLES - Redirect -Code:
Code:
$IPTABLES -t nat -A PREROUTING -i $INTIF -p tcp --sport $p_high --dport 80 -j DNAT --to-destination ${SQUIDSERVER}:3128
$IPTABLES=/pfad/zu/iptables
$INTIF = Interface Interne Seite (LAN)
$p_high = High Port Bereich (1024:65535)
$SQUIDSERVER = IP Adresse des Squid-Servers (gleiche IP-Adresse wie am $INTIF)

MFG FLO
 
Oben