Firewall einrichten
Sicherheit fürs Netz
Angriffsrisiko
Firewall einrichten
Jeder mit dem Internet verbundene Rechner kann leicht Opfer eines Hackerangriffs werden. Ein solcher Angriff kann zum Teil schwerwiegende Folgen haben, wenn beispielsweise sensible Firmendaten in fremde Hände geraten. Daher sollte eine so genannte Firewall Bestandteil einer jeden Netzwerk-Infrastruktur sein.
Im vorliegenden Beitrag zeigt Internet Professionell, wie Sie Ihr Netzwerk mit einer Firewall absichern. Der erste Abschnitt erläutert, was eine Firewall ist und wie diese genau funktioniert. Eine Portkunde rundet den Beitrag ab ? so lernen Sie, was Ports sind, wie diese funktionieren und für was die wichtigsten Ports zuständig sind. Die Portkunde hilft Ihnen nicht nur bei Ihrer Linux-Firewall. Auch bei der Konfiguration der Firewall bei WLAN-Routern und ähnlicher Hardware kann entsprechendes Wissen sehr nützlich sein.
Im zweiten Teil dieses Internet-Professionell-Beitrags zeigt, wie Sie in der Praxis auf einem Linux-Rechner mit verfügbaren Bordmitteln eine Firewall aufsetzen. Als Beispielsystem kommt ein Rechner mit der Suse Linux 9.0 Webedition aus der Juni-Ausgabe der Internet Professionell zum Einsatz. Die in diesem Workshop beschriebenen Schritte lassen sich jedoch auch problemlos unter der regulär erhältlichen 9er-Version von Suse Linux umsetzen.
Aber auch bei dedizierten Webservern ist der Einsatz einer Firewall durchaus sinnvoll, um sich beispielsweise gegen Denial-of-Service-Attacken (DOS) zu schützen. Ein Kasten erläutert, wie Sie auf einem dedizierten Server mit iptables eine Firewall aufbauen.
Brandschutzmauer?
Firewall einrichten
Wörtlich könnte man den Begriff Firewall mit Brandmauer, Brandschott oder Brandwand übersetzen. Diese Übersetzung ist zwar an sich richtig, aber nicht hundertprozentig korrekt.
Eine Brandschutzmauer hat in der Regel Löcher, beispielsweise in Gestalt von Türen. Diese schließen sich erst dann, wenn ein Brand ausgebrochen ist. Lodern keine Flammen, kann alles die Türen passieren. Eine Firewall arbeitet normalerweise nach dem gegenteiligen Prinzip ? es sind standardmäßig alle Türen geschlossen. Nur wenn etwas explizit die Firewall passieren darf, werden die Tore kurz geöffnet. Damit stellt man sicher, dass nur gewollte Anwendungen und der damit verbundene Datenaustausch die Firewall passiert. In unserem Beispiel ist die Firewall also eine geschlossene Mauer mit einzelnen kleinen Löchern, an denen ein Pförtner nach festgelegten Kriterien Daten durchlässt.
Eine Firewall kann aus nur einer einzigen Hardware bestehen, zum Beispiel einer so genannten Appliance, aber auch als Software realisiert sein. Zudem kann der Begriff Firewall auch für eine ganze Menge an Komponenten stehen, bestehend aus mehreren Servern und Routern. Firewall bezeichnet also keine Komponente, sondern ein Sicherheitskonzept für die Verbindung zwischen einem öffentlichen und nicht öffentlichen Bereich beziehungsweise zwischen zwei Netzwerken.
Paketdienste
Firewall einrichten
Wie bereits im obigen Abschnitt erwähnt, reguliert eine Firewall den Datentransfer zwischen zwei Netzwerken ? zum Beispiel einem sicheren lokalen Netzwerk und dem unsicheren Internet, aber beispielsweise im Falle eines dedizierten Servers auch zwischen nur einem Rechner und dem Internet.
Eine Paketfilter-Firewall kontrolliert den Netzwerk-Verkehr, indem sie jedes Datenpaket analysiert und dann eine Entscheidung über das weitere Vorgehen trifft. Hierbei gibt es drei verschiedene Möglichkeiten, wie eine Firewall mit einem Datenpaket umgeht:
– ACCEPT: Das Paket wird durchgelassen.
– DROP: Das Paket wird verworfen.
– REJECT: Das Paket wird mit einer entsprechenden Rückmeldung verworfen.
Ports, Protokolle & Co.
Firewall einrichten
Bei der Konfiguration von Firewalls stößt man immer wieder auf den Begriff des Ports ? sei es die Linux-Firewall im Beispiel oder die eingebaute Firewall in einem WLAN-Router. Doch was hat es damit auf sich?
Ohne Ports wäre die Kommunikation über die im Internet üblichen Protokolle Transmission Control Protocol (TCP) sowie User Datagram Protocol (UDP) nicht möglich. Die Ports erlauben es, dass mehrere Anwendungsprozesse über eine einzige Internet-Verbindung gleichzeitig Daten austauschen können. Die Ports sind also vergleichbar mit den einzelnen Nebenstellen einer Telefonanlage in einer Firma.
Bei der Entscheidung der Firewall anhand festgelegter Filterregeln, ob ein Datenpaket weitergeleitet wird oder nicht, werden ebenfalls die Header-Informationen wie Absender- und Zielport ausgelesen. Dabei benutzen häufig verwendete Service-Prozesse immer bestimmte, festgelegte Ports. Um zum Beispiel den FTP-Dienst abzublocken, sondert die Firewall alle Pakete aus, die im Header den Port 21 eingetragen haben. Ebenso spielt eine Rolle, von welchem Rechner aus eine Verbindung aufgebaut wurde ? vom Client im lokalen Netzwerk oder von einem externen Rechner.
Die Portnummern sind also ein grundlegendes Element bei der Nutzung der beiden im Internet üblichen Protokolle TCP und UDP. Sind die Daten am Zielrechner angekommen, werden sie mit Hilfe dieser Nebenstellen an den entsprechenden Anwendungsprozess weitergeleitet.
Arbeitsweise der Nebenstellen
Firewall einrichten
Im Internet kommt das so genannte Multiplexen zum Einsatz ? das Zusammenlegen von Daten aus mehreren Quellen zu einem einzigen Datenstrom. Für den Transport von Informationen durch die Netzwerk-Schichten benötigt man daher einen Mechanismus, der zuerst die Übergabe an das korrekte Protokoll und anschließend an den Port beziehungsweise die Anwendung sicherstellt. Ankommende Daten aus dem Netz muss das Internet Protocol (IP) zuerst demultiplexen. Dazu kennzeichnet das Internet Protocol die Transportprotokolle mit so genannten Protokollnummern. Die Protokolle nutzen wiederum die besagten Portnummern zur Identifizierung der Anwendung.
Die Protokollnummer steht in einem Byte im dritten Wort des Datagramm-Headers. Dieser Wert bestimmt die Übergabe an das jeweilige Protokoll in der Transportschicht, beispielsweise 6 für TCP oder 17 für UDP. Im ersten Wort eines jeden TCP- und UDP-Headers findet sich dann die 16 Bit lange Portnummer ? Source Port und Destination Port.
TCP und UDP können dabei dieselben Portnummern vergeben. Erst die Kombination aus Protokoll und Portnummer ist eindeutig. So ist der Port 53 unter TCP nicht identisch mit dem Port 53 unter UDP.
Die Kombination aus IP-Adresse und Portnummer wird auch als Socket bezeichnet. Damit ist es möglich, einen einzelnen Netzwerk-Prozess innerhalb des gesamten Internets eindeutig zu identifizieren. Die Notation hierfür ist IP-Adresse:Port.
Portgruppen
Firewall einrichten
Insgesamt stehen jeweils 65.535 verschiedene TCP- und UDP-Ports zur Verfügung. Um den Überblick zu wahren und bestimmten Applikationen feste Nummern zuweisen zu können, hat man die Portnummern in drei unterschiedliche Gruppen eingeteilt:
– Well-known Ports
– Registered Ports
– Dynamically Allocated Ports
Bei den Well-known Ports handelt es sich um reservierte und standardisierte Portnummern zwischen 1 und 1023. Dies vereinfacht den Aufbau einer Verbindung, da sowohl Sender als auch Empfänger bereits wissen, dass Daten für einen bestimmten Prozess an einen bestimmten Port gesendet werden müssen. So nutzen etwa alle Telnet-Server den Port 23. Damit ermöglichen Well-known Ports den Clients eine Verbindung zum Server, ohne dass dabei eine weitere Konfiguration notwendig wäre. Die Verwaltung dieser Port-Gruppe übernimmt die Internet Assigned Numbers Authority, Iana. Auf der Webseite der Iana finden Sie auch eine stets aktuelle Liste der derzeit vergebenen Portnummern unter www.iana.org/assignments/port-numbers.
Die Registered Ports bewegen sich im Bereich von 1024 bis 49.151 und sind für Dienste vorgesehen, die üblicherweise auf bestimmten Nebenstellen laufen. Zum Beispiel der Port 3128, der in der Regel für die Verbindung zu Proxy-Servern Verwendung findet.
Die Dynamically Allocated Ports, auch als Ephemeral Ports bekannt, werden stets dynamisch zugewiesen. Sie liegen im Bereich zwischen 49.152 und 65.535. Diese Ports können von jedem Client verwendet werden, solange die Kombination aus IP-Adresse, Protokoll und Portnummer eindeutig ist.
Offenes Scheunentor
Firewall einrichten
Ports, Firewall ? wieso das Ganze? TCP- und UDP-Ports können ein enormes Sicherheitsrisiko darstellen. Zahlreiche Würmer und Trojaner greifen über diese auf lokale Systeme zu und bauen eine Verbindung ins Internet auf.
In bestimmten Kreisen hat es sich im Lauf der Zeit zum Volkssport entwickelt, wahllos IP-Adressen auf solche Backdoors zu untersuchen und sich damit unbemerkt Zugriff auf das System zu verschaffen. Mit Hilfe eines Port-Scanners können solche Angreifer in Sekundenschnelle herausfinden, welche Ports auf einem Rechner offen sind. Ein solcher Scanner macht dabei nichts anderes, als alle Ports abzuklappern und zu prüfen, ob eine Antwort kommt. Wenn diese kommt, ist der entsprechende Port aktiv und kann unter Umständen von einem Angreifer missbraucht werden.
Firewall unter Linux
Firewall einrichten
Genug der grauen Theorie ? nun geht es anhand des Beispielssystems mit der Suse Linux Webedition an die Einrichtung einer Firewall im Detail.
Linux wurde von Anfang an wie Unix als Netzwerk- und Multiuser-Betriebssystem konzipiert. Dies hat den Vorteil, dass das Open-Source-System von sich aus eine Menge Sicherheitsmechanismen beinhaltet. Deshalb lässt sich mit den verfügbaren Bordmitteln mit wenigen Handgriffen der Rechner vor unberechtigten Zugriff schützen.
So beinhaltet das Linux-System bereits seit einigen Kernel-Versionen auch ein entsprechendes Firewall-Werkzeug. Bei der Kernel-Version 2.0 wurde ipfwadmin eingesetzt, in der Version 2.2 die ipchains und seit der Version 2.4 kommt die neu eingeführte iptable-Firewall zum Einsatz.
So funktionieren iptables
Firewall einrichten
Der Kernel arbeitet in der Paketfiltertabelle mit Listen von Regeln. Diese werden auch als Firewall-Chains bezeichnet, was übersetzt so viel wie Regelketten bedeutet. Ein Chain ist ein zusammengehöriger Satz von Regeln, welche nacheinander abgearbeitet werden. Standardmäßig sind dabei folgende drei Chains vorhanden: INPUT, FORWARD sowie OUTPUT.
Wie Glieder einer Kette können jederzeit Filterregeln in ein Chain eingefügt oder entfernt werden. Mit dem entsprechenden Tool iptables ist es auch möglich, eigene Chains zu erstellen und zu bearbeiten, was die Verwaltung der Firewall deutlich vereinfacht.
Kommt nun ein Datenpaket über ein Interface herein, sei es eine Netzwerk-Karte oder über die ISDN-Karte, durchläuft es die Chains, in denen die einzelnen Regeln der Reihe nach abgearbeitet werden und es wird dabei geprüft, ob die aktuelle Regel auf das Paket zutrifft. Ist das der Fall, wird das Paket entweder akzeptiert oder abgelehnt.
Ablauf im Detail
Firewall einrichten
Zunächst untersucht der Kernel das eingehende Datenpaket auf die Zieladresse um zu entscheiden, wohin die Daten geliefert werden sollen. Ist es für den lokalen Host bestimmt, landet es in der Input-Chain. Ist das Datenpaket nicht für den lokalen Rechner bestimmt, leitet der Kernel es unter zwei Bedingungen an die Forward-Chain weiter: Im Kernel muss das Forwarding aktiviert sein und es muss bekannt sein, wie das Paket geroutet werden soll ? es muss also in der Routing-Tabelle ein entsprechender Eintrag vorhanden sein. Trifft eine dieser Bedingungen nicht zu, wird das entsprechende Paket verworfen.
Der Rechner kann Pakete auch selbst versenden. In diesem Fall landen diese in der Output-Chain.
Konfiguration der Firewall
Firewall einrichten
Nutzer von Suse Linux haben es leicht ? der Distributor stellt mit seiner SuSEfirewall2 eine leicht zu konfigurierende Lösung bereit. Über das Konfigurations-Tool Yast 2 lässt sich die Firewall mit wenigen Handgriffen einrichten. Entsprechende Skripts nehmen daraufhin im Hintergrund die nötigen Änderungen in den iptables vor, so dass man sich in diese nicht einzuarbeiten braucht. Die Einstellungen zur Firewall finden Sie in Yast unter Sicherheit und Benutzer, Firewall.
Allerdings lassen sich mit Yast nur grundlegende Firewall-Einstellungen vornehmen. Für eine tiefer gehende Konfiguration kommt man nicht um das Linux-typische Editieren von Konfigurationsdateien herum. Aber auch hier hat Suse eine Lösung parat: die leicht verständliche Konfigurationsdatei SuSEfirewall2 unter
/etc/sysconfig. Mit Hilfe der Einstellungen in dieser Datei können Sie die Firewall besser an Ihre Bedürfnisse und individuellen Voraussetzungen anpassen.
Die einzelnen Optionen sind in der Datei SuSEfirewall2 mehr oder weniger ausführlich auf Englisch kommentiert, so dass die meisten Einstellungen selbsterklärend sind. Bei der einen oder anderen Option ist es jedoch nicht einfach, die korrekte Einstellung zu finden. Im Folgenden werden daher wichtigsten Konfigurationsmöglichkeiten dieser Datei erläutert, so dass Sie möglichst schnell zu einer eigenen, sicheren Konfiguration kommen. Weitere Informationen und Beispiele finden Sie zudem auf Ihrem Linux-System unter /usr/share/doc/packages/SuSEfirewall2.
SuSEfirewall2 per Hand
Firewall einrichten
Eine detaillierte Beschreibung der einzelnen Optionen finden Sie in der Tabelle auf Seite 89. Dabei ist jeweils angegeben, ob die Einstellungen für die Firewall oder für Masquerading gilt.
Bei Masquerading handelt es sich um einen Linux-Spezialfall der Funktion Network Address Translation (NAT) zur Übersetzung von Netzwerk-Adressen, auch als Source Network Adress Translation (SNAT) bezeichnet. Das Prinzip dahinter ist einfach: Ein Router besitzt in der Regel mehr als ein Netzwerk-Interface ? meist eine Schnittstelle ins Internet und eine weitere ins lokale Netzwerk. Will nun ein Rechner im lokalen Netzwerk ein Datenpaket ins Internet abschicken, so landet dieses beim Default-Router, welcher so konfiguriert ist, dass er das Paket weiterleitet. Der Zielrechner im Internet kennt also nur den Router, die Rechner im lokalen Netzwerk bleiben verborgen. Die Zieladresse für Antwortpakete ist also der Router, der dann die Zieladresse wieder umschreibt und das Paket lokal weiterleitet. Je nachdem, ob auf Ihrem Rechner Masquerading zum Einsatz kommt, dieser also als Router fungiert oder nicht, ist es von Bedeutung, ob eine Option in der Konfigurationsdatei SuSEfirewall2 für Masquerading gilt oder nicht.
Aber Achtung!
Firewall einrichten
Das Aufsetzen einer funktionierenden Firewall mit der oben beschriebenen Anleitung ist nicht besonders schwer. Allerdings ist dann noch immer nicht sicher, ob diese auch wirklich dicht ist.
In die Arbeitsweise und Konfiguration einer Firewall mit iptables kann Ihnen dieser Workshop nur einen kleinen Einblick geben. Eine auf alle Details der sehr komplexen Iptables-Einstellungen eingehende Beschreibung würde den Rahmen dieses Beitrags bei weitem sprengen. Daher verzichtet Internet Pro bewusst darauf, im Detail darauf einzugehen, wie Sie die iptables direkt per Hand editieren.
Wenn Sie sich tiefer in die Materie einarbeiten möchten, sollten Sie sich auf jeden Fall ein entsprechendes Fachbuch leisten.
Praxisbeispiel: Dedizierter Server
Firewall einrichten
Um Ihren dedizierten Webserver vor Hacker-Angriffen zu schützen, sollten Sie auch diesen mit einer Firewall sichern. Ein Konfigurationsbeispiel anhand eines Root-Servers von 1&1 (hosting.1und1.de) mit Suse Linux zeigt das Vorgehen.
Bevor Sie an die Konfiguration der Firewall gehen, sehen Sie sich erst einmal an, welche Einstellungen derzeit bei den iptables bestehen:
iptables -L -v ?-
Die Ausgabe sollte in etwa wie folgt aussehen:
Chain INPUT (policy ACCEPT 13 packets, 1816 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 15 packets, 1340 bytes)
pkts bytes target prot opt in out source destination server#
In diesem Beispiel stehen alle Policys auf ACCEPT und es existiert keine Regel. Ebenfalls ist ersichtlich, dass schon einige Pakete durchgelassen wurden (policy ACCEPT 13 packets, 1816 bytes).
Erstellen eigener Regeln
Firewall einrichten
Um Regeln zu erstellen, muss man wissen, dass iptables diese nach einem Reboot des Servers wieder vergessen. Daher sollte man eine Datei erstellen, in welcher man alle Regeln definiert. Diese Datei muss man dann nur noch aufrufen, um die entsprechenden Regeln zu aktivieren. Hierzu legt man das Skript unter /etc/init.d für den entsprechenden Runlevel ab.
Zum Erstellen neuer Regeln stehen folgende Befehle mit dem entsprechenden Parameter zur Verfügung:
– Eine neue Kette erstellen: -N
– Eine leere Kette löschen: -X
– Die Policy für eine eingebaute Kette ändern: -P
– Die Regeln einer Kette auflisten: -L
– Die Regeln aus einer Kette ausspülen (flush): -F
– Paket- und Bytezähler aller Regeln einer Kette auf Null stellen: -Z
Zum Manipulieren von Regeln in einer Kette stehen folgende Befehle zur Verfügung:
– Eine neue Regel an eine Kette anhängen: -A
– Eine neue Regel an eine bestimmte Position in der Kette einfügen: -I
– Eine Regel an bestimmter Position in der Kette ersetzen: -R
– Eine Regel an einer bestimmten Position in der Kette löschen: -D
– Die erste passende Regel in einer Kette löschen: -D
Mit den iptables lässt sich so nahezu alles filtern, was auf ein Datenpaket zutreffen kann. Dabei können alle Optionen auch invertiert verwendet. Dies bedeutet, man kann auch das Gegenteil filtern, indem man der Option ein ! voranstellt &ndash also beispielsweise anstatt -s einfach ! -s angibt.
Das Protokoll wird mit dem Parameter
-p oder –protocol festgelegt. Dabei kann als Protokoll entweder der numerische Protokollwert angegeben werden oder TCP beziehungsweise UDP.
Nun fehlt noch das Ziel jeder Regeln &ndash was also mit den gefilterten Datenpaketen passieren soll: ACCEPT, DROP, LOG oder eine eigene CHAIN.
Aber Achtung: Ein dedizierter Server wird in der Regel über SSH administriert. Verwenden Sie daher auf keinen Fall den folgenden Befehl. Dieser Befehl verwirft alle eingehenden Datenpakete und sperrt sie aus. Dies ermöglicht Ihnen also keinen Kontakt mehr zu Ihrem Server.
iptables &ndashA INPUT &ndashj DROP
Firewall mit Stateful Inspection
Firewall einrichten
Eine Firewall mit Stateful Inspection ist um einiges sicherer als ein normaler Paketfilter. Sie speichert die Verbindungsdaten in Tabellen, etwa Quell- und Ziel-IP-Adresse. Portnummern, Protokolltypen, den Verbindungsstatus sowie Timeouts.
Hierbei gibt es vier Statusformen:
– INVALID: Das Paket gehört zu keiner bekannten Verbindung.
– ESTABLISHED: Das Paket gehört zu einer bekannten Verbindung, welche bereits in beide Richtungen Pakete ausgetauscht hat.
– NEW: Entweder startet das Paket eine neue Verbindung oder es gehört zu einer, die noch keine Pakete in beide Richtungen ausgetauscht hat.
– RELATED: Ein Paket startet eine neue Verbindung, die mit einer bestimmten Verbindung verwandt ist, beispielsweise FTP.
Die Statustabelle kann man mit folgendem Kommando einsehen:
cat /proc/net/ip_conntrack
Die maximale Größe der Tabelle wird unter
/proc/sys/net/ip4/ip_conntrack_max bestimmt.
Ein entsprechendes Beispiel könnte folgendermaßen aussehen:
iptables -A INPUT -p tcp -m state &mdash state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m state &mdash state NEW,ESTABLISHED -j ACCEPT
Das Beispiel erlaubt ausgehende Datenpakete, die eine neue Verbindung initialisieren oder zu einer bereits bestehenden Verbindung gehören. Eingehende Verbindungen werden nur erlaubt, wenn sie zu einer bestehenden Verbindung gehören. Da durch ein von außen gesendetes ACK-Paket ein Tabelleneintrag erzeugt wird, sollte man sich versichern, dass nur Pakete mit einem SYN-Flag gesetzt als neu betrachtet werden:
iptables -A INPUT -p tcp ! &mdashsyn -m state &mdashstate NEW -j DROP