Einige Hinweise für den sicheren Betrieb von Systemen unter Linux in Verbindung mit dem Internet: Die standardmaeszige Installation einer Linux-Distribution resultiert meist nicht in einem sehr abgesicherten System. Deshalb hier einige Tipps, wie durch den Einsatz einfacher Mittel Zeit und Tools) Linux sicherer gemacht werden kann.

Einspielen aller Updates

Meist ist seit der Pressung der CD einer Distribution bzw. des Download der Installationsdateien aus dem Internet etwas Zeit vergangen. Vielleicht genug, um inzwischen ein bereits bekanntes Sicherheitsloch mitzuinstallieren…deshalb ist dringend zu empfehlen (insbesondere bevor der Server an das Internet angeschlossen wird), alle Updates via Download sich besorgen und installieren. Bei Distributionen basierend auf Red Hat package management system RPM ist das relativ einfach: Ausgabe einer Liste, welche Pakete ein Update benötigen:

find /mnt/tmp/somewhere/ -name '*.rpm' | while read i; do \
  name=`rpm -q --queryformat "%{NAME}\n" -p $i`;  \
  rpm -q $name >/dev/null 2>&1 && echo -n "$name "; done; echo

Installation der Pakete:

find /mnt/tmp/somewhere/ -name '*.rpm' | while read i; do name=`rpm -q \
  --queryformat "%{NAME}\n" -p $i`; rpm -q $name >/dev/null 2>&1 &&  rpm -Fhv \
  --nodeps $i; done; echo

Ersatz von Telnet-Daemon und R-Tools durch SecureSHell

Der Einsatz Telnet als Zugang über das Netz und den R-Tools ist nur in den wenigsten Fällen notwendig: Verwendung von X-Server auf Hosts, die kein X-Tunneln durch SSH unterstützen können Backup auf Bandlaufwerke via rmt (Remote Magnetic Tape) - Tunneln durch SSH ist möglich, allerdings performance-raubend (Ver- und Entschlüsselung des Datenstroms) Falls oben genannte Punkte nicht zum Einsatz kommen, kann der Telnet-Daemon deaktiviert werden (auskommentieren in /etc/inetd.conf und Senden des Signals HUP an den inetd) und Installation von z.B. OpenSSH.

Deaktivieren aller nicht benötigter Internetdienste:

Haeufig sind viel mehr Internetdienste aktiviert, als notwendig sind. Welche Dienste aktiv sind, zeigt folgendes Kommando

netstat -lnp --ip

IPv4-Services

netstat -lnp --inet6

IPv6-Services

Alle nicht benoetigten Dienste können abgeschaltet werden durch direkt gestarteter Daemon durch Deaktivieren des Runlevel-Scripts (bei Red Hat Linux z.B. mit chkconfig oder linuxconf) alle vom inetd gestarteter Daemon durch Auskommentieren der entsprechenden Zeile in /etc/inetd.conf

Deinstallation nicht benutzter Programme:

Jedes installierte Programm, welches nie benoetigt wird, stellt ein zusaetzliches Sicherheitsrisiko dar, insbesondere, wenn es das SUID (set user id on execution) oder SGID (set group id on execution) Bit gesetzt sind. Auflistung aller Dateien mit gesetztem SUID oder SGID Bit:

find / -perm +06000 -type f -ls

Bei RPM ist es relativ einfach, ein Programmpaket zu deinstallieren, wenn man es nicht benoetigt. Eventuelle nichtbeachtete Abhaengigkeiten werden einem angezeigt. Man kann sich dann entscheiden, entweder das Paket auf die harte Tour (--nodeps) oder gleich die Abhaengigkeiten mit zu deinstallieren.

Hilfreiche "Schalter" im Linux-Kernel

Syncookie Support

echo "1" >/proc/sys/net/ipv4/tcp_syncookies

Limitierung der Rate an ausgesendeten speziellen ICMP-Paketen
  • echo "100">/proc/sys/net/ipv4/icmp_destunreach_rate

  • echo "100">/proc/sys/net/ipv4/icmp_echoreply_rate

  • echo "100">/proc/sys/net/ipv4/icmp_paramprob_rate

  • echo "100">/proc/sys/net/ipv4/icmp_timeexceed_rate

Abschalten von ICMP echo-reply auf Broadcast-Adressen

echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Abschalten von ICMP echo-reply generell

echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_all

Verwerfen von IP-Paketen mit Source-Route-Option

echo "0">/proc/sys/net/ipv4/conf/*/accept_source_route

Verwerfen von ICMP redirect Paketen

echo "0">/proc/sys/net/ipv4/conf/*/accept_redirects

Defragmentiere eingehende IP-Pakete immer

echo "1">/proc/sys/net/ipv4/conf/*/ip_always_defrag

Loggen von allen Paketen mit unmoeglichen IP-Adressen

echo "1">/proc/sys/net/ipv4/conf/*/log_martians

Abschalten des ICMP Address mask replies

echo "0">/proc/sys/net/ipv4/ip_addrmask_agent

Deaktivieren von IP-forwarding

echo "0">/proc/sys/net/ipv4/ip_forward

Deaktivieren von IP-forwarding per Interface

echo "0">/proc/sys/net/ipv4/conf/*/forwarding

Um die Aenderungen rueckgaengig zu machen, musz man lediglich die Werte vertauschen.

Die inetd.conf

Wenn man diese Datei oeffnet, sieht man anhand der Kommentare welcher Dienst gestartet wird. Wird z. B. der telnet-"Server" gestartet, sieht die Zeile folgendermaßen aus:

telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

Will man verhindern, dasz dieser Dienst gestartet wird, setzt man einfach ein Kommentar ("#") am Anfang der Zeile und startet die inetd neu. Danach sollte die Zeile so aussehen:

#telnet stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

Der Neustart der Datei wird wie folgt erledigt. Zuerst braucht man die PID (das ist die Nummer, die der Prozess hat); dazu recht das Command ps ax | grep inetd damit man die PID findet. Die Ausgabe sieht dann etwa so aus:

root@dreckskind:~ > ps ax | grep inetd
3344 ?        S      0:00 inetd
21431 pts/1   S      0:00 grep inetd
root@dreckskind:~ >

Hier hat der inetd die PID 3344 und kann mit kill -HUP 3344 neu eingelesen werden. Wenn man sich danach nochmal mit nmap scannt, sollte telnet nicht mehr laufen. Mit den anderen Diensten (bis auf einige Ausnahmen) wird genauso verfahren.

Die Ausnahmen

Einige Dienste werden nicht ueber den inetd gestartet, sondern von der rc.config aufgerufen. Dazu gehoeren z. B. httpd, sshd, portmap, Printer, ..