Einen Router bauen
arrow.gif Entwicklungsumgebung
arrow.gif Hardware Plattformen
arrow.gif Slackware Router
arrow.gif Downloads
   
Weiterentwicklung
arrow.gif Tasks pending
arrow.gif Bugs
   
Informationen
arrow.gif Security
arrow.gif FAQ
arrow.gif Links
 
Slackware Linux Router
Prev Next

3. Slackware installieren

3.1 Übersicht

Der Router ist aus dem Internet sichtbar. Er ist damit das am stärksten exponierte Element des Netzwerks. Bei seiner Konfiguration wurde von den folgenden Grundgedanken ausgegangen:

  • Jeder Dienst und jedes Programm, das nicht auf dem Router installiert ist, kann auch nicht angegriffen werden.
  • Ein C-Compiler, das X-Window System, ein FTP- oder DNS-Server gehören nicht auf einen Paketfilter.
  • Netzwerk Diagnosewerkzeuge wie tcpdump, iptraf, ntop, nmap haben auf einem Router nichts zu suchen.
  • Bei Servern und Routern sollten die für den Betrieb notwendigen Module (Hardwaretreiber) fest in den Kernel einkompiliert werden. Der Mechanismus zum Nachladen von Treibern zur Laufzeit wird deaktiviert.

3.2 Bezeichnung der Komponenten

In der folgenden Installationsanleitung wird für den Entwicklungsrechner die Bezeichnung DEVBOX verwendet, für die Partition auf dem Entwicklungsrechner, in die das Router OS installiert wird, die Bezeichnung /dev/hda5 und für das System, das auf den Compact Flash Speicher portiert wird, die Bezeichnung SLACK_LNX.

3.3 Partition vorbereiten

Den Entwicklungsrechner DEVBOX booten, eine leere Partition /dev/hda5 von ca. 200 MB anlegen und /dev/hda5 mit ext2 formatieren (-c = check for badblocks).

# mke2fs -c /dev/hda5
 

Eine Bootdiskette für DEVBOX anlegen.

3.4 Slackware setup starten

DEVBOX mit Hilfe der Slackware Installationsdisketten oder der Installations-CDROM neu booten und den setup starten.

# setup
 

Die Root Partition unter /dev/hda5 mounten, keine Swap Partition anlegen.

3.5 Pakete auswählen und installieren

Alle Programmpakete aus dem Verzeichnis «a» (Base linux system) die mit REQUIRED bezeichnet sind installieren und zusätzlich die folgenden Pakete auswählen:

[x] gawk (needed for adduser)
[x] getty-ps (serial login support)
[x] glibc-solibs (required for SSH)
[x] glibc-zoneinfo (to configure time zones)
[x] isapnptools (plug and play configuration tools - if the router hardware supports PCMCIA)
[x] kbd (keyboard mapping tool)
[x] lilo
[x] pcmcia-cs (PCMCIA card services support - if the router hardware supports PCMCIA)
[x] sysklogd (logs system and kernel messages)
[x] tcsh
 

Aus dem Verzeichnis «n» (Networking) die folgenden Pakete installieren:

[x] dhcpcd (DHCP client)
[x] dhcp (if the router is to be used as DHCP server)
[x] iptables
[x] ntp (network time protocol)
[x] openssh
[x] openssl (necessary for ssh and ntp)
[x] ppp (point-to-point protocol)
[x] rp-pppoe (necessary to connect to ADSL ISPs that use PPPoE)
[x] tcpip (basic networking utilities)
 

Die obige Installation umfasst ca. 66 MB.

3.6 LILO konfigurieren

LILO in den Bootsektor von /dev/hda5 installieren, nicht in den MBR, d.h. die Option «Install to superblock» auswählen. Die Option «View your current /etc/lilo.conf» muss die folgenden Einträge zeigen:

boot = /dev/hda5
root = /dev/hda5
 

3.7 Bootmanager des Hauptsystems anpassen

Das Hauptsystem von DEVBOX booten und den Bootmanager anpassen. Falls das System LILO verwendet, in /etc/lilo.conf den folgenden Eintrag hinzufügen:

other=/dev/hda5
label= slack_x.y
 

LILO updaten.

# lilo
 

Falls das Hauptsystem Grub verwendet, in /boot/grub/menu.lst den folgenden Eintrag hinzufügen:

title slack_x.y
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5 vga=normal
 

3.8 Systemtest

SLACK_LNX neu booten und die Netzwerk-Interfaces mit Hilfe von /etc/rc.d/rc.inet1.conf konfigurieren. ifconfig sollte nun die NICs und die zugehörigen IP-Adressen zeigen und das System sollte auf pings antworten.

3.9 SSH, TCP-Wrappers und die lokale Namensauflösung konfigurieren

Wenn nötig den Hostnamen in /etc/HOSTNAME anpassen.

In /etc/hosts die IP-Adressen und Namen der Hosts im internen Netzwerk eintragen.

Die Datei /etc/hosts.equiv löschen.

Alle Zugriffe auf SLACK_LNX sperren, dazu in /etc/hosts.deny den folgenden Eintrag einfügen:

ALL: ALL
 

Den Zugriffe auf SLACK_LNX via ssh aus dem internen Netz zulassen, dazu in der Datei /etc/hosts.allow die folgenden Einträge einfügen:

ALL: 127.0.0.1
sshd: 10.10.10.10 # Gewünschte IP-Adresse verwenden
 

Einen Benutzeraccount anlegen (beispielsweise «myname»).

# /usr/sbin/adduser
 

Ein Verzeichnis /home/myname/.ssh anlegen.

Auf dem Linux System, mit dem auf den Router zugegriffen wird, ein Schlüsselpaar für SSH generieren:

$ ssh-keygen -b 1024 -t rsa
 

Anschliessend das File id_rsa.pub, das dabei erzeugt wird, ins Verzeichnis /home/myname/.ssh von SLACK_LNX kopieren und umbenennen in /home/myname/.ssh/authorized_keys. Hinweis: Die Permissions dieses Files sind wichtig, sie müssen wie folgt lauten:

-rw-r--r--   myname   users	authorized_keys
 

Auf den Router soll nur via Public Key Authentifizierung zugegriffen werden. Dazu im sshd Konfigurationsfile /etc/ssh/sshd_config die folgenden Einträge editieren:

# /etc/ssh/sshd_config - Configuration file for sshd

Protocol 2
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
 

Unter der Voraussetzung, dass SLACK_LNX den Hostnamen «ada» trägt und die entfernte Maschine «byron» heisst, kann mit dem folgenden Kommando von byron aus auf ada zugegriffen werden (ohne dass ein Passwort eingegeben werden muss):

yourname@byron: ~ $ ssh myname@ada
 

3.10 syslogd konfigurieren

Im Folgenden wird angenommen, dass das Logfile des Routers auf einem Logserver mit dem Hostnamen «byron» geführt wird. Weiterhin soll «byron» die Log-Einträge des Routers in ein separates File schreiben, Filtermeldungen des Routers also nicht mit Kernelmeldungen vermischen.

Um diese Trennung herbeizuführen, müssen die Meldungen, die der Routerkernel erzeugt, gekennzeichnet werden. Eine Möglichkeit hierfür besteht darin, die Filtermeldungen, die auf dem Router generiert werden, mit der Priorität «debug» zu versehen − und dann syslogd auf «byron» so zu konfigurieren, dass Meldungen mit diesem Loglevel ins File /etc/linuxrouter.log geschrieben werden.

 

Die oben diskutierte Konfiguration lässt sich wie folgt erzeugen:

Das Loglevel der Filtermeldungen wird im iptables Script des Routers definiert. Im Beispiel wird zuerst eine Regelkette erzeugt, in die anschliessend zwei Regeln eingefügt werden, welche UDP und TCP Pakete verwerfen, die dabei erzeugten Logmeldungen entsprechend kennzeichnen und mit der Priorität «debug» versehen.

# /etc/rc.d/rc.firewall - Configuration file containing firewall rules     
# Create a user defined rule chain
# ---------------------------------------------------------
/usr/sbin/iptables -N my_drop
#
# Insert rules to drop UDP and TCP packets with the priority «debug»
# ---------------------------------------------------------
/usr/sbin/iptables  -A my_drop -p UDP  -j LOG --log-prefix "UDP_DROP: " --log-level debug
/usr/sbin/iptables  -A my_drop -p TCP  -j LOG --log-prefix "TCP_DROP: " --log-level debug
 

Sodann wird die Datei /etc/syslog.conf des Routers so angepasst, dass alle gewünschten Logmeldungen an «byron» gesendet werden. (Hinweis: In syslog.conf keine Leerzeichen verwenden, nur tabs.)

# /etc/syslog.conf - Configuration file for syslogd on linuxrouter
# For info about the format of this file, see «man syslog.conf»    
#     
# Log authentication information     
# ---------------------------------------------------------  
#auth.info	/dev/tty9
auth.info	@byron.mydomain
#
# Log kernel messages     
# ---------------------------------------------------------
#kern.info	/dev/tty10
kern.info	@byron.mydomain
#
# Log packet filter messages     
# ---------------------------------------------------------
kern.debug	@byron.mydomain
#
# Log logins on the serial console
# ---------------------------------------------------------
authpriv    @byron.mydomain 
#
# Log emergencies
# ---------------------------------------------------------
*.emerg		@byron.mydomain
 

Als nächstes wird /etc/syslog.conf des Logservers angepasst, so dass syslogd «debug» Meldungen in ein separates File schreibt.

# /etc/syslog.conf - Configuration file for syslogd on your logserver     
# Display kernel messages (except debug) on tty10.
kern.*;kern.!=debug                                 /dev/tty10

# Debugging information is logged here (except kernel debugging).
*.=debug;kern.!=debug                             -/var/log/debug

# Kernel debugging messages are logged here
kern.=debug                                       -/var/log/linuxrouter.log
 

Der syslogd Daemon des Logservers muss mit der Option «-r» gestartet werden, /usr/sbin/syslogd -r, damit der Server auf Port 514 hört. In diesem Fall sollte Port 514 des Logservers jedoch mit Hilfe des folgenden Scripts geschützt werden (das Script muss auf dem Logserver installiert und ausgeführt werden, nicht auf dem Router).

#!/bin/tcsh
#
# Description: Script protects udp port 514 of the logserver
#
# Script first completed:	2003-08-08
# Script last changed:		2003-08-09
#
set FIREWALL = 10.10.10.1
set IPTABLES = /usr/sbin/iptables
#
# Set default policy and flush all chains
# --------------------------------------------------------------
$IPTABLES -P INPUT ACCEPT     
$IPTABLES -P FORWARD ACCEPT     
$IPTABLES -P OUTPUT ACCEPT     
#     
$IPTABLES -F			# flush all chains (table filter)     
$IPTABLES -t nat -F	# flush all chains (table NT)     
$IPTABLES -X			# delete all userdefined chains   
#     
# Block port 514 for all traffic except from the fireall     
# --------------------------------------------------------------
$IPTABLES -A INPUT -t filter -p udp --dport 514 -s ! $FIREWALL \
   -j DROP

echo "Port 514 closed for all traffic except from firewall"
 

3.11 Timeserver konfigurieren

ntpd ist ein Daemon, der die Systemzeit überwacht und sie mit der Systemzeit von definierten Internet Zeitservern synchronisiert. Der Router kann damit als Zeitserver für die Clients im LAN dienen. ntpd wird mit Hilfe der Datei /etc/ntp.my_conf konfiguriert:

#/etc/ntp.my_conf - Configuration file for ntpd

server 129.132.2.21 prefer     # swisstime.ethz.ch
server 130.149.17.8            # sombrero.tu-berlin.de
server 158.152.1.76            # ntp.demon.co.uk
server 127.127.1.0             # local clock (LCL)
fudge  127.127.1.0 stratum 10

# Make sure that localhost has full access
restrict 127.0.0.1

# Restrict access of the external servers
restrict 129.132.2.21 mask 255.255.255.255 noquery notrap nomodify
restrict 130.149.17.8 mask 255.255.255.255 noquery notrap nomodify
restrict 158.152.1.76 mask 255.255.255.255 noquery notrap nomodify

driftfile /etc/ntp/drift
logfile /tmp/ntp.log
 

Um ntpd beim Booten zu starten, /etc/rc.d/rc.local wie folgt editieren:

# Use swisstime.ethz.ch to sync time
/usr/sbin/ntpdate 129.132.2.21

echo "Starting NTP server..."
/usr/sbin/ntpd  -c /etc/ntp.my_conf
 

3.12 Firewall-Script einbinden

Ein geeignetes Firewall-Script (vergl. Downloads) nach SLACK_LNX kopieren und an die eigenen Bedürfnisse anpassen. Das Script anschliessend als /etc/rc.d/rc.firewall abspeichern und mit den permissions rwx------ versehen:

# chmod 700 /etc/rc.d/rc.firewall
 

Prev Home Next
Getting started Content Kernel kompilieren