38Firewalls

Die Überschrift für dieses Kapitel ist ein wenig plakativ – ganz einfach deswegen, weil fast jeder etwas mit dem Begriff »Firewall« anfangen kann. Tatsächlich geht es in diesem Kapitel aber nicht nur darum, einen Filter für Netzwerkpakete einzurichten, sondern auch um Netzwerkgrundlagen und um andere Techniken zur Absicherung. Daher lernen Sie in diesem Kapitel auch einige elementare Werkzeuge kennen, um den aktuellen Zustand des Netzwerks zu analysieren, z.B., um offene Ports zu finden. Ein Abschnitt zur TCP-Wrapper-Bibliothek zeigt zudem, wie der Zugriff auf bestimmte Netzwerkdienste durch einfache Regeln eingeschränkt werden kann.

38.1Netzwerkgrundlagen und -analyse

Bevor Sie Ihren Rechner absichern können, müssen Sie eine Vorstellung davon gewinnen, wie die Netzwerkdienste funktionieren, welche Dienste gerade laufen, welche Ports offen sind etc. Dieser Abschnitt beschäftigt sich daher mit TCP/IP-Grundlagen und beschreibt einige Programme, um den aktuellen Netzwerkstatus zu analysieren und beispielsweise alle gerade aktiven Netzwerkverbindungen aufzulisten. Vorweg fasst Tabelle 38.1 die wichtigsten Abkürzungen zusammen.

Abkürzung

Bedeutung

DNS

Domain Name Service

HTTP

Hypertext Transfer Protocol

ICMP

Internet Control Message Protocol

IP

Internet Protocol

NFS

Network File System

TCP

Transmission Control Protocol

UDP

User Datagram Protocol

Tabelle 38.1Netzwerk-Glossar

Praktisch alle gängigen Netzwerkdienste basieren auf IP-Paketen. Wenn beispielsweise ein Internetbenutzer per FTP auf Ihren Rechner zugreifen möchte, startet er dazu auf seinem Rechner einen FTP-Client. Dieser sendet ganz spezielle IP-Pakete an Ihren Rechner. Wenn auf Ihrem Rechner ein FTP-Server installiert ist, erhält dieser die IP-Pakete und reagiert auf die Anfrage, indem er selbst IP-Pakete an den Client zurücksendet.

Neben den eigentlichen Daten enthalten IP-Pakete unter anderem vier wesentliche Informationen: die Absender-IP-Adresse, den Absender-Port, die Zieladresse und den Ziel-Port. Diese Daten geben an, woher das Paket kommt und wohin es gehen soll.

Die Bedeutung der IP-Adresse sollte klar sein (siehe auch Kapitel 27, »Netzwerkkonfiguration«). IP-Ports werden dazu verwendet, um verschiedene Dienste zu identifizieren. Beispielsweise wird zur Anforderung eines WWW-Dokuments üblicherweise der Port 80 verwendet. Bei Port-Nummern handelt es sich um 16-Bit-Zahlen. Die Ports bis 1024 gelten als privilegiert und sind für Server-Dienste reserviert, z.B. für den HTTP-Server. Die verbleibenden Ports können an sich von Clients eingesetzt werden, allerdings gibt es auch hier eine Reihe von Nummern, die nicht verwendet werden sollten, weil sie oft schon für bestimmte Zwecke reserviert sind.

Zu vielen IP-Port-Nummern sind in /etc/services Alias-Namen definiert. Tabelle 38.2 führt die wichtigsten Port-Nummern mit den üblicherweise gültigen Namen und einer kurzen Erklärung auf.

Name

Port

Funktion

ftp

20, 21

FTP

ssh

22

SSH

telnet

23

Telnet

smtp

25

E-Mail

domain

53

DNS

bootps und bootpc

67, 68

DHCP

http

80

Web

pop3

110

E-Mail

portmap

111

Portmap (für NFS)

ntp

123

Zeit (Network Time Protocol)

netbios-ns

137

Microsoft/NetBIOS Name Service

netbios-dgm

138

Microsoft/NetBIOS Datagram Service

netbios-ssn

139

Microsoft File Sharing (SMB, Samba)

imap

143

E-Mail

ldap

389

LDAP

427

Apple Filing Protocol (AFP)

https

443

Web (verschlüsselt)

microsoft-ds

445

CIFS-Dateisystem (SMB, Samba)

printer

515

Drucken mit LPD/LPR

548

Apple Filing Protocol (AFP)

ipp

631

Drucken mit IPP/CUPS

rmi

1099

Remote Method Incovation (Java)

pptp

1723

PPTP/VPN

nfs

2049

NFS

3128

Squid (Web-Proxy)

mysql

3306

MySQL- oder MariaDB-Datenbank-Server

5353

Netzkonfiguration durch Zeroconf/Bonjour

5999–6003

X-Display

9100

HP-JetDirect-Netzwerkdrucker

Tabelle 38.2Wichtige IP-Ports

Es gibt unterschiedliche Protokolle für IP-Pakete: Die meisten Internetdienste verwenden TCP. Dieses Protokoll verlangt eine Bestätigung des Empfangs. Es gibt aber auch Protokolle, die keine derartige Bestätigung erwarten, nämlich ICMP (wird z.B. von ping verwendet) und UDP (wird z.B. von DNS und NFS verwendet).

IP-Pakete können durch lokale Programme erzeugt werden oder von außen – also über Netzwerk-Schnittstellen – in den Rechner kommen. Der Kernel muss nun entscheiden, was mit den Paketen passieren soll. Er kann die Pakete verwerfen oder an laufende Programme bzw. an andere Schnittstellen weiterleiten. Dabei können alle oben beschriebenen Paketmerkmale als mögliche Entscheidungskriterien dienen. Um einen Paketfilter zu realisieren, brauchen Sie also eine Möglichkeit, dem Kernel Regeln mitzuteilen, wie er mit bestimmten IP-Paketen verfahren soll. Dazu dient das Kommando iptables, das in Abschnitt 38.5, »Firewall mit iptables selbst gebaut«, näher erläutert wird.

Das Funktionsprinzip der meisten Netzwerkdienste sieht so aus, dass diese einen bestimmten Port überwachen. Treffen für diesen Port IP-Pakete ein, kümmert sich der Dienst um deren Verarbeitung und Beantwortung. Pakete, die an nicht überwachte Ports adressiert sind, werden einfach ignoriert und stellen insofern auch keine Gefahr dar. Um die Gefährdung eines Rechners abzuschätzen, ist es daher zweckmäßig, eine Liste der überwachten Ports zu ermitteln. Umgekehrt wird auch ein Angreifer als Erstes versuchen, die aktiven Ports herauszufinden.

Um festzustellen, welche Netzwerkaktivitäten auf dem lokalen Rechner stattfinden, ist das Kommando netstat ein großes Hilfsmittel. Je nachdem, mit welchen Optionen es aufgerufen wird, liefert es eine Fülle unterschiedlicher Informationen.

Das erste Beispiel auf dem Server mars zeigt alle aktiven Verbindungen (ESTAB) bzw. überwachten Ports (LISTEN). Kurz zu den Optionen: a zeigt auch nichtaktive Ports, tu schränkt die Ausgabe auf die Protokolle TCP und UDP ein, pe zeigt zusätzlich die Prozessnummer und den Account, unter dem das Programm ausgeführt wird. Die Ausgabe wurde aus Platzgründen gekürzt.

root# netstat -atupe Active Internet connections (servers and established) Proto Local Address Foreign Addr State User PID/Prog name tcp *:nfs *:* LISTEN root - tcp *:54980 *:* LISTEN root - tcp *:ldap *:* LISTEN root 5842/slapd tcp *:3142 *:* LISTEN root 5904/perl tcp localhost:mysql *:* LISTEN mysql 5785/mysqld ... tcp6 [::]:ssh [::]:* LISTEN root 5559/sshd tcp6 mars.sol:ssh merkur.so... ESTAB root 7729/0 udp *:nfs *:* root - udp mars.local:netbios-ns *:* root 6231/nmbd udp mars.sol:netbios-ns *:* root 6231/nmbd udp *:netbios-ns *:* root 6231/nmbd udp mars.local:netbios-dgm *:* root 6231/nmbd udp mars.sol:netbios-dgm *:* root 6231/nmbd udp *:netbios-dgm *:* root 6231/nmbd udp *:domain *:* root 5537/dnsmasq udp *:55350 *:* avahi 5604/avahi-... ...

Eine kurze Zusammenfassung des obigen Ergebnisses: Auf dem Testrechner laufen unter anderem ein Samba-Server, ein NFS-Server, Kerberos, LDAP, Dnsmasq, CUPS, MySQL und ein SSH-Server. Wenn der Rechner so ohne Firewall direkt mit dem Internet verbunden ist, freut sich jeder potenzielle Angreifer. Es gibt eine Menge Programme, bei denen sich vielleicht irgendwelche Sicherheitslücken finden lassen.

Das folgende Kommando liefert die Liste der aktiven TPC- und UDP-Verbindungen samt Benutzer- und Prozessname:

root# netstat -tuep Active Internet connections (w/o servers) Proto Local Address Foreign Address State User PID/Program name tcp localhost:57450 localhost:ldap ESTABLISHED root 6233/smbd tcp localhost:ldap localhost:57450 ESTABLISHED openldap 5842/slapd tcp6 mars.sol:ssh merkur.sol:45368 ESTABLISHED root 7729/0

Wenn Sie herausfinden möchten, welche Programme TCP- bzw. UDP-Ports nutzen, hilft auch das Kommando lsof. In der Form lsof -i [protokoll]@[hostname][:port] liefert es eine Liste von Prozessen, die die angegebenen Netzwerkressourcen nutzen. Die beiden folgenden Kommandos zeigen alle Prozesse, die das Protokoll UDP bzw. den Port 22 nutzen:

root# lsof -i udp ntpd 3696 ntp 16u IPv4 9026 UDP *:ntp ntpd 3696 ntp 17u IPv6 9028 UDP *:ntp ntpd 3696 ntp 18u IPv6 9031 UDP ip6-localhost:ntp portmap 4745 daemon 3u IPv4 12931 UDP *:sunrpc rpc.statd 4764 statd 5u IPv4 12962 UDP *:700 rpc.statd 4764 statd 7u IPv4 12970 UDP *:39146 ... root# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME sshd 5559 root 3u IPv6 14097 TCP *:ssh (LISTEN) sshd 7729 root 3r IPv6 33146 TCP mars.sol:ssh->merkur.sol:45368 (ESTABLISHED)

netstat und lsof können nur auf dem lokalen Rechner ausgeführt werden und stehen einem Angreifer normalerweise nicht zur Verfügung. Dieser greift stattdessen auf sogenannte Port-Scanner zurück. Solche Programme senden Pakete an die wichtigsten Ports eines Rechners und finden anhand der Antwort heraus, welche Dienste in welcher Programmversion dort laufen. Das hier vorgestellte Kommando nmap ist das bekannteste, aber keineswegs das einzige derartige Programm. Bei den meisten Distributionen muss es vor der ersten Verwendung installiert werden.

Die folgenden Zeilen zeigen, welche Ergebnisse nmap für den Rechner mars liefert. nmap wurde auf einem anderen Rechner innerhalb des lokalen Netzwerks ausgeführt. Die Ausgabe wurde aus Platzgründen gekürzt.

root# nmap -v -A mars Scanning 192.168.0.1 [1 port] ... Discovered open port 53/tcp on 192.168.0.1 Discovered open port 21/tcp on 192.168.0.1 ... Completed SYN Stealth Scan at 09:43, 0.29s elapsed (1715 total ports) Initiating Service scan at 09:43 Scanning 9 services on mars.sol (192.168.0.1) ... Host mars.sol (192.168.0.1) appears to be up ... good. Interesting ports on mars.sol (192.168.0.1): Not shown: 1706 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.6 22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1.2 (protocol 2.0) 53/tcp open domain dnsmasq 2.41 111/tcp open rpcbind 139/tcp open netbios-ssn Samba smbd 3.X (workgroup: SOL) 389/tcp open ldap OpenLDAP 2.2.X 445/tcp open netbios-ssn Samba smbd 3.X (workgroup: SOL) 749/tcp open rpcbind 2049/tcp open rpcbind ...

Zu nmap existiert auch eine grafische Benutzeroberfläche, die sich je nach Distribution im Paket zenmap oder nmap-frontend befindet.

Führen Sie keine Port-Scans für fremde Server durch!

Ein Port-Scan wird von vielen Administratoren als Einbruchsversuch gewertet. Adressieren Sie mit Programmen wie nmap nie ungefragt einen fremden Rechner! nmap ist aber ein praktisches Hilfsmittel, um Schwächen im eigenen Netzwerk zu erkennen.