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 |
|
domain |
53 |
DNS |
bootps und bootpc |
67, 68 |
DHCP |
http |
80 |
Web |
pop3 |
110 |
|
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 |
|
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.
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:
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:
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.
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.