Linux/Sicherheit

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Grundlage für die Absicherung eines Linux-Rechners ist der Wissensstand seines Systemverwalters. Dieser muss nicht nur zeitnah die verfügbaren Sicherheitsaktualisierungen einspielen, sondern auch Angriffe und Einbrüche erkennen und darauf reagieren können.

Vorgehen

Der Systemverwalter muss folgende Sicherheitselemente im Auge behalten.

Regelmässige Sicherheitsaktualisierungen

Der Systemverwalter schützt seinen Linux-Rechner am einfachsten und besten, indem er sein System auf dem neusten Stand hält und verfügbare Sicherheitsaktualisierungen zeitnah einspielt.

Die meisten Aktualisierungsmöglichkeiten können bei Bedarf als Cronjob auch automatisiert werden. Unter Debian sorgen die folgenden beiden Befehle dafür; der Befehl "apt-get update" bringt die Paketlisten der Distribution auf den aktuellen Stand, wobei die Option "-q" unnötige Ausgaben unterdrückt und "-y" alle aftretenden Fragen automatisch mit Ja beantwortet, der Befehl "apt-get upgrade" spielt anschliessend die neuesten Versionen aller installierten Pakete ein. In dieser Form eignen sich diese beiden Befehle auch für einen automatischen täglichen oder stündlichen Aufruf als Cronjob.

/usr/bin/apt-get update -q -y
/usr/bin/apt-get upgrade -q -y

Ein sauber aktualisiertes System bietet mehr Sicherheit als jede Firewall und jeder Virenscanner: Sein Systemnverwalter muss dann nur noch neue, noch unbekannte Sicherhehitslücken fürchten.

Minimalismus

Um den Rechner weniger angreifbar zu machen, sollen alle nicht benötigten Netzwerkdienste abgeschaltet werden.

Die aktuell laufenden Netzwerkdienste können wie folgt ermittelt werden:

1. Der Befehl "lsof -i" zeigt alle auf dem lokalen Rechner geöffneten Dateien an - also auch alle offenen Netzwerkverbindungen. Der Schalter "-i" zeigt alle Internetverbindungen.

$ lsof -i
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 1465  mik   49u  IPv4 130525      0t0  TCP kanzler.lan:59323->proxyserver.newsnetz.ch:www (CLOSE_WAIT)

Die erste Spalte zeigt den Befehl, der die Netzwerkverbindung geöffnet hat (hier "firefox-bin"), daneben stehen die Prozessnummer und der Benutzer. Die Spalte "NODE" teigt das Protokoll (TCP oder UDP), das der Dienst für seine Kommunikation mit der Aussenwelt benutzt. Die Spalte "NAME" zeigt die Adresse und den Port des Dienstes, wobei sowohl für Adresse und Port die Klartextnamen aus den Dateien "/etc/hosts" und "/etc/services" eingesetzt werden; dieses Verhalten lässt sich mit den Optionen "-n" (no host names) und "-P" (no port names) unterdrücken.

$ lsof -i -n -P
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 1465  mik   49u  IPv4 137374      0t0  TCP 192.168.1.64:50953->62.12.138.150:80 (CLOSE_WAIT)

Erscheint als Adresse in der letzten Spalte "localhost" oder "127.0.0.1", so lässt sich der betreffende Dienst nur lokal erreichen.

2. Der Rechner wird von aussen mit dem Befehl nmap gescannt, denn der Befehl "lsof" kann nicht erkennen, ob ein geöffneter Port von aussen grundsätzlich erreichbar ist.

Der folgende Befehl zeigt alle auf dem Rechner mit der IP-Adresse "xxx.xxx.xxx.xxx" verfügbaren TCP-Dienste:

$ sudo nmap -sS xxx.xxx.xxx.xxx

Starting Nmap 5.00 ( http://nmap.org ) at 2010-11-28 21:35 CET
Interesting ports on dsldevice.lan (xxx.xxx.xxx.xxx):
Not shown: 994 filtered ports
PORT     STATE  SERVICE
21/tcp   open   ftp
23/tcp   open   telnet
80/tcp   open   http
443/tcp  open   https
1723/tcp open   pptp
6881/tcp closed bittorrent-tracker

Nmap done: 1 IP address (1 host up) scanned in 7.05 seconds

Der folgende Befehl zeigt alle auf dem Rechner mit der IP-Adresse "xxx.xxx.xxx.xxx" verfügbaren UDP-Dienste. In diesem Fall kann der Zustand des Ports nicht einwandfrei ermittelt werden - befindet sich eine Firewall vor dem gescannten Rechner, welche diese Pakete verwirft, so werden alle UDP-Ports als offen gekennzeichnet!

$ sudo nmap -sU xxx.xxx.xxx.xxx

Starting Nmap 5.00 ( http://nmap.org ) at 2010-11-28 21:36 CET
Interesting ports on dsldevice.lan (xxx.xxx.xxx.xxx):
Not shown: 993 filtered ports
PORT      STATE         SERVICE
53/udp    open|filtered domain
67/udp    open|filtered dhcps
68/udp    open|filtered dhcpc
123/udp   open|filtered ntp
520/udp   open|filtered route
1900/udp  open|filtered upnp
49152/udp open|filtered unknown

Nmap done: 1 IP address (1 host up) scanned in 102.47 seconds

3. Ausschalten nicht benötigter Netzwerkdienste. Diese werden meist über ein eigenes Startskript unter "/etc/init.d" oder über den Daemon inetd (bzw. xinetd) gestartet. Letzterer öffnet den Port bereits bei seinem Start, startet den Dienst aber erst bei tatsächlichem Bedarf.

Firewall

Eine Firewall überacht und steuert den Zugriff auf die noch vorhandenen Netzwerkdienste.

Das folgende einfache Firewallskript erlaubt auf dem Rechner nur ausgehende Verbindungen und deren Antworten. Der Befehl iptables verwaltet die Firewallregeln im Linux-Kernel. Mit der Option "-F" löscht er zuerst ein möglicherweise bereits vorhandenes Regelwerk. Mit der Option "-P" wird die Policy für die Ketten "INPUT", "FORWARD" und "OUTPUT" auf "DROP" festgelegt, sodass grundsätzlich alle Netzwerkpakete verworfen werden, die nicht ausdrücklich akzeptiert werden.

#!/bin/bash
iptables -F
iptables -P INPUT   DROP
iptables -P FORWARD DROP
iptables -P OUTPUT  DROP
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -m state --state     ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT  -j log   --log-prefix "Firewall: "

Weblinks

Security-Seiten

Distribution URL
Debian http://www.debian.org/security
Gentoo http://www.gentoo.org/security/en
Novell / SUSE Linux http://www.novell.com/linux/security/securitysupport.html
Mandriva http://wwwnew.mandriva.com/security
Red Hat http://www.redhat.com/security/updates
Slackware Linux http://www.slackware.com/security
Ubuntu http://www.ubuntu.com/usn