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!"
(220 Punkte bei 8 Stimmen)
KDE 4.10.2, Gnome 3.6 und mehr
(143 Punkte bei 5 Stimmen)
Google schmeißt Jabber raus ...
(121 Punkte bei 4 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

Alte Regeln weg und neue her

Beim Aufsetzen der Firewall vermeidet es Komplikationen, wenn man eventuell bereits systemseitig vorgefertigte Firewall-Konfigurationen abschaltet. Damit lautet der erste Eintrag in der Datei, in der wir die Firewall bauen

iptables -F

Anschließend sperren wir, unserer Default-Policy folgend, alles ab. Da davon der komplette Netzwerkverkehr betroffen ist, sollte man beim Erstaufruf des Firewall-Skripts direkt an der Konsole des Firewall-Rechners sitzen:

iptables -P INPUT   DROP
iptables -P FORWARD DROP
iptables -P OUTPUT  DROP

Unsere erste Regel gilt dem WWW. Beim dort verwendeten HTTP baut ein Client auf unserem Computer, beispielsweise Netscape, eine Verbindung zu einem Web-Server auf. Dieser arbeitet in der Regel hinter dem Port 80. Anhand dieser Nummer erkennt die Firewall, dass es sich vermutlich um eine HTTP-Verbindung handelt.

Zum Erstellen der Regel kommt wieder der Befehl iptables zum Einsatz. Um TCP-Datenverkehr (-p tcp) an den "Destination Port" 80 (--dport 80, in der Regel also HTTP-Server) rauszulassen (-j ACCEPT), gibt man Folgendes ein:

iptables -A OUTPUT -p tcp --sport 1024: --dport 80 -j ACCEPT

-A OUTPUT hängt die neue Regel an die OUTPUT-Chain an. --sport 1024: steht für Source Port; dieser muss in der Regel mindestens 1024 sein, aber durch den angehängten Doppelpunkt sind auch alle darüberliegenden Ports erlaubt. Jetzt können wir ein Paket an einen Web-Server schicken, allerdings kommen die Antworten noch nicht zu uns durch.

Theoretisch könnte man für diese Antworten eine exakt symmetrische Regel konstruieren, und viele Leute gehen genau so vor. Diese lautet

iptables -A INPUT -p tcp --sport 80 --dport 1024: ! --syn -j ACCEPT

Absender- und Empfängerports sind vertauscht. Neu ist die Option ! --syn, also "nicht --syn". --syn prüft bestimmte Flags im Header des TCP-Pakets und erkennt damit das allererste Paket einer neuen Verbindung. Die Option ! --syn verweigert also den Aufbau einer neuen Verbindung, während Pakete erlaubt werden, die zu bestehenden Verbindungen gehören. Programme auf unserem Computer dürfen fremde Rechner kontaktieren, aber nicht umgekehrt.

Mir persönlich ist es etwas zu viel Aufwand, alle Regeln doppelt zu halten. Im Bewusstsein, dass ich damit potenziell mehr Pakete zulasse, als ich eigentlich will, begnüge ich mich mit einer einzigen Regel für alle ankommenden TCP-Pakete sämtlicher Protokolle:

iptables -A INPUT -p tcp --dport 1024: ! --syn -j ACCEPT

Sofern ein Paket nicht eine neue Verbindung aufbauen will, sind alle Pakete an unsere Clients erlaubt, egal, von welchem Absender-Port.

Kasten 2: Überwachung von Verbindungen

Über die iptables-Option ! --syn in den Regeln der INPUT-Chain filtert man Pakete heraus, die eine neue Verbindung aufbauen wollen, und lässt nur Daten aus bereits bestehenden Verbindungen zu. So dürfen eigene Clients einen fremden Dienst benutzen, während der umgekehrte Weg blockiert bleibt.

Dabei handelt es sich jedoch um einen ganz primitiven Mechanismus. Theoretisch könnten beliebige fremde Computer Pakete an uns schicken, solange diese nicht einen Verbindungsaufbau initiieren. Wir verlassen uns darauf, dass der Kernel solche zusätzlichen Pakete ignoriert.

Trickreicher ist die Verwendung eines separaten Moduls zur Überwachung des Verbindungszustands. Wenn wir das tun, merkt sich die Linux-Firewall alle bestehenden TCP-Verbindungen. Sobald nun ein Paket ankommt, prüft sie, ob es zu einer bekannten Verbindung gehört, und lässt es gegebenenfalls ohne weitere Rückfragen zu. Auf die Regeln mit ! --syn können wir nun verzichten.

Dieses Modul wird durch zwei iptables-Befehle aktiviert:

iptables -A INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Es werden alle Pakete angenommen, die entweder Teil einer bestehenden Verbindung sind oder als "verwandt" erkannt werden. "Verwandt" sind beispielsweise ICMP-Fehlermeldungen oder auch die besonderen Datenkanäle einer FTP-Sitzung.

Regeln für die üblichen Verdächtigen

Entsprechend gestaltet man die Regeln für die üblichen Netzwerkdienste. Aus Platzgründen finden Sie das komplette Firewall-Skript [3] auf der Heft-CD. Für typische Benutzer interessant sind folgende Ports:

  • 21 – FTP (Dateiübertragung)
  • 22 – SSH (SecureShell)
  • 23 – telnet (unsichere Alternative zu SSH)
  • 25 – SMTP (Mail-Versand)
  • 43 – whois (Verzeichnis der Inhaber und Betreiber von Internet-Domains)
  • 53 – DNS (Zuordnung von Domain-Namen und IP-Adressen)
  • 79 – finger (Abfrage von Benutzerinformationen)
  • 110 – POP3 (Mail-Empfang)
  • 119 – NNTP (Usenet-News-Versand und -Empfang)
  • 143 – IMAP (Mail-Empfang)
  • 443 – HTTPS (abgesicherte WWW-Verbindungen)
  • 554 – RealPlayer G2 (Audio- und Video-Übertragungen)

Die Regeln dafür sehen aus wie das für Port 80 beschriebene Muster. Eine Ausnahme macht FTP: Für jede Dateiübertragung wird hierbei eine eigene TCP-Verbindung unter Verwendung eines der oberen Ports aufgebaut. Im klassischen, aktiven FTP-Modus handelt es sich dabei um Verbindungen vom FTP-Server zurück zu uns. Das ist – außer mit dem in Kasten 2 vorgestellten Modul zur Verbindungsüberwachung – recht unsicher und daher unerwünscht.

Der heute fast ausschließlich eingesetzte passive Modus baut eine Verbindung vom FTP-Client zu einem der oberen Ports auf dem FTP-Server auf. Vom Standpunkt größtmöglicher Sicherheit ist das zwar immer noch nicht ideal, aber zumindest akzeptabel. Hierfür benutzen wir

iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -j ACCEPT

und die von mir vorgeschlagene "bequeme" INPUT-Regel, die alle Protokolle abdeckt.

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...