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

7. Systemsicherheit und -Stabilität

7.1 Accounts, Services

In /etc/shadow sollte bei allen Accounts, die sich nicht einloggen müssen, im Feld für das Passwort, der Wert * eingetragen sein, also beispielsweise sshd:*:. Die Berechtigung für /etc/shadow muss auf 600 gesetzt werden, mit owner und group «root».

# chown root:root /etc/shadow
# chmod 600 /etc/shadow
 

User Accounts die nicht benötigt werden entweder entfernen oder die Login-Shell in /etc/passwd auf den Wert /bin/false setzen. (Überprüfen, ob /etc/shells den Eintrag /bin/false enthält.)

#/etc/passwd
rolf:x:1000:100:Owner of Linuxrouter:/home/rolf:/bin/false
 

Auf dem System SLACK_LNX sollten nur die folgenden Daemons aktiv sein: crond, klogd, syslogd, sshd und init. Überprüfen mittels:

# ps waux
 

Von aussen darf nur sshd sichtbar sein, der auf Port 22 hört. Mittels eines Portscans überprüfen.

7.2 Binaries

Alle unnötigen Binaries vom Router entfernen. Hier existiert selbstverständlich Spielraum für Kompromisse. Beispielsweise beinhaltet die vorgeschlagene Liste Kommandos, mit denen File Permissions verändert werden können (chmod, chown). Im Interesse der Sicherheit sollten diese Binaries entfernt werden − nur bootet das System dann nicht mehr richtig!

Die folgende Auswahl sorgt für einen funktionsfähige Router. Um hier weitere Verbesserungen zu erzielen, ist eine andere Vorgehensweise nötig. Volle Kontrolle über das System lässt sich mit vernünftigem Aufwand nur mit Hilfe eines eigenen Minimalsystems mit selbst geschriebenen Bootscripten erzielen.

Binaries im Directory /bin
bash cp cat chmod chown cut date df dircolors dmesg dnsdomainname domainname du echo egrep false free grep gunzip gzip head hostname ipmask kill killall loadkeys login ls more mount netstat ping ping6 ps rm sed setterm sh sleep stty su sync tcsh touch true umount uname
 
Binaries im Directory /sbin
agetty arping clock dhcpcd dumpe2fs e2fsck e2image e2label findfs fsck fsck.ext2 fsck.ext3 halt hwclock ifconfig init initscript.sample ipmaddr iptunnel isapnp killall5 ldconfig lilo liloconfig logsave mke2fs mount pidof poweroff rdev reboot rmt route runlevel setserial shutdown swapon sysctl telinit tune2fs umount update
 
Binaries im Directory /usr/bin
bash basename clear crontab cut dircolors dumpkeys elvis elvtags env grep gunzip gzip id last ldd less lesspipe.sh loadkeys logger lsdev lsof mcookie md5sum mesg more passwd printenv procinfo ps pstree run-parts savelog scp setleds stty sync tail top tput true uname uptime users vmstat w watch
 
Binaries im Directory /usr/sbin
chat crond ctrlaltdel dhcpd ethtool faillog icmpinfo ip6tables ip6tables-restore ip6tables-save iptables iptables-restore iptables-save keytab-lilo.pl klogd lastlog netdate ntpd ntpdate ntpq pwck routed sshd syslog_tst syslogd tcpd tcpdchk tcpdmatch
 

Um eigene Experimente zu vereinfachen, stehen unter Downloads zwei Shellscripts zur Verfügung. (Die Idee ist, die benötigten Files in temporäre Verzeichnisse zu kopieren und dann die Verzeichnisse umzubenennen. Damit ist es möglich, den Router zwischen Ausgangs- und Testzustand hin und her zu schalten.)

7.3 Permissions

Überprüfen, bei welchen Programmen die setuid/setgid Bits gesetzt sind:

# find /slack_lnx/ -perm +4000 -type f -exec ls -ld {} \; > setuid.txt &
# find /slack_lnx/ -perm +2000 -type f -exec ls -ld {} \; > setgid.txt &
# find /slack_lnx/ -perm +6000 -type f -exec ls -ld {} \; > setuidsetgid.txt &
 

Alle s-Bits mit chmod zurücksetzen:

# chmod a-s /usr/bin/program_name
 

7.4 Packet forwarding

Sicherstellen, dass die Routingfunktion des Kernels nur via Firewall eingeschaltet wird. Dazu das execute-bit von rc.ip_forward deaktivieren:

chmod 644 /etc/rc.d/rc.ip_forward
 

Der Status des entsprechenden Kernelflags kann mit cat /proc/sys/net/ipv4/ip_forward ausgelesen werden.

7.5 root-logins via ssh

Falls root-logins via ssh zugelassen werden müssen − beispielsweise für Wartungsarbeiten − dann sollte die User Authentifizierung mit Hilfe von PKI erfolgen. Dazu die Datei /etc/ssh/sshd_config wie folgt anpassen:

PasswordAuthentication no
PubkeyAuthentication yes
 

7.6 Ram Disks

/tmp und /usr/local/apache/logs werden in Ram Disks betrieben. Dazu das Script /etc/rc.d/rc.ram anlegen und beim Booten ausführen.

#!/bin/sh      
#   
# Script: /etc/rc.d/rc.ram   
#      
# Description: Script creates and mounts ram disks   
#
RAM0="/dev/ram0"
RAM1="/dev/ram0"
SIZE=4096
#
echo "Creating ram disks..."
mke2fs -m0 $RAM0 $SIZE0
mke2fs -m0 $RAM1 $SIZE0
#
mount RAM0 -t ext2 /tmp
mount RAM1 -t ext2 /usr/local/apache/logs
#
echo "/tmp mounted on ram disk"
echo "/usr/local/apached/logs mounted on ram disk"
#
 

/etc/rc.d/rc.ram von /etc/rc.d/rc.M ausführen lassen (bevor der httpd-Server gestartet wird.)

# Create and mount ram disks
if [ -x /etc/rc.d/rc.ram ] ; then
   /etc/rc.d/rc.ram
fi
 

7.7 Speicherbedarf reduzieren

Da die Module in den Kernel einkompiliert sind, kann der Inhalt des Verzeichnisses /lib/modules von SLACK_LNX gelöscht werden.

# rm -rf /lib/modules/*
 

Nicht benötigte Inhalte in /usr/ löschen.

# rm -rf /usr/doc/*
# rm -rf /usr/i486-slackware-linux/*
# rm -rf /usr/libexec/*
# rm -rf /usr/man/*
# rm -rf /usr/share/elvis-2.1.4/*
# rm -rf /usr/share/locale/*
 

Im Verzeichnis /usr/share/zoneinfo alle nicht benötigten Verzeichnisse und Dateien löschen. (Im Beispiel wird /usr/share/zoneinfo/Europe beibehalten.) Anschliessend den Link auf die gewünschte Zeitzonendatei neu anlegen.

# rm -rf /usr/share/zoneinfo/[!E]*

# cd /usr/share/zoneinfo
# ln -s /etc/localtime localtime
 

7.8 Systemstabilität verbessern

Bei einem Systemabsturz wegen Stromausfall wird unter Umständen das DHCP PID File /etc/dhcpc/dhcpcd-ethX.pid nicht gelöscht. Wenn der Router neu gebootet wird, funktioniert der DHCP client nicht mehr ordnungsgemäss, so dass am externen Interface keine IP-Adresse zur Verfügung steht. Der folgende Eintrag im Initialisierungs-Script /etc/rc.d/rc.M tested das System auf ein störendes PID File (den Eintrag am Anfang des Files, nach der Linie echo "Going multiuser...") einfügen:

# In case there is an old DHCPC PID file, clean it up. 
 
if [ -r /etc/dhcpc/dhcpcd-eth[0-9].pid ]; then 
  echo "Cleaning up old DHCPC PID file."
  rm -f /etc/dhcpc/dhcpcd-eth[0-9].pid
fi
 

7.9 System testen

Die Funktionen des Systems (serielle Konsole, SSH, HTTPD) und des Firewall Scripts testen.


Prev Home Next
Apache installieren Content System kopieren