Home / LinuxUser / 2002 / 05 / Paketfilter-Firewall

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(230 Punkte bei 9 Stimmen)
Wheezy + Kernel 3.9.2 + LXDE
(185 Punkte bei 5 Stimmen)
KDE 4.10.2, Gnome 3.6 und mehr
(143 Punkte bei 5 Stimmen)
Google schmeißt Jabber raus ...
(108 Punkte bei 5 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Private Feuerwände

Paketfilter-Firewall

Abschluss

Die vorletzten Regeln, die wir in unsere Firewall schreiben, sorgen für eine Protokollierung auffälliger Ereignisse. Von manchen Paketen möchten wir gar nichts wissen: Verbindungsversuche zu NetBIOS-Ports für die Windows-Netzwerkumgebung schicken wir kommentarlos ins Nirwana (-j DROP). Alle anderen unerlaubten Pakete zeichnen wir erst einmal auf (-j LOG).

iptables -A INPUT -p udp --dport netbios-ns  -j DROP
iptables -A INPUT -p udp --dport netbios-dgm -j DROP
iptables -A INPUT -p tcp --dport netbios-ssn -j DROP
iptables -A INPUT  -j LOG
iptables -A OUTPUT -j LOG

Zum Schluss verwerfen wir alle Pakete, die noch nicht als erlaubt erkannt und so explizit angenommen wurden. Dabei stehen in INPUT- und OUTPUT-Chain unterschiedliche Regeln: Unerwünschte ankommende Pakete ignorieren wir stillschweigend: Wenn uns jemand angreift, wollen wir ihm möglichst wenig Informationen über unser System zukommen lassen. Einzige Ausnahme sind Pakete für den Auth-Port: Dieser dient z. B. FTP-Servern zu einem legitimen Identifikationsversuch. Wir erlauben ihn zwar nicht, wollen aber auch nicht lange warten, bis der fremde Rechner entnervt aufgibt:

iptables -A INPUT -p tcp --dport auth -j REJECT --reject-with tcp-reset
iptables -A INPUT -j DROP

Bei abgehenden Paketen liegt eine andere Situation vor: Egal, ob es sich um einen Fehler in der Firewall oder in der Anwendersoftware handelt, wir sind es selbst, die vor dem Computer sitzen und das gesperrte Paket verursacht haben. Über diese Situation soll der Computer uns sofort informieren. Deshalb werden abgehende TCP- und UDP-Pakete mit einer Fehlermeldung an das Anwenderprogramm zurückgewiesen:

iptables -A OUTPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A OUTPUT -p udp -j REJECT
iptables -A OUTPUT -j DROP

Zusammensetzen

Und wie kommen Sie jetzt zu Ihrer fertigen Firewall? Suchen Sie sich alle Regeln heraus, die für Ihren Computer passen, und schreiben Sie sie in eine Datei, beispielsweise /etc/rc.d/rc.firewall.

Nun sorgen Sie dafür, dass Ihr Computer dieses Skript automatisch aufruft. Wenn Sie exakt arbeiten möchten, erstellen Sie dafür ein eigenes Init-Skript in /etc/rc.d/rc*.d, das noch vor der Initialisierung Ihrer Netzwerkschnittstellen abgearbeitet wird, etwa /etc/rc.d/rc3.d/S01firewall. Wenn Sie es nicht ganz so genau nehmen oder ohnehin keine ständige Internet-Anbindung besitzen, hängen Sie eine Zeile . /etc/rc.d/rc.firewall an die Datei /etc/rc.d/rc.local o. ä. an.

Deaktivieren Sie die Firewall-Automatik Ihrer Distribution, wenn Sie eine eigene Firewall installieren! Bei Red Hat und verwandten Distributionen löschen Sie die beiden Konfigurationsdateien ipchains und iptables im Verzeichnis /etc/sysconfig.

Theoretisch können Sie beim Testen einzelne Regeln per Hand setzen und auch wieder löschen. Da es vor allem am Anfang schwer ist, dabei den Überblick zu behalten, korrigieren Sie lieber Ihr Skript und rufen es neu auf, wenn Sie eine Änderung vornehmen.

Bei einer etwaigen Fehlersuche hilft Ihnen am besten das syslog; Meldungen der Firewall über abgewiesene Datenpakete landen bei den meisten Distributionen in der Datei /var/log/messages.

Weitere Einblicke in die Firewall-Konfiguration bietet z. B. [2]. Dort erfahren Sie auch mehr über benutzerdefinierte Ketten, mit denen Sie Ihre Firewall optimieren und beschleunigen können.

Abbildung 3: Die Firewall-Chains für einen Router

Kasten 3: Firewalls und lokale Netze

Viele Linux-Anwender betreiben zu Hause ein eigenes lokales Netzwerk. Oft dient dabei ein Linux-Rechner als zentraler Router für den Internet-Zugang, den mehrere Computer mit verschiedenen Betriebssystemen benutzen.

Die Firewall muss in dieser Situation etwas anders konfiguriert werden. Für Pakete, die aus dem LAN ins Internet (und umgekehrt) weitergeleitet werden, existiert eine eigene Firewall-Chain namens FORWARD. Abbildung 3 zeigt die neue Architektur.

Wenn ein Paket – egal ob aus dem Internet oder aus dem LAN – direkt an den Computer mit der Firewall geschickt wird, durchläuft es die INPUT-Chain. Wird eines auf dem Firewall-Rechner generiert, muss es die OUTPUT-Chain passieren. Für Pakete, die lediglich zwischen LAN und Internet weitergeleitet werden, ist hingegen ausschließlich die FORWARD-Chain zuständig. Dies ist ein wichtiger Unterschied zu den Firewall-Implementationen älterer Kernel-Serien!

Die Minimalregeln für weitergeleitete Pakete sehen etwa so aus:

# Abgehende Pakete
iptables -A FORWARD -o ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Ankommende Pakete
iptables -A FORWARD -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Die FORWARD-Chain kann im Prinzip ganz ähnliche (oder manchmal sogar identische) Regeln enthalten wie INPUT- und OUTPUT-Chains. Tatsächlich lege ich Ihnen auch dringend ans Herz, hier einen entsprechenden Aufwand zu treiben: Nur so können Sie das Maximum an Sicherheit für Ihr LAN herausholen. Besonders Windows-Maschinen werden es Ihnen zu danken wissen. Ein Minimalsystem wie die zwei hier gezeigten Regeln ist heute nicht mehr ausreichend!

Sofern sich Ihr lokales Netz eine gemeinsame IP-Adresse teilen muss, erfüllt die Firewall noch eine weitere Funktion. Sie befördert nicht nur Pakete zwischen LAN und Internet, sondern korrigiert auch die IP-Adressen auf unserer Seite. Diese Funktionalität heißt NAT oder "Network Address Translation" (Netzadressübersetzung).

Dank NAT sieht es für die Computer im LAN so aus, als hätten sie eine direkte Internet-Anbindung ohne Komplikationen. Für Rechner im Internet hingegen wirkt das gesamte LAN wie ein einziger, besonders aktiver Computer mit einer einzigen IP-Adresse.

Statt der lokalen Netzwerkadresse eines angeschlossenen Computers wird in abgehenden Paketen die offiziell zugewiesene IP-Adresse des Routers eingetragen, die zum Beispiel über PPP ausgehandelt wurde. Gleichzeitig wechselt die Firewall die Port-Nummer aus und ersetzt sie durch einen freien Port auf dem Firewall-Computer.

Bei ankommenden Paketen geschieht das Umgekehrte: Diese Pakete sind an die IP-Adresse der Firewall adressiert und tragen auch eine entsprechende Port-Nummer im Header. Anhand dieser erkennt die NAT-Implementation, welchem Computer im LAN die entsprechende Verbindung gehört. Sie trägt wieder seine IP-Adresse und die ursprüngliche Port-Nummer als Empfänger ein und schickt das Paket weiter.

Das Schönste an NAT ist die Einfachheit, mit der man es einschaltet. Dafür reicht nämlich – zusätzlich zu den normalen Weiterleitungsregeln - eine einzige Zeile im Firewall-Skript:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Statt ppp0 tragen Sie natürlich das Netzwerk-Interface ein, über das Sie Ihre Internet-Verbindung herstellen: ppp0 für Modemverbindungen, ippp0 für ISDN oder eth0 beziehungsweise ein anderes Ethernet-Interface für DSL.

Glossar

IP

Das paketbasierte "Internet Protocol" bildet die Grundlage jeder Kommunikation über das Internet. Jedes IP-Paket enthält u. a. die numerischen Adressen von Absender und Empfänger. Verschiedenste Protokolle setzen auf IP auf und bieten zusätzliche Features.

Port-Nummern

Sie kennzeichnet Programme eindeutig, sowohl Server- als auch Client-Software. Wenn ein Client eine Verbindung aufbaut, weist ihm der Kernel automatisch eine Port-Nummer zu. Dabei gilt unter Unix die Grundregel, dass alle normalen Programme Ports im Bereich ab 1024 erhalten. Die darunterliegenden bleiben für Server reserviert, die root startet. Jedes TCP- und UDP-Paket enthält also zwei Port-Nummern, einen für den Absender und einen für den Empfänger.

Policies

Jede Firewall-Regel kann direkt angeben, dass mit einem Paket etwas geschehen soll. Wird für ein Paket keine passende Regel gefunden, entscheidet die Policy über seinen Verbleib.

Routing-Tabellen

Sie legt fest, über welche Netzwerkverbindungen Ihr Computer Pakete an andere Systeme schickt. Ein Einzelplatzsystem kennt meist nur zwei Verbindungen: lo führt zum eigenen Rechner, ppp0, ippp0 oder eth0 ins Internet. Viele Router oder größere Server besitzen mehrere Netzwerk-Interfaces und damit auch kompliziertere Routing-Tabellen.

Flags

Einzelne Bits im Kopf eines Pakets, die zusätzliche Informationen darüber enthalten, was das Paket erreichen möchte bzw. wofür es gut ist. Flags sagen zum Beispiel "hier beginnt eine neue Verbindung" oder "dieses Paket darf nicht in kleinere Stücke zerlegt werden".

Infos

[1] Robert L. Ziegler: "Linux Firewalls", Markt und Technik München, 2002 (2. Auflage)

[2] "Linux 2.4 Packet Filtering HOWTO" und "Linux 2.4 NAT HOWTO": http://netfilter.samba.org/unreliable-guides/

[3] Das Firewall-Skript aus diesem Artikel zum Download: http://www.seligma.com/linux-user/firewalls/

Der Autor

Marc André Selig hat Humanmedizin studiert. Er arbeitet als wissenschaftlicher Angestellter an der Universität Trier und ist parallel als selbstständiger EDV-Berater und Schriftsteller tätig. Momentan beschäftigt er sich vor allem mit Datenbankprogrammierung für Web-Services auf diversen Unix-Plattformen. Gleichzeitig ist er auf der Suche nach einer AiP-Stelle, die sich für Unix-Fans eignet …

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 136 Punkte (11 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Emacs als Psychologe
Emacs als Psychologe
Tim Schürmann, 21.05.2013 11:49, 0 Kommentare

Wer beim Schreiben in Emacs nicht mehr weiter weiß oder schier an einer Programmieraufgabe verzweifelt, der kann den eingebauten Psychologen um Rat fragen.

1966 entwickelte der Infor...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...