Login
Newsletter
Werbung

Mo, 10. Januar 2000, 00:00

Firewall unter Linux

Vorwort

Firewall ist ein ganz besonderes Thema für sich. Zuerst dachte ich, daß es nicht so schwer sein kann, eine Firewall einzurichten. Diesen Gedanken konnte ich allerdings ganz schnell wieder vergessen. Trotz guter Quellen fiel es mir noch ziemlich schwer, die Firewall aufzusetzen. An dieser Stelle möchte ich mich noch ganz herzlich bei allen Usern bedanken, die mich mit diversen oder besser gesagt beschäftigen möchte und vorher niemals irgendwelchen Kontakt damit hatte, wird hier (so hoffe ich *g*) einen guten Einstieg finden. Ich versuche genau die Funktionsweise, den Aufbau und alles, was zu einer Firewall gehört, zu beschreiben. An dieser Stelle möchte ich gleich auch noch erwähnen, daß ich gerne bereit bin, Kritik, Tips etc. entgegenzunehmen, um diese Dokumentation noch zu verbessern.

Anforderungen

Ich beschreibe den Aufbau einer Firewall anhand meines Beispielsystems. Das System bestand aus einem Pentium 166 MHz, 48 MB RAM, einer 100 MBit/s Netzwerkkarte, einer ISDN-Karte und zwei 2,1 GB HDs. Die verwendete Software war SuSE 6.2 mit dem gepatchten Kernel 2.2.13 (Original-Kernel ist 2.2.10). Vorweg möchte ich dringend empfehlen, den aktuellsten Kernel zu verwenden. Ich habe sehr schlechte Erfahrungen mit dem 2.2.10 im Bezug auf Firewalling und besonders auf Routing gemacht. Die hier beschriebene Firewall baut auf das Programm ipchains auf, während frühere Kernel ipfwadm nutzten. In der SuSE-Version mußte der Kernel für die Firewall nicht neu kompiliert werden. Sollte das bei Ihnen nicht der Fall sein, so muß der Kernel wie folgt konfiguriert sein:

CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y

Das Beispielsystem enthält zwei zwei Netzwerkkarten (Ethernet und ISDN). Die Ethernetkarte wird als eth0 und die ISDN-Karte als ippp0 bezeichnet. Hinter eth0 liegt ein maskiertes Netz (192.168.100.0/24). Ziel ist es, mit dem maskiertem Netz ins Internet zu gelangen, ohne daß jemand von außen eindringen könnte. Von innen her hat jeder Vollzugriff auf den Router mit der Firewall. Sollte dieses nicht gewünscht sein, so kann es beliebig umkonfiguriert werden. Zugegeben: Die Wahrscheinlichkeit ist sehr gering, das jemand von außen in das Netz gelangen könnte, da die ISDN-Karte jedesmal eine dynamische IP erhält. Etwas anderes wäre es, wenn der Provider der ISDN-Karte permanent eine feste IP Adresse erteilt bzw. wenn eine Standleitung existiert. Bei einer Standleitung würde ich davon abraten (so leid es mir tut), eine Firewall unter Linux zu benutzen, da ein Hardware-Router (z.B. von Cisco mit "intruder detection") wohl geeigneter wäre. Für Internet-Gateways, wie in unserem Beispiel oder ähnliche andere Beispiele, ist die Linux-Firewall allerdings voll ausreichend.

Was müssen Sie wissen? Sie sollten sich auf jeden Fall einigermaßen mit Linux, speziell mit TCP/IP auskennen. Das heißt, Sie sollten z.B. unter Linux wissen, wie man ein Skript erstellt oder einen Kernel neu kompiliert. Im Bezug auf TCP/IP sollten Sie auf jeden Fall wissen, was z.B. eine dynamische IP ist, wie ein Port ungefähr funktioniert, wie Netze erstellt werden etc. Sollte das nicht der Fall sein, rate ich davon ab, eine Firewall einzurichten, da die ganze Funktionsweise wahrscheinlich nicht verstanden werden kann. Fassen Sie bitte eine Firewall-Einrichtung nicht zu leichtfertig auf... es ist nicht so einfach, wie es sich vielleicht anhört.

Grundsätzliches

Zuerst möchte ich ganz grob und kurz beschreiben, mit was für Protokollen wir es hier hauptsächlich zu tun haben. Es sind: das Transmission Control Protocol TCP, das User Datagram Protocol UDP und das Internet Control Message Protocol ICMP. Dienste bauen auf den TCP- oder UDP-Protokollen auf, um ihre Daten zu verschicken. Das ICMP-Protokoll wird genutzt, um TCP/IP-Verbindungen zu testen (ping).

Gehen wir davon aus, daß Sie zu Hause vor Ihrem Rechner sitzen und sich gerade im Internet befinden. Sie starten Ihren Browser, geben eine bestimmte Adresse ein und der Webserver stellt Ihnen in relativ kurzer Zeit Informationen zur Verfügung. Das ist das, was Sie sehen, aber was passiert hinter den Kulissen? Ihr Rechner stellt eine Anfrage an den Webserver. Dieses passiert in diesem Fall über das Transportprotokoll TCP auf dem privilegierten Port 80 des Webservers. Alle Kommunikationsports zwischen 0 und 1023 sind privilegierte Ports, auf denen Standard-Dienste (www, ftp, usw.) erreichbar sind. Der Webserver nimmt nun diese Anfrage an und beide verabreden sich auf einen höheren unprivilegierten Port (1024-65535), um miteinander zu kommunizieren. Das hat den Vorteil, daß der Webserver weitere Verbindungen von anderen Clients annehmen kann. Allgemein läßt sich jetzt sagen, daß alle Anfragen an einen Internet-Dienst, wie z.B. HTTP oder FTP, auf privilegierten Ports stattfinden, wo entsprechende Server bzw. Daemonen laufen. Clients schicken ihre Anfrage immer von einem unprivilegierten Port los.

Client ----Anfrage----> Server
>1023   <1024

Auf dem Weg durch eine Firewall bzw. durch den Linux-Kernel muß sich jedes Paket einigen Prüfungen unterziehen. Trifft ein Paket auf die Firewall, wird als erstes überprüft, ob die Prüfsumme noch stimmt. Anschließend erfolgt ein Test, ob es sich um ein korrektes IP-Paket handelt. Schlägt eine dieser ersten beiden Prüfungen fehl, wird das Paket verworfen. Nun trifft das Paket auf den eigentlich Eingang, nämlich die input-chain. Danach wird es weitergeleitet über die forward-chain an den Ausgang output-chain der Firewall. Mit dem Eintreffen auf die input-chain werden alle Regeln nacheinander abgearbeitet.

Trifft eine Regel zu, gelangt das Paket zu seinem Sprungziel der Chain: DENY und REJECT verwerfen das Paket, wobei der Absender bei REJECT per ICMP-Paket die Mitteilung erhält, daß das Ziel nicht erreichbar ist (destination unreachable). ACCEPT läßt das Paket passieren. Sprungziele können aber auch benutzerdefinierte Einstellungen enthalten. So ist es z.B. möglich, ICMP-Pakete von einer input-chain aus an eine ICMP-Regelliste zu schicken und dort alle Überprüfungen durchführen zu lassen. Es gibt auch eine Möglichkeit, Port-Forwarding zu benutzen, indem das Sprungziel auf REDIRECT gesetzt wird.

Trifft keine Regel auf ein Paket zu, dann tritt die Standard-Regel (default policy) ein. Sie kann entweder ACCEPT, DENY oder REJECT sein. Generell ist es zu empfehlen, die Standardregel auf DENY zu setzen und alles, was benötigt wird, freizugeben, so daß man die Regel erhält: Alles was nicht ausdrücklich erlaubt ist, ist verboten.

Die Sicherheit

Sie wissen inzwischen, daß alle Anfragen ins Internet auf Ports unter 1024 stattfinden. Somit ist es jetzt möglich, ein Sicherheitssystem zu entwerfen. Auf einem Linux-System ist eigentlich der Internet Super Dämon INETD gestartet und somit sind spezielle Dienste freigegeben. Diese Dienste sind von außen, also dem Internet und von dem maskiertem Netz erreichbar. Sie möchten aber, daß sie nur von dem maskierten Netz erreichbar sind (für Fernwartungen etc.), worauf folglich alles aus dem Internet unter Port 1024 geblockt werden muß. Empfohlen wird auf jeden Fall, alle Dienste, die nicht benötigt werden, abzuschalten, da sie nur ein unnötiges Risiko darstellen. Es könnte auch der INETD abgeschaltet werden, womit Sie eine perfekte Firewall hätten. Allerdings würde Ihnen aber dann auch keine Fernwartung zur Verfügung stehen.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung