T-DSL_Server
T-DSL Hilfen
http://people.freenet.de/mhrnet/index.html
Einrichten eines T-DSL Servers unter SuSE Linux V7.0
Voraussetzung: Es sollten 2 Netzwerkkarten im Rechner stecken. Leider erzeugt Yast2 beim Einrichten des Nameservers einen Fehler: In der Datei /etc/rc.config werden beide Netzwerkkarten eth0 und eth1 mit der gleichen IP-Nummer versehen. Lösung: entweder von Hand die Datei editieren oder mit Yast1 nochmals das Netzwerk konfigurieren. Dabei kann man gleich den Nameserver eintragen: 194.25.2.129; die Search list ist zu löschen.
Als 2. Schritt muß der T-DSL Server Dial on Demand fähig gemacht werden, d.h. der Rechner wählt sich autom. ins Internet, sobald er eine Adresse erhält, die intern nicht existiert. Dazu sind folgende Schritte notwendig:
demand = yes
idle = 180
START_PPPOED="yes"
ln -sv /sbin/init.d/pppoed /sbin/init.d/rc2.d/S05pppoed
ln -sv /sbin/init.d/pppoed /sbin/init.d/rc3.d/S05pppoed
ln -sv /sbin/init.d/pppoed /sbin/init.d/rc2.d/K40pppoed
ln -sv /sbin/init.d/pppoed /sbin/init.d/rc3.d/K40pppoed
3. Den Rechner Masquerading fähig machen. Dazu gibt es 2 Möglichkeiten: Masquerading ohne Filterung (sehr einfach, aber schutzlos für den eigenen Rechner) und mit Firewall.
3.1 Masquerading ohne Filterung:
#! /bin/sh
# Für IP_Adresse_LAN muß die IP-Adresse des Servers
# auf der LAN-Seite eingetragen werden, also die IP-Nummer
# der Netzwerkkarte die mit den anderen Rechnern verbunden
# ist, nicht die an das T-DSL Modem geht.
IP_SERVER_LAN="IP_Adresse_LAN"
# mit -P wird die Policy festgelegt, also was geschehen soll, wenn keine ipchains-Regel
zutrifft
/sbin/ipchains -P input ACCEPT
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward ACCEPT
/sbin/ipchains -A forward -s $IP_SERVER_LAN
Anschließend mit chmod 700 /sbin/init.d/masquerade die Datei ausführbar machen.
ln -s ../masquerade /sbin/init.d/rc2.d/S99masquerade
ln -s ../masquerade /sbin/init.d/rc2.d/K51masquerade
ln -s ../masquerade /sbin/init.d/rc3.d/S99masquerade
ln -s ../masquerade /sbin/init.d/rc3.d/K51masquerade
Ab dem nächsten Reboot können die Rechner über den T-DSL Server ins Internet (lt. Aussage der Supportdatenbank).
Schön wärs! Jetzt muß man den Client noch anpassen.
Wenn der Client ein Linux Rechner ist: YAST2 starten, Netzwerk Grundkonfiguration bzw. Network/Base wählen, auf Next klicken, unter 'Default Gateway' die IP-Adresse des Servers auf der LAN-Seite eintragen (die Netzwerkkarte, die im LAN hängt), im nächsten Fenster unter 'Name Server list' den Nameserver 194.25.2.129 der Telekom und unter 'Domain search list' nochmals die Nameserver IP 194.25.2.129 eintragen. Jetzt braucht man nur noch unter den Netscape Eigenschaften die Proxies wie unter Windows98 beschrieben einzutragen.
Wenn der Client ein Windows98 Rechner ist: Unter Netzwerkumgebung -> Eigenschaften: Konfiguration das TCP/IP Protokoll der Netzwerkkarte suchen (z.B. TCP/IP -> Realtek RTL8029(AS) PCI Ethernet Adapter)
auf 'Eigenschaften' klicken, den Karteieintrag 'Gateway' wählen und dann die IP-Adresse des Servers eintragen, und zwar diejenige IP-Adresse, dessen Netzwerkkarte im LAN hängt, nicht die am T-DSL Modem hängt. Dann den Karteieintrag DNS-Konfiguration wählen, DNS aktivieren und unter 'Host' den eigenen Computernamen eintragen (zu finden unter Identifikation in den Netzwerkeigenschaften). Im Feld 'Suchreihenfolge für DNS-Server' muß nun noch der Nameserver eingetragen werden, also 194.25.2.129. Anschließend erfolgt ein Reboot.
Nachdem Windows wieder geladen ist muß noch die Eigenschaft des IE bzw. Netscape angepaßt werden.
Beim IE: Eigenschaften -> Verbindungen und die Option 'Keine Verbindung wählen' aktivieren. Dann unter 'LAN-Einstellungen' das Kästchen 'Proxyserver verwenden' markieren und unter 'Erweitert' die folgenden Proxys eintragen:
HTTP: www-proxy.btx.dtag.de mit Port 80
FTP; ftp-proxy.btx.dtag.de auch mit Port 80
Ausklammern vom Proxy sollte man: *.t-online.de; localhost
Bei Netscape ist es etwas einfacher: Unter Einstellungen -> Erweitert -> Proxies die Manuelle Proxy-Konfiguration selektieren und auch hier über die Befehlsschaltfläche 'Anzeige...' die Proxies eintragen. Achtung: Die Syntax zum Ausklammern vom Proxy ist immarginal anders aber entscheidend: t-online.de, localhost. Die Trennung erfolgt hier durch ein Komma.
Wenn der Client ein NT-Rechner ist: Ähnlich wie Windows98 nur der Reboot entfällt. Den Standard-Gateway trägt man unten unter IP-Adresse ein und statt der Proxies kann das Konfigurationsscript von T-Online verwendet werden: http://www.t-online.de/software/ie50/setpxy.pac
3.2 Einrichtung eines Firewall mit Paketfilterung:
- FW_DEV_WORLD="eth0" wenn eth0 die Neztwerkkarte ist, die ans T-DSL Modem angeschlossen ist
- FW_DEV_INT="eth1" wenn eth1 mit dem internen Netz verbunden ist
- FW_ROUTE="yes"
- FW_MASQUERADE="yes"
- FW_MASQ_NETS="192.168.1.1 192.168.1.2" wenn 192.168.1.x die Einzelrechner-IP Adressen Ihres Netzwerkes sind
- FW_MASQ_DEV="$FW_DEV_WORLD"
- FW_PROTECT_FROM_INTERNAL="no"
Eine genaue Beschreibung findet sich unter /usr/doc/packages/firewals sowie unter SuSE http://sdb.suse.de/sdb/de/html/sm_masq2.html
Falls das Firewall Script von SuSE Linux, wie bei mir, nicht funktioniert, dann kann man auch das Masquerading Script um einige ipchains-Regeln erweitern und damit einen Firewall aufbauen. Die Einstellungen für das Masquerading ist oben beschrieben. Hier ein paar Regeln:
#!/bin/sh
# falls eth1 die Netzwerkkarte ist, die mit dem Modem verbunden ist
DEV_WORLD="eth1"
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_raudio
/sbin/ipchains -P input DENY
/sbin/ipchains -P forward REJECT
/sbin/ipchains -P output REJECT
/sbin/ipchains -F
/sbin/ipchains -X
# Lokale Interface-Verbindungen zulassen. Ist zwingend notwendig,
# wenn man den Server remote-mäßig betreut.
/sbin/ipchains -A input -i ! $DEV_WORLD -j ACCEPT
/sbin/ipchains -A output -i ! $DEV_WORLD -j ACCEPT
# -- c't -----------------------------------
# SYN Flood protection
#
if [ -e /proc/sys/net/ipv4/tcp_syncookies ]; then
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
fi
#
# Disable source routed packets
#
for i in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $i
done
#
#
# enable forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
#
# -- Spoofed Packets -----------------------
/sbin/ipchains -A input -i $DEV_WORLD -s 192.168.0.99 -j DENY -l
/sbin/ipchains -A output -í $DEV_WORLD -s ! 192.168.0.99 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 0.0.0.0 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 0.0.0.0 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 10.0.0.0/8 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 10.0.0.0/8 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 127.0.0.0/8 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 127.0.0.0/8 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 169.254.0.0/16 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 169.254.0.0/16 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 172.16.0.0/12 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 172.16.0.0/12 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 192.0.2.0/24 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 192.0.2.0/24 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 192.168.0.0/16 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 192.168.0.0/16 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 224.0.0.0/3 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 224.0.0.0/3 -j REJECT -l
/sbin/ipchains -A input -i $DEV_WORLD -s 255.255.255.255 -j DENY -l
/sbin/ipchains -A output -i $DEV_WORLD -d 255.255.255.255 -j REJECT -l
# -- Junkbuster ------------------------------
/sbin/ipchains -A input -i $DEV_WORLD -p tcp --dport 5865 -j DENY -l
# -- -X-Server -------------------------------
/sbin/ipchains -A input -i $DEV_WORLD -p tcp --dport 6000 -j DENY -l
# -- ICMP incoming ---------------------------
/sbin/ipchains -A input -i $DEV_WORLD -p icmp --icmp-type 0 -j ACCEPT
/sbin/ipchains -A input -i $DEV_WORLD -p icmp --icmp-type 3 -j ACCEPT
/sbin/ipchains -A input -i $DEV_WORLD -p icmp --icmp-type 11 -j ACCEPT
# -- ICMP outgoing ---------------------------
/sbin/ipchains -A output -i $DEV_WORLD -p icmp --icmp-type 8 -j ACCEPT
#
#
# -- c't -------------------------------------
#
# keine ankommenden Verbindungen von außen
#
/sbin/ipchains -A input -l -i $DEV_WORLD -p tcp -y -j DENY
#
# Deny tcp und udp packets to privileged ports
#
/sbin/ipchains -A input -l -i $DEV_WORLD -d $ANY 0:1023 -p udp -j DENY
/sbin/ipchains -A input -l -i $DEV_WORLD -d $ANY 0:1023 -p tcp -j DENY
#
# -- c't ende --------------------------------
#
# --- Masquerade -----------------------------
/sbin/ipchains -A forward -s 192.168.22.5/24 -j MASQ --no-warnings
/sbin/ipchains -A forward -i $DEV_WORLD -j REJECT -l --no-warnings
#
# --- script ende ---------------------------
Hier noch ein paar Erläuterungen zu den einzelnen Switches von ipchains:
-A bedeutet Regel anfügen
-P Policy setzen, also was passieren soll, wenn keine Regel zutrifft
-F löscht ipchains Regeln
-X löscht userspezifische Regeln
input, output, forward legt die Richtung der Daten für diese Regel fest. Input bedeutet dabei ankommende Daten aus dem LAN wie auch aus dem Internet zum Server, Output bedeutet weggehende Daten ins Internet od. ins LAN
-i Interface auf welches Interface - also Netzwerkkarte sich die Regel beziehen soll. Es kann natürlich auch ein Modem (Analog ppp0, ISDN ippp0) sein.
-s IP-Adresse auf welche IP-Adresse des Absenders sich die Regel bezieht. 192.0.2.0/24 bedeutet dabei: IP-Adresse 192.0.2.0 mit Netmask 255.255.255.0. Die Zahl /24 gibt die Anzahl der 1er beim maskieren wieder. 255 entspricht binär 8x1, also setzt sich /24 wie folgt zusammen:
11111111 11111111 11111111 00000000
-d IP-Adresse wie zuvor beschrieben nur für die Zieladresse
-p Protokoll legt die Regeln für ein bestimmtes Protokoll fest, z.B. ftp, tcp, icmp
--icmp-type Zahl spezifiziert den ICMP Type. Die ICMP type names kann man mit 'ipchains -h icmp' erfahren
--dport Zahl ist eine Abkürzung für --destination-port und erlaubt separate Regeln für einen Port
-j Sprungmarke legt fest, was beim Zutreffen dieser Regel damit geschehen soll. Sprungmarken sind:
ACCEPT Regel ist erlaubt
REJECT Regel mit Rückmeldung abgelehnt
DENY Regel ohne Rückmeldung abgelehnt
MASQ sorgt dafür, das die aus dem LAN kommenden Absender-IP-Adressen durch die IP-Adresse
des Servers ersetzt werden. Ist damit immer in einem Netzwerk mit Server notwendig, sollte
aber am Schluß stehen.
REDIRECT wenn z.B. ein Porxy-Server installiert wird, dann kann man die Anfragen auf den
Proxy umleiten
RETURN ipchins verlassen
mit -j Name kann man zu selbst definierte IP-chains springen. Diese werden mit -N Name erstellt.
-L listet die ipchains Regeln auf
mit ipchains -L -M zeigt die gerade maskierten Verbindungen an
Dieser Firewall ist sicherlich unvollständig aber mit diesen einfachen Regeln wird
jedes kleine Netzwerk mit einem T-DSL-Server recht gut geschützt und bedarf keiner
weiteren Einschränkung.
Nun sollte man Linux selbst noch aufräumen und Sicherheitsrelevante Programme updaten. Das Aufräumen von Linux ist notwendig, da durch die vielen laufenden Dienste - im Gegensatz zu Windows - sich jeder Zugang zum Server verschaffen kann. Zum entrümpeln von Linux kann man das Kommando netstat -plt - für tcp Verbindungen - und netstat -plu - für UDP Verbindungen - heranziehen. Es listet alle laufenden Dienste auf. Wichtig ist dabei nur der ssh. Über ssh kann man remote mäßig auf den Rechner zugreifen. Alle anderen Dienste sollte man löschen bzw. deaktivieren. Ein Teil der Dienste werden automatisch gestartet. Sie befinden sich in unterschiedlichen Runlevels mit den pfaden /sbin/init.d/rc2.d und /sbin/init.d/rc.3. Auf keinen Fall sollte man Dienste wie kerneld, inetd, cron ... löschen denn diese erleichtern die Administration des Servers. Der sshd läuft zwar im Hintergrund, bedeutet aber nicht, daß ssh auch installiert ist. Dieser muß man von Hand nachinstalliert werden. Auch die Dienste in inetd sollte man ausmisten: In der Datei /etc/inetd.conf wird u.a. ftp, http-rman, swat, talk etc gestartet.
Portadressen: /etc/services
T-DSL:
Bei der Einrichtung von T-DSL mit YAST2 kann man dies gleich DoD-fähig machen. Aber das Script vergißt den entsprechenden Eintrag in /etc/rc.config richtig zu setzen. Die Zeile, welche zu korrigieren ist, muß lauten:
START_PPPOED="yes"
DoD bedeutet, daß der Browser bei einer externen Adresse autom. ins Internet wählt. Die Zeit hinter idle gibt an, nach wieviel Sekunden Inaktivität das System die Verbindung trennt.
Auch können die Nameserver der dtag gleich aktiviert werden; und siehe da, es stehen - im Gegensatz zum sdb-Artikel - gleich die richtigen Werte drin: 217.5.115.7 und 194.25.2.129. Zitat: "... Gut geeignet ist z.B. 192.168.22.99 als DNS-Server." Leider nicht, wenn man, wie vorher beschrieben, 194.168.22.x als internen Adressraum gewählt hat. Richtig ist aber, daß nahezu jede beliebige andere Adresse eingetragen werden kann, da die dtag diese dynamisch verwaltet.
T-DSL Server:
Soll dieser Rechner als T-DSL Server fungieren so muß in /etc/rc.config der Eintrag IP_FORWARD="yes" gesetzt werden. Anschließend ist SuSEconfig aufzurufen. Durch Ändern des Eintrages der Datei /etc/rc.config.d/security.rc.config
REJECT_ALL_INCOMING_CONNECTIONS="ppp0 masq"
wird Masquerading mit einfacher Filterung aktiviert. Aber: etliche Ports sind deaktiviert, so z.B. der ftp-Port.
Wiso ppp0
Bitte mal in der Kommandozeile ifconfig aufrufen, dann sollten etwa folgende
Einträge erscheinen:
eth0 | Link encap:Ethernet HWaddr 52:54:00:E2:38:10 inet addr:192.168.22.4 Bcast:192.168.22.255 Mask:255.255.255.0 inet6 addr: fe80::5254:e2:3810/10 Scope:Link inet6 addr: fe80::5054:ff:fee2:3810/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:263 errors:0 dropped:0 overruns:0 frame:0 TX packets:215 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:30417 (29.7 Kb) TX bytes:97820 (95.5 Kb) Interrupt:12 Base address:0xe000 |
eth1 | Link encap:Ethernet HWaddr 00:00:B4:BC:AD:1D inet addr:192.168.0.98 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::b4bc:ad1d/10 Scope:Link inet6 addr: fe80::200:b4ff:febc:ad1d/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:168 errors:0 dropped:0 overruns:0 frame:0 TX packets:197 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:94106 (91.9 Kb) TX bytes:26717 (26.0 Kb) Interrupt:10 Base address:0xd800 |
lo | Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:48 errors:0 dropped:0 overruns:0 frame:0 TX packets:48 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3340 (3.2 Kb) TX bytes:3340 (3.2 Kb) |
ppp0 | Link encap:Point-to-Point Protocol inet addr:217.80.82.163 P-t-P:212.185.251.109 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1490 Metric:1 RX packets:156 errors:0 dropped:0 overruns:0 frame:0 TX packets:176 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:89947 (87.8 Kb) TX bytes:21398 (20.8 Kb) |
Wenn also der letzte Eintrag ppp1 heißt, so muß die Zeile in /etc/rc.config.d/security.rc.config entsprechend lauten: "ppp1 masq"
pppd-Version ermitteln: pppd --version
SuSE Firewall-Scripte sind unter /sbin abgelegt.