hamster1337
Goto Top

Linux DSL Router

Hallo,

ich möchte nach dem DSL-Modem einen Server mit 2 NICs laufen lassen der aufbau sieht so aus

dslmodem - - - Server - - - Netzwerk
dsl - verbindung // 192.168.1.1

Die 1. Netzwerkkarte hat die IP 192.168.1.1 und verbindet über einen Switch das netzwerkt
Die 2. Netzwerkkarte ist am DSL-Modem angeschlossen und IP bekommt sie über DHCP
der Provider ist T-Online

DSL Verbindung habe ich den Server kann mann auch anpingen nur kommt man nicht ins internet das heisst doch das ich eine falsche route habe?

Meine Routing Tabelle sieht folgendermaßen aus
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
217.0.116.87    *               255.255.255.255 UH    0      0        0 dsl0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
link-local      *               255.255.0.0     U     0      0        0 eth0
loopback        *               255.0.0.0       U     0      0        0 lo
default         217.0.116.87    0.0.0.0         UG    0      0        0 dsl0 
(was mich hier wundert ist das nirgends die schnittstelle für dsl auftaucht (eth1oder ist das die dsl0?) und nirgends die ip vom Netzwerk also 192.168.1.1)

ich bin noch eine ziemlicher Linux anfänger am besten wäre für mich eine Erklärung mit Yast oder schritt für schritt (für dumme) in der Konsole

schon mal vielen Dank

mfg hamster1337

Content-ID: 28540

Url: https://administrator.de/forum/linux-dsl-router-28540.html

Ausgedruckt am: 24.12.2024 um 16:12 Uhr

AndreasHoster
AndreasHoster 20.03.2006 um 17:36:20 Uhr
Goto Top
Kurze Nachfrage:
Wer kommt nicht ins Internet?
Wenn Du Router schreibst, kommt Dein Server nicht ins Internet oder ein Rechner an der 2. NIC? Wenn Rechner hinter Router, dann wirds noch etwas aufwendiger (NAT, Forwarding etc.)
Versuchst Du mit DNS Namen oder mit IP Adresse irgendjemand im Internet zu erreichen? Wenn DNS, dann versuche mal einen Ping auf eine IP-Adresse (eventuell tut die Namensauflösung nicht), z.B. 217.119.51.146 (das ist der Webserver meiner Firma).

DSL0 ist das Interface für DSL und das als Standardgateway zu nehmen ist schon richtig. Daher ist Deine Route so erstmal korrekt.
hamster1337
hamster1337 20.03.2006 um 17:41:50 Uhr
Goto Top
die Rechner hinter dem Router.
das mit Namensauflösung habe ich mir auch schon gedacht habe immer web.de angeping mit der ip 217.... oder so und hat nicht funktioniert. sitze im moment am server von dem alles problemlos geht dns etc
AndreasHoster
AndreasHoster 20.03.2006 um 17:54:29 Uhr
Goto Top
Ich habe daheim auch eine solche Lösung arbeiten, sitze aber gerade im Geschäft face-sad
Für die Routing-Funktionen kommen noch 2 Sachen hinzu:
1. Es muß IP-Forwarding eingeschaltet werden
2. Es muß NAT (Network Address Translation) aktiviert werden.

Ich habe Debian, sollte aber mit SuSE genauso arbeiten.
Für 1:
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynadd (das braucht man unter Umständen nicht)

Für 2 (Hier ein Skript von meinem Server):
#!/bin/tcsh
  1. Löschen der FireWall-Regeln
  2. ACHTUNG: Die FireWall ist danach offen!

set IPTABLES = /usr/sbin/iptables

  1. Alles akzeptieren
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

  1. Eventuell vorhandene Regeln löschen
$IPTABLES -F
$IPTABLES -t nat -F
  1. NAT aktivieren
$IPTABLES -X
$IPTABLES -t nat -A POSTROUTING -o dsl0 -j MASQUERADE

Dann sitzt Dein Rechner allerdings völlig offen im Netz, man sollte die Firewall schon sicherer konfigurieren, aber für einen kurzen Test sollte es reichen.
hamster1337
hamster1337 20.03.2006 um 19:13:33 Uhr
Goto Top
die beiden optionenen haben leider nichts bewirkt und wie man mit dem skript umgeht hab ich leider keine ahnung.
ich habe gerade mal im linux handbuch nachegelesen und irgendwas von einer dummy addresse für die dsl0 bzw eth1 schnittstelle gelesen, das man z.b. einfach 192.168.22.1 eingibt ich probier das jetzt mal aus ansonsten weis ich net weiter
AndreasHoster
AndreasHoster 20.03.2006 um 20:39:38 Uhr
Goto Top
Sorry hamster1337, war ich mal wieder ein bischen zu schnell.

Also, 1. alleine reicht auch nicht, NAT muß aktiviert sein.
Das Skript einfach in eine Textdatei schreiben (kopieren), diese mittels chmod 755 Name_der_Datei ausführbar machen und dann in der Konsole aufrufen.
Oder die Befehle einzeln in der Konsole aufrufen:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE

Außerdem muß der Kernel es unterstützen, sollte aber bei einem SuSE Kernel mitdrin sein.
AndreasHoster
AndreasHoster 20.03.2006 um 20:40:52 Uhr
Goto Top
Hier auch mein komplettes Firewall-Skript (na gut, an manchen Stellen redundant, aber es tut):
Man muß natürlich noch die Auswahl bei Internem Netz und Interfaces an seine Konfiguration anpassen!


#!/bin/tcsh
  1. Firewall-Skript für Server.home
  2. =============================================================================
  3. Teil I: Variablen
  4. =============================================================================

set IPTABLES = /usr/sbin/iptables

  1. Ports
set p_high = 1024:65535 # unpriviliegierte Ports (Userspace)
set p_vnc = 5901 # VNC-Port
set p_ssh = 1000:1023 # common ssh source ports
set p_squid = 3128 # Squid-Port


  1. Interfaces
set EXT = ppp0 # DSL Interface, kann auch dsl0 heißen
set INT = eth0 # Interface ins interne Netz
set IF = ( $EXT $INT )

set INTERN = 10.0.0.0/255.255.255.0 # Internes Netz, muß an das tatsächlich verwendete IP Netz angepasst werden

  1. =============================================================================
  2. Teil II: Grundkonfiguration: absichern
  3. =============================================================================

  1. dynamische Kernelparameter setzen

echo "0" > /proc/sys/net/ipv4/ip_forward # Forwarding erstmal abschalten
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "5" > /proc/sys/net/ipv4/icmp_destunreach_rate
echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate
echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate
echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate

foreach if ($IF)
echo "1" > /proc/sys/net/ipv4/conf/$if/rp_filter
echo "0" > /proc/sys/net/ipv4/conf/$if/accept_redirects
echo "0" > /proc/sys/net/ipv4/conf/$if/accept_source_route
echo "0" > /proc/sys/net/ipv4/conf/$if/bootp_relay
echo "1" > /proc/sys/net/ipv4/conf/$if/log_martians
end

  1. Conntrack-Module für FTP laden

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

  1. Default Policy und Regeln löschen
  2. Default Policy: Alles wird gedroppt

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

$IPTABLES -F # Löschen aller Regeln (Tabelle filter)
$IPTABLES -t nat -F # Löschen aller Regeln (Tabelle nat)
$IPTABLES -X # Löschen aller benutzerdefinierten Chains (filter)

  1. Die maximale Segmentgröße auf die maximale transfer unit abstimmen
$IPTABLES -I FORWARD 1 -p TCP --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

  1. Lokale Prozesse dürfen über das Loopback-Device lo kommunizieren

$IPTABLES -A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPTABLES -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPTABLES -A OUTPUT -o lo -s 10.0.0.1 -d 10.0.0.1 -j ACCEPT
$IPTABLES -A INPUT -i lo -s 10.0.0.1 -d 10.0.0.1 -j ACCEPT

  1. VNC für die Wartung erlauben, sofern die Anfrage aus dem internen Netz
  2. und über die Ethernet-Karte des internen Netzes kommt

$IPTABLES -A INPUT -i $INT -s $INTERN -p TCP --dport $p_vnc -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o $INT -d $INTERN -p TCP --sport $p_vnc -m state --state ESTABLISHED,RELATED -j ACCEPT

  1. =============================================================================
  2. Userdefinierte Regelketten
  3. =============================================================================
  4. DROP & LOG Kette

$IPTABLES -N log_drop
$IPTABLES -A log_drop -p ICMP -j LOG --log-prefix "DROP-ICMP "
$IPTABLES -A log_drop -p UDP -j LOG --log-prefix "DROP-UDP "
$IPTABLES -A log_drop -p TCP -j LOG --log-prefix "DROP-TCP "
$IPTABLES -A log_drop -j DROP

  1. =============================================================================
  2. Teil IV: Masquerading und bestehende Verbindungen
  3. =============================================================================
  4. Masquerading

$IPTABLES -t nat -A POSTROUTING -o $EXT -j MASQUERADE

  1. IP-Forwarding kann wieder eingeschaltet werden da Firewall läuft

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

  1. Erlauben ausgehender Pakete bestehender Verbindungen

$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $INT -o $EXT -m state --state ESTABLISHED,RELATED -j ACCEPT

  1. Erlauben eingehender Pakete zu bestehenden Verbindungen

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -i $EXT -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT

  1. Droppen von eingehenden invaliden Paketen

$IPTABLES -A INPUT -m state --state INVALID -j LOG --log-prefix "INVALID INPUT "
$IPTABLES -A INPUT -m state --state INVALID -j DROP
$IPTABLES -A FORWARD -i $EXT -o $INT -m state --state INVALID -j LOG --log-prefix "INVALID FORWARD "
$IPTABLES -A FORWARD -i $EXT -o $INT -m state --state INVALID -j DROP

  1. =============================================================================
  2. Teil V: Filterregeln für lokale Dienste (also Dienste, die auf Server laufen)
  3. =============================================================================

  1. ICMP (Ausgehender Ping) erlauben

$IPTABLES -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT

  1. DNS-Abfragen von Server an andere Nameserver erlauben

$IPTABLES -A OUTPUT -m state --state NEW -p UDP --dport domain -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p TCP --dport domain -j ACCEPT

  1. SMTP ausgehend erlauben

$IPTABLES -A OUTPUT -m state --state NEW -p UDP --dport smtp -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p TCP --dport smtp -j ACCEPT

  1. POP3 ausgehend erlauben, damit Fetchmail die Mails holen kann
$IPTABLES -A OUTPUT -m state --state NEW -p UDP --dport pop3 -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p TCP --dport pop3 -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p UDP --dport pop3s -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW -p TCP --dport pop3s -j ACCEPT


  1. Squid (WWW-Proxy)
  2. Anfragen aus dem internen Netz an Squid erlauben

$IPTABLES -A INPUT -i $INT -s $INTERN -p TCP --dport $p_squid -j ACCEPT

  1. Anfragen von Squid an externe Web-Server erlauben (http und https)

$IPTABLES -A OUTPUT -o $EXT -p TCP --dport http -j ACCEPT
$IPTABLES -A OUTPUT -o $EXT -p TCP --dport https -j ACCEPT

  1. Komplettes Sperren bestimmter Ports von der Firewall ins externe Netz (auch wegen Broadcasts)
  2. Telnet (Port 23)
  3. Telnet Gateway (Port 89)
  4. Remote Telnet (Port 107)
  5. Telnet over SSL (Port 992)
$IPTABLES -A INPUT -i $EXT -p TCP -m multiport --dport 23,89,107,992 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p TCP -m multiport --sport 23,89,107,992 -j DROP
$IPTABLES -A INPUT -i $EXT -p UDP -m multiport --dport 23,89,107,992 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p UDP -m multiport --sport 23,89,107,992 -j DROP

  1. Sysstat (Port 11)
  2. Finger (Port 79)
  3. X11 Display Manager Control Protocol (Port 177)
  4. SWAT (Port 901)
  5. NFS (Port 2049)
  6. X11 Font Server (Port 7001)
$IPTABLES -A INPUT -i $EXT -p TCP -m multiport --dport 11,79,177,901,2049,7001 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p TCP -m multiport --sport 11,79,177,901,2049,7001 -j DROP
$IPTABLES -A INPUT -i $EXT -p UDP -m multiport --dport 11,79,177,901,2049,7001 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p UDP -m multiport --sport 11,79,177,901,2049,7001 -j DROP

  1. NetBIOS (Windows) Ports (Ports 137 - 139)
$IPTABLES -A INPUT -i $EXT -p TCP --dport 137:139 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p TCP --sport 137:139 -j DROP
$IPTABLES -A INPUT -i $EXT -p UDP --dport 137:139 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p UDP --sport 137:139 -j DROP

  1. X11 Windows Displays (Ports 6000-6063)
$IPTABLES -A INPUT -i $EXT -p TCP --dport 6000:6063 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p TCP --sport 6000:6063 -j DROP
$IPTABLES -A INPUT -i $EXT -p UDP --dport 6000:6063 -j DROP
$IPTABLES -A OUTPUT -o $EXT -p UDP --sport 6000:6063 -j DROP

  1. Mal alles erlauben, was vom Server ins interne Netz geht und von dort kommt

  1. $IPTABLES -A INPUT -i $INT -s $INTERN -j LOG --log-prefix "INTERN-INPUT "
$IPTABLES -A INPUT -i $INT -s $INTERN -j ACCEPT
  1. $IPTABLES -A OUTPUT -o $INT -s $INTERN -j LOG --log-prefix "INTERN-OUTPUT "
$IPTABLES -A OUTPUT -o $INT -s $INTERN -j ACCEPT

  1. =============================================================================
  2. Teil VI: Filterregeln für Forwarding
  3. =============================================================================

  1. ICMP (Ping darf aus dem internen Netz nach draußen)

$IPTABLES -A FORWARD -o $EXT -i $INT -p ICMP --icmp-type echo-request -j ACCEPT

  1. identd wird rejected

$IPTABLES -A FORWARD -i $EXT -p TCP --dport auth --syn -j LOG --log-prefix "IDENT "
$IPTABLES -A FORWARD -i $EXT -p TCP --dport auth --syn -j REJECT

  1. Ansonsten darf aus dem internen Netz mal alles raus, wird aber protokolliert

  1. $IPTABLES -A FORWARD -i $INT -o $EXT -m state --state NEW -j LOG --log-prefix "Verbindungsaufbau Netz"
$IPTABLES -A FORWARD -i $INT -o $EXT -m state --state INVALID -j LOG --log-prefix "INVALID aus NETZ"
$IPTABLES -A FORWARD -i $INT -o $EXT -m state --state NEW,INVALID -j ACCEPT

  1. Alles was noch übrig ist sperren und loggen
  2. ACHTUNG:
  3. Da Morpheus zig Anfragen auf den DNS-Service bekommt, werden diese Pakete nicht mehr protokolliert, sondern einfach nur gedroppt
$IPTABLES -A INPUT -i $EXT -m state --state NEW -p UDP --dport domain -j DROP
$IPTABLES -A INPUT -i $EXT -m state --state NEW -p TCP --dport domain -j DROP

  1. Jetzt den Rest sperren und loggen
$IPTABLES -A INPUT -j log_drop
$IPTABLES -A OUTPUT -j log_drop
$IPTABLES -A FORWARD -j log_drop
hamster1337
hamster1337 20.03.2006 um 21:17:34 Uhr
Goto Top
Danke mal für das Skript ich werd mich dann morgen drüber machen und es mal ausprobieren.
Okies
Okies 22.03.2006 um 00:00:15 Uhr
Goto Top
Soweit ich weiß hat YaST doch ein "Security" Modul in welchem die Firewall eingestellt werden kann. Die Firewall fragt dann schon ob Masquerading benötigt wird. War soweit ich mich erinnere ziemlich selbsterklärend.
Die hier vorgestellten Skripte sind toll, aber sollten bei SuSE nicht nötig sein.

Gruss, Oliver
hamster1337
hamster1337 23.03.2006 um 16:20:03 Uhr
Goto Top
ich hab jetzt mal die einzelnen befehele in die konsole gehackt. und es geht jetzt brauch ich also noch ein funktionierentes firewall skript das beim starten geladen wird oder ist das automatisch so?
AndreasHoster
AndreasHoster 23.03.2006 um 17:29:06 Uhr
Goto Top
Nein, er merkt sich den Zustand nicht, daß Skript muß beim Booten ausgeführt werden, aber erst, nachdem die DSL Verbindung steht (vorher gibts das Interface DSL0 nicht).
Die "Dienste" die Linux automatisch startet sind links auf ausführbare Dateien unter /etc/init.d/rc.RUNLEVEL. RUNLEVEL= 0 bis 6, s, h
Soweit ich das von SuSE noch im Kopf habe, ist Standard-Runlevel 3 bei Konsole und 5 bei graphischem Login.
D.h. in das Verzeichnis /etc/init.d/rc.3 bzw. rc.5 muß ein symbolischer Link rein, der auf die Batch-Datei des Firewall-Skripts zeigt und der SxxNameDesDienstes lautet. xx kann von 00 bis 99 gehen und gibt an, wann, im Verhältnis zu anderen Diensten, das Skript gestartet wird. 00 ganz am Anfang, 99 am Schluß.
Es muß auf alle Fälle nach network gestartet werden, ich weiß gerade nicht, wann DSL gestartet wird. Ansonsten einfach S99FirewallSkript machen.
symbolische Links gehen mit ln -s Quelldatei Zieldatei