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

wir lernen routing mit iptables

ich will meinen linux rechner demnaechst als router verwenden und da mir hier in dem forum gesagt wurde das die susefirewall gut und einfach ist wenns um internet geht wollte ich die dafuer verwenden. aber und nu kommt das grosse aber: ich will mit dem selben rechner auch ein bnc und ein rj-45 netzwerk verbinden. diese aufgabe wollte ich mit iptables loesen da ich mir da zutraue eine regel hinzubekommen die alles zwischen den lokalen netzwerken durchlaesst.

ok nu zurueck zu meiner frage kann ich das so machen wie ich mir das denke? oder sollte ich mich doch in iptabels einarbeiten und alles mit denen machen?
 
OP
captain nemo

captain nemo

Member
das mit dem frontend weiss ich schon. meine frage ist nur ob ich nachdem die susefirewall2 aktiv wird (beim booten) noch meinen eigenen regeln und routing wege hinzufuegen kann ohne die schon bestehenden zu vernichten.
 

Bonsai

Advanced Hacker
Und Du willst dann dabei noch durchblicken? :shock: :shock: :shock:

Keine Ahnung, ob das geht, muss auch nicht unbedingt, weil das dermassen Chaotisch wäre, das selbst wenf hier auf dem Schlauch stehen würde :)
 

wenf

Hacker
ich denke dann wird die firewall löchrig
warum baust du nicht gleich deine eigene ?

schwinbar kennst du dich mit iptables aus, dann sollte das doch kein problem sein
 
OP
captain nemo

captain nemo

Member
he he wenf,
dein wort in gottes gehoergang aber dem ist leider nicht der fall. ich glaube nicht das ich bei iptables durchschaue. ich hab zwar schon ne menge gelesen aber irgendwie klickts bei mir noch nicht. hatte mir zwar schonmal nen grobes schema ausgedacht/abgeguckt, alles dichtmachen und dann nur die sachen erlauben die ich brauche/will, aber ich bin nicht sicher. und heute habe ich schon wieder was gelesen womit man verbindungen noch mal extra behandeln kann... sehr weitlaeufiges thema und sehr interessant.

ich muesste mich mal mit jemandem treffen der mir nen kleinen anstoss und nen paar beispiele geben kann die ich unter seiner/ihrer aufsicht durcharbeite. das waere schon was. ich glaube ich hab schon so die konzepte verstanden aber irgendwie... na ja ich muss einfach mal anfangen auszuprobieren.
aber an meinem jetzigen standort werde ich das nicht anfangen. wenn ich wieder zu hause bin in zwei wochen hab ich die richtige umgebung fuer experimente :)
 

wenf

Hacker
su kannst ja ,wenn du willst, hier kleine beispiele von dir posten und dann denken wir die gemeinsam duch.
vielleicht sind dann auch einige beispiele dabei, von welchen andre etwas lernen können.
 
OP
captain nemo

captain nemo

Member
ok ich will nicht wirklich warten mit dem ausprobieren also hab ich gleich mal ne frage: kann ich mit folgender regel alle pakete die an der schnittstelle wlan ankommen blocken?

Code:
iptables -A INPUT -i wlan -j DROP

ich hab das probiert aber irgendwie sehe ich da keinen effekt, ich kann immer noch im internet surfen, was ja eigentlich nicht moeglich sein sollte. muss ich iptables irgendwie aktivieren oder so?
 

wenf

Hacker
ich habe noch nie wlan betrieben
die regel sollte stimmen

aber ob dieses Interface wlan heißt ???
 
OP
captain nemo

captain nemo

Member
@carsten natuerlich ist das wlan0 hab ich ganz vergessen.

@wenf wenn ich die policies fuer die INPUT FORWARD und OUTPUT ketten alle auf DROP als default stelle kommt auch erst mal nichts mehr durch richtig? kannst du mir mal ne beispiel regel posten die das tcp protokoll von wlan0 nach eth0 auf port 80 forwarded?

das sollte dann ja schon mal ne sehr dichte firewall/router sein in der ich dann noch spezielle tueren oeffnen kann bei bedarf oder?

dann muss ich mich noch nen bissel mit nat und masquerading ausseinandersetzen und dann werd ich auch noch mal sehen wie das mit dem ganzen verbindungs kram (related, established und new) aussieht und was man da noch so machen kann.

EDIT 1:
ich habs mal mit folgender regel versucht.
Code:
iptables -A FORWARD -p tcp -i wlan0 --sport 80 -o eth0 --dport 80 -j ACCEPT

EDIT 2:
ok noch mal drei ganz essentielle frage: 1. welche ports und protokolle brauche ich nur fuers surfen im internet? 2. wird alles was ich eingebe (auch die default policies) bei einem reboot "vergessen"? 3. muss ich dann bei den clients den linux rechner (eth0) als standard gateway einrichten damit das geht? wenn ich das weiss traue ich mir schon zu ordentliche regeln zu erstellen und diese in nen shell script zu packen.
 
OP
captain nemo

captain nemo

Member
ok nu muss ich mal aufhoeren meinen beitrag immer zu editieren :)
ich hab mal nen kleinen shell script geschrieben. sag mal was du davon haelts wenf und verbessere mich bitte wo noetig. aber vergiss bitte nicht die essentiellen fragen vom vorigen post :) . und danke schonmal fuer all die hilfe. du hast mich dazu gebracht das thema mal anzugehen.
Code:
#!/bin/sh
# script fuer das weiterleiten der internetverbindung. fuers surfen only. wir gehen davon aus das das internet am interface wlan0
# (192.168.0.2) und das lokale netz am interface eth0 (192.168.1.11) liegt.

# erst mal allen datenverkehr in der FORWARD kette dichtmachen. der router allerdings hat noch alle verbindungen offen "wo gibt".
iptables -P INPUT ACCEPT;
iptables -P FORWARD DROP;
iptables -P OUTPUT ACCEPT;

# um an der INPUT kette eingehende pings zu blocken. ausgehenede sind aber erlaubt.
iptables -A INPUT -p icmp -s 192.168.0.0/24 -j DROP
iptables -A INPUT -p icmp -s 192.168.1.0/24 -j ACCEPT


# der teil wo wir alle noetigen protokolle und ports fuer die FORWARD kette freigeben.

# pingen von der FORWARD kette ins internet erlauben.

iptables -A FORWARD -p icmp -s 192.168.1.0/24 -j ACCEPT

# ports/protokolle nur fuers surfen.
iptables -A FORWARD -p tcp --sport 80 --dport 80 -j ACCEPT;
iptables -A FORWARD -p udp --sport 80 --dport 80 -j ACCEPT;

# ports/protokolle nur fuer ftp.
iptables -A FORWARD -p tcp --sport 20 --dport 20 -j ACCEPT;
iptables -A FORWARD -p udp --sport 20 --dport 20 -j ACCEPT;
iptables -A FORWARD -p tcp --sport 21 --dport 21 -j ACCEPT;
iptables -A FORWARD -p udp --sport 21 --dport 21 -j ACCEPT;

# verbindungen in FORWARD kette und wie sie sich zu verhalten haben.
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT;
iptables -A FORWARD -i eth0 -o wlan0 -m state --state NEW -j ACCEPT;

# masquerade um alle rechner im lokalen netzwerk hinter der firewall zu verbergen
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE;
 

wenf

Hacker
captain nemo schrieb:
@wenf wenn ich die policies fuer die INPUT FORWARD und OUTPUT ketten alle auf DROP als default stelle kommt auch erst mal nichts mehr durch richtig?
stimmt
captain nemo schrieb:
kannst du mir mal ne beispiel regel posten die das tcp protokoll von wlan0 nach eth0 auf port 80 forwarded?
ao einfach ist das nicht
du mußt das Paket umschreiben
dass es an eine ipadresse gesendet wird (nicht einfach über eth0 wieder rausschmeißen) also eine Ziel-IP -Adresse welche über eth0 erreichbar ist
wenn das zwei verschiedene Netze sind, muß das auch noch über SNAT oder DNAT laufen
wenn das ding dann als gateway für ein Lan funktionieren soll, und du mit einem Client im Lan einfach nur surfen willst, dann brauchst du SNAT / Masquerade

captain nemo schrieb:
das sollte dann ja schon mal ne sehr dichte firewall/router sein in der ich dann noch spezielle tueren oeffnen kann bei bedarf oder?
so baut mann firewalls - alles aus und bei bedarf einenport öffnen

captain nemo schrieb:
ich habs mal mit folgender regel versucht.
Code:
iptables -A FORWARD -p tcp -i wlan0 --sport 80 -o eth0 --dport 80 -j ACCEPT
funst nicht

captain nemo schrieb:
ok noch mal drei ganz essentielle frage: 1. welche ports und protokolle brauche ich nur fuers surfen im internet?
Das surfen im web funktioniert so:

client IP mit einem Sourceport aus dem highportbereich (1024 - 65355) stellt eine Anfrage an die IP des Webservers an den Zielport (Destinationport) 80 (http)

der Webserver antwortet dann "normalerweise" mit
sourceip=IPdes Webserver
sourceport 80
destinationIP = IPdes Clienten
destinationport 1024 - 65355 (normalerweise an den gleichen Port, von dem die anfrage gekommen ist)

das problem das du nun zusätzlich hast...
woher weiß der client die IP des Webservers
also brauchst du auch noch regeln für DNS
captain nemo schrieb:
2. wird alles was ich eingebe (auch die default policies) bei einem reboot "vergessen"?
JA
captain nemo schrieb:
3. muss ich dann bei den clients den linux rechner (eth0) als standard gateway einrichten damit das geht?
JA wenn dieser rechner ein gateway sein soll

alle klarheiten bereinigt ?
 

Bonsai

Advanced Hacker
@ Wenf: Mach den Thread doch mal Wichtig und nenne ihn "Wir lernen Routen" Ich finde den Klasse!

Wie, ausser durch reboot, kann ich alle Regeln löschen?
Wie lösche ich nur eine Regel?
 
OP
captain nemo

captain nemo

Member
@bonsai

du kannst mit
Code:
iptables -F
alle tabellen fluschen aber dabei werden die policies nicht beeinflusst. wenn du nur eine kette fluschen willst haengst du den namen noch an wie zb
Code:
iptables -F INPUT
das wuerde die ganze INPUT kette fluschen.

wenn du eine einzige regel flushen willst dann kannst du einfach

Code:
iptables -D und dann deine regel
benutzen wobei die regel aber genau/exakt so aussehen wie die die du loeschen willst.

wenn du auch noch ne kette in nem anderem table (zb NAT, POSTROUTING, PREROUTING) flushen willst musste da noch -t fuer das richtige table einfuegen.

Code:
iptables -t NAT -F

@wenf was haelst du von dem script? ich denke das dns problem sollte man doch mit nem eigenen dns server beseitigen koennen oder? und mit dem thread aendern kann ich nur zustimmen.
 

Bonsai

Advanced Hacker
DNS Server der nur DNS Forwarding macht?
/etc/init.d/named start und bei den Clients den Router auch als DNS eintragen.

Der Router kann ja selbst noch einen DNS erreichen? Kannst Du ja testen.
Wenn jetzt noch die Verbindung vom Client zum Router durch die Firewall auf dem Prot nicht dichtgemacht wird, müsste das gehen.

Den Namen des Threads ändern könntest Du übrigens selber, indem Du in Deinem ersten Beitrag auf "Edit" klickst. Wichtig machen können den aber nur Wenf und moenk.
 
OP
captain nemo

captain nemo

Member
genauso hatte ich mir das gedacht. das der dns auf dem router dann in der hierarchie unter einem der internet dns server liegt und damit muesste das doch gehen.

nu muessen wir uns nur noch dran machen die richtigen regeln dafuer aufzustellen. den anfang hab ich schonmal versucht (siehe der script weiter oben) und ich hoffe das ihr den noch verbessern/korrigieren koennt.
 

Bonsai

Advanced Hacker
Ich :shock: neee, vielleicht in ein paar Tagen. Du bist da weiter wie ich. Kenne das alles leider nur von Windows :( Solange Klicken, bis es geht :)

Well known Ports Liste schrieb:
...
53/tcp DNS The Domain Name System
...
Also muss alles auf Port 53/tcp zum und vom Router auf allen Schnittstellen aufgemacht werden. Das dürfte dann so aussehen?
:?:
Code:
iptables -A INPUT -p tcp --sport 53 --dport 53 -s -j ACCEPT
 
OP
captain nemo

captain nemo

Member
hey bonsai,
was nicht ist kann/wird ja noch werden :D :D . und damit das auch was wird poste ich hier mal die links mit tutorials und anleitungen die mich bis hierhin gebracht haben. ich hab mir da von jeder seite was abgeguckt...

http://www.pl-forum.de/t_netzwerk/iptables.html

http://iptables-tutorial.frozentux.net/iptables-tutorial.html

http://www.netfilter.org/documentation/HOWTO/de/packet-filtering-HOWTO.html

http://www.netfilter.org/index.html

mit der regel denke ich das wenn wir von meinem script oben ausgehen dann muessen wir deine regel nur in die FORWARD kette einbinden weil die INPUT und OUTPUT ja so oder so alles durchlassen (das werden wir warscheinlich noch aendern, sicherheitstechnischen gruenden wegen).
 

Bonsai

Advanced Hacker
Stimmt, dann brauchen wir den Named auf dem Router auch nicht. Ich bevorzuge das allerdings dann, wenn ich mehrere Clienst habe, da ich dann DNS Konfiguration an nur einem Rechner pflegen muss. Ausser man nimmt DHCP für die Clients, dann geht es auch anders.

Es müsste doch so aussehen, wenn wir DNS Forwarden wollen?
Code:
iptables -A FORWARD -p tcp --sport 53 --dport 53 -j ACCEPT
 
Oben