Vorherige Seite | Nächste Seite Inhalt

NetBSD Sicherheitsvorkehrungen und -anwendungen: IP Filter Konfiguration


Die Standard Firewall Software in NetBSD ist ipfilter.

Die ipf.conf Datei (zurück)

Die Firewall Regeln die ipfilter befolgt, stehen in der Datei /etc/ipf.conf für IPv4 und in /etc/ipf6.conf for IPv6. In diesem Teil werden wir veranschaulichen, welche Regeln ausgewählt wurden und warum. Es sei jedoch darauf hingewiesen, dass die bei Weitem beste Dokumentation von ipfilter in vielen Formaten von http://www.obfuscation.org/ipf/ heruntergeladen werden kann.

Im Grunde genommen folgt ipfilter zwei Grundprinzipien:

  1. einlesen der aktuellen Zeile
  2. die letzte Zeile hat Vorrang gegenüber vorherigen

Eine rudimentäre Konfiguration sähe dann so aus:

pass in on any all
block in on any all

Die erste Zeile besagt, dass jegliche Packets auf allen Interfaces hereingelassen werden. In der zweiten Zeile jedoch werden jegliche Packets auf allen Interfaces blockiert. Dies überschreibt also die erste Zeile, und Netzwerk-Traffic wird blockiert.

Die Syntax (zurück)

Die Syntax von ipfilter ist im Allgemeinen recht einfach zu verstehen: um Traffic hereinzulassen benutzt man 'pass in', um in rauszulassen, 'pass out'. Das Interface kann entweder speziell bestimmt werden, oder alle Interfaces werden beeinflusst:

pass out on all . . .

Sollten Sie das Interface 'ep0' bestimmen wollen, so sähe das dann so aus:

pass out on ep0 . . .

So weit, so gut. Nun wollen wir uns überlegen, wie die Konfiguration für den Firewall in unserem Fallbeispiel aussehen soll. Zuerst einmal wollen wir sicher gehen, dass SSH Traffic hereingelassen wird:

# SSH Verbindungen werden von überall erlaubt
pass in quick on ep0 proto tcp from any to 216.68.250.60/32 port = 22 keep state

Hier haben Sie wahrscheinlich bereits einige neue Aspekte der Syntax bemerkt. Darum lassen Sie uns diese erstmal näher erläutern, bevor wir neue Regeln hinzufügen.

Keyword: 'quick'

Durch das Keyword 'quick' werden vorherige Regeln überschrieben. Es gibt Ihnen eine einfache Möglichkeit, grosse und komplexe Firewalls mit über 100 Regeln zu konfigurieren. In unserem Beispiel nutzen wir es jedoch lediglich, um sicher zu gehen, dass diese Regel sofort befolgt wird.

Keyword: 'proto'

Wie Sie sicher bereits erraten haben, bestimmt das 'proto' Keyword das Protokoll. In unserem Beispiel ist dies TCP.

Keyword: 'port'

Durch das 'port' Keyword kann entweder eine Port Nummer oder der Name eines Ports aus /etc/services bestimmt werden. In diesen Beispielen verwenden wir beide Möglichkeiten.

Keyword: 'keep state'

Durch den Gebrauch der 'keep state' Keywords wird sichergestellt, dass alle Packets innerhalb des Firewalls von einer Seite zur anderen überprüft werden. Wenn Sie sich unser Beispiel genauer ansehen, werden Sie entdecken, dass alle Regeln das 'quick' verwenden, wodurch nicht unbedingt beide Seiten des Firewalls gecheckt werden.

Beispiele (zurück)

Nun, da wir ein besseres Verständnis für die allgemeine Syntax haben, wollen wir uns einige Beispiele anschauen.

Vorbestimmte und Lokale Adressen blockieren

Von vorneherein kennen wir bereits einige Adressen Klassen, die eigentlich nie durch unseren Firewall kommen sollten. Diese Adressen beinhalten die für interne Netzwerke vorbestimmte Adressen so wie die localhost Adresse (nicht zu verwechseln mit der Adresse des Interfaces):

Hier ist es wichtig darauf hinzuweisen, dass wir durchaus Traffic aus dem 127.16.0.0 Netzwerk (unser eigenes lokales Netzwerk, wie es im Fallbeispiel bestimmt wurde) auf einem Interface, fxp0, durchlassen wollen. Um dies zu erreichen, nutzen wir die folgenden Regeln:

block in quick on any from 192.168.0.0/16 to any
block in quick on any from 10.0.0.0/8 to any
block in quick on any from 127.0.0.0/8 to any
block in quick on any from 0.0.0.0/8 to any
block in quick on any from 169.254.0.0/16 to any
block in quick on any from 192.0.2.0/24 to any
block in quick on any from 204.152.64.0/23 to any
block in quick on any from 224.0.0.0/3 to any

Sie werden bemerkt haben, dass hier '172.16.0.0/12' fehlt (obwohl es wenigstens auf dem ep0-Interface blockiert werden sollte); Sie werden im nächsten Teil sehen, warum.

Paranoia Block

Als nächstes blockieren wir jegliche Art von Traffic auf ep0, so dass wir 127.16.0.0 nicht explizit blockieren müssen.

# alles wird blockiert
block in quick on ep0 all

Den Firewall als Internet Client erscheinen lassen

Als nächstes wollen wir den Firewall so konfigurieren, dass er wie ein normaler Internet Client erscheint. Dies ist recht einfach:

# Benimm Dich als wärst Du ein normaler Internet Client
pass out quick on ep0 proto tcp from 216.68.250.60/32 to any keep state
pass out quick on ep0 proto udp from 216.68.250.60/32 to any keep state
pass out quick on ep0 proto icmp from 216.68.250.60/32 to any keep state

Der ganze Rest

Nun wollen wir all die Protokolle zu unserer Konfiguration fügen, die wir durchlassen wollen. Achtung: wenn Sie irgendwelche dieser Services auf dem Firewall laufen haben, so ist dieser Port dann auch auf dem Firewall zugänglich. Es ist daher im Allgemeinen sicherer, auf dem Firewall nichts anderes als ssh, ipfilter und ipnat laufen zu lassen. Eine Ausnahme wäre z. B., wenn Sie nicht genug Hardware haben und DNS und/oder andere Server Prozesse laufen lassen müssen.

# DNS
pass in log proto tcp from any to any port = 53 keep state
pass in log proto udp from any to any port = 53 keep state

# WWW und FTP lassen wir rein
pass in log proto tcp from any to any port = www keep state
pass in proto tcp from any to any port = ftp keep state
pass in proto tcp from any to any port = ftp-data keep state
pass in proto tcp from any port = ftp-data to any port > 1023 keep state
pass in log proto icmp all keep state

IP Filter für Dial-Ups (zurück)

Dial-up Verbindungen sind normalerweise eine Herausforderung für ipfilter, da die meisten Dial-Up Interfaces bei jedem Verbindungsaufbau eine andere IP Adresse zugewiesen bekommen.

In einer solchen oder ähnlichen Situation mit Dynamic Addresses müssen die Regeln etwas weniger sicher geschrieben werden. Mit anderen Worten, die Regeln können die IP Adresse nicht selber verwenden, doch reicht es normalerweise aus, das Interface zu bestimmen. Hier ein Beispiel mit IP Adresse:

# Benimm Dich als w&aouml;rst Du ein normaler Internet Client
pass out quick on ep0 proto tcp from 216.68.250.60/32 to any keep state
pass out quick on ep0 proto udp from 216.68.250.60/32 to any keep state
pass out quick on ep0 proto icmp from 216.68.250.60/32 to any keep state

Für unsere Dial-Up Verbindung ändern wir diese Regeln nun wie folgt:

# Benimm Dich als w&aouml;rst Du ein normaler Internet Client
pass out quick on ep0 proto tcp from any to any keep state
pass out quick on ep0 proto udp from any to any keep state
pass out quick on ep0 proto icmp from any to any keep state

Was bringt uns das? Nun, zuerst einmal sind immernoch alle blockierten Ports unerreichbar. Zweitens, sofern ein Service nicht eingeschaltet ist und kein hereinkommendes Traffic-Proxy genutzt wird, so wird dieser ganze Traffic einfach durchgelassen. Es besteht ausser SSH keinerlei Möglichkeit, eine Verbindung mit dem Firewall zu erstellen.

Weitere Informationen (zurück)

Bitte lesen Sie das IPF HOWTO für detaillierte Informationen und verschiedene Filter-Strategien.


Vorherige Seite | Nächste Seite Inhalt

Home page
Zurück zu Dokumentation

(Ihre Meinung) $NetBSD: config_ipf.html,v 1.11 2005/09/28 17:24:43 mishka Exp $
Copyright © 1994-2003 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.