Firewall
Dieser Artikel nimmt am Linux-Club Wiki Wettbewerb teil, aus diesem Grunde soll an dem Artikel nur von dem Erstautor Änderungen bis zum 22. Mai 2007 um 20:00Uhr gemacht werden. Danach wird die Jury die Artikel in dieser Kategorie beurteilen, und die Sieger bekannt geben. |
Dieser Artikel beschäftigt sich mit Firewalls allgemein. Es geht nicht um die Konfiguration einer spezielle Firewall. Anleitungen und Artikel darüber finden sich am Ende der Seite in den Quellen.
Eine Firewall (auch der Firewall) ist eine Netzwerkkomponente, die der Netzwerksicherheit dient. Sie soll zwei oder mehr Netzwerksegmente kontrollierbar miteinander verbinden. Das bedeutet die einzelnen Rechner in den verschiedenen Netzwerksegmenten sollen bestimmte Verbindungen untereinander aufbauen können, jedoch nicht jede beliebige Kommunikation durchführen können.
Inhaltsverzeichnis
Firewalltypen
Netzwerkfirewall
Eine Netzwerkfirewall läuft auf einem Rechner mit mindestens zwei Netzwerkkarten. Diese Netzwerkkarten sind an die Netzwerksegmente angeschlossen deren Verbindungen kontrolliert werden soll. Die Firewall ist somit Teil beider Netzwerke und hat somit auch zwei IP Adressen; jeweils eine aus dem entsprechenden Netz. Damit Daten von einem Netzwerk in das andere Netzwerk gesendet werden können muss die Firewall auch als Router dienen und das Routing innerhalb der Netzwerke richtig gesetzt werden.
Tatsächlich kann man eine Netzwerkfirewall auch als Layer-4 Firewall bezeichnen, denn sie arbeitet (meistens) im Layer 4 des ISO OSI Modells. Eine Firewall die keinerlei Verbindungen blockiert verhält somit für alle anderen Netzwerkkomponenenten wie ein normaler Router.
Desktop- oder Hostfirewall
Neben der Firewall als Netzwerkkomponente gibt es auch noch Firewalls die auf einem Rechner mit nur einer Netzwerkkarte laufen, also keine verschiedenen Netzwerksegemente miteinander verbinden können. Solche Firewalls werden als Host- oder auch Desktopfirewall bezeichnet. Ihre Aufgaben bestehen darin
- den Rechner vor Angriffen von außen zu schützen, sowie
- zu verhindern das vom eigenen Rechner aus Verbindungen ins Netzwerk aufgebaut werden.
Der Sinn einer Desktopfirewall ist umstritten, da man auch ohne Firewall den Rechner vor Zugriffen von außen schützen kann, in dem einfach keine Dienste wie SSH oder VNC an der physikalischen Netzwerkkarte lauschen lässt. Dadurch reagiert der eigene Rechner überhaupt nicht auf Anfragen und diese müssen somit nicht von einer Firewall geschützt werden. Auch das zweite Argument hält einer sachlichen Prüfung nicht stand: Wen man nicht möchte das bestimmte Daten ins Netzwerk gesendet werden, warum deinstalliert dann nicht einfach das Programm welches diese Daten sendet?
Applicationlayerfirewalls
Unter dem Begriff Applicationlayerfirewall versteht man Firewalls welche den Datenverkehr nicht nur auf Basis von Quelladdresse, Zieladresse und Service, sondern auch anhand des tatsächlichen Inhalts eines Datenpaketes. Eine Applicationlayerfirewall kann also erkennen ob das was ein Rechner sendet wirklich eine Webanfrage ist, oder ob der Anfragende Rechner versucht unerlaubt Daten durch die Firewall zu schicken in dem er so tut als wäre es eine Webanfrage. So kann eine Applicationlayerfirewall z.B. Webseiten ausfiltern welche versuchen eine bekannte Browserlücke auszunutzen, oder verhindern das ein Benutzer einen Virus herunterlädt.
Oftmals werden Applicationslayerfirewalls durch eine Kombination von Proxies und "normalen" Netzwerkfirewalls realisiert.
Firewalltechnologien
Paketfilter
Praktisch alle gängigen Firewalls sind Paketfilterfirewalls. D.h. sie anaylsieren einzelne Datenpakete und entscheiden anhand bestimmter Kriterien ob diese Paket weitergeleitet oder vernichtet wird.
Wenn z.B. ein Webbrowser Daten von einem Webserver abruft, so packt der Webserver die Daten in Pakete zusammen und schickt diese an den Browser. Bevor diese Pakete den Browser erreichen müssen sie durch die Firewall durch, da diese "im Weg" der Datenpakete liegt. Die Firewall nimmt das Datenpaket und extrahiert, von wo die Daten kommen (QuellIP), nach wo die Daten sollen (ZielIP), sowie welcher Port verwendet wurden (z.B. http oder ssh, also der Port und das Protokoll). Diese Daten vergleicht sie mit ihrem Regelwerk.
Wenn es eine Regel gibt welche diese Verbindung explitziert erlaubt wird das Datenpaket weitergeleitet. Gibt es eine Regel welche diese Verbindung verbietet wird das Paket verworfen. Gibt es keine Regel handelt die Firewall nach ihrer Defaultpolicy. Dies ist im Prinzip eine Regel die angewendet wird wenn keine andere Regel zu finden ist.
Statefullinspection
Eine Firewall die Statefullinspection beherrscht handelt erstmal wie ein reiner Paketfilter, kann jedoch zusätzlich den Status einer Verbindung berücksichtigen. D.h. wenn Rechner A eine Verbindung zu Rechner B aufbaut, in dem er ein Datenpaket schickt, lässt die Firewall automatisch die Antwort von Rechner B zu, sofern dies vom Administrator entsprechend eingestellt wurde.
Versucht der Rechner B allerdings Daten an Rechner A zu schicken, ohne das vorher Rechner A ein Paket geschickt hat würde die Firewall die Verbindung blockieren.
Man kann sich das wie bei einer Schulklasse vorstellen, bei der zwischen Schülern und Lehreren noch ein Aufpasser sitzt. Dieser Aufpasser ist die Firewall. Der Aufpasser hat vom Administrator die Regel bekommen, dass Daten vom Lehrer zu den Schülern immer durchgelassen werden dürfen. Der Lehrer kann somit zu den Schülern sprechen.
Wenn die Schüler auch Daten an den Lehrer schicken können sollen braucht der Aufpasser auch eine entsprechende Regel. Wenn der Aufpasser nun kein Statefullinspection kann, so muss der Administrator eine Regel einbauen welche den Schülern immer erlaubt Daten an den Lehrer zu schicken. Das würde bedeutet die Schüler könnten dem Lehrer ständig ins Wort fallen.
Kann der Aufpasser aber Statefullinspection, so kann der Administrator dem Aufpasser sagen, dass dieser nur Daten von den Schülern zum Lehrer durchlassen soll, wenn der Lehrer vorher eine entsprechende Verbindung aufgebaut hat. Die Schüler könnten also nur Daten schicken wenn der Lehrer vorher eine Frage gestellt hat und auf eine Antwort warten. Wenn der Lehrer nur am erklären ist und keine Antwort möchte, würde der Aufpasser jeden Zwischenruf von den Schülern zum Lehrer verhindern.
Proxy
Viele Firewalls haben inzwischen Proxies integriert, oder bieten zumindest Teilweise solche Fähigkeiten an.
Proxies setzen dem Statefullinspection noch etwas oben drauf. Eine Statefullinspectionfirewall kann zwar erkennen ob ein eingehendes Datenpaket eine Antwort zu einem vorherigen Datenpaket war, jedoch nicht ob die Antwort auch Sinn macht.
Eine Firewall mit Proxyfunktionalität kann genau das. D.h. eine Proxyfirewall "weiß" welche Antwort Sinn macht und lässt ein Datenpaket nur dann zu. Die Idee hinter einer solchen Firewall ist, zu verhindern das z.B. ein Browser eine Verbindung zu einem Webserver aufmacht und dieser im eine mit einem Trojaner gespickte Seite zurückliefert.
Um im Beispiel des Aufpassers zu bleiben: Bisher konnte der Lehrer z.B. die Frage stellen: "Was ist die Hauptstadt von Deutschland" und ein Schüler konnte antworten "Der Lehrer ist doof" und den Lehrer somit trauig machen und ihn an seinen Fähigkeiten zweifeln lassen, so dass er irgendwann eine Neurose bekommt und krank wird. Ein Aufpasser mit Proxyfähigkeiten könnte dies verhindern und nur Antworten wie "Karlsruhe", "Frankfurt", oder eben auch "Berlin" durchlassen. Damit ist der Lehrer geschützt, allerdings leuchtet es ein, dass der Aufpasser hierfür Ahnung von Geograhpie haben muss.
Entsprechendes gilt auch für echte Firewalls. Sie müssen "wissen" was eine gültige Antwort darstellt, was relativ aufwendig ist und dementsprechend nicht immer zuverlässig.
Antispoofing
Unter Antispoofing versteht man die Fähigkeit einer Firewall Pakete aufgrund ihrer physikalischen Herkunft zu kontrollieren. D.h. die Firewall würde eine Verbindung kontrollieren wenn sie nicht über die "richtige" Netzwerkkarte reinkommt. Die Idee dahinter ist zu verhindern das ein Angreifer seine QuellIP fälscht und somit Daten über die Firewall schicken zu können.
Um wieder das Beispiel der Schulklasse zu nötigen: Stellen wir uns vor der Lehrer hat eine Frage gestellt auf die er eine Note vergeben will. Derjenige welcher die richtige Antwort gibt bekommt eine 1. Der Schüler Ben weiß die Antwort nicht. Die Schülerin Nicole mag den Schüler Ben aber sehr und möchte ihm deshalb eine gute Note verschaffen. Dafür verstellt sie ihre Stimme und gibt die richtige Antwort.
Der Aufpasser beherrscht aber Antispoofing und weiß das der Schüler Ben vorne rechts in der Klasse sieht. Die Anwort kam aber von hinten links (da sitzt Nicole). Deshalb verwirft er die Antwort und die Note konnte nicht gefälscht werden. (Aber keine Sorge: Nicole und Bens Geschichte hatte ein glückliches Ende mit einer Hochzeit in Weiß und einem berauschenden Fest.)
Hochverfügbarkeit (Statefullfailover)
Unter Statefullfailover versteht man die Fähigkeit zwei Firewalls zu koppeln so dass keine Verbindung unterbrochen wird, auch wenn eine der beiden Firewalls ausfällt. Die Firewall wird also hochverfügbar.
Um wieder im Beispiel zu bleiben: Man stelle sich vor der Aufpasser in der Klasse hat einen drigenden Arztermin und muss weg (wer möchte kann sich auch vorstellen das der Aufpasser einen Herzinfarkt hat und tot umfällt, aber das war dem Autor ein wenig zu blutig, deshalb der Arzttermin). Da der Aufpasser nicht mehr da ist und alle Verbindung von Lehrer zu Schüler über ihn laufen können Lehrer und Schüler nicht mehr miteinander sprechen.
Deshalb hat der Administrator einen zweiten Aufpasser in die Klasse gesetzt. Sobald der erste ausfällt übernimmt der zweite und es kann weiter gehen. Somit hätte man ein Failover realisiert, allerdings noch kein Statefullfailover. Im Moment schreibt sich nämlich nur der aktive Aufpasser die Fragen des Lehrers auf. Somit kann nur er erkennen ob ein Datenpakt von einem Schüler eine Antwort darstellt. Fällt er aus weiß der zweite Aufpasser nicht welche Fragen schon gestellt wurden da er sich die Fragen nicht mitgeschrieben hat. Der Lehrer müsste also alle Fragen neu stellen damit die Antworten durch kommen.
Ein Statefullfailover-Aufpasser (oder -Firewall) schreibt sich also die Fragen mit auch wenn er gerade nicht aktiv ist. Fällt der aktive Aufpasser/Firewall aus, braucht der Lehrer die Fragen nicht nochmal neu stellen. Die Verbindungen werden also nicht unterbrochen.
Open Source Firewalls
Echte Firewallsysteme
Nachfolgend einige Open Source Firewalls. Eine solche Liste kann natürlich nicht vollständig sein, deshalb wurden nur einige herausragende Vertreter aufgeführt.
netfilter/iptables
Aktuelle Linuxkernel haben eine Firewall mit eingebaut. Diese nennt sich "Netfilter" und kann über den Befehl "iptables" konfiguriert werden. Oftmals wird auch einfach von iptables gesprochen wenn man von Netfilter spricht. Ein älteres Frontend für Netfilter war ipchains. Dieses sollte man heute allerdings nicht mehr einsetzen, da iptables ipchains vollkommen ersetzt.
netfilter beherrscht das Statefullinspection, kann also Verbindung anhand ihrem Zustand zulassen oder verbieten. Darüber hinaus setzt man netfilter auch zur Manipulation von Datenpaketen wie z.B NAT ein.
Es wird auch schon an Hochverfügbarkeit, also an Statefullfailover-Funktionalität gearbeitet. Das entsprechende Modul, welches hierfür benötigt wird nennt sich ct_sync (siehe Ende der Seite). Es ist allerdings noch nicht standardmäßig in den Linuxkernel integriert.
TuxGuardian
Für Linux gibt es auch eine Desktopfirewall namens TuxGuardian. TuxGuardian ermöglicht es für jedes Programm individuell zu bestimmen ob es ins Internet darf oder nicht. Hierfür öffnet sich ein kleines Fenster welches den Benutzer fragt ob er/sie den Zugriff zulassen möchte oder nicht. Alternativ kann man auch über eine Konfigurationsdatei bestimmen welches Programm Verbindungen öffnen darf und welches nicht.
Tuxguardian ist bisher nicht Teil der gängigen Distributionen wie Ubuntu oder OpenSuse, wodurch man es manuell nachinstallieren muss.
pf
pf steht für Paket Filter und ist der Name der Firewallsoftware von OpenBSD. pf beherrscht Statefullinspection und kann mit Hilfe von pf_sync sogar Hochverfügbar gemacht werden (Ein Howto hierzu findet sich am Ende der Seite).
wipfw
wipfw ist eine Portierung der FreeBSD Firewall ipfw auf Windows. Sie bietet zwar nicht alle Funktionen wie das Original ipfw, die wichtigsten Funktionen sind jedoch bereits integriert. Damit wäre es also theoretisch Möglich MS Windows als echte Netzwerkfirewall einzusetzen.
Administrationsoberflächen
SuSE-Firewall
Die SuSE-Firewall ist keine neue Firewall, sondern einfach nur ein Oberfläche für iptables. Somit kann die SuSE Firewall nur das was auch netfilter kann. Die Administration dieser "Firewall" lässt sich über YaST erledigen. Zur Fehlersuche kann man sich die Datei /etc/sysconfig/SuSEfirewall2 in einem Texteditor ansehen. Hierin speichert YaST die Firewalleinstellungen in Form eines Shellscriptes.
Firewall Builder
Neben Distributionsabhängigen Werkzeugen zur Firewallkonfiguration gibt es auch unabhängige Softeware zur Konfiguration von Netfilter wie z.B. Firewall Builder. Der Firewall Builder ist eine GUI in welcher man sich das Regelwerk für eine Firewall zusammenklicken kann. Man kann Regelwerke für iptables, ipfilter, OpenBSD pf und sogar (mit einem kostenpflichtigen Zusatzmodul) für Cisco PIX Firewalls erstellen.
Easy Firewall Generator for IPTables
Der Easy Firewall Generator for IPTables ist ein Webseite über die man sich ein Shellscript für iptables erstellen lassen kann. Man folgt einfach den Fragen auf der Seite und kopiert am Ende die Ausgabe in eine Datei. Diese lässt man über ein Runlevel_scripte_-_Scripts_selber_erstellen bei jedem Start ausführen.
Wichtige Sicherheitshinweise zu Firewalls
Die Firewall als Allheilmittel?
Eine Firewall alleine macht noch kein sichers Netzwerk. Gerade wenn man Verbindungen zulässt öffnet man ja die Firewall und stetzt die dahinterliegenden Systeme potentiellen Angriffen aus. Man muss also noch zusätzliche Sicherheitsmaßen ergreifen um die Dienste welche die Firewall erlauben soll abzusichern. Eine Firewall kann somit nur Teil eines Sicherheitskonzeptes sein, nicht jedoch das Konzept alleine.
Darüber hinaus muss man sicherstellen das die Firewall "im Weg" steht. D.h. es darf keine Verbindungsmöglichkeiten um die Firewall herum geben (Bypass). Das wäre wie wenn man eine Vordertür mit Sicherheitsschlössern, Fingerabdrucksensor und Stahlpanzerung hat, die Rückseite des Hauses aber ein Loch in der Mauer hat.
Auch kann man eine Firewall relativ leicht durchtunneln wenn man ein System innen und außen unter Kontrolle hat. PC im eigenen Netzwerk mit einem Trojaner machen also selbst die beste Firewall u.U. löchrig.
Natürlich kann auch die Firewall selbst einen Bug haben wodurch wiederum Verbindungen zugelassen werden oder die Firewall u.U. komplett umgangen werden. Auch das muss man berücksichtigen.
Grundsätze zur Gestaltung des Regelwerkes
Wie man eine Firewall und deren Regelwerk aufbaut hängt natürlich von den Anforderungen ab. Allerdings lassen sich einige ganz nützlich Grundregeln festhalten, welche nachfolgend aufgeführt werden. Die Regeln sind nicht für eine spezifische Firewallsoftware, sondern können im Prinzip für alle Firewalls gelten.
In diesem Beispiel wird davon ausgegangen das die Firewall die erste Regel benutzt die sie findet. Wird also ein Paket von einer Regel ganz vorne zugelassen und von einer Regel ganz hinten verworfen, so würde die hier verwendete Beispiel Firewall das Paket zulassen da die entsprechende Regel zuerst im Regelwerk gefunden wurde. Dies ist die normale Verhaltensweise von netfilter und der meisten anderen Firewalls (wenn auch nicht alle pf wendet z.B. die letzte gefunde Regel an).
Broadcast Regel
- Position im Regelwerk: Ganz vorne
- Quelle: Alle
- Ziel: Broadcast IP Adresse der Netzwerksegmente
- Service: unterschiedlich, meist MS RPC, RIP, SMB
- Aktion: Paket verwerfen
- Ins Log schreiben? Nein
Die Broadcastregel filtert unnötiges Rauschen im Netzwerk. Viele Dienste wie SMB schicken regelmäßig Daten mit Statusinformationen an die Broadcastadresse des Netzwerkes. Diese Daten müssen sind in aller Regel nur für das jeweilige Netzwerksegment eines Rechners notwendig und müssen nicht in andere Netzwerke weitergeleitet werden.
Da solche Pakete relativ häufig auftauchen steht die Regel ganz vorne im Regelwerk. Dadurch muss die Firewall nicht das ganze Regelwerk abarbeiten was die Last der Maschine verringert. Aus dem gleichen Grund wird ein Greifen dieser Regel auch nicht ins Log geschrieben. Es würde das Log nur unnötig vollschreiben und die Suche nach interessanten Daten erschweren.
Administrations Regel
- Position im Regelwerk: Vor der Stealth Rule
- Quelle: IP Adresse des Administrator PCs
- Ziel: IP Adresse der Firewall
- Service: ssh (bzw. was zur Administration der Firewall benötigt wird)
- Aktion: Zulassen
- Ins Log schreiben? Ja
Die Administrationsregel erlaubt den Zugriff auf die Firewall durch den Administrator. Diese Regel muss schon beim ersten Aktivieren des Regelwerkes vorhanden sein. Sonst sägt man sich den eigenen Ast ab und kann nach Aktivierung der Firewall diese nicht mehr kontrollieren.
Stealth Regel
- Position im Regelwerk: Vorne
- Quelle: Alle
- Ziel: IP Adresse der Firewall
- Service: Alle
- Aktion: Paket verwerfen
- Ins Log schreiben? Ja
Die sogenannte Stealthregel sorgt dafür das die Firewall auf keinerlei Anfragen, welche direkt an sie gerichtet wurde, reagiert. Sie taucht also in traceroutes oder ähnlichem nicht mehr auf und ist dadurch quasi unsichtbar. Der Vorteil ist, dass ein Angreifer nicht mehr ohne weiteres erkennen kann welche Firewallsoftware eingesetzt wurde. Dadurch wird es schwieriger evtl. vorhandene Lücken und Bugs in der Firewallsoftware auszunutzen. Allerdings ist auch dies kein Allheilmittel. Dadurch das die Firewall nicht reagiert weiß der Angreifer schonmal das höchstwahrscheinlich eine Firewall eingesetzt wird. Keine Antwort ist somit auch eine Antwort.
DROP Regel
- Position im Regelwerk: Letzte Regel
- Quelle: Alle
- Ziel: Alle
- Service: Alle
- Aktion: Paket verwerfen
- Ins Log schreiben? Ja
Dies ist die letzte Regel im Regelwerk. Jedes Paket für das keine andere Regel gefunden wurde wird verworfen. Diese Regel realisiert dadurch eine "Deny All" Regelwerk. D.h. alles was nicht erlaubt ist, ist verboten. Ein solches vorgehen wird häufig für Firewalls eingesetzt welche eine Firmennetzwerk mit dem Internet verbinden.