Date: Sun, 25 Sep 2016 20:08:07 +0000 (UTC) From: Bjoern Heidotting <bhd@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r49428 - head/de_DE.ISO8859-1/books/handbook/firewalls Message-ID: <201609252008.u8PK87rS083808@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bhd Date: Sun Sep 25 20:08:07 2016 New Revision: 49428 URL: https://svnweb.freebsd.org/changeset/doc/49428 Log: Firewall Update part 4/4 -> IPFILTER Add bhd as a translator. Reviewed by: bcr Differential Revision: https://reviews.freebsd.org/D8026 Modified: head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml Modified: head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml ============================================================================== --- head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml Sat Sep 24 17:05:12 2016 (r49427) +++ head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml Sun Sep 25 20:08:07 2016 (r49428) @@ -19,6 +19,7 @@ <author><personname><firstname>Michael</firstname><surname>Bunzel</surname></personname><contrib>Übersetzt von </contrib></author> <author><personname><firstname>Johann</firstname><surname>Kois</surname></personname></author> <author><personname><firstname>Benjamin</firstname><surname>Lukas</surname></personname></author> + <author><personname><firstname>Björn</firstname><surname>Heidotting</surname></personname></author> </authorgroup> </info> @@ -1674,2710 +1675,2138 @@ block drop out quick on $ext_if from any </sect2> </sect1> - <sect1 xml:id="firewalls-ipf"> - <title>Die IPFILTER-Firewall (IPF)</title> + <sect1 xml:id="firewalls-ipfw"> + <title>IPFW</title> <indexterm> - <primary>firewall</primary> + <primary>Firewall</primary> - <secondary>IPFILTER</secondary> + <secondary>IPFW</secondary> </indexterm> - <para>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.</para> - - <para>IPFILTER basiert auf einer kernelseitigen Firewall und einem - <acronym>NAT</acronym> 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 <acronym>NAT</acronym> 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.</para> - - <para>IPF funktionierte ursprünglich mit einer - Regel-Prozess-Logik à la <quote>die letzte Regel, die - passt, entscheidet</quote> und verwendete ausschließlich - Regeln ohne feste Zustände. Inzwischen wurde die - Regel-Prozess-Logik drastisch modernisiert: Es gibt eine - <option>quick</option> und eine zustandsorientierte <option> - keep-state</option> 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.</para> - - <para>Die Anweisungen in diesem Kapitel basieren darauf, Regeln mit - den Optionen <option>quick</option> und <option>keep-state</option> - zu erstellen. Mit diesem Grundwissen wird man einen kompletten - einschließenden Regelsatz erstellen können.</para> - - <para>Für eine ausführliche Erläuterung der alten Methode - zur Regelverarbeitung schauen Sie bitte auf <uri - xlink:href="http://www.munk.me.uk/ipf/ipf-howto.html"> - http://www.munk.me.uk/ipf/ipf-howto.html</uri> oder <uri - xlink:href="http://coombs.anu.edu.au/~avalon/ip-filter.html"> - http://coombs.anu.edu.au/~avalon/ip-filter.html</uri>.</para> + <para><application>IPFW</application> ist eine + <foreignphrase>Stateful-Firewall</foreignphrase> + für &os;, die sowohl <acronym>IPv4</acronym> als auch + <acronym>IPv6</acronym> unterstützt. Die Firewall setzt sich + aus mehreren Komponenten zusammen: dem Kernel Firewall + Filter-Prozessor mit integriertem Paket-Accounting, + Protokollfunktionen, <acronym>NAT</acronym>, dem + &man.dummynet.4; <foreignphrase>Traffic-Shaper</foreignphrase>, + sowie Weiterleitungs-, Bridge- und ipstealth-Funktionen.</para> - <para>Antworten auf häufige Fragen finden Sie unter - <uri xlink:href="http://www.phildev.net/ipf/index.html">http://www.phildev.net/ipf/index.html</uri>.</para> + <para>&os; enthält mit <filename>/etc/rc.firewall</filename> ein + Beispielregelwerk, welches mehrere Firewall-Typen für + gebräuchliche Szenarien definiert und unerfahrene Anwender + dabei unterstützen soll, ein geeignetes Regelwerk zu erstellen. + <application>IPFW</application> besitzt eine leistungsstarke + Syntax, mit der erfahrene Benutzer ihre eigenen Regeln + anfertigen können, um den Sicherheitsanforderungen der + jeweiligen Umgebung gerecht zu werden.</para> - <para>Und ein durchsuchbares Archiv der Mailingliste zu IPFILTER - gibt es unter <uri xlink:href="http://marc.theaimsgroup.com/?l=ipfilter">http://marc.theaimsgroup.com/?l=ipfilter</uri>.</para> + <para>Diser Abschnitt beschreibt, wie + <application>IPFW</application> aktiviert wird und bietet einen + Überblick über die Regelsyntax. Zudem werden mehrere Regelsätze + für gebräuchliche Konfigurationsszenarien vorgestellt.</para> - <sect2> - <title>Aktivieren von IPF</title> + <sect2 xml:id="firewalls-ipfw-enable"> + <title><application>IPFW</application> aktivieren</title> <indexterm> - <primary>IPFILTER</primary> - - <secondary>enabling</secondary> + <primary><application>IPFW</application></primary> + <secondary>aktivieren</secondary> </indexterm> - <para>&os; enthält IPF in der Standardversion als ladbares - Kernelmodul. Dieses Modul wird vom System automatisch geladen, - wenn in der <filename>rc.conf</filename> der Eintrag<literal> - ipfilter_enable="YES"</literal> angelegt wird. In dieser - ursprünglichen Konfiguration ist die Protokollierung aktiv - und die Option <literal>default pass all</literal> ("Pakete passieren - lassen") als Standard gesetzt. Um die <literal>block all</literal> - ("alles Blockieren") Option zu setzen, muss man nicht gleich - einen neuen Kernel bauen - es reicht, <literal>block all</literal> - als letzte Position des Regelsatzes aufzulisten.</para> - </sect2> - - <sect2> - <title>Kernel-Optionen</title> - - <indexterm> - <primary>Kerneloptionen</primary> + <para>Das &os; Basissystem enthält für + <application>IPFW</application> ein ladbares Kernelmodul, was + bedeutet, dass kein angepasster Kernel benötigt wird, um + <application>IPFW</application> zu benutzen.</para> - <secondary>IPFILTER</secondary> + <indexterm> + <primary>Kerneloptionen</primary> + <secondary>IPFIREWALL</secondary> </indexterm> <indexterm> - <primary>Kerneloptionen</primary> - - <secondary>IPFILTER_LOG</secondary> + <primary>Kerneloptionen</primary> + <secondary>IPFIREWALL_VERBOSE</secondary> </indexterm> <indexterm> - <primary>Kerneloptionen</primary> - - <secondary>IPFILTER_DEFAULT_BLOCK</secondary> + <primary>Kerneloptionen</primary> + <secondary>IPFIREWALL_VERBOSE_LIMIT</secondary> </indexterm> <indexterm> - <primary>IPFILTER</primary> - - <secondary>Kerneloptionen</secondary> + <primary><application>IPFW</application></primary> + <secondary>Kerneloptionen</secondary> </indexterm> - <para>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.</para> - - <para>Die Beschreibung der einzelnen Optionen von IPF für die - Verwendung in der Kernelkonfiguration finden Sie auch in der Datei - <filename>/usr/src/sys/conf/NOTES</filename>.</para> - - <programlisting>options IPFILTER -options IPFILTER_LOG -options IPFILTER_DEFAULT_BLOCK</programlisting> - - <para><literal>options IPFILTER</literal> aktiviert die Verwendung - der <quote>IPFILTER</quote> Firewall.</para> - - <para><literal>options IPFILTER_LOG</literal> aktiviert den - Logging-Mechanismus. Das bedeutet, dass jedes Paket geloggt wird, - auf das eine Regel passt, die das Schlüsselwort - <literal>log</literal> enthält. Dazu wird der - Pseudo—Device <filename>ipl</filename> verwendet.</para> - - <para><literal>options IPFILTER_DEFAULT_BLOCK</literal> ändert - das Verhalten der Firewall dahingehend, dass jedes Paket, dass nicht - explizit von einer <literal>pass</literal> Regel Zugang erhält, - abgewiesen, bzw. geblockt, wird.</para> - - <para>Diese Einstellungen werden erst aktiv, wenn der Kernel, in den sie - eingebunden wurden, kompiliert, installiert und gebootet wurde.</para> - </sect2> - - <sect2> - <title>Optionen in rc.conf</title> - - <para>Um IPF während des Bootvorgangs einzubinden, braucht man - lediglich die folgenden Zeilen der Datei - <filename>/etc/rc.conf</filename> anzufügen:</para> - - <programlisting>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 - </programlisting> - - <para>Falls sich hinter der Firewall ein lokales Netzwerk befindet, - das den reservierten privaten Adressbereich verwendet, müssen - die folgenden Zeilen zur Aktivierung von <acronym>NAT</acronym> - ebenfalls in <filename>/etc/rc.conf</filename> eingetragen - werden:</para> - - <programlisting>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 - </programlisting> - </sect2> - - <sect2> - <title>Der Befehl ipf</title> - - <indexterm><primary><command>ipf</command></primary></indexterm> + <para>Wenn Sie eine statische Unterstützung für + <application>IPFW</application> in den Kernel kompilieren + wollen, lesen Sie <xref linkend="kernelconfig"/>. Folgende + Optionen können in der Kernelkonfigurationsdatei verwendet + werden:</para> - <para>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:</para> + <programlisting>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</programlisting> - <screen>&prompt.root; <userinput>ipf -Fa -f /etc/ipf.rules</userinput></screen> + <para>Um <application>IPFW</application> beim Systemstart zu + aktivieren, fügen Sie folgende Zeile in + <filename>/etc/rc.conf</filename> ein:</para> - <para><option>-Fa</option> bedeutet, dass alle intern gespeicherten - Tabellen mit Regeln gelöscht werden.</para> + <programlisting>firewall_enable="YES"</programlisting> - <para><option>-f</option> gibt die Datei an, aus der die neuen Regeln - gelesen werden sollen.</para> + <para>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:</para> - <para>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.</para> - - <para>Um mehr über diese und weitere Optionen von &man.ipf.8; - zu erfahren, konsultieren Sie bitte die Manpage.</para> - - <para>&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.</para> - - <para>Es gibt allerdings doch einen Weg, IPF Regeln mit Hilfe von - Skripten und Variablen zu erstellen. Weitere Informationen dazu - finden Sie unter <xref linkend="firewalls-ipf-rules-script"/>.</para> - </sect2> + <programlisting>firewall_type="open"</programlisting> - <sect2> - <title>IPFSTAT</title> + <para>Folgende Profile stehen zur Verfügung:</para> - <indexterm><primary><command>ipfstat</command></primary></indexterm> + <itemizedlist> + <listitem> + <para><literal>open</literal>: gestattet jeglichen + Datenverkehr.</para> + </listitem> - <indexterm> - <primary>IPFILTER</primary> + <listitem> + <para><literal>client</literal>: schützt lediglich diesen + Rechner.</para> + </listitem> - <secondary>statistics</secondary> - </indexterm> + <listitem> + <para><literal>simple</literal>: schützt das gesamte + Netzwerk.</para> + </listitem> - <para>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 - <command>ipf -Z</command> angesammelt wurden, abzurufen und - anzuzeigen.</para> + <listitem> + <para><literal>closed</literal>: blockiert den gesamten + <acronym>IP</acronym>-Datenverkehr, mit Ausnahme des + Verkehrs über die Loopback-Schnittstelle.</para> + </listitem> - <para>Für weiterführende Informationen schauen Sie bitte - auf die Manpage von &man.ipfstat.8;!</para> + <listitem> + <para><literal>workstation</literal>: schützt lediglich + diesen Rechner und verwendet zustandsorientierte + Regeln.</para> + </listitem> - <para>Die Ausgabe von &man.ipfstat.8;, wenn keine Parameter - übergeben wurden, sieht etwa so aus:</para> + <listitem> + <para><literal>UNKNOWN</literal>: deaktiviert das Laden von + Firewallregeln.</para> + </listitem> - <screen>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 <acronym>TCP</acronym> 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 -<acronym>TCP</acronym> cksum fails(in): 0 (out): 0 -Packet log flags set: (0)</screen> + <listitem> + <para><filename><replaceable>filename</replaceable></filename>: + absoluter Pfad zu einer Datei, in der die Firewallregeln + definiert sind.</para> + </listitem> + </itemizedlist> - <para>Wenn die Option <option>-i</option> für - <quote>eingehend</quote> oder <option>-o</option> für - <quote>ausgehend</quote> übergeben wird, liefert das Kommando - eine entsprechende Liste von Filter-Regeln, die gerade installiert - sind und vom Kernel verwendet werden.</para> + <para>Wenn Sie <literal>firewall_type</literal> auf + <literal>client</literal> oder <literal>simple</literal> + setzen, müssen Sie die voreingestellten Regeln in + <filename>/etc/rc.firewall</filename> anpassen, damit sie + der Konfiguration des Systems entsprechen.</para> - <para><command>ipfstat -in</command> zeigt alle aktive Regeln - für eingehende Verbindungen zusammen mit ihren Nummern.</para> + <para>Beachten Sie, dass das Profil <literal>filename</literal> + verwendet wird, um ein benutzerdefiniertes Regelwerk zu + laden.</para> - <para><command>ipfstat -on</command> erledigt dasselbe für die - ausgehenden Verbindungen.</para> + <para>Eine alternative Möglichkeit, um ein benutzerdefiniertes + Regelwerk zu laden, bietet die Variable + <literal>firewall_script</literal>. Setzen Sie die Variable + auf den absoluten Pfad eines + <emphasis>ausführbaren Skripts</emphasis>, welches die Befehle + für <application>IPFW</application> enthält. Die Beispiele in + diesem Abschnitt gehen davon aus, dass + <literal>firewall_script</literal> auf + <filename>/etc/ipfw.rules</filename> gesetzt ist.</para> - <para>Die Ausgabe sieht in etwa folgendermaßen aus:</para> + <programlisting>firewall_script="/etc/ipfw.rules"</programlisting> - <screen>@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</screen> + <para>Die Protokollierung wird mit diesem Eintrag + aktiviert:</para> - <para><command>ipfstat -ih</command> zeigt die Tabelle der aktiven - Regeln für eingehende Verbindungen zusammen mit der Anzahl, - wie oft jeder einzelnen Regel entsprochen wurde.</para> + <programlisting>firewall_logging="YES"</programlisting> - <para><command>ipfstat -oh</command> zeigt das Gleiche für - die ausgehenden Verbindungen.</para> + <para>Es existiert keine Variable für + <filename>/etc/rc.conf</filename>, um die Protokollierung zu + begrenzen. Um die Anzahl der Protokoll-Nachrichten pro + Verbindungsversuch zu begrenzen, legen Sie die Anzahl der + Einträge in <filename>/etc/sysctl.conf</filename> fest:</para> - <para>Hier wird die Ausgabe so oder so ähnlich aussehen:</para> + <programlisting>net.inet.ip.fw.verbose_limit=5</programlisting> - <screen>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</screen> + <para>Nachdem Sie die Änderungen gespeichert haben, können Sie + die Firewall starten. Um auch die Anzahl der + Protokoll-Nachrichten zu konfigurieren, setzen Sie mit + <command>sysctl</command> den gewünschten Wert:</para> - <para>Einer der wichtigsten Funktionen von <command>ipfstat</command> - wird über die Option <option>-t</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;.</para> + <screen>&prompt.root; <userinput>service firewall start</userinput> +&prompt.root; <userinput>sysctl net.inet.ip.fw.verbose_limit=<replaceable>5</replaceable></userinput></screen> </sect2> - <sect2> - <title>IPMON</title> + <sect2 xml:id="firewalls-ipfw-rules"> + <title><application>IPFW</application> Regel-Syntax</title> - <indexterm><primary><command>ipmon</command></primary></indexterm> + <para>Wenn ein Paket die Firewall <quote>betritt</quote>, 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 <quote>erster + Treffer gewinnt</quote> bezeichnet. Falls keine Regel auf + das betreffende Paket zutrifft, wird die obligatorische + <application>IPFW</application>-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 <literal>count</literal>, + <literal>skipto</literal> oder <literal>tee</literal> + 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;.</para> <indexterm> - <primary>IPFILTER</primary> - - <secondary>logging</secondary> - </indexterm> - - <para>Damit der Befehl <command>ipmon</command> korrekt arbeiten kann, - muss die Option <literal>IPFILTER_LOG</literal> in die - Kernelkonfiguration eingearbeitet werden. Das Kommando selbst - arbeitet in zwei verschiedenen Modi. Für den nativen Modus - startet man <command>ipmon</command> auf der Kommandozeile ohne die - Option <option>-D</option>.</para> - - <para>Der Hintergrundmodus (<literal>daemon mode</literal>) 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-<filename>rc.conf</filename>-Datei (im Ordner - <filename>/etc/defaults/</filename>) wird dem Eintrag - <literal>ipmon_flags</literal> die Option <option>-Ds</option> - übergeben:</para> - - <programlisting>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</programlisting> - - <para>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.</para> - - <para>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 <literal>log</literal> in - dieser Regel angeben. Normalerweise werden nur Treffer auf abweisende - Regeln protokolliert.</para> - - <para>Es ist üblich, als letzte Regel eine alles blockierende - Regel mit dem Schlüsselwort <literal>log</literal> in den - Regelsatz einzutragen. Dadurch erkennt man alle Pakete, die keiner - Regel im Regelsatz entsprachen.</para> - </sect2> - - <sect2> - <title>IPMON Logging</title> - - <para><application>Syslogd</application> verwendet seine eigene Methode - zum Sortieren der gesammtelten Protokolldaten - spezielle Gruppierungen - namens <quote>facility</quote> und <quote>level</quote>. IPMON - verwendet im <literal>daemon</literal>-Modus als - <quote>facility</quote> den Wert <literal>security</literal>. Die - folgenden <quote>level</quote> können für eine genauere - Trennung der Protokolldaten verwendet werden:</para> - - <screen>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</screen> - - <para>Damit IPFILTER angewiesen werden kann, alle Protokolldaten in - die Datei <filename>/var/log/ipfilter.log</filename> zu schreiben, - muss diese erst erstellt werden. Folgendes Kommando - übernimmt diese Aufgabe:</para> - - <screen>&prompt.root; <userinput>touch /var/log/ipfilter.log</userinput></screen> - - <para>Die Funktionen von &man.syslogd.8; werden durch Definition in - der Datei <filename>/etc/syslog.conf</filename> gesteuert. In dieser - Datei kann sehr weitläfig eingestellt werden, wie - <application>syslog</application> mit den Systemnachrichten umgehen - soll, die ihm von Anwendungen wie IPF übergeben werden.</para> - - <para>Fügen Sie folgende Definition in die Datei - <filename>/etc/syslog.conf</filename> ein, um die Protokollierung - für IPF via <filename>syslog</filename> zu aktivieren:</para> - - <programlisting>security.* /var/log/ipfilter.log</programlisting> + <primary><application>IPFW</application></primary> + <secondary>Regel-Syntax</secondary> + </indexterm> - <para><literal>security.*</literal> bedeutet, dass alle Nachrichten - der Klasse <literal>security.*</literal> am angegebenen Ort (hier - eine Datei) geschrieben werden sollen.</para> + <para>Bei der Erstellung der + <application>IPFW</application>-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 <literal>#</literal> wird benutzt, um + einen Kommentar einzuleiten und kann am Ende einer Regel oder + in einer eigenen Zeile stehen. Leerzeilen werden + ignoriert.</para> - <para>Um Änderungen an der Datei - <filename>/etc/syslog.conf</filename> zu aktivieren müssen Sie - den Rechner neu starten, oder den Befehl</para> + <para><replaceable>CMD RULE_NUMBER set SET_NUMBER ACTION log + LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT + OPTIONS</replaceable></para> - <screen>&prompt.root; <userinput>/etc/rc.d/syslogd reload</userinput></screen> + <para>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 + <application>IPFW</application>-Regeln zu erstellen, finden + Sie in &man.ipfw.8;.</para> - <para>ausführen.</para> + <variablelist> + <varlistentry> + <term>CMD</term> + <listitem> + <para>Jede Regel muss mit <parameter>ipfw add</parameter> + beginnen.</para> + </listitem> + </varlistentry> - <para>Vergessen Sie nicht, <filename>/etc/newsyslog.conf</filename> - anzupassen, damit die neuen Protokolldateien, die eben konfiguriert - wurden, auch in den Rotationsturnus eingefügt werden!</para> - </sect2> + <varlistentry> + <term>RULE_NUMBER</term> + <listitem> + <para>Jede Regel gehört zu einer Nummer zwischen + <literal>1</literal> und <literal>65534</literal>. 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.</para> + </listitem> + </varlistentry> - <sect2> - <title>Die Formatierung der Logdatei</title> + <varlistentry> + <term>SET_NUMBER</term> + <listitem> + <para>Jede Regel ist einer <emphasis>Set</emphasis>-Nummer + zwischen <literal>0</literal> und <literal>31</literal> + 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 + <literal>SET_NUMBER</literal> nicht angegeben ist, wird + die Regel zu Set <literal>0</literal> + hinzugefügt.</para> + </listitem> + </varlistentry> - <para>Nachrichten, die durch <command>ipmon</command> erzeugt werden, - bestehen aus durch Leerstellen getrennten Datenfeldern. Folgende - Felder sind in allen Nachrichten enthalten:</para> + <varlistentry> + <term>ACTION</term> + <listitem> + <para>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.</para> - <orderedlist> - <listitem> - <para>Das Datum der Paketerstellung.</para> - </listitem> - - <listitem> - <para>Die Uhrzeit der Paketerstellung in der Form - <literal>HH:MM:SS.F</literal>, mit Stunden, Minuten, Sekunden - und Sekundenbruchteilen, wobei letztere mehrere Stellen lang - sein können.</para> - </listitem> - - <listitem> - <para>Der Name der Schnittstelle, die das Paket verarbeitet hat, - bspw. <filename>dc0</filename>.</para> - </listitem> - - <listitem> - <para>Die Gruppe und die Nummer der angewandten Regel, bspw. - <literal>@0:17</literal>.</para> - </listitem> - - <listitem> - <para>Die ausgeführte Aktion: p für - <literal>passed</literal> (zugelassen), b für blockiert, - S für <literal>short packet</literal> (unvollständiger - Header), n für <literal>no match</literal> (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.</para> - </listitem> - - <listitem> - <para>Die Adressen. Diese bestehen aus drei Feldern: Der - Quelladresse mit Port (getrennt durch ein Komma), dem Symbol - <quote>-></quote> und der Zieladresse. Also bspw. - <literal>209.53.15.22,80 -> 198.64.221.18,1722</literal>.</para> - </listitem> - - <listitem> - <para><literal>PR</literal> gefolgt vom Namen eines - Netzwerk-Protokolls oder dessen Nummer. Bspw. - <literal>PR tcp</literal>.</para> - </listitem> - - <listitem> - <para><literal>len</literal> gefolgt von der Länge des Headers - und der Gesamtlänge des Paketes, beispielsweise - <literal>len 20 40</literal>.</para> - </listitem> - </orderedlist> + <para><parameter>allow | accept | pass | + permit</parameter>: All diese Aktionen sind + gleichbedeutend und erlauben Pakete, die mit der Regel + übereinstimmen.</para> - <para>Wenn es sich um ein <acronym>TCP</acronym>-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.</para> - - <para>Falls das Paket ein ICMP-Paket ist, werden zwei Felder am Ende - hinzugefügt - das erstere ist immer <quote>ICMP</quote>, das - zweite enthält die ICMP-Nachricht und den Nachrichtentyp, - getrennt durch einen Schrägstrich. <literal>ICMP 3/3</literal> - steht beispielsweise für <quote>Port nicht - erreichbar</quote>.</para> - </sect2> + <para><parameter>check-state</parameter>: 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 <literal>check-state</literal> hat selbst kein + Selektionskriterium. Sollte keine + <literal>check-state</literal>-Regel im Regelwerk + vorhanden sein, wird die dynamische Zustandstabelle beim + ersten Vorkommen einer <literal>keep-state</literal>- + oder <literal>limit</literal>-Regel überprüft.</para> - <sect2 xml:id="firewalls-ipf-rules-script"> - <title>Die Erstellung eines Regelsatzes mit Variablen</title> + <para><parameter>count</parameter>: Aktualisiert die + Zähler für alle Pakete, die mit dieser Regel + übereinstimmen. Die Prüfung wird mit der nächsten Regel + fortgesetzt.</para> - <para>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.</para> - - <para>Die Syntax dieses Skriptes ist kompatibel mit den Shells - &man.sh.1;, &man.csh.1; und &man.tcsh.1;.</para> - - <para>Variablen beginnen mit einem Dollar-Zeichen: - <literal>$Variablenname</literal>. Im Beispiel unten steht - <literal>$oif</literal> für die Variable, in der der Name - der Schnittstelle abgelegt wird, über die der Verkehr nach - außen erfolgt.</para> - - <para>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 - (<literal>""</literal>) stehen. Also folgt eine Zuweisung dem Schema - <literal>Variablenname = "Wert"</literal>.</para> - - <programlisting>############# 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 + <para><parameter>deny | drop</parameter>: Diese Aktionen + sind gleichbedeutend und verwerfen Pakete, die mit + dieser Regel übereinstimmen.</para> + + <para>Es stehen noch weitere Aktionen zur Verfügung. + Einzelheiten finden Sie in &man.ipfw.8;.</para> + </listitem> + </varlistentry> -# 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 ########################</programlisting> - - <para>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 - <filename>/etc/ipf.rules.script</filename> gespeichert wurde, - können die Regeln mit folgenden Kommando neu geladen - werden:</para> - - <screen>&prompt.root; <userinput>sh /etc/ipf.rules.script</userinput></screen> - - <para>Es gibt ein Problem mit Regelsatz-Dateien, die Variablen - verwenden: IPF kann mit Variablen nichts anfangen - und kann derartige - Skripte nicht direkt einlesen.</para> + <varlistentry> + <term>LOG_AMOUNT</term> + <listitem> + <para>Erfüllt ein Paket die Selektionskriterien mit dem + Schlüsselwort <literal>log</literal>, wird dies von + &man.syslogd.8; mit der Annotation + <literal>SECURITY</literal> protokolliert. Dies erfolgt + allerdings nur, wenn die Anzahl der protokollierten + Pakete der betreffenden Regel die definierte + <literal>LOG_AMOUNT</literal>-Grenze nicht übersteigt. + Wenn <literal>LOG_AMOUNT</literal> nicht definiert ist, + wird die Grenze aus dem Wert von + <varname>net.inet.ip.fw.verbose_limit</varname> + benutzt. Ein Wert von <literal>0</literal> 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 <command>ipfw resetlog</command> + zurücksetzen.</para> - <para>Unser kleines Skript kann daher nur auf eine der beiden folgenden - Weisen verwendet werden:</para> + <note> + <para>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.</para> + </note> + </listitem> + </varlistentry> - <itemizedlist> - <listitem> - <para>Entfernen Sie das Kommentarzeichen der Zeile, die mit - <literal>cat</literal> beginnt. Kommentieren Sie die Zeile aus, - die mit <literal>/sbin/ipf</literal> beginnt. Schreiben Sie die - Zeile <literal>ipfilter_enable="YES"</literal> in die Datei - <filename>/etc/rc.conf</filename> und rufen Sie dann das Skript - auf, um <filename>/etc/ipf.rules</filename> zu erstellen oder - zu erneuern.</para> - </listitem> - - <listitem> - <para>Deaktivieren Sie IPFILTER in den Systemstart-Skripten, indem - Sie die Zeile <literal>ipfilter_enable="NO"</literal> in die - Datei <filename>/etc/rc.conf</filename> eintragen (was auch der - Standard-Einstellung entspricht).</para> - - <para>Fügen Sie ein Skript ähnlich dem folgenden in Ihr - Verzeichnis <filename>/usr/local/etc/rc.d/</filename>. Es - sinnvoll, dem Skript einen offensichtlichen Namen zu geben, wie - etwa <filename>ipf.loadrules.sh</filename>. Die Endung - <filename>.sh</filename> ist dabei verbindlich.</para> - - <programlisting>#!/bin/sh -sh /etc/ipf.rules.script</programlisting> - - <para>Die Zugriffsrechte für die Datei, die das Skript - enthält, müssen für den Eigentümer - <systemitem class="username">root</systemitem> auf Lesen, Schreiben und Ausführen - gesetzt werden.</para> + <varlistentry> + <term>PROTO</term> + <listitem> + <para>Dieser optionale Wert wird verwendet, um einen + beliebigen Protokollnamen oder -nummer aus + <filename>/etc/protocols</filename> gegen das Paket zu + prüfen.</para> + </listitem> + </varlistentry> - <screen>&prompt.root; <userinput>chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh</userinput></screen> - </listitem> - </itemizedlist> + <varlistentry> + <term>SRC</term> + <listitem> + <para>Nach dem Schlüsslwort<literal>from</literal> muss + die Quelladresse stehen, oder ein Schlüsselwort, das die + Quelladresse darstellt. Eine Adresse wird dargestellt + duch <literal>any</literal>, <literal>me</literal> (jede + Adresse dieses Systems), <literal>me6</literal> (jede + <acronym>IPv6</acronym>-Adresse dieses Systems), oder + <literal>table</literal> gefolgt von der Nummer der + Tabelle, welche die Adressen enthält. + <acronym>IP</acronym>-Adressen können in + <acronym>CIDR</acronym>-Notation geschrieben werden. + Beispielsweise <literal>1.2.3.4/25</literal> oder + <literal>1.2.3.4:255.255.255.128</literal>.</para> + </listitem> + </varlistentry> - <para>Wenn nun Ihr System startet, werden Ihre IPF-Regeln geladen.</para> - </sect2> + <varlistentry> + <term>SRC_PORT</term> + <listitem> + <para>Optional kann ein Quellport über eine Nummer oder + einen Namen aus <filename>/etc/services</filename> + spezifiziert werden.</para> + </listitem> + </varlistentry> - <sect2> - <title>IPF Regelsätze</title> + <varlistentry> + <term>DST</term> + <listitem> + <para>Nach dem Schlüsselwort <literal>to</literal> 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.</para> + </listitem> + </varlistentry> - <para> 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 - <acronym>TCP/IP</acronym> arbeitet, zum Beispiel - <literal>telnet</literal>, <literal>www</literal> oder - <literal>mail</literal>, 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.</para> + <varlistentry> + <term>DST_PORT</term> + <listitem> + <para>Optional kann ein Zielport über eine Nummer oder + einen Namen aus <filename>/etc/services</filename> + spezifiziert werden.</para> + </listitem> + </varlistentry> - <indexterm> - <primary>IPFILTER</primary> + <varlistentry> + <term>OPTIONS</term> + <listitem> + <para>Nach der Quell- und Zieladresse können noch weitere + Optionen angegeben werden. Wie der Name bereits sagt, + sind <literal>OPTIONS</literal> optional. Häufig + verwendete Optionen sind <literal>in</literal> oder + <literal>out</literal>, mit denen die Richtug des + Pakets bestimmt wird, <literal>icmptypes</literal> + gefolgt vom Typ der <acronym>ICMP</acronym>-Nachricht, + sowie <literal>keep-state</literal>.</para> - <secondary>rule processing order</secondary> - </indexterm> + <para>Wenn ein Paket auf eine + <parameter>keep-state</parameter>-Regel zutrifft, wird + die Firewall eine dynamische Regel erstellen, die dem + bidirektionalen Datenverkehr zwischen den gleichen + Quell- und Zieladressen mit dem gleichen Protokoll + entspricht.</para> + + <para>Dynamische Regeln sind für einen sogenannten + <foreignphrase>SYN-flood</foreignphrase>-Angriff + anfällig, bei dem eine riesige Anzahl an dynamischen + Regeln erzeugt wird. Verwenden Sie die Option + <literal>limit</literal>, 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 <literal>limit</literal> + definierten Wert, wird das Paket verworfen.</para> - <para>IPF wurde ursprünglich mit einer Regel-Prozess-Logik - geschrieben, die ausschließlich statusfreie Regeln zuließ - und nach dem Prinzip <quote>die letzte Regel, die passt, - entscheidet</quote> arbeitete. Mit der Zeit erhielt IPF eine - <option>quick</option> Option sowie <option>keep-state</option> Option - für die Anwendung von zustandsorientierten Regeln, was die - Regel-Prozess-Logik signifikant modernisierte.</para> - - <para>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.</para> - - <warning> - <para>Wenn Sie mit einer Firewall arbeiten, seien Sie - <emphasis>sehr vorsichtig</emphasis>. Durch wenige Einstellungen - können Sie sich aus Ihrem System - <emphasis>aussperren</emphasis>. 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. <application>ssh</application>.</para> - </warning> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201609252008.u8PK87rS083808>