Index: head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml
===================================================================
--- head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml
+++ head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml
@@ -19,6 +19,7 @@
MichaelBunzelÜbersetzt von JohannKoisBenjaminLukas
+ BjörnHeidotting
@@ -1674,2710 +1675,2138 @@
-
- Die IPFILTER-Firewall (IPF)
+
+ IPFW
- firewall
+ Firewall
- IPFILTER
+ IPFW
- Geschrieben wurde IPFILTER von Darren Reed. IPFILTER ist vom
- Betriebssystem unabhängig: Es ist eine Open Source Anwendung,
- die auf die Betriebssysteme &os;, NetBSD, OpenBSD, &sunos;, HP/UX
- und &solaris; portiert wurde. IPFILTER wird aktiv betreut und
- gepflegt. Es werden regelmäßig neue Versionen
- herausgegeben.
-
- IPFILTER basiert auf einer kernelseitigen Firewall und einem
- NAT Mechanismus, der durch Anwenderprogramme
- betreut und gesteuert werden kann. Die Regeln der Firewall werden
- mit dem Programm &man.ipf.8; gesetzt oder gelöscht. Für
- die Manipulation der NAT Regeln verwendet man
- &man.ipnat.8;. Mit &man.ipfstat.8; werden Laufzeitstatistiken der
- kernelseitigen Anteile von IPFILTER aufgelistet. Und mit dem
- Programm &man.ipmon.8; kann man die Aktionen von IPFILTER in die
- Protokolldateien des Systems speichern.
-
- IPF funktionierte ursprünglich mit einer
- Regel-Prozess-Logik à la die letzte Regel, die
- passt, entscheidet und verwendete ausschließlich
- Regeln ohne feste Zustände. Inzwischen wurde die
- Regel-Prozess-Logik drastisch modernisiert: Es gibt eine
- und eine zustandsorientierte Option. Die offizielle Dokumentation beinhaltet
- leider nur die veralteten Parameter zur Regelerstellung - die neuen
- Funktionen werden nur als Zusatzoptionen aufgelistet, was ihre
- Vorteile beim Erstellen einer weit überlegenen und viel
- sichereren Firewall völlig untergräbt.
-
- Die Anweisungen in diesem Kapitel basieren darauf, Regeln mit
- den Optionen und
- zu erstellen. Mit diesem Grundwissen wird man einen kompletten
- einschließenden Regelsatz erstellen können.
-
- Für eine ausführliche Erläuterung der alten Methode
- zur Regelverarbeitung schauen Sie bitte auf
- http://www.munk.me.uk/ipf/ipf-howto.html oder
- http://coombs.anu.edu.au/~avalon/ip-filter.html.
+ IPFW ist eine
+ Stateful-Firewall
+ für &os;, die sowohl IPv4 als auch
+ IPv6 unterstützt. Die Firewall setzt sich
+ aus mehreren Komponenten zusammen: dem Kernel Firewall
+ Filter-Prozessor mit integriertem Paket-Accounting,
+ Protokollfunktionen, NAT, dem
+ &man.dummynet.4; Traffic-Shaper,
+ sowie Weiterleitungs-, Bridge- und ipstealth-Funktionen.
- Antworten auf häufige Fragen finden Sie unter
- http://www.phildev.net/ipf/index.html.
+ &os; enthält mit /etc/rc.firewall ein
+ Beispielregelwerk, welches mehrere Firewall-Typen für
+ gebräuchliche Szenarien definiert und unerfahrene Anwender
+ dabei unterstützen soll, ein geeignetes Regelwerk zu erstellen.
+ IPFW besitzt eine leistungsstarke
+ Syntax, mit der erfahrene Benutzer ihre eigenen Regeln
+ anfertigen können, um den Sicherheitsanforderungen der
+ jeweiligen Umgebung gerecht zu werden.
- Und ein durchsuchbares Archiv der Mailingliste zu IPFILTER
- gibt es unter http://marc.theaimsgroup.com/?l=ipfilter.
+ Diser Abschnitt beschreibt, wie
+ IPFW aktiviert wird und bietet einen
+ Überblick über die Regelsyntax. Zudem werden mehrere Regelsätze
+ für gebräuchliche Konfigurationsszenarien vorgestellt.
-
- Aktivieren von IPF
+
+ IPFW aktivieren
- IPFILTER
-
- enabling
+ IPFW
+ aktivieren
- &os; enthält IPF in der Standardversion als ladbares
- Kernelmodul. Dieses Modul wird vom System automatisch geladen,
- wenn in der rc.conf der Eintrag
- ipfilter_enable="YES" angelegt wird. In dieser
- ursprünglichen Konfiguration ist die Protokollierung aktiv
- und die Option default pass all ("Pakete passieren
- lassen") als Standard gesetzt. Um die block all
- ("alles Blockieren") Option zu setzen, muss man nicht gleich
- einen neuen Kernel bauen - es reicht, block all
- als letzte Position des Regelsatzes aufzulisten.
-
-
-
- Kernel-Optionen
-
-
- Kerneloptionen
+ Das &os; Basissystem enthält für
+ IPFW ein ladbares Kernelmodul, was
+ bedeutet, dass kein angepasster Kernel benötigt wird, um
+ IPFW zu benutzen.
- IPFILTER
+
+ Kerneloptionen
+ IPFIREWALL
- Kerneloptionen
-
- IPFILTER_LOG
+ Kerneloptionen
+ IPFIREWALL_VERBOSE
- Kerneloptionen
-
- IPFILTER_DEFAULT_BLOCK
+ Kerneloptionen
+ IPFIREWALL_VERBOSE_LIMIT
- IPFILTER
-
- Kerneloptionen
+ IPFW
+ Kerneloptionen
- Es ist nicht unbedingt notwendig, IPF durch die folgenden
- Optionen direkt in der Kernel einzubinden. Diese Möglichkeit
- der Verwendung von IPF wird hier mehr als Hintergrundwissen angeboten.
- Man sollte nur wissen, dass dadurch nicht mehr das Kernelmodul geladen
- wird - und dementsprechend auch nicht mehr entladen werden kann.
-
- Die Beschreibung der einzelnen Optionen von IPF für die
- Verwendung in der Kernelkonfiguration finden Sie auch in der Datei
- /usr/src/sys/conf/NOTES.
-
- options IPFILTER
-options IPFILTER_LOG
-options IPFILTER_DEFAULT_BLOCK
-
- options IPFILTER aktiviert die Verwendung
- der IPFILTER Firewall.
-
- options IPFILTER_LOG aktiviert den
- Logging-Mechanismus. Das bedeutet, dass jedes Paket geloggt wird,
- auf das eine Regel passt, die das Schlüsselwort
- log enthält. Dazu wird der
- Pseudo—Device ipl verwendet.
-
- options IPFILTER_DEFAULT_BLOCK ändert
- das Verhalten der Firewall dahingehend, dass jedes Paket, dass nicht
- explizit von einer pass Regel Zugang erhält,
- abgewiesen, bzw. geblockt, wird.
-
- Diese Einstellungen werden erst aktiv, wenn der Kernel, in den sie
- eingebunden wurden, kompiliert, installiert und gebootet wurde.
-
-
-
- Optionen in rc.conf
-
- Um IPF während des Bootvorgangs einzubinden, braucht man
- lediglich die folgenden Zeilen der Datei
- /etc/rc.conf anzufügen:
-
- ipfilter_enable="YES" # Startet IPF
-ipfilter_rules="/etc/ipf.rules" # liest den Regelsatz aus einer Datei
-ipmon_enable="YES" # Startet das IP-Monitor Log
-ipmon_flags="-Ds" # D = Als Da:mon starten
- # s = Protokollierung via syslog
- # v = Protokollierung von tcp window, ack, seq
- # n = Namen statt IP & port ausgeben
-
-
- Falls sich hinter der Firewall ein lokales Netzwerk befindet,
- das den reservierten privaten Adressbereich verwendet, müssen
- die folgenden Zeilen zur Aktivierung von NAT
- ebenfalls in /etc/rc.conf eingetragen
- werden:
-
- gateway_enable="YES" # Aktivierung des LAN-Gateways
-ipnat_enable="YES" # Startet die ipnat Funktion
-ipnat_rules="/etc/ipnat.rules" # Liest die ipnat-Regeldefinitionen aus einer Datei
-
-
-
-
- Der Befehl ipf
-
- ipf
+ Wenn Sie eine statische Unterstützung für
+ IPFW in den Kernel kompilieren
+ wollen, lesen Sie . Folgende
+ Optionen können in der Kernelkonfigurationsdatei verwendet
+ werden:
- Mit dem Befehl &man.ipf.8; liest man die Datei, die den Regelsatz
- enthält ein. Mit dem folgenden Befehl können Sie Ihre
- eigenen, für Ihr System maßgeschneiderten Regeln einlesen
- und so in einem Schritt alle Regeln der laufenden Firewall
- ersetzen:
+ options IPFIREWALL # enables IPFW
+options IPFIREWALL_VERBOSE # enables logging for rules with log keyword
+options IPFIREWALL_VERBOSE_LIMIT=5 # limits number of logged packets per-entry
+options IPFIREWALL_DEFAULT_TO_ACCEPT # sets default policy to pass what is not explicitly denied
+options IPDIVERT # enables NAT
- &prompt.root; ipf -Fa -f /etc/ipf.rules
+ Um IPFW beim Systemstart zu
+ aktivieren, fügen Sie folgende Zeile in
+ /etc/rc.conf ein:
- bedeutet, dass alle intern gespeicherten
- Tabellen mit Regeln gelöscht werden.
+ firewall_enable="YES"
- gibt die Datei an, aus der die neuen Regeln
- gelesen werden sollen.
+ Wenn Sie einen der von &os; zur Verfügung gestellten
+ Firewall-Profile benutzen möchten, fügen Sie eine weitere
+ Zeile hinzu, in der Sie das Profil bestimmen:
- Mit diesen beiden Optionen erhalten Sie die Möglichkeit,
- Änderungen an der Datei mit Ihrem Regelsatz vorzunehmen und
- gleich die Firewall mit den neuen Regeln zu bestücken, ohne
- den Rechner neu starten zu müssen. Da dieser Vorgang beliebig
- wiederholt werden kann, ist es ein sehr bequemer Weg, neue Regeln
- einzuarbeiten und zu testen.
-
- Um mehr über diese und weitere Optionen von &man.ipf.8;
- zu erfahren, konsultieren Sie bitte die Manpage.
-
- &man.ipf.8; erwartet, dass es sich bei der Datei mit dem Regelsatz
- um eine Standard-Textdatei handelt. Eine Datei, die ein Skript oder
- Variablen enthält, wird nicht verarbeitet.
-
- Es gibt allerdings doch einen Weg, IPF Regeln mit Hilfe von
- Skripten und Variablen zu erstellen. Weitere Informationen dazu
- finden Sie unter .
-
+ firewall_type="open"
-
- IPFSTAT
+ Folgende Profile stehen zur Verfügung:
- ipfstat
+
+
+ open: gestattet jeglichen
+ Datenverkehr.
+
-
- IPFILTER
+
+ client: schützt lediglich diesen
+ Rechner.
+
- statistics
-
+
+ simple: schützt das gesamte
+ Netzwerk.
+
- Das normale Verhalten von &man.ipfstat.8; ist, die Zusammenfassung
- der angefallenen Statistiken, die als Resultat der Anwendung von
- nutzerspezifischen Regeln auf ein- und ausgehende Pakete seit dem
- letzten Start der Firewall oder seit dem letzten Zurücksetzen
- der Zähler auf Null durch das Kommando
- ipf -Z angesammelt wurden, abzurufen und
- anzuzeigen.
+
+ closed: blockiert den gesamten
+ IP-Datenverkehr, mit Ausnahme des
+ Verkehrs über die Loopback-Schnittstelle.
+
- Für weiterführende Informationen schauen Sie bitte
- auf die Manpage von &man.ipfstat.8;!
+
+ workstation: schützt lediglich
+ diesen Rechner und verwendet zustandsorientierte
+ Regeln.
+
- Die Ausgabe von &man.ipfstat.8;, wenn keine Parameter
- übergeben wurden, sieht etwa so aus:
+
+ UNKNOWN: deaktiviert das Laden von
+ Firewallregeln.
+
- input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
-output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0
-input packets logged: blocked 99286 passed 0
-output packets logged: blocked 0 passed 0
-packets logged: input 0 output 0
-log failures: input 3898 output 0
-fragment state(in): kept 0 lost 0
-fragment state(out): kept 0 lost 0
-packet state(in): kept 169364 lost 0
-packet state(out): kept 431395 lost 0
-ICMP replies: 0 TCP RSTs sent: 0
-Result cache hits(in): 1215208 (out): 1098963
-IN Pullups succeeded: 2 failed: 0
-OUT Pullups succeeded: 0 failed: 0
-Fastroute successes: 0 failures: 0
-TCP cksum fails(in): 0 (out): 0
-Packet log flags set: (0)
+
+ filename:
+ absoluter Pfad zu einer Datei, in der die Firewallregeln
+ definiert sind.
+
+
- Wenn die Option für
- eingehend oder für
- ausgehend übergeben wird, liefert das Kommando
- eine entsprechende Liste von Filter-Regeln, die gerade installiert
- sind und vom Kernel verwendet werden.
+ Wenn Sie firewall_type auf
+ client oder simple
+ setzen, müssen Sie die voreingestellten Regeln in
+ /etc/rc.firewall anpassen, damit sie
+ der Konfiguration des Systems entsprechen.
- ipfstat -in zeigt alle aktive Regeln
- für eingehende Verbindungen zusammen mit ihren Nummern.
+ Beachten Sie, dass das Profil filename
+ verwendet wird, um ein benutzerdefiniertes Regelwerk zu
+ laden.
- ipfstat -on erledigt dasselbe für die
- ausgehenden Verbindungen.
+ Eine alternative Möglichkeit, um ein benutzerdefiniertes
+ Regelwerk zu laden, bietet die Variable
+ firewall_script. Setzen Sie die Variable
+ auf den absoluten Pfad eines
+ ausführbaren Skripts, welches die Befehle
+ für IPFW enthält. Die Beispiele in
+ diesem Abschnitt gehen davon aus, dass
+ firewall_script auf
+ /etc/ipfw.rules gesetzt ist.
- Die Ausgabe sieht in etwa folgendermaßen aus:
+ firewall_script="/etc/ipfw.rules"
- @1 pass out on xl0 from any to any
-@2 block out on dc0 from any to any
-@3 pass out quick on dc0 proto tcp/udp from any to any keep state
+ Die Protokollierung wird mit diesem Eintrag
+ aktiviert:
- ipfstat -ih zeigt die Tabelle der aktiven
- Regeln für eingehende Verbindungen zusammen mit der Anzahl,
- wie oft jeder einzelnen Regel entsprochen wurde.
+ firewall_logging="YES"
- ipfstat -oh zeigt das Gleiche für
- die ausgehenden Verbindungen.
+ Es existiert keine Variable für
+ /etc/rc.conf, um die Protokollierung zu
+ begrenzen. Um die Anzahl der Protokoll-Nachrichten pro
+ Verbindungsversuch zu begrenzen, legen Sie die Anzahl der
+ Einträge in /etc/sysctl.conf fest:
- Hier wird die Ausgabe so oder so ähnlich aussehen:
+ net.inet.ip.fw.verbose_limit=5
- 2451423 pass out on xl0 from any to any
-354727 block out on dc0 from any to any
-430918 pass out quick on dc0 proto tcp/udp from any to any keep state
+ Nachdem Sie die Änderungen gespeichert haben, können Sie
+ die Firewall starten. Um auch die Anzahl der
+ Protokoll-Nachrichten zu konfigurieren, setzen Sie mit
+ sysctl den gewünschten Wert:
- Einer der wichtigsten Funktionen von ipfstat
- wird über die Option bereitgestellt. Mit
- ihr wird eine Statustabelle vergleichbar der Prozess-Tabelle
- von &man.top.1; ausgegeben. Mit dieser Funktion erhalten Sie im
- Falle eines Angriffs die Möglichkeit, die angreifenden Pakete
- zu identifizieren, abzufangen und auszuwerten. Weitere Unteroptionen
- eröffnen, die IP-Adresse, den Port oder das Protokoll, geteilt
- nach Herkunft und Ziel, auszuwählen und dann in Echtzeit zu
- beobachten. Lesen Sie dazu bitte auch die Manpage von
- &man.ipfstat.8;.
+ &prompt.root; service firewall start
+&prompt.root; sysctl net.inet.ip.fw.verbose_limit=5
-
- IPMON
+
+ IPFW Regel-Syntax
- ipmon
+ Wenn ein Paket die Firewall betritt, also
+ von der Firewall geprüft und verarbeitet wird, wird die
+ erste Regel des Regelwerkes auf das Paket angewandt. Auf
+ diese Weise wird in aufsteigender Reihenfolge der Regelnummer
+ mit allen weiteren Regeln verfahren. Falls die
+ Selektionsparameter einer Regel auf ein Paket zutreffen, wird
+ das Aktionsfeld der Regel ausgeführt und die Prüfung
+ des Pakets beendet, nachfolgende Regeln werden also nicht
+ mehr geprüft. Diese Suchmethode wird als erster
+ Treffer gewinnt bezeichnet. Falls keine Regel auf
+ das betreffende Paket zutrifft, wird die obligatorische
+ IPFW-Rückfallregel mit der Nummer
+ 65535 angewendet und das Paket wird ohne Rückantwort
+ verworfen. Wenn das Paket jedoch einer Regel mit dem
+ Schlüsselwort count,
+ skipto oder tee
+ entspricht, wird die Prüfung des Pakets weiter
+ fortgeführt. Weitere Details darüber, wie diese
+ Schlüsselwörter die Regelverarbeitung beeinflussen, finden Sie
+ in &man.ipfw.8;.
- IPFILTER
-
- logging
-
-
- Damit der Befehl ipmon korrekt arbeiten kann,
- muss die Option IPFILTER_LOG in die
- Kernelkonfiguration eingearbeitet werden. Das Kommando selbst
- arbeitet in zwei verschiedenen Modi. Für den nativen Modus
- startet man ipmon auf der Kommandozeile ohne die
- Option .
-
- Der Hintergrundmodus (daemon mode) dient der
- Erstellung eines stetigen Systemprotokolls, so dass Einträge
- vergangener Ereignisse inspiziert werden können. So sollen &os;
- und IPFILTER entsprechend ihrer Konfiguration zusammen arbeiten.
- &os; kann mit einem eingebauten Mechanismus Systemprotokolle
- turnusmäßig abspeichern. Aus diesem Grund sollte man
- besser &man.syslogd.8; verwenden anstatt die Protokollinformationen
- in eine Datei zu schreiben, wie es als Standard vorgesehen ist. In
- der Standard-rc.conf-Datei (im Ordner
- /etc/defaults/) wird dem Eintrag
- ipmon_flags die Option
- übergeben:
-
- ipmon_flags="-Ds" # D = Als Da:mon starten
-# s = Protokollierung via syslog
-# v = Protokollierung von tcp window, ack, seq
-# n = Namen statt IP & port ausgeben
-
- Die Vorteile des Protokollierens liegen auf der Hand: Sie
- versetzen den Administrator in die Lage, nach einem Vorfall
- Informationen abzurufen, etwa welche Pakete aussortiert wurden,
- welche Adressen diese Pakete gesendet haben oder wohin sie gesendet
- werden sollten. Alles in allem erhält er ein sehr gutes Werkzeug
- zum Aufspüren von Angreifern.
-
- Jedoch, auch wenn die Protokollierung aktiviert ist, wird IPF
- keine einzige Regel zum Protokollieren von alleine entwerfen und
- umsetzen. Der Administrator der Firewall entscheidet, welche Regeln
- in seinem Regelsatz mitgeschrieben werden sollen und er muss
- dementsprechend das Schlüsselword log in
- dieser Regel angeben. Normalerweise werden nur Treffer auf abweisende
- Regeln protokolliert.
-
- Es ist üblich, als letzte Regel eine alles blockierende
- Regel mit dem Schlüsselwort log in den
- Regelsatz einzutragen. Dadurch erkennt man alle Pakete, die keiner
- Regel im Regelsatz entsprachen.
-
-
-
- IPMON Logging
-
- Syslogd verwendet seine eigene Methode
- zum Sortieren der gesammtelten Protokolldaten - spezielle Gruppierungen
- namens facility und level. IPMON
- verwendet im daemon-Modus als
- facility den Wert security. Die
- folgenden level können für eine genauere
- Trennung der Protokolldaten verwendet werden:
-
- LOG_INFO - Alle zu protokollierenden Pakete
-LOG_NOTICE - Protokollierte Pakete, die passieren durften
-LOG_WARNING - Protokollierte Pakete, die blockiert wurden
-LOG_ERR - Protokollierte Pakete, deren Headerdaten nicht komplett vorlagen
-
- Damit IPFILTER angewiesen werden kann, alle Protokolldaten in
- die Datei /var/log/ipfilter.log zu schreiben,
- muss diese erst erstellt werden. Folgendes Kommando
- übernimmt diese Aufgabe:
-
- &prompt.root; touch /var/log/ipfilter.log
-
- Die Funktionen von &man.syslogd.8; werden durch Definition in
- der Datei /etc/syslog.conf gesteuert. In dieser
- Datei kann sehr weitläfig eingestellt werden, wie
- syslog mit den Systemnachrichten umgehen
- soll, die ihm von Anwendungen wie IPF übergeben werden.
-
- Fügen Sie folgende Definition in die Datei
- /etc/syslog.conf ein, um die Protokollierung
- für IPF via syslog zu aktivieren:
-
- security.* /var/log/ipfilter.log
+ IPFW
+ Regel-Syntax
+
- security.* bedeutet, dass alle Nachrichten
- der Klasse security.* am angegebenen Ort (hier
- eine Datei) geschrieben werden sollen.
+ Bei der Erstellung der
+ IPFW-Regeln müssen die
+ Schlüsselwörter in der folgenden Reihenfolge geschrieben
+ werden. Einige Schlüsselwörter müssen zwingend angegeben
+ werden, während andere optional sind. Die Wörter in
+ Großbuchstaben repräsentieren Variablen und die Wörter in
+ Kleinbuchstaben müssen den Variablen vorangestellt
+ werden. Das Zeichen # wird benutzt, um
+ einen Kommentar einzuleiten und kann am Ende einer Regel oder
+ in einer eigenen Zeile stehen. Leerzeilen werden
+ ignoriert.
- Um Änderungen an der Datei
- /etc/syslog.conf zu aktivieren müssen Sie
- den Rechner neu starten, oder den Befehl
+ CMD RULE_NUMBER set SET_NUMBER ACTION log
+ LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT
+ OPTIONS
- &prompt.root; /etc/rc.d/syslogd reload
+ Dieser Abschnitt bietet einen Überblick über diese
+ Schlüsselwörter und deren Optionen. Es ist keine vollständige
+ Liste aller verfügbaren Optionen. Eine vollständige
+ Beschreibung der Regel-Syntax, die Sie verwenden können um
+ IPFW-Regeln zu erstellen, finden
+ Sie in &man.ipfw.8;.
- ausführen.
+
+
+ CMD
+
+ Jede Regel muss mit ipfw add
+ beginnen.
+
+
- Vergessen Sie nicht, /etc/newsyslog.conf
- anzupassen, damit die neuen Protokolldateien, die eben konfiguriert
- wurden, auch in den Rotationsturnus eingefügt werden!
-
+
+ RULE_NUMBER
+
+ Jede Regel gehört zu einer Nummer zwischen
+ 1 und 65534. Die
+ Nummer wird verwendet, um die Reihenfolge der
+ Regelverarbeitung zu kennzeichnen. Es ist möglich, dass
+ mehrere Regeln dieselbe Nummer haben. In diesem Fall
+ werden sie entsprechend der Reihenfolge angewendet, in
+ der sie aufgenommen wurden.
+
+
-
- Die Formatierung der Logdatei
+
+ SET_NUMBER
+
+ Jede Regel ist einer Set-Nummer
+ zwischen 0 und 31
+ zugeordnet. Sets können einzeln aktiviert oder
+ deaktiviert werden. Dies macht es möglich, eine Reihe
+ von Regeln schnell hinzuzufügen oder zu löschen. Wenn
+ SET_NUMBER nicht angegeben ist, wird
+ die Regel zu Set 0
+ hinzugefügt.
+
+
- Nachrichten, die durch ipmon erzeugt werden,
- bestehen aus durch Leerstellen getrennten Datenfeldern. Folgende
- Felder sind in allen Nachrichten enthalten:
+
+ ACTION
+
+ Eine Regel kann mit einer der folgenden Aktionen
+ verknüpft werden. Die festgelegte Aktion wird
+ ausgeführt, wenn das Paket den Selektionskriterien der
+ Regel entspricht.
-
-
- Das Datum der Paketerstellung.
-
-
-
- Die Uhrzeit der Paketerstellung in der Form
- HH:MM:SS.F, mit Stunden, Minuten, Sekunden
- und Sekundenbruchteilen, wobei letztere mehrere Stellen lang
- sein können.
-
-
-
- Der Name der Schnittstelle, die das Paket verarbeitet hat,
- bspw. dc0.
-
-
-
- Die Gruppe und die Nummer der angewandten Regel, bspw.
- @0:17.
-
-
-
- Die ausgeführte Aktion: p für
- passed (zugelassen), b für blockiert,
- S für short packet (unvollständiger
- Header), n für no match (gar keine Regel
- wurde berührt) und L für Log-Regel. Die Reihe, in der
- die Flags angezeigt werden ist: S, p, b, n, L. Ein groß
- geschriebenes P oder B bedeutet, dass das Paket aufgrund einer
- globalen Einstellung protokolliert wurde und nicht wegen einer
- einzelnen Regel.
-
-
-
- Die Adressen. Diese bestehen aus drei Feldern: Der
- Quelladresse mit Port (getrennt durch ein Komma), dem Symbol
- -> und der Zieladresse. Also bspw.
- 209.53.15.22,80 -> 198.64.221.18,1722.
-
-
-
- PR gefolgt vom Namen eines
- Netzwerk-Protokolls oder dessen Nummer. Bspw.
- PR tcp.
-
-
-
- len gefolgt von der Länge des Headers
- und der Gesamtlänge des Paketes, beispielsweise
- len 20 40.
-
-
+ allow | accept | pass |
+ permit: All diese Aktionen sind
+ gleichbedeutend und erlauben Pakete, die mit der Regel
+ übereinstimmen.
- Wenn es sich um ein TCP-Paket handelt, wird
- ein weiteres Feld, beginnend mit einem Querstrich und gefolgt von
- Buchstaben, die den gesetzten Flags entsprechen, angezeigt. Lesen
- Sie bitte die Manpage &man.ipmon.8; für eine Liste der Buchstaben
- und deren Bedeutungen.
-
- Falls das Paket ein ICMP-Paket ist, werden zwei Felder am Ende
- hinzugefügt - das erstere ist immer ICMP, das
- zweite enthält die ICMP-Nachricht und den Nachrichtentyp,
- getrennt durch einen Schrägstrich. ICMP 3/3
- steht beispielsweise für Port nicht
- erreichbar.
-
+ check-state: Diese Aktion
+ überprüft die Regel in der dynamischen Zustandstabelle.
+ Bei einer Übereinstimmung wird die mit der dynamischen
+ Regel verknüpfte Aktion ausgeführt, andernfalls wird mit
+ der Prüfung gegen die nächste Regel fortgefahren. Die
+ Regel check-state hat selbst kein
+ Selektionskriterium. Sollte keine
+ check-state-Regel im Regelwerk
+ vorhanden sein, wird die dynamische Zustandstabelle beim
+ ersten Vorkommen einer keep-state-
+ oder limit-Regel überprüft.
-
- Die Erstellung eines Regelsatzes mit Variablen
+ count: Aktualisiert die
+ Zähler für alle Pakete, die mit dieser Regel
+ übereinstimmen. Die Prüfung wird mit der nächsten Regel
+ fortgesetzt.
- Erfahrenere IPF Anwender erstellen sich eine Datei, die die
- Regeln enthält und gestalten diese als ein Skript, in dem
- Variablen verwendet werden. Der wichtigste Vorteil besteht darin,
- dass man lediglich den Wert der Variablen anpassen muss und diese,
- sobald das Skript gestartet wird, durch die entsprechenden Werte
- ersetzt und die Regeln entsprechend formuliert werden. In Skripten
- kann man so häufig verwendete Werte einfach als Variable in
- mehreren Regeln zuweisen. Am folgenden Beispiel soll das
- verdeutlicht werden.
-
- Die Syntax dieses Skriptes ist kompatibel mit den Shells
- &man.sh.1;, &man.csh.1; und &man.tcsh.1;.
-
- Variablen beginnen mit einem Dollar-Zeichen:
- $Variablenname. Im Beispiel unten steht
- $oif für die Variable, in der der Name
- der Schnittstelle abgelegt wird, über die der Verkehr nach
- außen erfolgt.
-
- In Variablenzuweisungen fehlt das beginnende $-Zeichen.
- Alleine der Name der Variable wird angegeben, gefolgt von einem
- Gleichheitszeichen, und dem Wert, der der Variablen zugewiesen werden
- soll. Dieser muss in doppelten Anführungszeichen
- ("") stehen. Also folgt eine Zuweisung dem Schema
- Variablenname = "Wert".
-
- ############# Start of IPF rules script ########################
-
-oif="dc0" # Name der Internet-Schnittstelle
-odns="192.0.2.11" # IP des DNS-Servers unseres ISPs
-myip="192.0.2.7" # die statische IP, die uns der ISP zugeteilt hat
-ks="keep state"
-fks="flags S keep state"
-
-# Sie haben die Wahl, aus diesem Skript eine eigene
-# /etc/ipf.rules erstellen zu lassen oder es einfach
-# direkt als Skript laufen zu lassen.
-#
-# Entfernen Sie dazu das eine Kommentarzeichen
-# und kommentieren Sie die andere Zeile aus!
-#
-# 1) Diese Zeile verwenden Sie zur Erstellung von /etc/ipf.rules
-#cat > /etc/ipf.rules << EOF
-#
-# 2) Diese Zeile, wenn Sie direkt mit dem Skript arbeiten wollen
-/sbin/ipf -Fa -f - << EOF
+ deny | drop: Diese Aktionen
+ sind gleichbedeutend und verwerfen Pakete, die mit
+ dieser Regel übereinstimmen.
+
+ Es stehen noch weitere Aktionen zur Verfügung.
+ Einzelheiten finden Sie in &man.ipfw.8;.
+
+
-# Erlaubnis ausgehenden Verkehrs an den Nameserver des ISPs
-pass out quick on $oif proto tcp from any to $odns port = 53 $fks
-pass out quick on $oif proto udp from any to $odns port = 53 $ks
-
-# Erlaubnis ausgehenden unsicheren www-Verkehrs
-pass out quick on $oif proto tcp from $myip to any port = 80 $fks
-
-# Erlaubnis ausgehenden sicheren www-Verkehrs https via TLS SSL
-pass out quick on $oif proto tcp from $myip to any port = 443 $fks
-EOF
-################## End of IPF rules script ########################
-
- Das ist schon alles. Die Regeln selbst sind im Beispiel nicht
- so wichtig - achten Sie auf die Anwendung der Variablenzuweisung
- am Anfang und die Verwendung der Variablen im Skript. Falls das
- obige Beispiel in einer Datei namens
- /etc/ipf.rules.script gespeichert wurde,
- können die Regeln mit folgenden Kommando neu geladen
- werden:
-
- &prompt.root; sh /etc/ipf.rules.script
-
- Es gibt ein Problem mit Regelsatz-Dateien, die Variablen
- verwenden: IPF kann mit Variablen nichts anfangen - und kann derartige
- Skripte nicht direkt einlesen.
+
+ LOG_AMOUNT
+
+ Erfüllt ein Paket die Selektionskriterien mit dem
+ Schlüsselwort log, wird dies von
+ &man.syslogd.8; mit der Annotation
+ SECURITY protokolliert. Dies erfolgt
+ allerdings nur, wenn die Anzahl der protokollierten
+ Pakete der betreffenden Regel die definierte
+ LOG_AMOUNT-Grenze nicht übersteigt.
+ Wenn LOG_AMOUNT nicht definiert ist,
+ wird die Grenze aus dem Wert von
+ net.inet.ip.fw.verbose_limit
+ benutzt. Ein Wert von 0 bedeutet
+ eine unbegrenzte Protokollierung. Wird eine definierte
+ Grenze erreicht, wird die Protokollierung für diese
+ Regel deaktiviert. Um die Protokollierung zu
+ reaktivieren, können Sie den Protokoll- oder Paketzähler
+ mit ipfw resetlog
+ zurücksetzen.
- Unser kleines Skript kann daher nur auf eine der beiden folgenden
- Weisen verwendet werden:
+
+ Die Protokollierung findet statt, nachdem alle
+ Selektionskriterien geprüft und bevor die endgültige
+ Aktion auf das Paket angewendet wird. Der
+ Administrator entscheidet, welche Regel protokolliert
+ werden soll.
+
+
+
-
-
- Entfernen Sie das Kommentarzeichen der Zeile, die mit
- cat beginnt. Kommentieren Sie die Zeile aus,
- die mit /sbin/ipf beginnt. Schreiben Sie die
- Zeile ipfilter_enable="YES" in die Datei
- /etc/rc.conf und rufen Sie dann das Skript
- auf, um /etc/ipf.rules zu erstellen oder
- zu erneuern.
-
-
-
- Deaktivieren Sie IPFILTER in den Systemstart-Skripten, indem
- Sie die Zeile ipfilter_enable="NO" in die
- Datei /etc/rc.conf eintragen (was auch der
- Standard-Einstellung entspricht).
-
- Fügen Sie ein Skript ähnlich dem folgenden in Ihr
- Verzeichnis /usr/local/etc/rc.d/. Es
- sinnvoll, dem Skript einen offensichtlichen Namen zu geben, wie
- etwa ipf.loadrules.sh. Die Endung
- .sh ist dabei verbindlich.
-
- #!/bin/sh
-sh /etc/ipf.rules.script
-
- Die Zugriffsrechte für die Datei, die das Skript
- enthält, müssen für den Eigentümer
- root auf Lesen, Schreiben und Ausführen
- gesetzt werden.
+
+ PROTO
+
+ Dieser optionale Wert wird verwendet, um einen
+ beliebigen Protokollnamen oder -nummer aus
+ /etc/protocols gegen das Paket zu
+ prüfen.
+
+
- &prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh
-
-
+
+ SRC
+
+ Nach dem Schlüsslwortfrom muss
+ die Quelladresse stehen, oder ein Schlüsselwort, das die
+ Quelladresse darstellt. Eine Adresse wird dargestellt
+ duch any, me (jede
+ Adresse dieses Systems), me6 (jede
+ IPv6-Adresse dieses Systems), oder
+ table gefolgt von der Nummer der
+ Tabelle, welche die Adressen enthält.
+ IP-Adressen können in
+ CIDR-Notation geschrieben werden.
+ Beispielsweise 1.2.3.4/25 oder
+ 1.2.3.4:255.255.255.128.
+
+
- Wenn nun Ihr System startet, werden Ihre IPF-Regeln geladen.
-
+
+ SRC_PORT
+
+ Optional kann ein Quellport über eine Nummer oder
+ einen Namen aus /etc/services
+ spezifiziert werden.
+
+
-
- IPF Regelsätze
+
+ DST
+
+ Nach dem Schlüsselwort to muss
+ die Zieladresse stehen, oder ein Schlüsselwort, das die
+ Zieladresse darstellt. Es können die gleichen
+ Schlüsselwörter und Adressen benutzt werden, die bereits
+ im SRC-Abschnitt beschrieben wurden.
+
+
- Ein Regelsatz ist eine Gruppe von IPF-Regeln, die anhand der
- Werte eines Netzwerkpaketes entscheiden, ob dieses Paket durchgelassen
- oder blockiert wird. Der Austausch von Paketen erfolgt immer
- zweiseitig in Form einer sogenannten Session. Der Regelsatz der
- Firewall verarbeitet sowohl die eingehenden Pakete aus dem
- öffentlichen Internet als auch die Pakete, die vom System als
- Antwort auf die Ersteren gesendet werden. Jeder Dienst, der via
- TCP/IP arbeitet, zum Beispiel
- telnet, www oder
- mail, ist vordefiniert durch sein Protokoll und
- seinen privilegierten Port, an dem er auf Anfragen wartet und
- reagieren kann. Pakete, die gezielt einen Dienst ansprechen sollen,
- werden von einem unprivilegierten Port des Senders an einen konkreten
- privilegierten Port des Zielsystems geschickt. Alle genannten
- Parameter (Ports, Adressen usw.) können als Auswahlkriterien zum
- erstellen von Regeln eingesetzt werden, die Dienste erlauben oder
- blockieren.
+
+ DST_PORT
+
+ Optional kann ein Zielport über eine Nummer oder
+ einen Namen aus /etc/services
+ spezifiziert werden.
+
+
-
- IPFILTER
+
+ OPTIONS
+
+ Nach der Quell- und Zieladresse können noch weitere
+ Optionen angegeben werden. Wie der Name bereits sagt,
+ sind OPTIONS optional. Häufig
+ verwendete Optionen sind in oder
+ out, mit denen die Richtug des
+ Pakets bestimmt wird, icmptypes
+ gefolgt vom Typ der ICMP-Nachricht,
+ sowie keep-state.
- rule processing order
-
+ Wenn ein Paket auf eine
+ keep-state-Regel zutrifft, wird
+ die Firewall eine dynamische Regel erstellen, die dem
+ bidirektionalen Datenverkehr zwischen den gleichen
+ Quell- und Zieladressen mit dem gleichen Protokoll
+ entspricht.
+
+ Dynamische Regeln sind für einen sogenannten
+ SYN-flood-Angriff
+ anfällig, bei dem eine riesige Anzahl an dynamischen
+ Regeln erzeugt wird. Verwenden Sie die Option
+ limit, um einen solchen Angriff
+ entgegenzuwirken. Diese Option begrenzt die Anzahl
+ der gleichzeitig möglichen Sitzungen. Es handelt sich
+ dabei um einen Zähler, der die Anzahl von dynamischen
+ Regeln in Kombination mit der Quelladresse verfolgt.
+ Übersteigt der Zähler den durch limit
+ definierten Wert, wird das Paket verworfen.
- IPF wurde ursprünglich mit einer Regel-Prozess-Logik
- geschrieben, die ausschließlich statusfreie Regeln zuließ
- und nach dem Prinzip die letzte Regel, die passt,
- entscheidet arbeitete. Mit der Zeit erhielt IPF eine
- Option sowie Option
- für die Anwendung von zustandsorientierten Regeln, was die
- Regel-Prozess-Logik signifikant modernisierte.
-
- Die Anweisungen in diesem Kapitel basieren auf der Verwendung
- von Regeln, die diese beiden neuen Optionen verarbeiten. Dies ist
- das Framework zur Entwicklung eines Firewallregelsatzes.
-
-
- Wenn Sie mit einer Firewall arbeiten, seien Sie
- sehr vorsichtig. Durch wenige Einstellungen
- können Sie sich aus Ihrem System
- aussperren. Wenn Sie auf der sicheren Seite
- sein wollen, führen Sie die Firewall-Konfiguration direkt am
- entsprechenden Gerät aus und nicht über eine
- Netzwerkverbindung wie bspw. ssh.
-
+ Es stehen noch viele weitere Optionen zur Verfügung.
+ &man.ipfw.8; enthält eine Beschreibung der einzelnen
+ Optionen.
+
+
+
- IPF Regel-Syntax
+ Beispiel für einen Regelsatz
-
- IPFILTER
+ Dieser Abschnitt die Erstellung eines Firewall-Skripts
+ namens /etc/ipfw.rules mit
+ zustandsorientierten (stateful
+ Regeln. Alle Regeln in diesem Beispiel verwenden die Optionen
+ in und out, um die
+ Richtung des Pakets zu verdeutlichen. Zusätzlich wird
+ via
+ interface-name benutzt, um die
+ Schnittstelle für das Paket zu prüfen.
- rule syntax
-
+
+ Bei den anfänglichen Tests mit dem Firewall-Regelsatz
+ sollten Sie vielleicht folgende Einstellung
+ vornehmen:
- Die Syntax zur Erstellung der Regeln, die hier vorgestellt wird,
- ist dahingehend vereinfacht worden, dass sie ausschliesslich auf
- den modernen Regelkontext, mit statusbehafteten Regeln und einer
- die erste Regel, die passt, gewinnt-Logik,
- zurückgreift. Um alles über die veraltete Syntax zu
- erfahren, lesen Sie bitte die Man-Page von &man.ipf.8;.
+ net.inet.ip.fw.default_to_accept="1"
- Ein #-Zeichen markiert den Beginn eines
- Kommentars. Es darf nach nach einer Regel stehen oder als erstes
- Zeichen einer Zeile. Leere Zeilen werden von der
- Regel-Prozess-Logik ignoriert.
+ Dies legt die Standardregel von &man.ipfw.8; etwas
+ großzügiger fest, als das voreingestellte
+ default deny ip from any to any. Dadurch
+ sinkt die Gefahr, sich nach einem Neustart des Systems
+ auszusperren.
+
- Regeln enthalten Schlüsselwörter. Diese
- Schlüsselwörter müssen in einer bestimmten Reihenfolge
- von links nach rechts in einer Zeile erscheinen. Als solche
- identifizierte Schlüsselwörter werden fett wiedergegeben.
- Einige Schlüsselwörter haben Unteroptionen, die wiederum
- selbst Schlüsselwörter sein und ebenfalls weiter
- Unteroptionen einschließen können.
+ Das Firewall-Skript beginnt mit einem Hinweis, dass es
+ sich um ein Bourne Shell-Skript handelt. Danach werden alle
+ vorhandenen Filterregeln gelöscht. Anschließend wird die
+ Variable cmd erstellt, sodass
+ ipfw add nicht jedes mal von Hand
+ eingegeben werden muss. Die Variable pif
+ repräsentiert die mit dem Internet verbundene
+ Schnittstelle.
-
-
+ #!/bin/sh
+# Flush out the list before we begin.
+ipfw -q -f flush
- ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO
- SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG
- STATEFUL
+# Set rules command prefix
+cmd="ipfw -q add"
+pif="dc0" # interface name of NIC attached to Internet
- ACTION = block | pass
+ Jetzt folgen die eigentlichen Filterregeln. Diese ersten
+ beiden Regeln erlauben den Datenverkehr aus dem internen
+ Netzwerk und über die Loopback-Schnittstelle:
- IN-OUT = in | out
+ # Change xl0 to LAN NIC interface name
+$cmd 00005 allow all from any to any via xl0
- OPTIONS = log | quick | on
- interface-name
+# No restrictions on Loopback Interface
+$cmd 00010 allow all from any to any via lo0
- SELECTION = proto value |
- source/destination IP | port = number | flags flag-value
+ Die nächste Regel erlaubt Pakete, für die ein Eintrag
+ in der dynamischen Zustandstabelle existiert:
- PROTO = tcp/udp | udp | tcp |
- icmp
+ $cmd 00101 check-state
- SRC_ADD,DST_ADDR = all | from
- object to object
+ Die nächsten Regeln definieren, welche internen Rechner
+ Verbindungen zu anderen Rechnern im Internet aufbauen dürfen.
+ Hier werden wieder zustandsorientierte Regeln
+ verwendet:
- OBJECT = IP address | any
+ # Allow access to public DNS
+# Replace x.x.x.x with the IP address of a public DNS server
+# and repeat for each DNS server in /etc/resolv.conf
+$cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
+$cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state
- PORT_NUM = port number
+# Allow access to ISP's DHCP server for cable/DSL configurations.
+# Use the first rule and check log for IP address.
+# Then, uncomment the second rule, input the IP address, and delete the first rule
+$cmd 00120 allow log udp from any to any 67 out via $pif keep-state
+#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state
- TCP_FLAG = S
+# Allow outbound HTTP and HTTPS connections
+$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
+$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state
- STATEFUL = keep state
+# Allow outbound email connections
+$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
+$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state
-
- ACTION
+# Allow outbound ping
+$cmd 00250 allow icmp from any to any out via $pif keep-state
- Die ACTION bestimmt, was mit dem Paket passieren
- soll, wenn der Rest der Regel zutrifft. Dieser Teil muss
- für jede Regel angegeben werden.
-
- Das Schlüsselwort block gibt an, dass
- das Paket verfallen soll, wenn die Auswahlparameter zutreffen.
-
- Das Schlüsselwort pass gibt an, dass
- das Paket durch die Firewall durchgelassen werden soll, wenn die
- Auswahlparameter zutreffen.
-
+# Allow outbound NTP
+$cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state
-
- IN-OUT
+# Allow outbound SSH
+$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
- Ebenfalls verbindlich ist die Angabe, welchen Teil der
- Verbindung, Ein- oder Ausgang, die Regel beeinflussen soll. Das
- nächste Schlüsselwort muss daher entweder
- in, für eingehend, oder
- out, für ausgehend, lauten - oder die Regel
- wird aufgrund eines Syntaxfehlers nicht umgesetzt.
-
- in bedeutet, dass diese Regel auf eingehende
- Pakete angewendet wird, die gerade an der dem öffentlichen
- Internet zugewandten Schnittstelle empfangen wurden.
-
- out bedeutet, das diese Regel auf ausgehende
- Pakete angewendet wird, also Pakete die gerade gesendet werden und
- deren Zieladresse im öffentlichen Internet liegt.
-
+# deny and log all other outbound connections
+$cmd 00299 deny log all from any to any out via $pif
-
- OPTIONS
-
-
- Die Optionen müssen in der hier aufgeführten
- Reihenfolge verwendet werden.
-
-
- log bestimmt, dass die Kopfdaten des Paketes
- an die Systemschnittstelle &man.ipl.4; geschrieben werden sollen.
- Genaueres dazu weiter unten im Abschnitt LOGGING.
-
- quick bestimmt, dass,
- wenn die Auswahlkriterien der Regel auf das
- Paket zutreffen, keine weiteren Regeln ausgewertet werden. So
- vermeidet man das Abarbeiten des gesamten Regelsatzes. Diese Option
- ist eine verbindliche Vorraussetzung der modernen
- Regel-Prozess-Logik.
-
- on bestimmt den Namen der Schnittstelle,
- der als Auswahlkriterium hinzugefügt werden soll. Die Namen
- aller verfügbaren Schnittstellen werden durch den Befehl
- &man.ifconfig.8; angezeigt. wenn man diese Option verwendet,
- passt die Regeln nur auf Pakete, die durch diese Schnittstelle
- empfangen (in) oder gesendet
- (out) wurden. Für die modernisierte
- Regel-Prozess-Logik ist die Verwendung dieser Option
- verbindlich.
-
- Wenn ein Paket protokolliert wird, werden die Kopfdaten in
- die Pseudo-Schnittstelle &man.ipl.4; geschrieben. Folgende Parameter
- können zusätzlich übergeben werden, müssen dazu
- aber direkt nach dem Schlüsselwort log und in
- gleicher Reihenfolge stehen:
-
- body bestimmt, dass die ersten 128 Bytes des
- Paketinhaltes zusätzlich zu den Kopfdaten protokolliert
- werden.
-
- first trifft nur zu, wenn das
- Schlüsselwort log zusammen mit
- keep-state verwendet wird. Es bestimmt, dass nur
- das auslösende Paket protokolliert wird und nicht jedes weitere
- Paket, dass von der gespeicherten Status-Regel betroffen ist.
-
+ Die folgenden Regeln steuern die Verbindungen von
+ Rechern aus dem Internet ins interne Netzwerk. Zuerst werden
+ Pakete verworfen, die typischerweise im Zusammenhang mit
+ Angriffen stehen. Danach werden bestimmte Arten von
+ Verbindungen erlaubt. Alle Dienste aus dem öffentlichen
+ Internet beinhalten die Option limit, um
+ Flooding zu unterbinden.
-
- SELECTION
+ # Deny all inbound traffic from non-routable reserved address spaces
+$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
+$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
+$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
+$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback
+$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback
+$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
+$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
+$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect
+$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
- Die Schlüsselwörter, die in diesem Abschnitt
- vorgestellt werden, dienen zur Beschreibung von Attributen, anhand
- derer geprüft und entschieden wird, ob eine Regel zutrifft
- oder nicht. Es gibt ein Schlüsselwort, und das hat mehrere
- Optionen, von denen eine ausgewählt werden muss. Die
- folgenden allgemeinen Attribute können beliebig zum Erstellen
- einer Regel verwendet werden, allerdings nur in der vorgestellten
- Reihenfolge:
-
+# Deny public pings$
+$cmd 00310 deny icmp from any to any in via $pif$
+$
+# Deny ident$
+$cmd 00315 deny tcp from any to any 113 in via $pif$
+$
+# Deny all Netbios services.$
+$cmd 00320 deny tcp from any to any 137 in via $pif$
+$cmd 00321 deny tcp from any to any 138 in via $pif$
+$cmd 00322 deny tcp from any to any 139 in via $pif$
+$cmd 00323 deny tcp from any to any 81 in via $pif$
-
- PROTO
+# Deny fragments
+$cmd 00330 deny all from any to any frag in via $pif
- proto ist das Schlüsselwort für
- das im Paket angewendete Protokoll. Als Option ein Protokoll aus
- Auswahlkriterium übergeben. Diese Option ist verbindlich, wenn
- man die moderne Regel-Prozess-Logik verwendet.
-
- tcp/udp | udp | tcp | icmp oder irgendein
- Protokollname, der in der Datei /etc/protocols
- zu finden ist, kann übergeben werden. Außerdem kann das
- Schlüsselwort tcp/udp verwendet werden, wenn
- sowohl TCP als auch UDP von der
- Regel betroffen sein sollen. Dieses Schlüsselwort wurde
- eingeführt, um Duplikate sonst identischer Regeln zu
- vermeiden.
-
+# Deny ACK packets that did not match the dynamic rule table
+$cmd 00332 deny tcp from any to any established in via $pif
-
- SRC_ADDR/DST_ADDR
+# Allow traffic from ISP's DHCP server.
+# Replace x.x.x.x with the same IP address used in rule 00120.
+#$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
- Das Schlüsselwort all ist ein Synonym
- für from any to any ohne weitere
- Auswahlkriterien.
-
- from src to dst: Die Schlüsselwörter
- from und to dienen zur Angabe
- von Quelle und Ziel in Form von IP-Adressen oder -Bereichen.
- Innerhalb einer Regel muss immer beides angegeben werden.
- Statt einer Adresse kann auch das Schlüsselwort
- any übergeben werden, das für jede
- beliebige IP-Adresse steht. Zum Beispiel:
- from any to any oder
- from 0.0.0.0/0 to any oder
- from any to 0.0.0.0/0 oder
- from 0.0.0.0 to any oder
- from any to 0.0.0.0 bedeuten alle das
- Gleiche.
-
- IP-Bereiche können nur in der CIDR-Notation angegeben
- werden. Der Port net-mgmt/ipcalc
- hilft Ihnen bei der Berechnung der richtigen Angaben.
- Weiterführende Informationen zu CIDR finden Sie auf der Webseite
- von ipcalc.
-
+# Allow HTTP connections to internal web server
+$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
-
- PORT
+# Allow inbound SSH connections
+$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
- Wenn ein Port als Auswahlkriterium übergeben wurde, bei
- Quelle und/oder Ziel, wird er nur bei TCP und
- UDP Paketen verwendet. Angegeben werden kann
- entweder die Portnummer oder der Dienstname aus
- /etc/services. Die Verwendung der
- Portoption mit dem to-Objekt ist verbindlich
- für die Verwendung der modernisierten Regel-Prozess-Logik.
- Ein Beispiel für die Filterung Paketen von allen Quell-IPs mit
- beliebiger Portnummer auf beliebige Ziel-IPs mit der Portnummer 80
- (dem www-Port):
- from any to any port = 80.
-
-
-
- Einfache Portvergleiche können auf verschiedenen Wegen
- erfolgen. Mehrere Vergleichsoperatoren stehen dafür zur
- Verfügung. Genauso können Bereiche angegeben
- werden.
-
- port "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq"
- | "ne" | "lt" | "gt" | "le" | "ge".
-
- Um einen Bereich anzugeben: port "<>" | "><"
-
-
- Genau wie die Trefferspezifikation für Quelle und Ziel
- sind auch die beiden folgenden Parameter obligatorisch bei der
- Verwendung der modernen Regel-Prozess-Logik.
-
-
+# Reject and log all other incoming connections
+$cmd 00499 deny log all from any to any in via $pif
-
- TCP_FLAG
+ Die letzte Regel protokolliert alle Pakete, die mit
+ keiner Regel im Regelsatz übereinstimmen:
- Flags spielen nur beim Filtern von TCP eine
- Rolle. Die Buchstaben entsprechen jeweils einem möglichen
- Flag, dass in den Kopfdaten der TCP-Pakete
- geprueft werden soll.
-
- Die moderne Regel-Prozess-Logik verwendet den Parameter
- flags S um eine Anfrage zum Start einer
- TCP-Session zu identifizieren.
-
+ # Everything else is denied and logged
+$cmd 00999 deny log all from any to any
+
-
- STATEFUL
+
+
+ NAT Konfiguration
- keep state zeigt bei einer Passage-Regel an,
- dass für alle Pakete, die die Selektion erfolgreich durchlaufen,
- Stateful Filtering eingerichtet werden
- soll.
-
-
- Diese Option ist obligatorisch für die Verwendung der
- modernen Prozess-Regel-Logik.
-
-
-
-
-
- Stateful Filtering
+
+
+
+ Chern
+ Lee
+
+ Beigetragen von
+
+
+
- IPFILTER
-
- stateful filtering
+ NAT
+ und IPFW
-
+ &os;s integrierter NAT-Daemon,
+ &man.natd.8;, arbeitet in Verbindung mit
+ IPFW, um
+ Network Address Translation
+ bereitzustellen. NAT wird verwendet, um
+ mehreren internen Rechnern, über eine einzige
+ IP-Adresse, eine gemeinsame Verbindung zum
+ Internet zu ermöglichen.
- Stateful filtering treats traffic as a bi-directional
- exchange of packets comprising a session conversation. When
- activated, keep-state dynamically generates internal rules for
- each anticipated packet being exchanged during the
- bi-directional session conversation. It has sufficient matching
- capabilities to determine if the session conversation between the
- originating sender and the destination are following the valid
- procedure of bi-directional packet exchange. Any packets that
- do not properly fit the session conversation template are
- automatically rejected as impostors.
-
- Keep state will also allow ICMP packets related to a
- TCP or UDP session through. So if you get
- ICMP type 3 code 4 in response to some web surfing allowed out
- by a keep state rule, they will be automatically allowed in.
- Any packet that IPF can be certain is part of an active
- session, even if it is a different protocol, will be let
- in.
-
- What happens is:
-
- Packets destined to go out through the interface connected to the
- public Internet are first checked against the dynamic state
- table. If the packet matches the next expected packet
- comprising an active session conversation, then it exits the
- firewall and the state of the session conversation flow is
- updated in the dynamic state table. Packets that do not belong to
- an already active session, are simply checked against the outbound
- ruleset.
-
- Packets coming in from the interface connected to the public
- Internet are first checked against the dynamic state table. If
- the packet matches the next expected packet comprising an
- active session conversation, then it exits the firewall and
- the state of the session conversation flow is updated in the
- dynamic state table. Packets that do not belong to an already active
- session, are simply checked against the inbound ruleset.
-
- When the conversation completes it is removed from the
- dynamic state table.
-
- Stateful filtering allows you to focus on blocking/passing
- new sessions. If the new session is passed, all its subsequent
- packets will be allowed through automatically and any impostors
- automatically rejected. If a new session is blocked, none of
- its subsequent packets will be allowed through. Stateful
- filtering has technically advanced matching abilities
- capable of defending against the flood of different attack
- methods currently employed by attackers.
-
+ Um dies zu tun, muss der mit dem Internet verbundene
+ &os;-Rechner als Gateway eingerichtet sein. Das System muss
+ über zwei Netzwerkschnittstellen verfügen, wobei eine
+ Schnittstelle mit dem Internet verbunden ist und die andere
+ mit dem internen Netzwerk. Jeder Rechner im internen Netzwerk
+ sollte eine RFC
+ 1918 konforme Adresse zugewiesen bekommen. Zudem
+ muss das Standard-Gateway der Rechner auf die interne
+ IP-Adresse des &man.natd.8;-Systems
+ gesetzt werden.
-
-
+ Es ist noch ein wenig Konfiguration nötig, um die
+ NAT-Funktion von
+ IPFW zu aktivieren. Wenn das
+ System einen angepassten Kernel hat, muss die
+ Kernelkonfigurationsdatei die Zeile
+ option IPDIVERT sowie weitere
+ IPFIREWALL-Optionen, die in beschrieben sind,
+ enthalten.
- Inclusive Ruleset Example
+ Um die NAT-Unterstützung beim Booten
+ zu aktivieren, müssen folgende Einträge in
+ /etc/rc.conf vorhanden sein:
- The following ruleset is an example of how to code a very
- secure inclusive type of firewall. An inclusive firewall only
- allows services matching pass rules through, and blocks all
- others by default. Firewalls intended to protect other machines,
- also called network firewalls, should have at least
- two interfaces, which are generally configured to trust one side
- (the LAN) and not the other (the public Internet). Alternatively,
- a firewall might be configured to protect only the system it is
- running on—this is called a
- host based firewall, and is particularly appropriate
- for servers on an untrusted network.
-
- All &unix; flavored systems including &os; are designed to
- use interface lo0 and IP address
- 127.0.0.1 for internal
- communication within the operating system. The firewall rules
- must contain rules to allow free unmolested movement of these
- special internally used packets.
-
- The interface which faces the public Internet is the one
- to place the rules that authorize and control access of the outbound
- and inbound connections. This can be your user PPP
- tun0 interface or your NIC that is
- connected to your DSL or cable modem.
-
- In cases where one or more NICs are cabled to private network
- segments, those interfaces may require rules to allow packets
- originating from those LAN interfaces transit to each other and/or
- to the outside (Internet).
-
- The rules should be organized into three major
- sections: first trusted interfaces, then the public
- interface outbound, and last the public untrusted interface inbound.
-
- The rules in each of the public interface sections should
- have the most frequently matched rules placed before less
- commonly matched rules, with the last rule in the section
- blocking and logging all packets on that interface and
- direction.
-
- The Outbound section in the following ruleset only
- contains pass rules which contain selection values that
- uniquely identify the service that is authorized for public
- Internet access. All the rules have the quick, on,
- proto, port, and keep state options set. The proto
- tcp rules have the flag option included to identify the
- session start request as the triggering packet to activate the
- stateful facility.
-
- The Inbound section has all the blocking of undesirable
- packets first, for two different reasons. The first is that
- malicious packets may be partial matches for legitimate traffic.
- These packets have to be discarded rather than allowed in, based on
- their partial matches against allow rules.
- The second reason is that known and uninteresting rejects may be
- blocked silently, rather than being caught and logged by the last
- rules in the section. The final rule in each section, blocks and
- logs all packets and can be used to create the legal evidence needed
- to prosecute the people who are attacking your system.
-
- Another thing that should be taken care of, is to ensure there is no
- response returned for any of the undesirable traffic. Invalid
- packets should just get dropped and vanish. This way the attacker
- has no knowledge if his packets have reached your system. The
- less the attackers can learn about your system, the more
- time they must invest before actually doing something bad.
- Rules that include a log first option, will only
- log the event the first time they are triggered. This option is
- included in the sample nmap OS fingerprint rule.
- The security/nmap utility is
- commonly used by attackers who attempt to identify the operating
- system of your server.
-
- Any time there are logged messages on a rule with
- the log first option, an ipfstat -hio
- command should be executed to evaluate how many times the rule has
- actually matched. Large number of matches usually indicate that the
- system is being flooded (i.e.: under attack).
-
- The /etc/services file may be used to
- lookup unknown port numbers. Alternatively,
- visit http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers
- and do a port number lookup to find the purpose of a particular
- port number.
-
- Check out this link for port numbers used by Trojans http://www.sans.org/security-resources/idfaq/oddports.php.
-
- The following ruleset creates a complete and very secure
- inclusive type of firewall ruleset that has been
- tested on production systems. It can be easily modified for your
- own system. Just comment out any pass rules for
- services that should not be authorized.
-
- To avoid logging unwanted messages,
- just add a block rule in the inbound section.
-
- The dc0 interface name has to be changed
- in every rule to the real interface name of the NIC
- card that connects your system to the public Internet. For
- user PPP it would be tun0.
-
- Add the following statements to
- /etc/ipf.rules:
-
- #################################################################
-# No restrictions on Inside LAN Interface for private network
-# Not needed unless you have LAN
-#################################################################
+ gateway_enable="YES" # enables the gateway
+natd_enable="YES" # enables NAT
+natd_interface="rl0" # specify interface name of NIC attached to Internet
+natd_flags="-dynamic -m" # -m = preserve port numbers; additional options are listed in &man.natd.8;
-#pass out quick on xl0 all
-#pass in quick on xl0 all
+
+ Es ist auch möglich eine Konfigurationsdatei zu
+ verwenden, welche die Optionen enthält, die an
+ &man.natd.8; übergeben werden:
-#################################################################
-# No restrictions on Loopback Interface
-#################################################################
-pass in quick on lo0 all
-pass out quick on lo0 all
+ natd_flags="-f /etc/natd.conf"
-#################################################################
-# Interface facing Public Internet (Outbound Section)
-# Match session start requests originating from behind the
-# firewall on the private network
-# or from this gateway server destined for the public Internet.
-#################################################################
-
-# Allow out access to my ISP's Domain name server.
-# xxx must be the IP address of your ISP's DNS.
-# Dup these lines if your ISP has more than one DNS server
-# Get the IP addresses from /etc/resolv.conf file
-pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state
-pass out quick on dc0 proto udp from any to xxx port = 53 keep state
+ Die angegebene Datei muss die Konfigurationsoptionen
+ enthalten, eine Option pro Zeile. Zum Beispiel:
-# Allow out access to my ISP's DHCP server for cable or DSL networks.
-# This rule is not needed for 'user ppp' type connection to the
-# public Internet, so you can delete this whole group.
-# Use the following rule and check log for IP address.
-# Then put IP address in commented out rule & delete first rule
-pass out log quick on dc0 proto udp from any to any port = 67 keep state
-#pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state
+ redirect_port tcp 192.168.0.2:6667 6667
+redirect_port tcp 192.168.0.3:80 80
+ Weitere Informationen zu dieser Konfigurationsdatei
+ finden Sie in &man.natd.8;.
+
-# Allow out non-secure standard www function
-pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state
+ Als nächstes werden die NAT-Regeln
+ hinzugefügt. Wenn die Regeln zustandsorientiert sind, ist die
+ Platzierung der NAT-Regeln sehr wichtig und
+ die skipto-Aktion wird verwendet. Dies
+ erfordert, dass jede Regel über eine eindeutige Nummer
+ verfügt, um eindeutige Sprungziele zu erhalten.
-# Allow out secure www function https over TLS SSL
-pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state
+ Das folgende Beispiel baut auf dem im vorherigen Abschnitt
+ gezeigten Firewall-Relgelsatz auf. Es werden einige neue
+ Einträge hinzugefügt und bestehende Regeln modifiziert, um
+ NAT zu konfigurieren. Zunächst werden
+ einige Variablen hinzugefügt, darunter Regelnummern, die
+ keep-state-Option und eine Liste mit
+ TCP-Ports um die Anzahl der Regeln zu
+ reduzieren:
-# Allow out send & get email function
-pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state
-pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state
+ #!/bin/sh
+ipfw -q -f flush
+cmd="ipfw -q add"
+skip="skipto 500"
+pif=dc0
+ks="keep-state"
+good_tcpo="22,25,37,53,80,443,110"
-# Allow out Time
-pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state
+ Die NAT-Regel für eingehende Pakete
+ wird nach den beiden Regeln, die das
+ interne Netzwerk und die Loopback-Schnittstelle erlauben und
+ vor der
+ check-state-Regel eingefügt. Es ist
+ wichtig, dass die Nummer der NAT-Regel
+ (in diesem Beispiel 100) höher ist, als
+ die beiden vorherigen Regeln und niedriger, als die
+ check-state-Regel:
-# Allow out nntp news
-pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state
+ $cmd 005 allow all from any to any via xl0 # exclude LAN traffic
+$cmd 010 allow all from any to any via lo0 # exclude loopback traffic
+$cmd 100 divert natd ip from any to any in via $pif # NAT any inbound packets
+# Allow the packet through if it has an existing entry in the dynamic rules table
+$cmd 101 check-state
-# Allow out gateway & LAN users' non-secure FTP ( both passive & active modes)
-# This function uses the IPNAT built in FTP proxy function coded in
-# the nat rules file to make this single rule function correctly.
-# If you want to use the pkg_add command to install application packages
-# on your gateway system you need this rule.
-pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state
+ Die Regeln für den ausgehenden Verkehr werden ebenfalls
+ modifiziert, um Aktionen mit der
+ $skipto-Variable zu erlauben und
+ anzuzeigen, dass die Prüfung mit der Regel
+ 500 fortgesetzt wird. Die sieben Regeln
+ für TCP wurden durch die Regel
+ 125 ersetzt, da die sieben erlaubten
+ ausgehenden Ports in der Variable
+ $good_tcp0 enthalten sind.
-# Allow out ssh/sftp/scp (telnet/rlogin/FTP replacements)
-# This function is using SSH (secure shell)
-pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state
+ # Authorized outbound packets
+$cmd 120 $skip udp from any to x.x.x.x 53 out via $pif $ks
+$cmd 121 $skip udp from any to x.x.x.x 67 out via $pif $ks
+$cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
+$cmd 130 $skip icmp from any to any out via $pif $ks
-# Allow out insecure Telnet
-pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state
+ Die eingehenden Regeln bleiben unverändert, mit Ausnahme
+ der letzten Regel, in der das
+ via $pif entfert wird, um ein- und
+ ausgehende Pakete prüfen zu können. Nach der letzten Regel
+ für ausgehende Pakete muss die NAT-Regel
+ folgen. Die Regel muss eine höhere Nummer als die letzte
+ Regel haben und die Nummer muss über die
+ skipto-Aktion referenziert werden. In
+ diesem Regelsatz leitet die Regel mit der Nummer
+ 500 alle ausgehenden Pakete zur
+ Weiterverarbeitung an &man.natd.8; weiter. Die darauf
+ folgende Regel lässt alle von NAT
+ verarbeiteten Pakete passieren.
-# Allow out FreeBSD CVSup
-pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state
+ $cmd 499 deny log all from any to any
+$cmd 500 divert natd ip from any to any out via $pif # skipto location for outbound stateful rules
+$cmd 510 allow ip from any to any
-# Allow out ping to public Internet
-pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state
+ In diesem Beispiel steuern die Regeln
+ 100, 101,
+ 125, 500 und
+ 510 die Adressübersetzung der ein- und
+ ausgehende Pakete, so dass immer die private
+ LAN IP-Adresse in der
+ dynamische Zustandstabelle registriert werden.
-# Allow out whois from LAN to public Internet
-pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state
+ Nehmen wir beispielsweise einen Web-Browser, der neue
+ HTTP-Sitzungen über Port 80 aufbaut. Wenn
+ nun das erste ausgehende Paket von der Firewall geprüft wird,
+ trifft es nicht auf Regel 100 zu, da das
+ Paket nach außen geleitet wird und nicht nach innen. Das
+ Paket trifft auch nicht auf Regel 101 zu,
+ da es das erste ist und somit noch nicht in der dynamischen
+ Zustandstabelle enthalten ist. Das Paket entspricht
+ schließlich Regel 125, da es ausgehend auf
+ einem erlaubten Port gesendet wird und von einer
+ IP-Adresse aus dem internen
+ LAN stammt. Für Pakete, die auf diese
+ Regel zutreffen, werden zwei Aktionen ausgeführt. Zuerst
+ wird durch die Aktion keep-state ein
+ dynamischer Eintrag in der Statustabelle erstellt und die
+ angegebene Aktion skipto 500 ausgeführt.
+ Als nächstes durchläuft das Paket NAT und
+ wird dann an das Internet gesendet. Nachdem dieses Paket am
+ Webserver angekommen ist, wird dort eine Antwort erzeugt und
+ zurückgeschickt. Dieses Paket wird wieder von oben nach unten
+ durch das Regelwerk geprüft. Dieses Mal trifft Regel
+ 100 auf das Paket zu und die Zieladresse
+ wird auf die zugehörige (lokale)
+ LAN-Adresse abgebildet. Danach wird das
+ Paket von der Regel check-state
+ verarbeitet. Die Zustandstabelle erkennt, dass eine
+ zugehörige aktive Sitzung vorliegt und das Paket wird
+ freigegeben und in das LAN geleitet.
-# Block and log only the first occurrence of everything
-# else that's trying to get out.
-# This rule implements the default block
-block out log first quick on dc0 all
-
-#################################################################
-# Interface facing Public Internet (Inbound Section)
-# Match packets originating from the public Internet
-# destined for this gateway server or the private network.
-#################################################################
+ Für den eingehenden Datenverkehr muss der Regelsatz
+ unerwünschte Pakete blockieren und Pakete für autorisierte
+ Dienste durchlassen. Ein Paket, das mit einer Regel für den
+ eingehenden Datenverkehr übereinstimmt, wird in der
+ dynamischen Zustandstabelle eingetragen und dann an das
+ LAN freigegeben. Das Antwortpaket wird
+ von der Regel check-state als Paket einer
+ aktiven Sitzung erkannt. Das Paket wird dann von Regel
+ 500 per NAT
+ verarbeitet, bevor es über die externe Schnittstelle versendet
+ wird.
-# Block all inbound traffic from non-routable or reserved address spaces
-block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP
-block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP
-block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP
-block in quick on dc0 from 127.0.0.0/8 to any #loopback
-block in quick on dc0 from 0.0.0.0/8 to any #loopback
-block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config
-block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs
-block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect
-block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast
-
-##### Block a bunch of different nasty things. ############
-# That I do not want to see in the log
-
-# Block frags
-block in quick on dc0 all with frags
-
-# Block short tcp packets
-block in quick on dc0 proto tcp all with short
-
-# block source routed packets
-block in quick on dc0 all with opt lsrr
-block in quick on dc0 all with opt ssrr
-
-# Block nmap OS fingerprint attempts
-# Log first occurrence of these so I can get their IP address
-block in log first quick on dc0 proto tcp from any to any flags FUP
-
-# Block anything with special options
-block in quick on dc0 all with ipopts
-
-# Block public pings
-block in quick on dc0 proto icmp all icmp-type 8
-
-# Block ident
-block in quick on dc0 proto tcp from any to any port = 113
-
-# Block all Netbios service. 137=name, 138=datagram, 139=session
-# Netbios is MS/Windows sharing services.
-# Block MS/Windows hosts2 name server requests 81
-block in log first quick on dc0 proto tcp/udp from any to any port = 137
-block in log first quick on dc0 proto tcp/udp from any to any port = 138
-block in log first quick on dc0 proto tcp/udp from any to any port = 139
-block in log first quick on dc0 proto tcp/udp from any to any port = 81
-
-# Allow traffic in from ISP's DHCP server. This rule must contain
-# the IP address of your ISP's DHCP server as it is the only
-# authorized source to send this packet type. Only necessary for
-# cable or DSL configurations. This rule is not needed for
-# 'user ppp' type connection to the public Internet.
-# This is the same IP address you captured and
-# used in the outbound section.
-pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state
+
+ Weiterleitung von Ports
-# Allow in standard www function because I have apache server
-pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state
+ Der Nachteil von &man.natd.8; ist, dass die Rechner im
+ LAN nicht aus dem Internet zugänglich
+ sind. Diese Rechner können zwar ausgehende Verbindungen
+ zur Außenwelt aufbauen, jedoch keine eingehenden
+ Verbindungen empfangen. Dies stellt ein Problem dar, wenn
+ Sie auf einem Rechner im LAN Dienste
+ anbieten möchten, die aus dem Internet erreichbar sein
+ sollen. In diesem Fall können Sie die Ports, welche über
+ das Internet erreichbar sein sollen, über die
+ &man.natd.8;-Maschine an den Rechner im
+ LAN weiterleiten.
-# Allow in non-secure Telnet session from public Internet
-# labeled non-secure because ID/PW passed over public Internet as clear text.
-# Delete this sample group if you do not have telnet server enabled.
-#pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state
-
-# Allow in secure FTP, Telnet, and SCP from public Internet
-# This function is using SSH (secure shell)
-pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state
-
-# Block and log only first occurrence of all remaining traffic
-# coming into the firewall. The logging of only the first
-# occurrence avoids filling up disk with Denial of Service logs.
-# This rule implements the default block.
-block in log first quick on dc0 all
-################### End of rules file #####################################
-
+ Angenommen es gibt einen IRC-Server
+ auf Rechner A und einen Webserver
+ auf Rechner B. Damit dies
+ funktioniert, müssen die Verbindungen auf den Ports 6667
+ (IRC) und 80 (HTTP)
+ an die jeweiligen Rechner weitergeleitet werden.
-
- NAT
+ Die Syntax für
+ lautet:
- NAT
+ -redirect_port proto targetIP:targetPORT[-targetPORT]
+ [aliasIP:]aliasPORT[-aliasPORT]
+ [remoteIP[:remotePORT[-remotePORT]]]
-
- IP masquerading
+ Für das obige Beispiel sollten die Argumente wie folgt
+ aussehen:
- NAT
-
+ -redirect_port tcp 192.168.0.2:6667 6667
+ -redirect_port tcp 192.168.0.3:80 80
-
- network address translation
+ Damit werden die entsprechenden
+ TCP-Ports an die Rechner im
+ LAN weitergeleitet.
- NAT
-
+ Portbereiche können über
+ festgelegt werden. Zum Beispiel würde
+ tcp 192.168.0.2:2000-3000
+ 2000-3000 alle Verbindungen auf die Ports
+ 2000 bis 3000 an die Ports 2000 bis 3000 an
+ Rechner A weiterleiten.
- NAT stands for Network Address
- Translation. To those familiar with &linux;, this concept is
- called IP Masquerading; NAT and IP
- Masquerading are the same thing. One of the many things the
- IPF NAT function enables is the ability to
- have a private Local Area Network (LAN) behind the firewall
- sharing a single ISP assigned IP address on the public
- Internet.
-
- You may ask why would someone want to do this. ISPs
- normally assign a dynamic IP address to their non-commercial
- users. Dynamic means that the IP address can be different each
- time you dial in and log on to your ISP, or for cable and DSL
- modem users, when the modem is power cycled. This dynamic IP
- address is used to identify your system to the public Internet.
-
- Now lets say you have five PCs at home and each one needs
- Internet access. You would have to pay your ISP for an
- individual Internet account for each PC and have five phone
- lines.
-
- With NAT only a single account is needed
- with your ISP. The other four PCs may then be cabled to a switch and
- the switch to the NIC in your &os; system which is going to
- service your LAN as a gateway. NAT will
- automatically translate the private LAN IP address for each
- separate PC on the LAN to the single public IP address as it
- exits the firewall bound for the public Internet. It also does
- the reverse translation for returning packets.
-
- There is a special range of IP addresses reserved for
- NATed private LANs. According to
- RFC 1918, the following IP ranges may be used for private nets
- which will never be routed directly to the public
- Internet:
-
-
-
-
+ Diese Optionen können über
+ natd_flags="" in
+ /etc/rc.conf direkt beim Start an
+ &man.natd.8; übergeben werden. Alternativ können die
+ Optionen in eine Konfigurationsdatei eingetragen
+ werden.
-
+ Weitere Konfigurationsmöglichkeiten sind in
+ &man.natd.8; beschrieben.
+
-
+
+ Weiterleiten von Adressen
-
-
- Start IP 10.0.0.0
+ Das Weiterleiten von Adressen ist nützlich, wenn
+ mehr als eine IP-Adresse zur Verfügung
+ steht. Jeder Rechner im LAN kann über
+ &man.natd.8; seine eigene externe
+ IP-Adresse zugewiesen bekommen.
+ &man.natd.8; wird dann den ausgehenden Datenverkehr der
+ Rechner aus dem LAN mit der
+ entsprechenden externen IP-Adresse
+ umschreiben. Auch der eingehenden Datenverkehr über die
+ externe IP-Adresse wird an die
+ entsprechenden Rechner im LAN
+ weitergeleitet. Diese Methode ist auch als
+ statisches NAT bekannt. Wenn Ihnen
+ beispielsweise die IP-Adressen
+ 128.1.1.1,
+ 128.1.1.2 und
+ 128.1.1.3 zur
+ Verfügung stehen, kann 128.1.1.1 als externe
+ Adresse der &man.natd.8;-Maschine verwendet werden, während
+ 128.1.1.2 und
+ 128.1.1.3 an
+ Rechner A und
+ Rechner B im LAN
+ weitergeleitet werden.
- -
+ Die Syntax für
+ lautet:
- Ending IP 10.255.255.255
-
+ -redirect_address localIP publicIP
-
- Start IP 172.16.0.0
+
+
+
+
+ localIP
+ Die interne IP-Adresse des
+ Rechners im LAN.
+
- -
+
+ publicIP
+ Die externe IP-Adresse für
+ den entsprechenden Rechner im
+ LAN.
+
+
+
+
- Ending IP 172.31.255.255
-
+ Für das obige Beispiel sollten die Argumente wie
+ folgt aussehen:
-
- Start IP 192.168.0.0
+ -redirect_address 192.168.0.2 128.1.1.2
+-redirect_address 192.168.0.3 128.1.1.3
- -
+ Genau wie bei , werden
+ diese Argumente innerhalb der
+ /etc/rc.conf-Option
+ natd_flags="" angegeben, oder alternativ
+ über eine Konfigurationsdatei. Allerdings müssen beim
+ Weiterleiten von Adressen keine Ports umgeleitet werden, da
+ der gesamte eingehende Datenverkehr einer bestimmte
+ IP-Adresse weitergeleitet wird.
- Ending IP 192.168.255.255
-
-
-
-
+ Die externe IP-Adresse der
+ &man.natd.8;-Maschine muss auf der externen Schnittstelle
+ aktiv und mit einem Alias versehen sein. Weitere
+ Einzelheiten sind in &man.natd.8; beschrieben.
+
-
- IPNAT
+
+ Das IPFW Kommando
- NAT
-
- and IPFILTER
+ ipfw
- ipnat
-
- NAT rules are loaded by using the
- ipnat command. Typically the
- NAT rules are stored in
- /etc/ipnat.rules. See &man.ipnat.8; for
- details.
-
- When changing the NAT rules after
- NAT has been started, make your changes to
- the file containing the NAT rules, then run the ipnat command with
- the flags to delete the internal in use
- NAT rules and flush the contents of the
- translation table of all active entries.
-
- To reload the NAT rules issue a command
- like this:
-
- &prompt.root; ipnat -CF -f /etc/ipnat.rules
+ ipfw kann benutzt werden, um einzelne
+ Regeln im laufenden Betrieb hinzuzufügen oder zu entfernen.
+ Problematisch ist jedoch, dass diese Änderungen bei einem
+ Neustart des Systems verloren gehen. Daher ist es
+ empfehlenswert, eigene Regeln in einer Datei zu definieren
+ und diese zu laden, um die Regeln der Firewall im laufenden
+ Betrieb anzupassen.
- To display some statistics about your
- NAT, use this command:
+ ipfw ist auch hilfreich, um die
+ geladenen Regeln der auf der Konsole auszugeben.
+ IPFW erzeugt dynamisch einen
+ Zähler, der jedes Paket, auf das eine Regel zutrifft, zählt.
+ Dadurch ist es möglich, die Funktion einer Regel zu
+ überprüfen.
- &prompt.root; ipnat -s
+ Eine Auflistung aller geladenen Regeln erhalten Sie
+ mit:
- To list the NAT table's current
- mappings, use this command:
+ &prompt.root; ipfw list
- &prompt.root; ipnat -l
+ Eine Auflistung aller Regeln inklusive des letzten
+ Treffers erhalten Sie mit:
- To turn verbose mode on, and display information relating
- to rule processing and active rules/table entries:
+ &prompt.root; ipfw -t list
- &prompt.root; ipnat -v
-
+ Das nächste Beispiel zeigt Informationen über die Anzahl
+ der Pakete, die von einer Regel gefiltert wurden sowie die
+ Regel selbst. Der erste Spalte zeigt die Nummer der
+ Regel, gefolgt von der Anzahl der gefilterten Pakete
+ und der Anzahl der Pakete in Bytes. Zum Schluss steht die
+ Regel selbst:
-
- IPNAT Rules
+ &prompt.root; ipfw -a list
- NAT rules are very flexible and can
- accomplish many different things to fit the needs of commercial
- and home users.
-
- The rule syntax presented here has been simplified to what
- is most commonly used in a non-commercial environment. For a
- complete rule syntax description see the &man.ipnat.5; manual
- page.
+ Das folgende Kommando zeigt zusätzlich alle dynamischen
+ Regeln an:
- The syntax for a NAT rule looks
- something like this:
+ &prompt.root; ipfw -d list
- map IFLAN_IP_RANGE -> PUBLIC_ADDRESS
+ Um diese Auflistung um die abgelaufenen
+ Regeln zu erweitern, geben Sie folgendes Kommando ein:
- The keyword map starts the rule.
+ &prompt.root; ipfw -d -e list
- Replace IF with the external
- interface.
+ Hiermit werden alle Zähler auf Null zurückgesetzt:
- The LAN_IP_RANGE is what your
- internal clients use for IP Addressing, usually this is
- something like 192.168.1.0/24.
-
- The PUBLIC_ADDRESS can either
- be the external IP address or the special keyword
- 0/32, which means to use the IP address
- assigned to IF.
-
+ &prompt.root; ipfw zero
-
- How NAT works
+ Es ist auch möglich, einen spezifischen Zähler
+ zurückzusetzen:
- A packet arrives at the firewall from the LAN with a public
- destination. It passes through the outbound filter rules,
- NAT gets its turn at the packet and applies
- its rules top down, first matching rule wins.
- NAT tests each of its rules against the
- packet's interface name and source IP address. When a packet's
- interface name matches a NAT rule then the
- source IP address (i.e.: private LAN IP address) of the packet
- is checked to see if it falls within the IP address range
- specified to the left of the arrow symbol on the
- NAT rule. On a match the packet has its
- source IP address rewritten with the public IP address
- obtained by the 0/32 keyword.
- NAT posts an entry in its internal
- NAT table so when the packet returns from
- the public Internet it can be mapped back to its original
- private IP address and then passed to the filter rules for
- processing.
-
+ &prompt.root; ipfw zero NUM
-
- Enabling IPNAT
+
+ Protokollierung von Firewall-Nachrichten
- To enable IPNAT add these statements to
- /etc/rc.conf.
+ Auch bei aktivierter Protokollierung wird
+ IPFW von selbst keine Regeln
+ protokollieren. Der Administrator muss entscheiden, welche
+ Regeln aus dem Regelwerk protokolliert werden sollen. In
+ diesen Regeln muss dann das Schlüsselwort
+ log hinzugefügt werden. Normalerweise
+ werden nur geblockte Pakete protokolliert. Es ist üblich,
+ die ipfw default deny everything-Regel am
+ Ende des Regelwerks mit dem Schlüsselwort
+ log zu duplizieren. Dadurch ist es
+ möglich, alle Pakete zu sehen, auf die keine Regel
+ zutraf.
- To enable your machine to route traffic between
- interfaces:
+ Protokollierung ist allerdings ein zweischneidiges
+ Schwert. Bei mangelnder Vorsicht oder einem DoS-Angriff
+ wird die Festplatte mit einer enormen Flut von
+ Protokolldaten belastet. Protokoll-Nachrichten werden nicht
+ nur an &man.syslogd.8; geschickt, sondern auch auf der
+ Konsole angezeigt, was dann schnell lästig werden
+ kann.
- gateway_enable="YES"
+ Die Kerneloption
+ IPFIREWALL_VERBOSE_LIMIT=5 begrenzt die
+ Anzahl identischer Nachrichten an &man.syslogd.8; für eine
+ gegebene Regel auf fünf Nachrichten. Ist diese Option im
+ Kernel aktiviert, wird nach Erreichen den festgelegten
+ Anzahl die Protokollierung von aufeinanderfolgenden
+ Nachrichten auf den festgelegten Wert begrenzt, da
+ beispielsweise die Speicherung von 200 gleichen
+ Protokoll-Nachrichten sinnlos ist. Daher werden durch
+ diese Option nur fünf gleichartige Nachrichten
+ protokolliert. Alle weiteren Nachrichten werden nur gezählt
+ und deren Gesamtzahl wird schließlich von &man.syslogd.8;
+ wie folgt ausgegeben:
- To start IPNAT automatically each
- time:
+ Last message repeated 45 times
- ipnat_enable="YES"
+ Alle protokollierten Pakete werden in der Voreinstellung
+ in /var/log/security gespeichert. Dies
+ wird in /etc/syslog.conf
+ definiert.
+
- To specify where to load the IPNAT rules
- from:
+
+ Ein Firewall-Regelwerk erstellen
- ipnat_rules="/etc/ipnat.rules"
-
-
-
- NAT for a very large LAN
-
- For networks that have large numbers of PC's on the LAN or
- networks with more than a single LAN, the process of funneling
- all those private IP addresses into a single public IP address
- becomes a resource problem that may cause problems with the
- same port numbers being used many times across many
- NATed LAN PC's, causing collisions. There
- are two ways to relieve this resource problem.
-
-
- Assigning Ports to Use
-
-
-
-
- A normal NAT rule would look like:
-
- map dc0 192.168.1.0/24 -> 0/32
-
- In the above rule the packet's source port is unchanged
- as the packet passes through IPNAT. By
- adding the portmap keyword,
- IPNAT can be directed to only use source ports in the specified range.
- For example the following rule will tell
- IPNAT to modify the source port to be
- within the range shown:
-
- map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000
-
- Additionally we can make things even easier by using the
- auto keyword to tell
- IPNAT to determine by itself which ports
- are available to use:
-
- map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto
-
-
-
- Using a Pool of Public Addresses
-
- In very large LANs there comes a point where there are just too
- many LAN addresses to fit into a single public address. If a block
- of public IP addresses is available, these addresses can be used as
- a pool, and IPNAT may pick one of
- the public IP addresses as packet-addresses are mapped on their way
- out.
-
- For example, instead of mapping all packets through a single
- public IP address, as in:
-
- map dc0 192.168.1.0/24 -> 204.134.75.1
-
- A range of public IP addresses can be specified either with a
- netmask:
-
- map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0
-
- or using CIDR notation:
-
- map dc0 192.168.1.0/24 -> 204.134.75.0/24
-
-
-
-
- Port Redirection
-
- A very common practice is to have a web server, email
- server, database server and DNS server each segregated to a
- different PC on the LAN. In this case the traffic from these
- servers still have to be NATed, but there
- has to be some way to direct the inbound traffic to the
- correct LAN PCs. IPNAT has the redirection
- facilities of NAT to solve this problem.
- For example, assuming a web server operating on LAN address 10.0.10.25 and using a single public IP
- address of 20.20.20.5 the rule would
- be coded as follows:
-
- rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80
-
- or:
-
- rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80
-
- or for a LAN DNS Server on LAN address of 10.0.10.33 that needs to receive
- public DNS requests:
-
- rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp
-
-
-
- FTP and NAT
+ Die meisten fortgeschrittenen
+ IPFW-Benutzer erzeugen eine
+ Datei, welche die Regeln für die Firewall enthält, um diese
+ als Skript ausführen zu können. Der Vorteil einer
+ derartigen Konfiguration besteht darin, dass dadurch mehrere
+ Regeln gleichzeitig geändert und aktiviert werden können,
+ ohne dass dazu das System neu gestartet werden muss. Dies
+ ist zudem beim Testen von Regeländerungen sehr hilfreich.
+ Weil es sich bei der Datei um ein Skript handelt, ist es
+ auch möglich, häufig verwendete Befehle durch Aliase zu
+ ersetzen und diese dann in mehreren Regeln zu nutzen.
- FTP is a dinosaur left over from the time before the
- Internet as it is known today, when research universities were
- leased lined together and FTP was used to share files among
- research Scientists. This was a time when data security was
- not a consideration. Over the years the FTP protocol became
- buried into the backbone of the emerging Internet and its
- username and password being sent in clear text was never
- changed to address new security concerns. FTP has two flavors,
- it can run in active mode or passive mode. The difference is
- in how the data channel is acquired. Passive mode is more
- secure as the data channel is acquired by the ordinal ftp
- session requester. For a real good explanation of FTP and the
- different modes see http://www.slacksite.com/other/ftp.html.
+ Die Syntax des folgenden Skripts entspricht der Syntax
+ von &man.sh.1;, &man.csh.1; sowie &man.tcsh.1;. Felder, die
+ symbolisch substituiert werden, haben das Präfix $
+ (Dollarzeichen). Symbolische Felder haben das
+ $-Präfix nicht. Der Wert, mit dem das symbolische
+ Feld belegt wird, muss in doppelten Anführungszeichen
+ ("") stehen.
-
- IPNAT Rules
+ Die Datei mit den Regeln könnte wie folgt aufgebaut
+ sein:
- IPNAT has a special built in FTP proxy
- option which can be specified on the NAT
- map rule. It can monitor all outbound packet traffic for FTP
- active or passive start session requests and dynamically
- create temporary filter rules containing only the port number
- really in use for the data channel. This eliminates the
- security risk FTP normally exposes the firewall to from
- having large ranges of high order port numbers open.
-
- This rule will handle all the traffic for the internal
- LAN:
-
- map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp
-
- This rule handles the FTP traffic from the
- gateway:
-
- map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp
-
- This rule handles all non-FTP traffic from the internal
- LAN:
-
- map dc0 10.0.10.0/29 -> 0/32
-
- The FTP map rule goes before our regular map rule. All
- packets are tested against the first rule from the top.
- Matches on interface name, then private LAN source IP
- address, and then is it a FTP packet. If all that matches
- then the special FTP proxy creates temp filter rules to let
- the FTP session packets pass in and out, in addition to also
- NATing the FTP packets. All LAN packets
- that are not FTP do not match the first rule and fall
- through to the third rule and are tested, matching on
- interface and source IP, then are
- NATed.
-
+ ############### start of example ipfw rules script #############
+#
+ipfw -q -f flush # Delete all rules
+# Set defaults
+oif="tun0" # out interface
+odns="192.0.2.11" # ISP's DNS server IP address
+cmd="ipfw -q add " # build rule prefix
+ks="keep-state" # just too lazy to key this each time
+$cmd 00500 check-state
+$cmd 00502 deny all from any to any frag
+$cmd 00501 deny tcp from any to any established
+$cmd 00600 allow tcp from any to any 80 out via $oif setup $ks
+$cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks
+$cmd 00611 allow udp from any to $odns 53 out via $oif $ks
+################### End of example ipfw rules script ############
-
- IPNAT FTP Filter Rules
+ Die Regeln in diesem Beispiel sind nicht wichtig.
+ Wichtig ist es, zu zeigen, wie die symbolische Substitution
+ innerhalb der Regeln verwendet wird.
- Only one filter rule is needed for FTP if the
- NAT FTP proxy is used.
+ Wenn dieses Beispiel in
+ etc/ipfw.rules gespeichert wurde, so
+ könnten alle Regeln durch die Ausführung des folgenden
+ Kommandos neu geladen werden:
- Without the FTP Proxy, the following three rules will be
- needed:
+ &prompt.root; sh /etc/ipfw.rules
- # Allow out LAN PC client FTP to public Internet
-# Active and passive modes
-pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state
+ Anstelle von /etc/ipfw.rules kann
+ ein beliebig anderer Name oder Speicherort verwendet
+ werden.
-# Allow out passive mode data channel high order port numbers
-pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state
+ Alternativ können die einzelnen Befehle dieses Skripts
+ auch von Hand eingegeben werden:
-# Active mode let data channel in from FTP server
-pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state
+ &prompt.root; ipfw -q -f flush
+&prompt.root; ipfw -q add check-state
+&prompt.root; ipfw -q add deny all from any to any frag
+&prompt.root; ipfw -q add deny tcp from any to any established
+&prompt.root; ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state
+&prompt.root; ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state
+&prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state
-
- IPFW
+
+ IPFILTER (IPF)Firewall
-
- IPFW
+ IPFILTER
- IPFW ist eine
- Stateful-Firewall
- für &os;, die sowohl IPv4 als auch
- IPv6 unterstützt. Die Firewall setzt sich
- aus mehreren Komponenten zusammen: dem Kernel Firewall
- Filter-Prozessor mit integriertem Paket-Accounting,
- Protokollfunktionen, NAT, dem
- &man.dummynet.4; Traffic-Shaper,
- sowie Weiterleitungs-, Bridge- und ipstealth-Funktionen.
-
- &os; enthält mit /etc/rc.firewall ein
- Beispielregelwerk, welches mehrere Firewall-Typen für
- gebräuchliche Szenarien definiert und unerfahrene Anwender
- dabei unterstützen soll, ein geeignetes Regelwerk zu erstellen.
- IPFW besitzt eine leistungsstarke
- Syntax, mit der erfahrene Benutzer ihre eigenen Regeln
- anfertigen können, um den Sicherheitsanforderungen der
- jeweiligen Umgebung gerecht zu werden.
-
- Diser Abschnitt beschreibt, wie
- IPFW aktiviert wird und bietet einen
- Überblick über die Regelsyntax. Zudem werden mehrere Regelsätze
- für gebräuchliche Konfigurationsszenarien vorgestellt.
+ IPFILTER, auch als
+ IPF bekannt, ist eine
+ plattformübergreifende Open Source Firewall, die auf
+ mehrere Betriebssysteme portiert wurde, einschließlich
+ &os;, NetBSD, OpenBSD und &solaris;.
+
+ IPFILTER basiert auf einer
+ kernelseitigen Firewall und einem
+ NAT-Mechanismus, der durch Anwenderprogramme
+ gesteuert und überwacht werden kann. Firewallregeln werden mit
+ ipf gesetzt oder gelöscht. Für die
+ Manipulation der NAT-Regeln wird
+ ipnat benutzt. Mit
+ ipfstat werden Laufzeitstatistiken
+ der kernelseitigen Anteile von
+ IPFILTER aufgelistet. Mit
+ ipmon können die Aktionen von
+ IPFILTER in Protokolldateien
+ gespeichert werden.
+
+ IPF wurde ursprünglich mit der
+ Verarbeitungslogik die letzte passende Regel
+ gewinnt geschrieben und verwendete ausschließlich
+ Regeln ohne feste Zustände. Inzwischen wurde
+ IPF modernisiert und unterstützt nun
+ auch die Optionen quick und
+ keep state.
+
+ Antworten auf häufige Fragen finden Sie unter
+ http://www.phildev.net/ipf/index.html. Ein Archiv
+ der IPFILTER Mailingliste steht unter
+
+ http://marc.info/?l=ipfilter zur Verfügung.
+
+ Dieser Abschnitt des Handbuchs konzentriert sich auf
+ IPF unter &os;. Es werden auch
+ Firewallregeln mit den Optionen quick und
+ keep state vorgestellt.
-
- IPFW aktivieren
+
+ IPF aktivieren
- IPFW
+ IPFILTERaktivieren
- Das &os; Basissystem enthält für
- IPFW ein ladbares Kernelmodul, was
- bedeutet, dass kein angepasster Kernel benötigt wird, um
- IPFW zu benutzen.
+ IPF ist in &os; als ladbares
+ Kernelmodul enthalten. Das bedeutet, dass Sie keinen
+ angepassten Kernel erzeugen müssen um
+ IPF zu aktivieren.Kerneloptionen
- IPFIREWALL
+ IPFILTERKerneloptionen
- IPFIREWALL_VERBOSE
+ IPFILTER_LOGKerneloptionen
- IPFIREWALL_VERBOSE_LIMIT
+ IPFILTER_DEFAULT_BLOCK
- IPFW
+ IPFILTERKerneloptionen
- Wenn Sie eine statische Unterstützung für
- IPFW in den Kernel kompilieren
- wollen, lesen Sie . Folgende
- Optionen können in der Kernelkonfigurationsdatei verwendet
- werden:
+ Benutzer, die IPF lieber
+ statisch in den Kernel kompilieren, sollten den Anweisungen in
+ folgen. Die folgenden
+ Kerneloptionen stehen zur Verfügung:
- options IPFIREWALL # enables IPFW
-options IPFIREWALL_VERBOSE # enables logging for rules with log keyword
-options IPFIREWALL_VERBOSE_LIMIT=5 # limits number of logged packets per-entry
-options IPFIREWALL_DEFAULT_TO_ACCEPT # sets default policy to pass what is not explicitly denied
-options IPDIVERT # enables NAT
+ options IPFILTER
+options IPFILTER_LOG
+options IPFILTER_LOOKUP
+options IPFILTER_DEFAULT_BLOCK
- Um IPFW beim Systemstart zu
- aktivieren, fügen Sie folgende Zeile in
- /etc/rc.conf ein:
+ options IPFILTER aktiviert die
+ Unterstützung für IPFILTER.
+ options IPFILTER_LOG aktiviert die
+ Protokollierung über die Pseudo-Schnittstelle
+ ipl für Firewallrelgen, die das
+ Schlüsselwort log enthalten.
+ IPFILTER_LOOKUP aktiviert
+ IP-Pools, um die Suche nach
+ IP-Adressen zu beschleunigen.
+ IPFILTER_DEFAULT_BLOCK ändert das
+ Verhalten der Firewall dahingehend, dass jedes Paket, das
+ nicht explizit von einer pass-Regel
+ Zugang erhält, geblockt wird.
+
+ Um IPF während des Bootens zu
+ aktivieren, müssen folgende Einträge in
+ /etc/rc.conf hinzugefügt werden. Diese
+ Einträge aktivieren ebenfalls die Protokollierung und die
+ Regel default pass all. Um diese
+ Voreinstellung zu ändern, ohne einen neuen Kernel zu
+ übersetzen, müssen Sie am Ende der Firewallregeln eine
+ block all Regel hinzufügen.
+
+ ipfilter_enable="YES" # Start ipf firewall
+ipfilter_rules="/etc/ipf.rules" # loads rules definition text file
+ipmon_enable="YES" # Start IP monitor log
+ipmon_flags="-Ds" # D = start as daemon
+ # s = log to syslog
+ # v = log tcp window, ack, seq
+ # n = map IP & port to names
+
+ Wenn die NAT-Funktionalität benötigt
+ wird, müssen auch diese Zeilen hinzugefügt werden:
+
+ gateway_enable="YES" # Enable as LAN gateway
+ipnat_enable="YES" # Start ipnat function
+ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat
+
+ Jetzt können Sie IPF
+ starten:
+
+ &prompt.root; service ipfilter start
+
+ Um die Firewallregeln zu laden, übergeben Sie den Namen
+ des Regelwerks an ipf. Mit dem folgenden
+ Kommando ersetzen Sie alle aktuell geladenen Regeln:
- firewall_enable="YES"
+ &prompt.root; ipf -Fa -f /etc/ipf.rules
- Wenn Sie einen der von &os; zur Verfügung gestellten
- Firewall-Profile benutzen möchten, fügen Sie eine weitere
- Zeile hinzu, in der Sie das Profil bestimmen:
+ -Fa löscht zunächst alle internen
+ Regeln und mit -f wird die Datei angegeben,
+ welche die zu ladenen Regeln enthält.
- firewall_type="open"
+ Damit haben Sie die Möglichkeit, Änderungen an der
+ laufenden Firewall zu machen, ohne dass das System neu
+ gestartet werden muss. Da dieser Vorgang beliebig oft
+ wiederholt werden kann, ist es ein sehr bequemer Weg neue
+ Regeln zu testen.
- Folgende Profile stehen zur Verfügung:
+ Diese und weitere Optionen sind in &man.ipf.8;
+ beschrieben.
+
-
-
- open: gestattet jeglichen
- Datenverkehr.
-
+
+ IPF Regel-Syntax
-
- client: schützt lediglich diesen
- Rechner.
-
+
+ IPFILTER
+ Regel-Syntax
+
-
- simple: schützt das gesamte
- Netzwerk.
-
+ Mit der hier beschriebenen Regel-Syntax können
+ zustandsorientierte Regeln erstellt werden. Beim Erstellen
+ von Regeln ist zu beachten, dass Regeln ohne das Schlüsselwort
+ quick der Reihe nach geprüft werden und
+ die letzte zutreffende Regel angewendet wird.
+ Das bedeutet, dass selbst dann, wenn die erste zutreffende
+ Regel eine pass-Regel ist, das Paket
+ dennoch geblockt wird, falls später eine
+ block-Regel zutrifft. Beispielregelsätze
+ finden Sie in
+ /usr/share/examples/ipfilter.
+
+ Beim Erstellen von Regeln wird das Zeichen
+ # verwendet, um einen Kommentar bis zum
+ Ende der Zeile einzuleiten. Leere Zeilen werden
+ ignoriert.
-
- closed: blockiert den gesamten
- IP-Datenverkehr, mit Ausnahme des
- Verkehrs über die Loopback-Schnittstelle.
-
+ Die Schlüsselwörter, die in den Regeln verwendet werden,
+ müssen in einer bestimmten Reihenfolge geschrieben werden,
+ von links nach rechts. Einige Schlüsselwörter sind
+ verbindlich, andere sind optional. Einige Schlüsselwörter
+ haben Unteroptionen, die wiederum selbst Schlüsselwörter sind
+ und ebenfalls weitere Unteroptionen einschließen können. Die
+ Reihenfolge der Schlüsselwörter ist wie folgt, wobei die
+ Wörter in Großbuchstaben eine Variable darstellen und die
+ Wörter in Kleinbuchstaben der Variable vorangestellt werden
+ müssen:
+
+ ACTION DIRECTION OPTIONS proto PROTO_TYPE
+ from SRC_ADDR SRC_PORT to DST_ADDR DST_PORT
+ TCP_FLAG|ICMP_TYPE keep state STATE
+
+ Dieser Abschnitt beschreibt jedes dieser Schlüsselwörter
+ und ihre Optionen. Es ist jedoch keine vollständige Liste
+ aller möglichen Optionen. &man.ipf.5; enthält eine
+ vollständige Beschreibung der Syntax und einige
+ Beispiele zur Erstellung von
+ IPF-Regeln.
-
- workstation: schützt lediglich
- diesen Rechner und verwendet zustandsorientierte
- Regeln.
-
+
+
+ ACTION
-
- UNKNOWN: deaktiviert das Laden von
- Firewallregeln.
-
+
+ Dieses Schlüsselwort bestimmt, was mit dem Paket zu
+ tun ist, wenn es auf eine Regel zutrifft. Jede Regel
+ muss dieses Schlüsselwort
+ enthalten. Die folgenden Aktionen werden
+ erkannt:
+
+ block: Das Paket wird
+ verworfen.
+
+ pass: Das Paket wird
+ durchgelassen.
+
+ log: Das Paket wird
+ protokolliert.
+
+ count: Zählt die Anzahl der
+ Pakete und die Bytes. Die kann einen Hinweis darauf
+ geben, wie oft Pakete auf diese Regel zutreffen.
+
+ auth: Das Paket geht in eine
+ Warteschlange zur Weiterverarbeitung durch ein anderes
+ Programm.
+
+ call: Ermöglicht den Zugriff auf
+ eingebaute IPF-Funktionen,
+ die komplexere Aktionen ermöglichen.
-
- filename:
- absoluter Pfad zu einer Datei, in der die Firewallregeln
- definiert sind.
-
-
+ decapsulate: Entfernt alle
+ Header, um den Inhalt des Pakets zu verarbeiten.
+
+
- Wenn Sie firewall_type auf
- client oder simple
- setzen, müssen Sie die voreingestellten Regeln in
- /etc/rc.firewall anpassen, damit sie
- der Konfiguration des Systems entsprechen.
+
+ DIRECTION
- Beachten Sie, dass das Profil filename
- verwendet wird, um ein benutzerdefiniertes Regelwerk zu
- laden.
+
+ Als nächstes muss für jede Regel explizit die
+ Richtung mit einem der folgenden Schlüsselwörter
+ angegeben werden:
+
+ in: Die Regel wird auf ein
+ eingehendes Paket angewendet.
+
+ out: Die Regel wird auf ein
+ ausgehendes Paket angewendet.
+
+ all: Die Regel gilt für beide
+ Richtungen.
+
+ Wenn das System mehrere Schnittstellen ausweist,
+ kann die Schnittstelle zusammen mit der Richtung
+ angegeben werden. Ein Beispiel wäre
+ in on fxp0.
+
+
- Eine alternative Möglichkeit, um ein benutzerdefiniertes
- Regelwerk zu laden, bietet die Variable
- firewall_script. Setzen Sie die Variable
- auf den absoluten Pfad eines
- ausführbaren Skripts, welches die Befehle
- für IPFW enthält. Die Beispiele in
- diesem Abschnitt gehen davon aus, dass
- firewall_script auf
- /etc/ipfw.rules gesetzt ist.
+
+ OPTIONS
- firewall_script="/etc/ipfw.rules"
+
+ Optionen müssen nicht zwingend angegeben werden.
+ Falls jedoch mehrere Optionen angegeben werden, müssen
+ sie in der hier gezeigten Reihenfolge verwendet
+ werden.
+
+ log: Wenn die Firewall die
+ angegebene Aktion durchführt, werden die Kopfdaten des
+ Pakets auf der Pseudo-Schnittstelle &man.ipl.4;
+ protokolliert.
+
+ quick: Wenn ein Paket mit dieser
+ Regel übereinstimmt, wird die Aktion für diese Regel
+ ausgeführt und die Regelprüfung stoppt an dieser
+ Stelle.
+
+ on: Auf dieses Schlüsselwort muss
+ der Name der Schnittstelle folgen. Die Regel trifft nur
+ dann zu, wenn das Paket auf der angegebenen
+ Schnittstelle in die angegebene Richtung geht.
+
+ Wenn das Schlüsselwort log
+ verwendet wird, können die folgenden Ausdrücke in
+ dieser Reihenfolge benutzt werden:
+
+ body: die ersten 128 Bytes des
+ Paketinhaltes werden zusätzlich zu den Kopfdaten
+ protokolliert.
+
+ first: trifft nur zu, wenn das
+ Schlüsselwort log zusammen mit
+ keep-state verwendet wird. Es
+ bestimmt, dass nur das auslösende Paket protokolliert
+ wird und nicht jedes weitere Paket, dass von der
+ gespeicherten Status-Regel betroffen ist.
+
+ Es stehen noch weitere Optionen zur Rückmeldung
+ von Fehlern verfügbar. Ausführliche Details finden Sie
+ in &man.ipf.5;.
+
+
- Die Protokollierung wird mit diesem Eintrag
- aktiviert:
+
+ PROTO_TYPE
- firewall_logging="YES"
+
+ Der Protokolltyp ist optional. Er ist jedoch
+ zwingend erforderlich, falls die Regel einen
+ SRC_PORT oder DST_PORT angeben muss da es den Typ des
+ Protokolls bestimmt. Wenn Sie das Protokoll angeben,
+ verwenden Sie das Schlüsselwort
+ proto, gefolgt von der
+ Protokollnummer oder dem Namen aus
+ /etc/protocols. Zum Beispiel
+ tcp, udp, oder
+ icmp. Wenn PROTO_TYPE angegeben
+ wird und SCR_PORT oder DST_PORT ausgelassen werden,
+ stimmen alle Portnummern für dieses Protokoll mit dieser
+ Regel überein.
+
+
- Es existiert keine Variable für
- /etc/rc.conf, um die Protokollierung zu
- begrenzen. Um die Anzahl der Protokoll-Nachrichten pro
- Verbindungsversuch zu begrenzen, legen Sie die Anzahl der
- Einträge in /etc/sysctl.conf fest:
+
+ SRC_ADDR
- net.inet.ip.fw.verbose_limit=5
+
+ Das Schlüsselwort from ist
+ verpflichtend und darauf folgt das Schlüsselwort, das
+ die Quelle des Pakets darstellt. Die Quelle kann ein
+ Rechnername, eine IP-Adresse gefolgt
+ von der CIDR-Maske, ein Adresspool
+ oder das Schlüsselwort all sein.
+ &man.ipf.5; enthält einige Beispiele.
+
+ IP-Bereiche können nur in der
+ CIDR-Notation angegeben werden. Der
+ Port oder das Paket net-mgmt/ipcalc
+ hilft bei der Berechnung der richtigen
+ CIDR-Maske. Weiterführende
+ Informationen finden Sie auf der Webseite
+ http://jodies.de/ipcalc.
+
+
- Nachdem Sie die Änderungen gespeichert haben, können Sie
- die Firewall starten. Um auch die Anzahl der
- Protokoll-Nachrichten zu konfigurieren, setzen Sie mit
- sysctl den gewünschten Wert:
+
+ SCR_PORT
- &prompt.root; service firewall start
-&prompt.root; sysctl net.inet.ip.fw.verbose_limit=5
-
-
-
- IPFW Regel-Syntax
-
- Wenn ein Paket die Firewall betritt, also
- von der Firewall geprüft und verarbeitet wird, wird die
- erste Regel des Regelwerkes auf das Paket angewandt. Auf
- diese Weise wird in aufsteigender Reihenfolge der Regelnummer
- mit allen weiteren Regeln verfahren. Falls die
- Selektionsparameter einer Regel auf ein Paket zutreffen, wird
- das Aktionsfeld der Regel ausgeführt und die Prüfung
- des Pakets beendet, nachfolgende Regeln werden also nicht
- mehr geprüft. Diese Suchmethode wird als erster
- Treffer gewinnt bezeichnet. Falls keine Regel auf
- das betreffende Paket zutrifft, wird die obligatorische
- IPFW-Rückfallregel mit der Nummer
- 65535 angewendet und das Paket wird ohne Rückantwort
- verworfen. Wenn das Paket jedoch einer Regel mit dem
- Schlüsselwort count,
- skipto oder tee
- entspricht, wird die Prüfung des Pakets weiter
- fortgeführt. Weitere Details darüber, wie diese
- Schlüsselwörter die Regelverarbeitung beeinflussen, finden Sie
- in &man.ipfw.8;.
-
-
- IPFW
- Regel-Syntax
-
-
- Bei der Erstellung der
- IPFW-Regeln müssen die
- Schlüsselwörter in der folgenden Reihenfolge geschrieben
- werden. Einige Schlüsselwörter müssen zwingend angegeben
- werden, während andere optional sind. Die Wörter in
- Großbuchstaben repräsentieren Variablen und die Wörter in
- Kleinbuchstaben müssen den Variablen vorangestellt
- werden. Das Zeichen # wird benutzt, um
- einen Kommentar einzuleiten und kann am Ende einer Regel oder
- in einer eigenen Zeile stehen. Leerzeilen werden
- ignoriert.
-
- CMD RULE_NUMBER set SET_NUMBER ACTION log
- LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT
- OPTIONS
-
- Dieser Abschnitt bietet einen Überblick über diese
- Schlüsselwörter und deren Optionen. Es ist keine vollständige
- Liste aller verfügbaren Optionen. Eine vollständige
- Beschreibung der Regel-Syntax, die Sie verwenden können um
- IPFW-Regeln zu erstellen, finden
- Sie in &man.ipfw.8;.
-
-
-
- CMD
- Jede Regel muss mit ipfw add
- beginnen.
+ Die Portnummer der Quelle ist optional. Wenn sie
+ jedoch verwendet wird, muss in der Regel zuerst
+ PROTO_TYPE angegeben werden. Die Portnummer muss auch
+ auf das Schlüsselwort proto
+ folgen.
+
+ Es werden verschiedene Vergleichsoperatoren
+ unterstützt: = (gleich),
+ != (nicht gleich),
+ < (kleiner als),
+ > (größer als),
+ <= (kleiner als oder gleich)
+ >= (größer als oder
+ gleich).
+
+ Um Portbereiche anzugeben, schreiben Sie zwei
+ Portnummern zwischen <>
+ (kleiner als und größer als),
+ >< (größer als und kleiner
+ als), oder : (größer als oder gleich
+ und kleiner als oder gleich).
- RULE_NUMBER
-
- Jede Regel gehört zu einer Nummer zwischen
- 1 und 65534. Die
- Nummer wird verwendet, um die Reihenfolge der
- Regelverarbeitung zu kennzeichnen. Es ist möglich, dass
- mehrere Regeln dieselbe Nummer haben. In diesem Fall
- werden sie entsprechend der Reihenfolge angewendet, in
- der sie aufgenommen wurden.
-
-
+ DST_ADDR
-
- SET_NUMBER
- Jede Regel ist einer Set-Nummer
- zwischen 0 und 31
- zugeordnet. Sets können einzeln aktiviert oder
- deaktiviert werden. Dies macht es möglich, eine Reihe
- von Regeln schnell hinzuzufügen oder zu löschen. Wenn
- SET_NUMBER nicht angegeben ist, wird
- die Regel zu Set 0
- hinzugefügt.
+ Das Schlüsselwort to ist
+ verpflichtend und darauf folgt das Schlüsselwort,
+ welches das Ziel des Pakets darstellt. Dieses Ziel kann
+ ein Rechnername, eine IP-Adresse
+ gefolgt von der CIDR-Maske, ein
+ Adresspool oder das Schlüsselwort all
+ sein.
- ACTION
-
- Eine Regel kann mit einer der folgenden Aktionen
- verknüpft werden. Die festgelegte Aktion wird
- ausgeführt, wenn das Paket den Selektionskriterien der
- Regel entspricht.
-
- allow | accept | pass |
- permit: All diese Aktionen sind
- gleichbedeutend und erlauben Pakete, die mit der Regel
- übereinstimmen.
-
- check-state: Diese Aktion
- überprüft die Regel in der dynamischen Zustandstabelle.
- Bei einer Übereinstimmung wird die mit der dynamischen
- Regel verknüpfte Aktion ausgeführt, andernfalls wird mit
- der Prüfung gegen die nächste Regel fortgefahren. Die
- Regel check-state hat selbst kein
- Selektionskriterium. Sollte keine
- check-state-Regel im Regelwerk
- vorhanden sein, wird die dynamische Zustandstabelle beim
- ersten Vorkommen einer keep-state-
- oder limit-Regel überprüft.
-
- count: Aktualisiert die
- Zähler für alle Pakete, die mit dieser Regel
- übereinstimmen. Die Prüfung wird mit der nächsten Regel
- fortgesetzt.
-
- deny | drop: Diese Aktionen
- sind gleichbedeutend und verwerfen Pakete, die mit
- dieser Regel übereinstimmen.
-
- Es stehen noch weitere Aktionen zur Verfügung.
- Einzelheiten finden Sie in &man.ipfw.8;.
-
-
+ DST_PORT
-
- LOG_AMOUNT
- Erfüllt ein Paket die Selektionskriterien mit dem
- Schlüsselwort log, wird dies von
- &man.syslogd.8; mit der Annotation
- SECURITY protokolliert. Dies erfolgt
- allerdings nur, wenn die Anzahl der protokollierten
- Pakete der betreffenden Regel die definierte
- LOG_AMOUNT-Grenze nicht übersteigt.
- Wenn LOG_AMOUNT nicht definiert ist,
- wird die Grenze aus dem Wert von
- net.inet.ip.fw.verbose_limit
- benutzt. Ein Wert von 0 bedeutet
- eine unbegrenzte Protokollierung. Wird eine definierte
- Grenze erreicht, wird die Protokollierung für diese
- Regel deaktiviert. Um die Protokollierung zu
- reaktivieren, können Sie den Protokoll- oder Paketzähler
- mit ipfw resetlog
- zurücksetzen.
-
-
- Die Protokollierung findet statt, nachdem alle
- Selektionskriterien geprüft und bevor die endgültige
- Aktion auf das Paket angewendet wird. Der
- Administrator entscheidet, welche Regel protokolliert
- werden soll.
-
+ Die Portnummer des Ziels ist optional. Wenn sie
+ jedoch verwendet wird, muss in der Regel zuerst
+ PROTO_TYPE angegeben werden. Die Portnummer muss auch
+ auf das Schlüsselwort proto
+ folgen.
- PROTO
-
- Dieser optionale Wert wird verwendet, um einen
- beliebigen Protokollnamen oder -nummer aus
- /etc/protocols gegen das Paket zu
- prüfen.
-
-
+ TCP_FLAG|ICMP_TYPE
-
- SRC
- Nach dem Schlüsslwortfrom muss
- die Quelladresse stehen, oder ein Schlüsselwort, das die
- Quelladresse darstellt. Eine Adresse wird dargestellt
- duch any, me (jede
- Adresse dieses Systems), me6 (jede
- IPv6-Adresse dieses Systems), oder
- table gefolgt von der Nummer der
- Tabelle, welche die Adressen enthält.
- IP-Adressen können in
- CIDR-Notation geschrieben werden.
- Beispielsweise 1.2.3.4/25 oder
- 1.2.3.4:255.255.255.128.
+ Wenn tcp als PROTO_TYPE verwendet
+ wird, können bestimmte TCP-Flags
+ angegeben werden, die den Zustand einer Verbindung
+ bestimmen. Mögliche Flags sind:
+ S (SYN),
+ A (ACK),
+ P (PSH),
+ F (FIN),
+ U (URG),
+ R (RST),
+ C (CWN) und
+ E (ECN).
+
+ Wenn icmp als PROTO_TYPE
+ verwendet wird, kann der ICMP-Typ mit
+ angegeben werden. &man.ipf.5; enthält eine Auflistung
+ der zulässigen Typen.
- SRC_PORT
-
- Optional kann ein Quellport über eine Nummer oder
- einen Namen aus /etc/services
- spezifiziert werden.
-
-
+ STATE
-
- DST
- Nach dem Schlüsselwort to muss
- die Zieladresse stehen, oder ein Schlüsselwort, das die
- Zieladresse darstellt. Es können die gleichen
- Schlüsselwörter und Adressen benutzt werden, die bereits
- im SRC-Abschnitt beschrieben wurden.
+ Wenn eine pass-Regel das
+ Schlüsselwort keep state enthält,
+ wird IPF einen Eintrag in
+ der dynamischen Zustandstabelle hinzufügen, damit
+ nachfolgende Pakete dieser Verbindung ebenfalls
+ durchgelassen werden. IPF
+ kann den Zustand für TCP,
+ UDP und
+ ICMP-Sitzungen verfolgen.
+ IPF wird jedes Paket, das
+ zu einer aktiven Sitzung gehört, durchlassen, auch
+ wenn ein anderes Protokoll verwendet wird.
+
+ Pakete, die über die Schnittstelle zum öffentlichen
+ Internet raus gehen, werden von
+ IPF zuerst gegen die
+ dynamische Zustandstabelle geprüft. Wenn das nächste
+ Paket dieser aktiven Sitzung mit dem vorherigen Paket
+ übereinstimmt, verlässt dieses Paket die Firewall und
+ der Status wird in der dynamischen Zustandstabelle
+ aktualisiert. Pakete, die nicht zu einer aktiven
+ Sitzung gehören, werden gegen ausgehende Regeln geprüft.
+ Eingehende Pakete von der Schnittstelle zum öffentlichen
+ Internet werden gegen die dynamische Zustandstabelle
+ geprüft. Wenn das nächste Paket mit der aktiven Sitzung
+ übereinstimmt, verlässt dieses Paket die Firewall und
+ der Status wird in der dynamischen Zustandstabelle
+ aktualisiert. Pakete, die nicht zu einer aktiven
+ Sitzung gehören, werden gegen eingehende Regeln
+ geprüft.
+
+ Mehrere Schlüsselwörter können an
+ keep state angefügt werden. Bei der
+ Verwendung dieser Schlüsselwörter werden verschiedene
+ Optionen gesetzt, um die zustandsorientierte Filterung
+ zu steuern. &man.ipf.5; enthält eine Liste der
+ verfügbaren Optionen und deren Beschreibungen.
+
+
-
- DST_PORT
-
- Optional kann ein Zielport über eine Nummer oder
- einen Namen aus /etc/services
- spezifiziert werden.
-
-
+
+ Beispielregelsatz
-
- OPTIONS
-
- Nach der Quell- und Zieladresse können noch weitere
- Optionen angegeben werden. Wie der Name bereits sagt,
- sind OPTIONS optional. Häufig
- verwendete Optionen sind in oder
- out, mit denen die Richtug des
- Pakets bestimmt wird, icmptypes
- gefolgt vom Typ der ICMP-Nachricht,
- sowie keep-state.
+ Dieser Abschnitt beschreibt die Erstellung eines
+ Regelsatzes, welcher nur entsprechende Dienste erlaubt und
+ alle anderen Verbindungen blockiert.
+
+ &os; verwendet die Loopback-Schnittstelle
+ (lo0) und die
+ IP-Adresse 127.0.0.1 zur internen
+ Kommunikation. Der Regelsatz muss Regeln enthalten, die
+ Pakete für diesen internen Verkehr ermöglichen:
- Wenn ein Paket auf eine
- keep-state-Regel zutrifft, wird
- die Firewall eine dynamische Regel erstellen, die dem
- bidirektionalen Datenverkehr zwischen den gleichen
- Quell- und Zieladressen mit dem gleichen Protokoll
- entspricht.
+ # no restrictions on the loopback interface
+pass in quick on lo0 all
+pass out quick on lo0 all
- Dynamische Regeln sind für einen sogenannten
- SYN-flood-Angriff
- anfällig, bei dem eine riesige Anzahl an dynamischen
- Regeln erzeugt wird. Verwenden Sie die Option
- limit, um einen solchen Angriff
- entgegenzuwirken. Diese Option begrenzt die Anzahl
- der gleichzeitig möglichen Sitzungen. Es handelt sich
- dabei um einen Zähler, der die Anzahl von dynamischen
- Regeln in Kombination mit der Quelladresse verfolgt.
- Übersteigt der Zähler den durch limit
- definierten Wert, wird das Paket verworfen.
+ Die mit dem Internet verbundene Schnittstelle wird für die
+ Autorisierung und den Zugriff aller ein- und ausgehenden
+ Verbindungen verwendet. Wenn eine oder mehrere Schnittstellen
+ mit privaten Netzwerken verbunden sind, müssen Regeln
+ existieren, die den Datenverkehr aus dem
+ LAN zwischen den internen Netzwerken oder
+ ins Internet erlauben. Der Regelsatz sollte in drei Bereiche
+ unterteilt werden: vertrauenswürdige interne Schnittstellen,
+ ausgehende Verbindungen über die öffentlichen Schnittstellen
+ und eingehende Verbindungen über die öffentliche
+ Schnittstelle.
- Es stehen noch viele weitere Optionen zur Verfügung.
- &man.ipfw.8; enthält eine Beschreibung der einzelnen
- Optionen.
-
-
-
-
+ Diese beiden Regeln erlauben den gesamten Datenverkehr
+ über eine vertrauenswürdige
+ LAN-Schnittstelle namens
+ xl0:
+
+ # no restrictions on inside LAN interface for private network
+pass out quick on xl0 all
+pass in quick on xl0 all
+
+ Die Regeln für den ein- und ausgehenden Verkehr der
+ öffentlichen Schnittstelle sollten in einer bestimmten
+ Reihenfolge geschrieben werden. Zuerst Regeln, die häufiger
+ übereinstimmen, danach Regeln, die seltener übereinstimmen.
+ Die letzte Regel blockiert und protokolliert alle Pakete auf
+ der Schnittstelle.
+
+ Der folgende Regelsatz definiert die ausgehenden Regeln
+ der öffentlichen Schnittstelle dc0.
+ Die Regeln prüfen den Zustand und identifizieren bestimmte
+ Dienste, auf die die internen Systeme zugreifen dürfen. Alle
+ Regeln verwenden das Schlüsselwort quick
+ und geben die passenden Portnummern und ggf. auch die
+ Zieladressen an.
+
+ # interface facing Internet (outbound)
+# Matches session start requests originating from or behind the
+# firewall, destined for the Internet.
+
+# Allow outbound access to public DNS servers.
+# Replace x.x.x. with address listed in /etc/resolv.conf.
+# Repeat for each DNS server.
+pass out quick on dc0 proto tcp from any to x.x.x. port = 53 flags S keep state
+pass out quick on dc0 proto udp from any to xxx port = 53 keep state
-
- Beispiel für einen Regelsatz
+# Allow access to ISP's specified DHCP server for cable or DSL networks.
+# Use the first rule, then check log for the IP address of DHCP server.
+# Then, uncomment the second rule, replace z.z.z.z with the IP address,
+# and comment out the first rule
+pass out log quick on dc0 proto udp from any to any port = 67 keep state
+#pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state
- Dieser Abschnitt die Erstellung eines Firewall-Skripts
- namens /etc/ipfw.rules mit
- zustandsorientierten (stateful
- Regeln. Alle Regeln in diesem Beispiel verwenden die Optionen
- in und out, um die
- Richtung des Pakets zu verdeutlichen. Zusätzlich wird
- via
- interface-name benutzt, um die
- Schnittstelle für das Paket zu prüfen.
+# Allow HTTP and HTTPS
+pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state
+pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state
-
- Bei den anfänglichen Tests mit dem Firewall-Regelsatz
- sollten Sie vielleicht folgende Einstellung
- vornehmen:
+# Allow email
+pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state
+pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state
- net.inet.ip.fw.default_to_accept="1"
+# Allow NTP
+pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state
- Dies legt die Standardregel von &man.ipfw.8; etwas
- großzügiger fest, als das voreingestellte
- default deny ip from any to any. Dadurch
- sinkt die Gefahr, sich nach einem Neustart des Systems
- auszusperren.
-
-
- Das Firewall-Skript beginnt mit einem Hinweis, dass es
- sich um ein Bourne Shell-Skript handelt. Danach werden alle
- vorhandenen Filterregeln gelöscht. Anschließend wird die
- Variable cmd erstellt, sodass
- ipfw add nicht jedes mal von Hand
- eingegeben werden muss. Die Variable pif
- repräsentiert die mit dem Internet verbundene
- Schnittstelle.
-
- #!/bin/sh
-# Flush out the list before we begin.
-ipfw -q -f flush
-
-# Set rules command prefix
-cmd="ipfw -q add"
-pif="dc0" # interface name of NIC attached to Internet
-
- Jetzt folgen die eigentlichen Filterregeln. Diese ersten
- beiden Regeln erlauben den Datenverkehr aus dem internen
- Netzwerk und über die Loopback-Schnittstelle:
-
- # Change xl0 to LAN NIC interface name
-$cmd 00005 allow all from any to any via xl0
-
-# No restrictions on Loopback Interface
-$cmd 00010 allow all from any to any via lo0
-
- Die nächste Regel erlaubt Pakete, für die ein Eintrag
- in der dynamischen Zustandstabelle existiert:
-
- $cmd 00101 check-state
-
- Die nächsten Regeln definieren, welche internen Rechner
- Verbindungen zu anderen Rechnern im Internet aufbauen dürfen.
- Hier werden wieder zustandsorientierte Regeln
- verwendet:
-
- # Allow access to public DNS
-# Replace x.x.x.x with the IP address of a public DNS server
-# and repeat for each DNS server in /etc/resolv.conf
-$cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state
-$cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state
-
-# Allow access to ISP's DHCP server for cable/DSL configurations.
-# Use the first rule and check log for IP address.
-# Then, uncomment the second rule, input the IP address, and delete the first rule
-$cmd 00120 allow log udp from any to any 67 out via $pif keep-state
-#$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state
-
-# Allow outbound HTTP and HTTPS connections
-$cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state
-$cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state
-
-# Allow outbound email connections
-$cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state
-$cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state
-
-# Allow outbound ping
-$cmd 00250 allow icmp from any to any out via $pif keep-state
-
-# Allow outbound NTP
-$cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state
-
-# Allow outbound SSH
-$cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state
-
-# deny and log all other outbound connections
-$cmd 00299 deny log all from any to any out via $pif
-
- Die folgenden Regeln steuern die Verbindungen von
- Rechern aus dem Internet ins interne Netzwerk. Zuerst werden
- Pakete verworfen, die typischerweise im Zusammenhang mit
- Angriffen stehen. Danach werden bestimmte Arten von
- Verbindungen erlaubt. Alle Dienste aus dem öffentlichen
- Internet beinhalten die Option limit, um
- Flooding zu unterbinden.
-
- # Deny all inbound traffic from non-routable reserved address spaces
-$cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP
-$cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP
-$cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP
-$cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback
-$cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback
-$cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config
-$cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs
-$cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect
-$cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast
-
-# Deny public pings$
-$cmd 00310 deny icmp from any to any in via $pif$
-$
-# Deny ident$
-$cmd 00315 deny tcp from any to any 113 in via $pif$
-$
-# Deny all Netbios services.$
-$cmd 00320 deny tcp from any to any 137 in via $pif$
-$cmd 00321 deny tcp from any to any 138 in via $pif$
-$cmd 00322 deny tcp from any to any 139 in via $pif$
-$cmd 00323 deny tcp from any to any 81 in via $pif$
-
-# Deny fragments
-$cmd 00330 deny all from any to any frag in via $pif
-
-# Deny ACK packets that did not match the dynamic rule table
-$cmd 00332 deny tcp from any to any established in via $pif
-
-# Allow traffic from ISP's DHCP server.
-# Replace x.x.x.x with the same IP address used in rule 00120.
-#$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state
-
-# Allow HTTP connections to internal web server
-$cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2
-
-# Allow inbound SSH connections
-$cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2
-
-# Reject and log all other incoming connections
-$cmd 00499 deny log all from any to any in via $pif
-
- Die letzte Regel protokolliert alle Pakete, die mit
- keiner Regel im Regelsatz übereinstimmen:
-
- # Everything else is denied and logged
-$cmd 00999 deny log all from any to any
-
-
-
-
- NAT Konfiguration
-
-
-
-
- Chern
- Lee
-
- Beigetragen von
-
-
-
-
-
- NAT
- und IPFW
-
-
- &os;s integrierter NAT-Daemon,
- &man.natd.8;, arbeitet in Verbindung mit
- IPFW, um
- Network Address Translation
- bereitzustellen. NAT wird verwendet, um
- mehreren internen Rechnern, über eine einzige
- IP-Adresse, eine gemeinsame Verbindung zum
- Internet zu ermöglichen.
-
- Um dies zu tun, muss der mit dem Internet verbundene
- &os;-Rechner als Gateway eingerichtet sein. Das System muss
- über zwei Netzwerkschnittstellen verfügen, wobei eine
- Schnittstelle mit dem Internet verbunden ist und die andere
- mit dem internen Netzwerk. Jeder Rechner im internen Netzwerk
- sollte eine RFC
- 1918 konforme Adresse zugewiesen bekommen. Zudem
- muss das Standard-Gateway der Rechner auf die interne
- IP-Adresse des &man.natd.8;-Systems
- gesetzt werden.
-
- Es ist noch ein wenig Konfiguration nötig, um die
- NAT-Funktion von
- IPFW zu aktivieren. Wenn das
- System einen angepassten Kernel hat, muss die
- Kernelkonfigurationsdatei die Zeile
- option IPDIVERT sowie weitere
- IPFIREWALL-Optionen, die in beschrieben sind,
- enthalten.
-
- Um die NAT-Unterstützung beim Booten
- zu aktivieren, müssen folgende Einträge in
- /etc/rc.conf vorhanden sein:
-
- gateway_enable="YES" # enables the gateway
-natd_enable="YES" # enables NAT
-natd_interface="rl0" # specify interface name of NIC attached to Internet
-natd_flags="-dynamic -m" # -m = preserve port numbers; additional options are listed in &man.natd.8;
-
-
- Es ist auch möglich eine Konfigurationsdatei zu
- verwenden, welche die Optionen enthält, die an
- &man.natd.8; übergeben werden:
-
- natd_flags="-f /etc/natd.conf"
-
- Die angegebene Datei muss die Konfigurationsoptionen
- enthalten, eine Option pro Zeile. Zum Beispiel:
-
- redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80
-
- Weitere Informationen zu dieser Konfigurationsdatei
- finden Sie in &man.natd.8;.
-
-
- Als nächstes werden die NAT-Regeln
- hinzugefügt. Wenn die Regeln zustandsorientiert sind, ist die
- Platzierung der NAT-Regeln sehr wichtig und
- die skipto-Aktion wird verwendet. Dies
- erfordert, dass jede Regel über eine eindeutige Nummer
- verfügt, um eindeutige Sprungziele zu erhalten.
-
- Das folgende Beispiel baut auf dem im vorherigen Abschnitt
- gezeigten Firewall-Relgelsatz auf. Es werden einige neue
- Einträge hinzugefügt und bestehende Regeln modifiziert, um
- NAT zu konfigurieren. Zunächst werden
- einige Variablen hinzugefügt, darunter Regelnummern, die
- keep-state-Option und eine Liste mit
- TCP-Ports um die Anzahl der Regeln zu
- reduzieren:
-
- #!/bin/sh
-ipfw -q -f flush
-cmd="ipfw -q add"
-skip="skipto 500"
-pif=dc0
-ks="keep-state"
-good_tcpo="22,25,37,53,80,443,110"
-
- Die NAT-Regel für eingehende Pakete
- wird nach den beiden Regeln, die das
- interne Netzwerk und die Loopback-Schnittstelle erlauben und
- vor der
- check-state-Regel eingefügt. Es ist
- wichtig, dass die Nummer der NAT-Regel
- (in diesem Beispiel 100) höher ist, als
- die beiden vorherigen Regeln und niedriger, als die
- check-state-Regel:
-
- $cmd 005 allow all from any to any via xl0 # exclude LAN traffic
-$cmd 010 allow all from any to any via lo0 # exclude loopback traffic
-$cmd 100 divert natd ip from any to any in via $pif # NAT any inbound packets
-# Allow the packet through if it has an existing entry in the dynamic rules table
-$cmd 101 check-state
-
- Die Regeln für den ausgehenden Verkehr werden ebenfalls
- modifiziert, um Aktionen mit der
- $skipto-Variable zu erlauben und
- anzuzeigen, dass die Prüfung mit der Regel
- 500 fortgesetzt wird. Die sieben Regeln
- für TCP wurden durch die Regel
- 125 ersetzt, da die sieben erlaubten
- ausgehenden Ports in der Variable
- $good_tcp0 enthalten sind.
-
- # Authorized outbound packets
-$cmd 120 $skip udp from any to x.x.x.x 53 out via $pif $ks
-$cmd 121 $skip udp from any to x.x.x.x 67 out via $pif $ks
-$cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
-$cmd 130 $skip icmp from any to any out via $pif $ks
-
- Die eingehenden Regeln bleiben unverändert, mit Ausnahme
- der letzten Regel, in der das
- via $pif entfert wird, um ein- und
- ausgehende Pakete prüfen zu können. Nach der letzten Regel
- für ausgehende Pakete muss die NAT-Regel
- folgen. Die Regel muss eine höhere Nummer als die letzte
- Regel haben und die Nummer muss über die
- skipto-Aktion referenziert werden. In
- diesem Regelsatz leitet die Regel mit der Nummer
- 500 alle ausgehenden Pakete zur
- Weiterverarbeitung an &man.natd.8; weiter. Die darauf
- folgende Regel lässt alle von NAT
- verarbeiteten Pakete passieren.
-
- $cmd 499 deny log all from any to any
-$cmd 500 divert natd ip from any to any out via $pif # skipto location for outbound stateful rules
-$cmd 510 allow ip from any to any
-
- In diesem Beispiel steuern die Regeln
- 100, 101,
- 125, 500 und
- 510 die Adressübersetzung der ein- und
- ausgehende Pakete, so dass immer die private
- LAN IP-Adresse in der
- dynamische Zustandstabelle registriert werden.
-
- Nehmen wir beispielsweise einen Web-Browser, der neue
- HTTP-Sitzungen über Port 80 aufbaut. Wenn
- nun das erste ausgehende Paket von der Firewall geprüft wird,
- trifft es nicht auf Regel 100 zu, da das
- Paket nach außen geleitet wird und nicht nach innen. Das
- Paket trifft auch nicht auf Regel 101 zu,
- da es das erste ist und somit noch nicht in der dynamischen
- Zustandstabelle enthalten ist. Das Paket entspricht
- schließlich Regel 125, da es ausgehend auf
- einem erlaubten Port gesendet wird und von einer
- IP-Adresse aus dem internen
- LAN stammt. Für Pakete, die auf diese
- Regel zutreffen, werden zwei Aktionen ausgeführt. Zuerst
- wird durch die Aktion keep-state ein
- dynamischer Eintrag in der Statustabelle erstellt und die
- angegebene Aktion skipto 500 ausgeführt.
- Als nächstes durchläuft das Paket NAT und
- wird dann an das Internet gesendet. Nachdem dieses Paket am
- Webserver angekommen ist, wird dort eine Antwort erzeugt und
- zurückgeschickt. Dieses Paket wird wieder von oben nach unten
- durch das Regelwerk geprüft. Dieses Mal trifft Regel
- 100 auf das Paket zu und die Zieladresse
- wird auf die zugehörige (lokale)
- LAN-Adresse abgebildet. Danach wird das
- Paket von der Regel check-state
- verarbeitet. Die Zustandstabelle erkennt, dass eine
- zugehörige aktive Sitzung vorliegt und das Paket wird
- freigegeben und in das LAN geleitet.
-
- Für den eingehenden Datenverkehr muss der Regelsatz
- unerwünschte Pakete blockieren und Pakete für autorisierte
- Dienste durchlassen. Ein Paket, das mit einer Regel für den
- eingehenden Datenverkehr übereinstimmt, wird in der
- dynamischen Zustandstabelle eingetragen und dann an das
- LAN freigegeben. Das Antwortpaket wird
- von der Regel check-state als Paket einer
- aktiven Sitzung erkannt. Das Paket wird dann von Regel
- 500 per NAT
- verarbeitet, bevor es über die externe Schnittstelle versendet
- wird.
-
-
- Weiterleitung von Ports
-
- Der Nachteil von &man.natd.8; ist, dass die Rechner im
- LAN nicht aus dem Internet zugänglich
- sind. Diese Rechner können zwar ausgehende Verbindungen
- zur Außenwelt aufbauen, jedoch keine eingehenden
- Verbindungen empfangen. Dies stellt ein Problem dar, wenn
- Sie auf einem Rechner im LAN Dienste
- anbieten möchten, die aus dem Internet erreichbar sein
- sollen. In diesem Fall können Sie die Ports, welche über
- das Internet erreichbar sein sollen, über die
- &man.natd.8;-Maschine an den Rechner im
- LAN weiterleiten.
-
- Angenommen es gibt einen IRC-Server
- auf Rechner A und einen Webserver
- auf Rechner B. Damit dies
- funktioniert, müssen die Verbindungen auf den Ports 6667
- (IRC) und 80 (HTTP)
- an die jeweiligen Rechner weitergeleitet werden.
-
- Die Syntax für
- lautet:
-
- -redirect_port proto targetIP:targetPORT[-targetPORT]
- [aliasIP:]aliasPORT[-aliasPORT]
- [remoteIP[:remotePORT[-remotePORT]]]
-
- Für das obige Beispiel sollten die Argumente wie folgt
- aussehen:
-
- -redirect_port tcp 192.168.0.2:6667 6667
- -redirect_port tcp 192.168.0.3:80 80
-
- Damit werden die entsprechenden
- TCP-Ports an die Rechner im
- LAN weitergeleitet.
+# Allow FTP
+pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state
- Portbereiche können über
- festgelegt werden. Zum Beispiel würde
- tcp 192.168.0.2:2000-3000
- 2000-3000 alle Verbindungen auf die Ports
- 2000 bis 3000 an die Ports 2000 bis 3000 an
- Rechner A weiterleiten.
+# Allow SSH
+pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state
- Diese Optionen können über
- natd_flags="" in
- /etc/rc.conf direkt beim Start an
- &man.natd.8; übergeben werden. Alternativ können die
- Optionen in eine Konfigurationsdatei eingetragen
- werden.
+# Allow ping
+pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state
- Weitere Konfigurationsmöglichkeiten sind in
- &man.natd.8; beschrieben.
-
+# Block and log everything else
+block out log first quick on dc0 all
-
- Weiterleiten von Adressen
+ Die folgenden Beispielregeln für den eingehenden Verkehr
+ auf der öffentlichen Schnittstelle blockieren zuerst alle
+ unerwünschten Pakete. Dies reduziert die Anzahl der Pakete,
+ die durch die letzte Regel protokolliert werden.
- Das Weiterleiten von Adressen ist nützlich, wenn
- mehr als eine IP-Adresse zur Verfügung
- steht. Jeder Rechner im LAN kann über
- &man.natd.8; seine eigene externe
- IP-Adresse zugewiesen bekommen.
- &man.natd.8; wird dann den ausgehenden Datenverkehr der
- Rechner aus dem LAN mit der
- entsprechenden externen IP-Adresse
- umschreiben. Auch der eingehenden Datenverkehr über die
- externe IP-Adresse wird an die
- entsprechenden Rechner im LAN
- weitergeleitet. Diese Methode ist auch als
- statisches NAT bekannt. Wenn Ihnen
- beispielsweise die IP-Adressen
- 128.1.1.1,
- 128.1.1.2 und
- 128.1.1.3 zur
- Verfügung stehen, kann 128.1.1.1 als externe
- Adresse der &man.natd.8;-Maschine verwendet werden, während
- 128.1.1.2 und
- 128.1.1.3 an
- Rechner A und
- Rechner B im LAN
- weitergeleitet werden.
+ # interface facing Internet (inbound)
+# Block all inbound traffic from non-routable or reserved address spaces
+block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP
+block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP
+block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP
+block in quick on dc0 from 127.0.0.0/8 to any #loopback
+block in quick on dc0 from 0.0.0.0/8 to any #loopback
+block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config
+block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs
+block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect
+block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast
- Die Syntax für
- lautet:
+# Block fragments and too short tcp packets
+block in quick on dc0 all with frags
+block in quick on dc0 proto tcp all with short
- -redirect_address localIP publicIP
+# block source routed packets
+block in quick on dc0 all with opt lsrr
+block in quick on dc0 all with opt ssrr
-
-
-
-
- localIP
- Die interne IP-Adresse des
- Rechners im LAN.
-
+# Block OS fingerprint attempts and log first occurrence
+block in log first quick on dc0 proto tcp from any to any flags FUP
-
- publicIP
- Die externe IP-Adresse für
- den entsprechenden Rechner im
- LAN.
-
-
-
-
+# Block anything with special options
+block in quick on dc0 all with ipopts
- Für das obige Beispiel sollten die Argumente wie
- folgt aussehen:
+# Block public pings and ident
+block in quick on dc0 proto icmp all icmp-type 8
+block in quick on dc0 proto tcp from any to any port = 113
- -redirect_address 192.168.0.2 128.1.1.2
--redirect_address 192.168.0.3 128.1.1.3
+# Block incoming Netbios services
+block in log first quick on dc0 proto tcp/udp from any to any port = 137
+block in log first quick on dc0 proto tcp/udp from any to any port = 138
+block in log first quick on dc0 proto tcp/udp from any to any port = 139
+block in log first quick on dc0 proto tcp/udp from any to any port = 81
- Genau wie bei , werden
- diese Argumente innerhalb der
- /etc/rc.conf-Option
- natd_flags="" angegeben, oder alternativ
- über eine Konfigurationsdatei. Allerdings müssen beim
- Weiterleiten von Adressen keine Ports umgeleitet werden, da
- der gesamte eingehende Datenverkehr einer bestimmte
- IP-Adresse weitergeleitet wird.
+ Wenn eine Regel mit der Option
+ log first protokolliert wird, können Sie
+ mit ipfstat -hio prüfen, wie viele
+ Übereinstimmungen es für diese Regel gibt. Eine große Anzahl
+ von Übereinstimmungen kann darauf hindeuten, dass das System
+ angegriffen wird.
+
+ Die restlichen Regeln definieren, welche Verbindungen aus
+ dem Internet kommend hergestellt werden dürfen. Die letzte
+ Regel blockiert alle Verbindungen, die nicht ausdrücklich von
+ vorhergehenden Regeln erlaubt wurden.
- Die externe IP-Adresse der
- &man.natd.8;-Maschine muss auf der externen Schnittstelle
- aktiv und mit einem Alias versehen sein. Weitere
- Einzelheiten sind in &man.natd.8; beschrieben.
-
+ # Allow traffic in from ISP's DHCP server. Replace z.z.z.z with
+# the same IP address used in the outbound section.
+pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state
+
+# Allow public connections to specified internal web server
+pass in quick on dc0 proto tcp from any to x.x.x.x port = 80 flags S keep state
+
+# Block and log only first occurrence of all remaining traffic.
+block in log first quick on dc0 all
-
- Das IPFW Kommando
+
+ NAT Konfiguration
-
- ipfw
-
+ Um NAT zu aktivieren, fügen Sie
+ folgende Zeilen in /etc/rc.conf hinzu.
+ Geben Sie den Namen der Datei an, welche die
+ NAT-Regeln enthält:
- ipfw kann benutzt werden, um einzelne
- Regeln im laufenden Betrieb hinzuzufügen oder zu entfernen.
- Problematisch ist jedoch, dass diese Änderungen bei einem
- Neustart des Systems verloren gehen. Daher ist es
- empfehlenswert, eigene Regeln in einer Datei zu definieren
- und diese zu laden, um die Regeln der Firewall im laufenden
- Betrieb anzupassen.
+ gateway_enable="YES"
+ipnat_enable="YES"
+ipnat_rules="/etc/ipnat.rules"
- ipfw ist auch hilfreich, um die
- geladenen Regeln der auf der Konsole auszugeben.
- IPFW erzeugt dynamisch einen
- Zähler, der jedes Paket, auf das eine Regel zutrifft, zählt.
- Dadurch ist es möglich, die Funktion einer Regel zu
- überprüfen.
+ NAT-Regeln sind sehr flexibel, um den
+ Bedürfnissen von kommerziellen Anwendern und Heimanwendern
+ gerecht zu werden. Die hier vorgestellte Regelsyntax wurde
+ vereinfacht, um die gemeinsame Nutzung zu demonstrieren.
+ Eine vollständige Beschreibung der Syntax finden Sie in
+ &man.ipnat.5;.
- Eine Auflistung aller geladenen Regeln erhalten Sie
- mit:
+ Die grundlegende Syntax für eine
+ NAT-Regel ist wie folgt.
+ map leitet die Regel ein und
+ IF sollte durch den Namen der externen
+ Schnittstelle ersetzt werden:
- &prompt.root; ipfw list
+ map IFLAN_IP_RANGE -> PUBLIC_ADDRESS
- Eine Auflistung aller Regeln inklusive des letzten
- Treffers erhalten Sie mit:
+ LAN_IP_RANGE ist ein Bereich
+ von IP-Adressen, der von den internen
+ Rechnern verwendet wird. In der Regel ist dies ein privater
+ Bereich, beispielsweise 192.168.1.0/24.
+ PUBLIC_ADDRESS kann entweder eine
+ statische externe IP-Adresse sein, oder das
+ Schlüsselwort 0/32, welches der
+ zugewiesenen IP-Adresse für
+ IF entspricht.
+
+ Wenn ein Paket aus dem LAN mit einem
+ öffentlichen Ziel an der IPF
+ Firewall ankommt, werden zunächst die Regeln für den
+ ausgehenden Verkehr geprüft. Danach wird das Paket an das
+ NAT-Regelwerk geleitet, wo es von oben nach
+ unten gelesen und geprüft wird, wobei die erste
+ übereinstimmende Regel gewinnt.
+ IPF testet jede
+ NAT-Regel gegen die Schnittstelle und die
+ Quell-IP-Adresse des Pakets. Wenn der
+ Schnittstellenname des Pakets mit einer
+ NAT-Regel übereinstimmt, wird geprüft, ob
+ die Quell-IP-Adresse des Pakets auf den
+ Bereich in LAN_IP_RANGE passt.
+ Wenn dies der Fall ist, wird die
+ Quell-IP-Adresse des Pakets mit der Adresse
+ aus PUBLIC_ADDRESS
+ überschrieben. IPF speichert die
+ Einträge in seiner internen NAT-Tabelle, so
+ dass wenn das Paket aus dem Internet zurückkehrt, es der
+ ursprünglichen privaten IP-Adresse
+ zugeordnet werden kann, bevor es von den weiteren
+ Firewallregeln geprüft wird.
+
+ Bei Netzwerken mit einer großen Anzahl von Systemen oder
+ mehreren Subnetzen, steigert sich der Ressourcenverbrauch
+ für das Umschreiben der IP-Adressen. Es
+ existieren zwei Methoden, um dieses Problem zu umgehen.
+
+ Bei der ersten Methode wird ein Portbereich definiert, der
+ für die Quell-Ports verwendet wird. Durch das Hinzufügen des
+ Schlüsselworts portmap kann
+ NAT angewiesen werden, nur Quell-Ports aus
+ dem angegebenen Bereich zu benutzen:
+
+ map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000
+
+ Alternativ kann das Schlüsselwort auto
+ verwendet werden. Dadurch ermittelt NAT
+ selbstständig die zur Verfügung stehenden Ports:
+
+ map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto
+
+ Mit der zweiten Methode wird ein Pool von öffentlichen
+ Adressen verwendet. Dies ist nützlich, wenn es viele Systeme
+ im Netzwerk gibt und ein Block öffentlicher
+ IP-Adressen verfügbar ist. Aus diesem Pool
+ kann NAT dann
+ IP-Adressen für die ausgehenden Pakete
+ auswählen.
+
+ Der Bereich der öffentlichen
+ IP-Adressen kann mit einer Netzmaske oder
+ der CIDR-Notation festgelegt werden. Die
+ folgenden Regeln sind identisch:
+
+ map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0
+map dc0 192.168.1.0/24 -> 204.134.75.0/24
+
+ Es ist gängige Praxis, öffentlich zugängliche Web- oder
+ Mail-Server getrennt von den internen Netzwerksegmenten zu
+ betreiben. Der Verkehr von diesen Servern muss dennoch von
+ NAT bearbeitet werden und die Portumleitung
+ ist erforderlich, um den eingehenden Datenverkehr an den
+ richtigen Server zu leiten. Verwenden Sie beispielsweise
+ folgende Regel, um den eingehenden Verkehr auf der
+ öffentlichen IP-Adresse 20.20.20.5 dem internen
+ Server mit der Adresse 10.0.10.25 zuzuordnen:
+
+ rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80
+
+ Wenn dies der einzige Webserver im Netz ist, würde auch
+ folgende Regel funktionieren, die alle
+ HTTP-Anfragen an 10.0.10.25 umleitet:
+
+ rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80
+
+ IPF enthält einen
+ FTP-Proxy, der zusammen mit
+ NAT benutzt werden kann. Dieser Proxy
+ überwacht den ausgehenden Datenverkehr für aktive und passive
+ Verbindungsanfragen und erstellt dynamische Filterregeln,
+ welche die Portnummern des jeweiligen
+ FTP-Datenkanal enthalten. Dadurch entfällt
+ die Notwendigkeit, viele Ports für
+ FTP-Verbindungen zu öffnen.
+
+ In diesem Beispiel verwendet die erste Regel den Proxy
+ für ausgehende FTP-Verbindungen aus dem
+ internen LAN. Die zweite Regel übergibt
+ den FTP-Datenverkehr von der Firewall an
+ das Internet und die dritte Regel handhabt den restlichen
+ Datenverkehr aus dem internen LAN:
+
+ map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp
+map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp
+map dc0 10.0.10.0/29 -> 0/32
+
+ FTP map-Regeln
+ stehen vor den NAT-Regeln. Wenn ein Paket
+ mit der FTP-Regel übereinstimmt, erstellt
+ der FTP-Proxy eine temporäre Filterregel,
+ damit die Pakete durchgelassen und von NAT
+ verarbeitet werden können. Alle Pakte aus dem
+ LAN, die nicht für FTP
+ bestimmt sind, werden von NAT verarbeitet,
+ wenn sie mit der dritten Regel übereinstimmen.
+
+ Ohne den FTP-Proxy würden stattdessen
+ folgende Regeln benötigt. Beachten Sie, dass ohne den Proxy
+ alle Ports oberhalb von 1024 freigegeben
+ werden müssen:
- &prompt.root; ipfw -t list
+ # Allow out LAN PC client FTP to public Internet
+# Active and passive modes
+pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state
- Das nächste Beispiel zeigt Informationen über die Anzahl
- der Pakete, die von einer Regel gefiltert wurden sowie die
- Regel selbst. Der erste Spalte zeigt die Nummer der
- Regel, gefolgt von der Anzahl der gefilterten Pakete
- und der Anzahl der Pakete in Bytes. Zum Schluss steht die
- Regel selbst:
+# Allow out passive mode data channel high order port numbers
+pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state$
+# Active mode let data channel in from FTP server
+pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state
- &prompt.root; ipfw -a list
+ Nachdem die Datei mit den NAT-Regeln
+ bearbeitet wurde, führen Sie ipnat mit
+ aus, um die aktuellen
+ NAT-Regeln und den Inhalt der dynamischen
+ Zuordnungstabelle zu löschen. Geben Sie
+ zusammen mit dem
+ NAT-Regelsatz an:
- Das folgende Kommando zeigt zusätzlich alle dynamischen
- Regeln an:
+ &prompt.root; ipnat -CF -f /etc/ipnat.rules
- &prompt.root; ipfw -d list
+ Statistiken zu NAT lassen sich wie
+ folgt anzeigen:
- Um diese Auflistung um die abgelaufenen
- Regeln zu erweitern, geben Sie folgendes Kommando ein:
+ &prompt.root; ipnat -s
- &prompt.root; ipfw -d -e list
+ Die aktuellen Zuordnungen der
+ NAT-Tabelle geben Sie mit diesem Kommando
+ aus:
- Hiermit werden alle Zähler auf Null zurückgesetzt:
+ &prompt.root; ipnat -l
- &prompt.root; ipfw zero
+ Ausführliche Informationen erhalten Sie mit:
- Es ist auch möglich, einen spezifischen Zähler
- zurückzusetzen:
+ &prompt.root; ipnat -v
+
- &prompt.root; ipfw zero NUM
+
+ IPF Statistiken
-
- Protokollierung von Firewall-Nachrichten
+ ipfstat
+
+ IPFILTER
+ Statistiken
+
- Auch bei aktivierter Protokollierung wird
- IPFW von selbst keine Regeln
- protokollieren. Der Administrator muss entscheiden, welche
- Regeln aus dem Regelwerk protokolliert werden sollen. In
- diesen Regeln muss dann das Schlüsselwort
- log hinzugefügt werden. Normalerweise
- werden nur geblockte Pakete protokolliert. Es ist üblich,
- die ipfw default deny everything-Regel am
- Ende des Regelwerks mit dem Schlüsselwort
- log zu duplizieren. Dadurch ist es
- möglich, alle Pakete zu sehen, auf die keine Regel
- zutraf.
+ IPF enthält mit &man.ipfstat.8;
+ ein Werkzeug, mit dem Statistiken abgerufen und angezeigt
+ werden können. Die Zahlen beziehen sich auf den Zeitpunkt, an
+ dem die Firewall zuletzt gestartet wurde, beziehungsweise die
+ Statistik mit ipf -Z zurückgesetzt
+ wurde.
- Protokollierung ist allerdings ein zweischneidiges
- Schwert. Bei mangelnder Vorsicht oder einem DoS-Angriff
- wird die Festplatte mit einer enormen Flut von
- Protokolldaten belastet. Protokoll-Nachrichten werden nicht
- nur an &man.syslogd.8; geschickt, sondern auch auf der
- Konsole angezeigt, was dann schnell lästig werden
- kann.
+ Die Ausgabe von ifstat sieht in etwa
+ wie folgt aus:
- Die Kerneloption
- IPFIREWALL_VERBOSE_LIMIT=5 begrenzt die
- Anzahl identischer Nachrichten an &man.syslogd.8; für eine
- gegebene Regel auf fünf Nachrichten. Ist diese Option im
- Kernel aktiviert, wird nach Erreichen den festgelegten
- Anzahl die Protokollierung von aufeinanderfolgenden
- Nachrichten auf den festgelegten Wert begrenzt, da
- beispielsweise die Speicherung von 200 gleichen
- Protokoll-Nachrichten sinnlos ist. Daher werden durch
- diese Option nur fünf gleichartige Nachrichten
- protokolliert. Alle weiteren Nachrichten werden nur gezählt
- und deren Gesamtzahl wird schließlich von &man.syslogd.8;
- wie folgt ausgegeben:
+ input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0
+output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0
+input packets logged: blocked 99286 passed 0
+output packets logged: blocked 0 passed 0
+packets logged: input 0 output 0
+log failures: input 3898 output 0
+fragment state(in): kept 0 lost 0
+fragment state(out): kept 0 lost 0
+packet state(in): kept 169364 lost 0
+packet state(out): kept 431395 lost 0
+ICMP replies: 0 TCP RSTs sent: 0
+Result cache hits(in): 1215208 (out): 1098963
+IN Pullups succeeded: 2 failed: 0
+OUT Pullups succeeded: 0 failed: 0
+Fastroute successes: 0 failures: 0
+TCP cksum fails(in): 0 (out): 0
+Packet log flags set: (0)
- Last message repeated 45 times
+ Es stehen viele Optionen zur Verfügung. Wird entweder
+ (eingehend) oder
+ (ausgehend) angegeben, wird der Befehl die entsprechende
+ Liste mit den derzeit vom Kernel benutzten Filterregeln
+ anzeigen. Um auch die Regelnummern zu sehen, muss
+ angegeben werden. Zum Beispiel zeigt
+ ipfstat -on die Tabelle für ausgehende
+ Regeln und die Regelnummer an:
- Alle protokollierten Pakete werden in der Voreinstellung
- in /var/log/security gespeichert. Dies
- wird in /etc/syslog.conf
- definiert.
-
+ @1 pass out on xl0 from any to any
+@2 block out on dc0 from any to any
+@3 pass out quick on dc0 proto tcp/udp from any to any keep state
-
- Ein Firewall-Regelwerk erstellen
+ Wenn Sie der Regel ein voranstellen,
+ wird der Zähler für die jeweilige Regel ausgegeben. Zum
+ Beispiel gibt ipfstat -oh die ausgehenden
+ Regeln inklusive der Zähler aus:
- Die meisten fortgeschrittenen
- IPFW-Benutzer erzeugen eine
- Datei, welche die Regeln für die Firewall enthält, um diese
- als Skript ausführen zu können. Der Vorteil einer
- derartigen Konfiguration besteht darin, dass dadurch mehrere
- Regeln gleichzeitig geändert und aktiviert werden können,
- ohne dass dazu das System neu gestartet werden muss. Dies
- ist zudem beim Testen von Regeländerungen sehr hilfreich.
- Weil es sich bei der Datei um ein Skript handelt, ist es
- auch möglich, häufig verwendete Befehle durch Aliase zu
- ersetzen und diese dann in mehreren Regeln zu nutzen.
+ 2451423 pass out on xl0 from any to any
+354727 block out on dc0 from any to any
+430918 pass out quick on dc0 proto tcp/udp from any to any keep state
- Die Syntax des folgenden Skripts entspricht der Syntax
- von &man.sh.1;, &man.csh.1; sowie &man.tcsh.1;. Felder, die
- symbolisch substituiert werden, haben das Präfix $
- (Dollarzeichen). Symbolische Felder haben das
- $-Präfix nicht. Der Wert, mit dem das symbolische
- Feld belegt wird, muss in doppelten Anführungszeichen
- ("") stehen.
+ Benutzen Sie ipfstat -t um die
+ Zustandstabelle in einem &man.top.1; ähnlichen Format
+ anzuzeigen. Unterliegt die Firewall einem Angriff, bietet
+ diese Option die Möglichkeit, die entsprechenden Pakete zu
+ identifizieren. Mit den optionalen Flags können
+ IP-Adressen, Ports oder Protokolle in
+ Echtzeit überwacht werden. Lesen Sie &man.ipfstat.8; für
+ weitere Informationen.
+
+
+
+ IPF Protokollierung
+
+
+ ipmon
+
+
+
+ IPFILTER
+ Protokollierung
+
+
+ IPF enthält mit
+ ipmon ein Werkzeug, mit dem die
+ Protokolle der Firewall in menschenlesbarer Form gespeichert
+ werden können. Dies erfordert jedoch, dass
+ options IPFILTER_LOG in die
+ Kernelkonfigurationsdatei hinzugefügt wird. Folgen Sie dazu
+ den Anweisungen in .
+
+ Um eine kontinuierliche Protokolldatei bereitzustellen,
+ läuft dieses Kommando normalerweise im Daemon-Modus, damit
+ auch ältere Ereignisse nachverfolgt werden können. Da &os;
+ mit &man.syslogd.8; ein Werkzeug besitzt, das automatisch
+ Protokolldateien rotiert, wird in der Voreinstellung für
+ ipmon_flags-Ds in
+ rc.conf verwendet:
+
+ ipmon_flags="-Ds" # D = start as daemon
+ # s = log to syslog
+ # v = log tcp window, ack, seq
+ # n = map IP & port to names
+
+ Protokollierung bietet die im Nachhinein die Möglichkeit
+ festzustellen, welche Pakete verworfen wurden, von welchen
+ Adressen diese Pakete kamen und wohin sie gehen sollten.
+ Diese Informationen sind hilfreich beim Aufspüren von
+ Angreifern.
+
+ Nachdem die Protokollierung in
+ /etc/rc.conf aktiviert und mit
+ service ipmon start gestartet wurde, wird
+ IPF Regeln aufzeichnen, welche das
+ Schlüsselwort log enthalten. Der
+ Firewalladministrator entscheidet, welche Regeln protokolliert
+ werden. In der Regel werden nur geblockte Pakete
+ protokolliert. Es ist üblich, das Schlüsselwort
+ log in der letzten Regel des Regelsatzes
+ mit aufzunehmen. Dies macht es möglich, alle Pakete zu sehen,
+ die mit keiner Regel des Regelsatzes übereinstimmten.
+
+ In der Voreinstellung verwendet
+ ipmon -Dslocal0 als
+ Protokoll-Facility. Die folgenden Level können verwendet
+ werden, um die erfassten Daten weiter aufzuspalten:
+
+ LOG_INFO - packets logged using the "log" keyword as the action rather than pass or block.
+LOG_NOTICE - packets logged which are also passed
+LOG_WARNING - packets logged which are also blocked
+LOG_ERR - packets which have been logged and which can be considered short due to an incomplete header
+
+ Damit IPF alle Daten
+ protokolliert, legen Sie zunächst eine neue Datei
+ /var/log/ipfilter.log an:
- Die Datei mit den Regeln könnte wie folgt aufgebaut
- sein:
+ &prompt.root; touch /var/log/ipfilter.log
- ############### start of example ipfw rules script #############
-#
-ipfw -q -f flush # Delete all rules
-# Set defaults
-oif="tun0" # out interface
-odns="192.0.2.11" # ISP's DNS server IP address
-cmd="ipfw -q add " # build rule prefix
-ks="keep-state" # just too lazy to key this each time
-$cmd 00500 check-state
-$cmd 00502 deny all from any to any frag
-$cmd 00501 deny tcp from any to any established
-$cmd 00600 allow tcp from any to any 80 out via $oif setup $ks
-$cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks
-$cmd 00611 allow udp from any to $odns 53 out via $oif $ks
-################### End of example ipfw rules script ############
+ Um alle Nachrichten in der angegebenen Datei zu
+ protokollieren, fügen Sie den folgenden Eintrag in
+ /etc/syslog.conf ein:
+
+ local0.* /var/log/ipfilter.log
+
+ Führen Sie service syslogd reload aus,
+ damit &man.syslogd.8; /etc/syslog.conf
+ neu einliest, um die Änderungen zu aktivieren.
+
+ Denken Sie daran, auch
+ /etc/newsyslog.conf anzupassen, damit das
+ neue Protokoll rotiert wird.
+
+ Die von ipmon generierten Nachrichten
+ bestehen aus Daten, welche durch Leerzeichen getrennt sind.
+ Alle Nachrichten enthalten die folgenden Felder:
- Die Regeln in diesem Beispiel sind nicht wichtig.
- Wichtig ist es, zu zeigen, wie die symbolische Substitution
- innerhalb der Regeln verwendet wird.
+
+
+ Das Datum, an dem das Paket empfangen wurde.
+
- Wenn dieses Beispiel in
- etc/ipfw.rules gespeichert wurde, so
- könnten alle Regeln durch die Ausführung des folgenden
- Kommandos neu geladen werden:
+
+ Die Uhrzeit, wann das Paket empfangen wurde. Das
+ Format ist HH:MM:SS.F (Stunden, Minuten, Sekunden und
+ Sekundenbruchteile).
+
- &prompt.root; sh /etc/ipfw.rules
+
+ Der Name der Schnittstelle, die das Paket
+ verarbeitet hat.
+
- Anstelle von /etc/ipfw.rules kann
- ein beliebig anderer Name oder Speicherort verwendet
- werden.
+
+ Die Gruppen- und Regelnummer im Format
+ @0:17.
+
- Alternativ können die einzelnen Befehle dieses Skripts
- auch von Hand eingegeben werden:
+
+ Die Aktion: p für durchgelassene
+ Pakete, b für blockierte Pakete,
+ S für kurze Pakete,
+ n für Pakete auf die keine Regel zutraf
+ und L für Pakete die protokolliert
+ wurden.
+
- &prompt.root; ipfw -q -f flush
-&prompt.root; ipfw -q add check-state
-&prompt.root; ipfw -q add deny all from any to any frag
-&prompt.root; ipfw -q add deny tcp from any to any established
-&prompt.root; ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state
-&prompt.root; ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state
-&prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state
-
+
+ Die Adressen werden in drei Felder unterteilt: die
+ Quelladresse und der Port getrennt durch Komma, das
+ Zeichen ->, sowie die Zieladresse und Port. Zum
+ Beispiel 209.53.17.22,80 ->
+ 198.72.220.17,1722.
+
+
+
+ PR, gefolgt vom Namen oder Nummer
+ des Protokolls. Zum Beispiel
+ PR tcp.
+
+
+
+ len, gefolgt von der Größe des
+ Headers und der Gesamtgröße des Pakets. Zum Beispiel
+ len 20 40.
+
+
+
+ Wenn es sich beim dem Paket um ein
+ TCP-Paket handelt, gibt es ein zusätzliches
+ Feld, das mit einem Bindestrich beginnt und die Buchstaben der
+ entsprechenden Flags enthält. Eine Liste der Flags und deren
+ Buchstaben finden Sie in &man.ipf.5;.
+
+ Wenn es sich beim dem Paket um ein
+ ICMP-Paket handelt, gibt es zwei
+ zusätzliche Felder: das erste Feld ist immer
+ icmp und das zweite Feld enthält die
+ ICMP-Nachricht und den Nachrichten-Code,
+ getrennt durch einen Schrägstrich. Beispielswiese
+ icmp 3/3 für die Nachricht
+ Port unreachable.