Linux Proxy & Masquerading

Cash for help?!..

Hallo,

habe seit geraumer Zeit auf einen älteren AMD 500 mit Suse 8.1 aufgesetzt. Die Aufgaben dieses Rechners sollen folgende sein :

  • HTTP Server über dynamische IP --> klappt wunderbar
    (Linux Rechner hat 2 NIC’s (DSL & LAN)
  • Zwei weitere Windows Clients sollen über den Linux Rechner ins Internet gehen (EMAIL, FTP(!!), Emule…)

Bei den Windows Rechnern gehen nun die Probleme los:
Um mit den Win Rechnern ins INET zu kommen, habe ich Squid 2.4 aufgesetzt. Damit läuft Internet & Emule. Nun die Probleme:
-Squid fährt sich ca alle 2 Tage fest (wahrscheinlich Cache Probl),
-EMAIL ging nicht mit Outlook -> gelöst mit fetchmail & postfix
-FTP geht NICHT von den Windows Kisten! Da ist momentan mein
grösstes Problem: von Linux ins Internet=alles OK; von Windows FTP
ins Internet = NIX GEHT (WSFTP sagt eg. DNS Probl,could not find
Name,etc. . Es geht nur zu ftp://ftp.blabla.de Seiten (welche
annonymen Login erlauben & wahrscheinlich Web basierend sind.

Und damit quäle ich mich nun. Ich muss sagen, prinzipell Erfahrung mit Linux hab ich (wegen meiner Arbeit) schon, aber leider keine besonders professionelle im Bezug auf Internet,etc und Linux.

Nun habe ich schon viel über Masquerading gehört, mit dem , wenn ich richtig gelesen habe, die EMail (was mit ich finde Notlösung erstmal gelöst wurde) & FTP Probleme gelöst, dh, umgangen werden können. Aber ich hab es einfach nicht zum laufen bekommen. Weder über irgendwelche Kommandos, noch über die SuseFirewall2 von Yast. Daher bin ich so ziemlich am Ende mit meinem Latein. Hinzu kommt, dass ich nicht unbegrenzt Zeit wegen meiner Arbeit habe.

Also: meine Bitte und Aufruf:

Wenn es wirklich so ist, dass mann mit Masquerading die Windowsrechner dazu bringt, sich so zu verhalten als wären Sie DIREKT mit dem Internet verbunden (Problemlos FTP & Email( ohne extra Mail Server über Linux), dann bitte ich Euch mir zu helfen dies umzusetzen.

Gegebenfalls besteht auch die Möglichkeit, dass Ihr direkt am System (Telnet Dynamische IP) rumschreibt.
Wer das hinkriegt (was glaub ich nicht schwer ist, nur ich komm nicht drauf…) und mir hinterher auch sagt, was geändert wurde, dem zeig ich mich ganz sicher erkenntlich.

Danke im voraus!!!

Wenn es wirklich so ist, dass mann mit Masquerading die
Windowsrechner dazu bringt, sich so zu verhalten als wären Sie
DIREKT mit dem Internet verbunden (Problemlos FTP & Email(
ohne extra Mail Server über Linux), dann bitte ich Euch mir zu
helfen dies umzusetzen.

Korrekt. Masquerading ist das was Du suchst.

Gegebenfalls besteht auch die Möglichkeit, dass Ihr direkt am
System (Telnet Dynamische IP) rumschreibt.
Wer das hinkriegt (was glaub ich nicht schwer ist, nur ich
komm nicht drauf…) und mir hinterher auch sagt, was geändert
wurde, dem zeig ich mich ganz sicher erkenntlich.

Also helfen gerne, aber nur kostenlos!
Das ist eigentlich audfuehrlich in den beiliegenden Handbuechern erklaert (Firewall/Masquerading) und ich koennte jetzt nichts anderes machen, als das nochmal abzutippen :frowning:
Eine schoene Anleitung findest Du z.B. auch unter http://www.linuxnetmag.com/de/issue6/m6firewall1.html
Wenn Du noch weiter Hilfe brauchst, kannst Du mir auch gerne mailen.
Gruss
Oliver

Hallo,

Daher bin ich so ziemlich am Ende
mit meinem Latein. Hinzu kommt, dass ich nicht unbegrenzt Zeit
wegen meiner Arbeit habe.

Um mit den Win Rechnern ins INET zu kommen, habe ich Squid 2.4
aufgesetzt. Damit läuft Internet & Emule. Nun die Probleme:
-Squid fährt sich ca alle 2 Tage fest (wahrscheinlich Cache
Probl),
-EMAIL ging nicht mit Outlook -> gelöst mit fetchmail &
postfix

Meine persönlichen Erfahrungen mit Linux sind, dass, wenn man Linux „richtig“ einsetzen möchte, das auch eine serh Zeitaufwendige Angelegenheit wird, da immer irgendwas nicht funktioniert:wink: Wie Oliver schon richtig schreibt. Mit einem richtig aufgesetzten (S/D)NAT funtkioniert Internet, Outlook, FTP und E-Mule problemlos!

Du kannst das aufjenden Fall mit der Suse Firewall machen, nur ist das so eine Sache, da kommt man leider sehr schnell an seine Grenzen. Auch finde ich die SuseFW nur bedingt transparent. Man weiss immer nicht so genau, was da nun im Hintergrund abläuft. Allgemein bei dieser ganze YAST Geschichte, so hilfreich diese in vielen Fällen ist.

Als Alternative bietet sich iptables an (darauf basiert auhc die SuseFW). Allerdings ist das schon auch ein Thema, das nicht gerade zu empfehlen ist, wenn man das ganze in ein paar Minuten durchziehen möchte…

ERstelle dir mal folgendes Shell Skript :

#! /bin/sh

Unter SUSE 8.2 sind die unnötig, evtl. aber für 8.1 notwendig???

modprobe ip_tables
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ipt_state
modprobe iptable_filter

IP-Forwarding aktivieren (geht auch per YAST2)

echo „1“ > /proc/sys/net/ipv4/ip_forward

Clean-Init

iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

Setzen der Default Policies.

iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

Notwendig damit auf dem Linux Server z.B. X11 funktioniert und

eineige andere Programme. Loopback-Interface wird damit nicht

mehr geblockt.

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Aktivieren des Soure NAT fürs interne Netzwerk. Damit werden

sämtliche ausgehenden Verbindungen des internen Netzwerkes mit

der öffentlichen IP-Adresse des Servers maskiert.

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Unbedingt notwendig, wegen der PPP over Ethernet Problematik -->

TCP Paketgröße… 1450/1492

iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS \
–clamp-mss-to-pmtu

Erlaube eingehenden Traffic der über das DSL Interface (ppp0)

reinkommt, sofern es dazu eine entsprechende (ausgehende) „gültige“

Verbindung gibt. Statefull FIltering/Connection Tracking.

Diese Regel gilt nur für den Linux-Server. Nicht fürs LAN

iptables -A INPUT -i ppp0 -p tcp -m state \
–state ESTABLISHED,RELATED -j ACCEPT

Nicht ideal, aber zum TEsten OK. Erlaube sämtliche Zugriffe aus dem

internen Netzwerk auf den Server! Sonst sollte man das auch

blocken bwz. SSH tunneln.

iptables -A INPUT -i eth0 -j ACCEPT

Apache/Webserver

iptables -A INPUT -i ppp0 -p tcp --dport 80 -m state \
–state NEW -j ACCEPT

Erlaube sämtlichen ausgehenden Traffic ins Internetder auf dem

Server auf eth0 „reinkommt“ und auf ppp0 „rausgeht“. Also nur

Traffic des _internen_ Netzes, nicht des Linux Servers selbst.

iptables -A FORWARD -i eth0 -o ppp0 -s -j ACCEPT

Statefull Filtering/ Connection Tracking. Erlaube eingehenden

Traffic vom DSL Anschluss (ppp0) an das interne Netzwerk (eth0)

nur dann, wenn er zu einer „gültigen“ verbindung gehört

Diese Regel betrifft den Server selbst _nicht_! sondern nur den

Traffic der für das interne Netzwerk bestimmt ist.

iptables -A FORWARD -i ppp0 -o eth0 -m state \
–state ESTABLISHED,RELATED -j ACCEPT

##EMULE###

DAmit läuft der Esel problemlos, auch wenn die ein oder

andere Verbindung von aussen geblockt wird. Die Ports basieren aber

auf der offiziellen E-Mule implementierung/Doku.

Du musst noch anpassen auf welchem Rechner im Netzwerk der Esel

läuft!! 192.168.0.3 durch die entsprechende IP-Adresse ersetzten!

Es kann immer nur ein Esel im Netzwerk laufen…

ppp0 ist wider das DSL Interface, eth0 das Interface an dem das

Lan angeschlossen ist.

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4662 \
-j DNAT --to 192.168.0.3
iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 4672 \
-j DNAT --to 192.168.0.3

iptables -A FORWARD -i ppp0 -o eth0 -p tcp --dport 4662 -j ACCEPT
iptables -A FORWARD -i ppp0 -o eth0 -p udp --dport 4672 -j ACCEPT

Ein paar Anmerkungen.
Passives FTP (das muss man im entsprechenden FTP Programm einstellen, müsste damit funktionieren. Aktives FPT NICHT!. Dazu braucht man DNAT…)

Sämtliche Zeilen die mit \ enden sind (wie üblich) _eine_ Zeile !

Damit dieses Skript im Sinne einer Firewall einigermassen sicher ist, musst du unbedingt die Ethernetzwerkkarte deines Servers mit dem DSL-Modem direkt über ein EthernetNetzwerkkabel verbinden. DAs geht theoretisch auch über ein Hub oder Switch, dann sind aber die ganzen Firewallregeln komplett anders zu schreiben. Also unbedingt direkt verbinden.

Bevor du das Skript laufen läßt, schalte alle Suse Firewalls aus!! (SuseFIrewall2 und die PersonalFirewall, je nachdem)

Die Netzwerkinterface ppp0, eth0 und eth1 musst du natürlich anpassen, inkl der IP Adresse für Emule. ppp0 ist das DSL Interface, und eth0 ist hier das Interface an dem dein _eigenes privates_ LAN hängt!! an eth1 ist der anschluss zum DSL Modem!

Wenn du Glück hast, funktioniert das dann:wink:

Wenn nicht - und auch sonst! - um das ganze wieder los zu werden unbedingt folgends Skript ausführen:

#! /bin/sh

iptables -t filter -P INPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
iptables -t filter -P OUTPUT ACCEPT

iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT

iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

iptables -L

Viele Grüße
Thomas

obligatorischer NAchtrag.
(Je nach dem wie du Postfix und Fetchmail einsetzt, laufen diese evtl. zuerstmal nicht mehr… Denn eingehende SMTP Verbindungen werden geblockt, das brauchst du aber nur, wenn du Postifx als „richtiges“ Relay verwendest. AUch ist Squid, wenn du ihn nicht als richtigen Cache verwendest unnötig. Zum Testen schalte den aber unbedingt ab!!)

GAnz wichtig (und wahrscheinlich auch klar:wink:, unter Windows musst du nun in den Netzwerkeinstellungen, (pysikalischen Netzewrkkarte) das entsprechende Gateway!! angeben (IP-Adresse des Gateways und des DNS-Servers) DAS ist ja dann der Linux Server. Und nciht vergessen die Proxy Einstellungen im Inet Explorer zumindest temporär abzustellen…

1 Like

Hallo, Antworten auf diesen Artikel sind nicht mehr nötig: habe in nem anderem Forum von User Stage die passende und einwandfrei funktionierende Lösung bekommen:: hier noch mal für alles die dieses Problem eventuell auch haben:

also einfachstes masquerading kriegst du hin wenn du
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
eingibst (wenn ppp0 dein device ins Internet ist)

dazu noch forwarding aktivieren
echo „1“ >/proc/sys/net/ipv4/ip_forward

den squid am besten abschalten…dann die IP des Routers als Standartgateway bei den Clienten eintragen