svn commit: r48900 - head/de_DE.ISO8859-1/books/handbook/firewalls
Bjoern Heidotting
bhd at FreeBSD.org
Tue Jun 7 11:22:55 UTC 2016
Author: bhd
Date: Tue Jun 7 11:22:53 2016
New Revision: 48900
URL: https://svnweb.freebsd.org/changeset/doc/48900
Log:
Update of the firewall chapter part 2/4 -> PF
Reviewed by: bcr
Differential Revision: https://reviews.freebsd.org/D6738
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 Sun Jun 5 15:47:50 2016 (r48899)
+++ head/de_DE.ISO8859-1/books/handbook/firewalls/chapter.xml Tue Jun 7 11:22:53 2016 (r48900)
@@ -293,306 +293,1384 @@
</sect1>
<sect1 xml:id="firewalls-pf">
- <info><title>Paket Filter (PF) von OpenBSD und
- <acronym>ALTQ</acronym></title>
+ <info>
+ <title>PF</title>
+
<authorgroup>
- <author><personname><firstname>John</firstname><surname>Ferrell</surname></personname><contrib>Revised and updated by </contrib></author>
+ <author>
+ <personname>
+ <firstname>John</firstname>
+ <surname>Ferrell</surname>
+ </personname>
+ <contrib>Überarbeitet und aktualisiert von </contrib>
+ </author>
</authorgroup>
</info>
-
-
<indexterm>
<primary>firewall</primary>
<secondary>PF</secondary>
</indexterm>
- <para>Im Juli 2003 wurde <acronym>PF</acronym>, die
- Standard-Firewall von OpenBSD, nach &os; portiert und in die
- &os;-Ports-Sammlung aufgenommen. 2004 war <acronym>PF</acronym> in
- &os; 5.3 Teil des Basissystems. Bei <acronym>PF</acronym>
- handelt es sich um eine komplette, vollausgestattete Firewall,
- die optional auch <acronym>ALTQ</acronym> (Alternatives
- Queuing) unterstützt. <acronym>ALTQ</acronym> bietet Ihnen
+ <para>In &os; 5.3 wurde <application>PF</application> von
+ OpenBSD in das Basissystem integriert. Bei
+ <application>PF</application> handelt es sich um eine komplette,
+ voll ausgestattete Firewall, die optional auch
+ <application>ALTQ</application> (Alternatives Queuing)
+ unterstützt. <application>ALTQ</application> stellt
<foreignphrase>Quality of Service</foreignphrase>
- (<acronym>QoS</acronym>)-Bandbreitenformung.</para>
+ (<acronym>QoS</acronym>) zur Verfügung.</para>
- <para>Das OpenBSD-Projekt leistet bereits hervorragende
- Dokumentationsarbeit mit der <link xlink:href="http://www.openbsd.org/faq/pf/">PF FAQ</link>. Aus diesem Grund
- konzentriert sich dieser Handbuchabschnitt nur auf diejenigen
- Besonderheiten von <acronym>PF</acronym>, die &os; betreffen, sowie ein
- paar allgemeine Informationen hinsichtlich der Verwendung. Genauere
- Informationen zum Einsatz erhalten Sie in der <link xlink:href="http://www.openbsd.org/faq/pf/">PF FAQ</link>.</para>
-
- <para>Weitere Informationen zu <acronym>PF</acronym> für &os; finden
- Sie unter <uri xlink:href="http://pf4freebsd.love2party.net/">http://pf4freebsd.love2party.net/</uri>.</para>
+ <para>Das OpenBSD-Projekt pflegt die maßgebliche Referenz von
+ <application>PF</application> in der <link
+ xlink:href="http://www.openbsd.org/faq/pf">PF FAQ</link>.
+ Peter Hansteen betreut ein sehr ausführliches
+ <application>PF</application>-Tutorial unter <link
+ xlink:href="http://home.nuug.no/~peter/pf/">
+ http://home.nuug.no/~peter/pf/</link>.</para>
+
+ <warning>
+ <para>Bedenken Sie beim Studium der <link
+ xlink:href="http://www.openbsd.org/faq/pf/">PF FAQ</link>,
+ dass &os; die <application>PF</application>-Version aus
+ OpenBSD 4.5 enthält.</para>
+ </warning>
+
+ <para>Die &a.pf; ist ein guter Anlaufpunkt für Fragen zur
+ Konfiguration und dem Einsatz der
+ <application>PF</application>-Firewall. Überprüfen Sie
+ aber zunächst die Archive der Mailingliste, bevor Sie eine
+ Frage stellen. Vielleicht wurde die Frage dort schon
+ beantwortet.</para>
+
+ <para>Weitere Informationen über die Portierung von
+ <application>PF</application> nach &os; finden Sie unter <link
+ xlink:href="http://pf4freebsd.love2party.net/">
+ http://pf4freebsd.love2party.net/</link>.</para>
+
+ <para>Dieser Abschnitt konzentriert sich auf
+ <application>PF</application> in &os;. Es wird beschrieben, wie
+ <application>PF</application> und
+ <application>ALTQ</application> aktiviert werden. Anschließend
+ wird demonstriert, wie Regelsätze auf einem &os;-System erstellt
+ werden.</para>
<sect2>
- <title>Verwendung der PF-Kernelmodule</title>
+ <title><application>PF</application> aktivieren</title>
+
+ <para>Damit <application>PF</application> benutzt werden kann,
+ muss zunächst das Kernelmodul geladen werden. Dieser
+ Abschnitt beschreibt die Einträge für
+ <filename>/etc/rc.conf</filename>, die verwendet werden können
+ um <application>PF</application> zu aktivieren.</para>
- <para>Um die PF Kernel Module zu laden, fügen Sie folgende
- Zeile in ihre <filename>/etc/rc.conf</filename> ein:</para>
+ <para>Beginnen Sie mit folgender Zeile in
+ <filename>/etc/rc.conf</filename>:</para>
<programlisting>pf_enable="YES"</programlisting>
- <para>Danach starten Sie das Startup Script um die Module
- zu laden:</para>
+ <para>&man.pfctl.8; beschreibt zusätzliche Optionen, die beim
+ Start an <application>PF</application> übergeben werden
+ können. Fügen Sie diesen Eintrag in
+ <filename>/etc/rc.conf</filename> hinzu und schreiben Sie die
+ benötigten Optionen zwischen die Anführungszeichen:</para>
+
+ <programlisting>pf_flags="" # additional flags for pfctl startup</programlisting>
+
+ <para><application>PF</application> kann nicht gestartet werden,
+ wenn es seine Konfigurationsdatei nicht findet. In der
+ Voreinstellung existiert bereits ein Regelsatz namens
+ <filename>/etc/pf.conf</filename>. Wenn bereits ein Regelsatz
+ an anderer Stelle gespeichert wurde, fügen Sie in
+ <filename>/etc/rc.conf</filename> einen Eintrag mit dem
+ vollständigen Pfad zur Datei ein:</para>
- <screen>&prompt.root; <userinput>/etc/rc.d/pf start</userinput></screen>
+ <programlisting>pf_rules="<replaceable>/path/to/pf.conf</replaceable>"</programlisting>
- <para>Das PF Modul wird nicht geladen, falls es die Ruleset
- Konfigurationsdatei nicht findet. Standardmässig befindet
- sich diese Datei in <filename>/etc/pf.conf</filename>. Falls das
- PF Ruleset sich an einem anderen Platz befindet, können Sie das
- durch Hinzufügen einer Zeile ähnlich der folgenden, in
- ihrer <filename>/etc/rc.conf</filename> ändern:</para>
+ <para>Protokollierungsfunktionen für
+ <application>PF</application> werden von &man.pflog.4; zur
+ Verfügung gestellt. Fügen Sie folgende Zeile in
+ <filename>/etc/rc.conf</filename> ein, um diese Funktion zu
+ aktivieren:</para>
- <programlisting>pf_rules="<replaceable>/path/to/pf.conf</replaceable>"</programlisting>
+ <programlisting>pflog_enable="YES"</programlisting>
+
+ <para>Die folgenden Zeilen können ebenfalls hinzugefügt werden,
+ um den Speicherort der Protokolldatei zu bestimmen und weitere
+ Optionen beim Start an &man.pflog.4; zu übergeben:</para>
+
+ <programlisting>pflog_logfile="/var/log/pflog" # where pflogd should store the logfile
+pflog_flags="" # additional flags for pflogd startup</programlisting>
+
+ <para>Falls ein <acronym>LAN</acronym> hinter der Firewall
+ existiert und die Pakete an die Rechner im
+ <acronym>LAN</acronym> weitergeleitet werden müssen, oder
+ wenn <acronym>NAT</acronym> benötigt wird, fügen Sie die
+ folgende Option hinzu:</para>
+
+ <programlisting>gateway_enable="YES" # Enable as LAN gateway</programlisting>
+
+ <para>Nachdem die Änderungen gespeichert wurden, kann
+ <application>PF</application> mit Unterstützung für
+ Protokollierung gestartet werden:</para>
+
+ <screen>&prompt.root; <userinput>service pf start</userinput>
+&prompt.root; <userinput>service pflog start</userinput></screen>
+
+<!--
+This is no longer true as of 9.x. It also references the CARP section
+which doesn't explain how to use it...At some point it should.
+ <indexterm>$
+ <primary>kernel options</primary>
+ <secondary>device pf</secondary>
+ </indexterm>
+
+ <indexterm>
+ <primary>kernel options</primary>
+ <secondary>device pflog</secondary>
+ </indexterm>
+
+ <indexterm>
+ <primary>kernel options</primary>
+ <secondary>device pfsync</secondary>
+ </indexterm>
<note>
- <para>Ein Beispiel für die Datei <filename>pf.conf</filename>
- finden Sie im Verzeichnis <filename>/usr/share/examples/pf/</filename>.</para>
+ <para>While it is not necessary to compile
+ <application>PF</application> support into the &os; kernel,
+ some advanced features are not included, namely &man.pfsync.4;, which is a
+ pseudo-device that exposes certain changes to the state table
+ used by <application>PF</application>. It can be paired with
+ &man.carp.4; to create failover firewalls using
+ <application>PF</application>. More information on
+ <acronym>CARP</acronym> can be found in <xref linkend="carp"/>.</para>
+
+ <para>The following <application>PF</application> kernel options
+ are available:</para>
+
+ <programlisting>device pf
+device pflog
+device pfsync</programlisting>
+
+ <para>where:</para>
+
+ <para><literal>device pf</literal> enables PF support.</para>
+
+ <para><literal>device pflog</literal> enables the optional
+ &man.pflog.4; pseudo network device which can be used to log
+>>>>>>>> traffic to a &man.bpf.4; descriptor. The &man.pflogd.8;
+>>>>>>>> daemon can then be used to store the logging information to
+>>>>>>>> disk.</para>
+
+ <para><literal>device pfsync</literal> enables the optional
+ &man.pfsync.4; pseudo-network device that is used to monitor
+ <quote>state changes</quote>.</para>
</note>
+-->
- <para>Das <acronym>PF</acronym>-Modul kann auch manuell über die
- Kommandozeile geladen werden:</para>
+ <para>In der Voreinstellung liest <application>PF</application>
+ seine Konfiguration aus <filename>/etc/pf.conf</filename> und
+ modifiziert, verwirft oder akzeptiert Pakete anhand der
+ Definitionen in dieser Datei. &os; enthält mehrere
+ Beispieldateien unter
+ <filename>/usr/share/examples/pf/</filename>. Auch die
+ <link xlink:href="http://www.openbsd.org/faq/pf/">PF
+ FAQ</link> enthält sehr ausführliche Beispiele für
+ <application>PF</application>-Regeln.</para>
+
+ <para>Zur Steuerung von <application>PF</application> wird
+ <command>pfctl</command> verwendet. <xref linkend="pfctl"/>
+ fasst einige nützliche Optionen für diesen Befehl zusammen.
+ Eine Beschreibung aller verfügbaren Optionen finden Sie in
+ &man.pfctl.8;.</para>
- <screen>&prompt.root; <userinput>kldload pf.ko</userinput></screen>
+ <table xml:id="pfctl" frame="none" pgwide="1">
+ <title>Nützliche <command>pfctl</command> Optionen</title>
- <para>Protokollierungsfunktionen für PF werden durch das Modul
- <literal>pflog.ko</literal> zur Verfügung gestellt und
- können durch folgenden Eintrag in der
- <filename>/etc/rc.conf</filename> aktiviert werden:</para>
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Kommando</entry>
+ <entry>Aufgabe</entry>
+ </row>
+ </thead>
- <programlisting>pflog_enable="YES"</programlisting>
+ <tbody>
+ <row>
+ <entry><command>pfctl -e</command></entry>
+ <entry><application>PF</application> aktivieren</entry>
+ </row>
- <para>Danach starten Sie das Startup Script, um das Modul
- zu laden:</para>
+ <row>
+ <entry><command>pfctl -d</command></entry>
+ <entry><application>PF</application>
+ deaktivieren</entry>
+ </row>
- <screen>&prompt.root; <userinput>/etc/rc.d/pflog start</userinput></screen>
+ <row>
+ <entry><command>pfctl -F all -f
+ /etc/pf.conf</command></entry>
+ <entry>Alle Filterregeln zurücksetzen
+ (<acronym>NAT</acronym>, Filter, Zustandstabelle) und
+ <filename>/etc/pf.conf</filename> erneut
+ einlesen.</entry>
+ </row>
- <para>Falls Sie noch weitere Features für
- <acronym>PF</acronym> benötigen, müssen Sie diese in den
- Kernel einbauen.</para>
+ <row>
+ <entry><command>pfctl -s [ rules | nat |
+ states ]</command></entry>
+ <entry>Zusammenfassung der Filterregeln,
+ <application>NAT</application>-Regeln, oder der
+ Zustandstabelle.</entry>
+ </row>
+
+ <row>
+ <entry><command>pfctl -vnf
+ /etc/pf.conf</command></entry>
+ <entry>Überprüft <filename>/etc/pf.conf</filename> auf
+ Fehler, lädt aber die Filterregeln nicht neu.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <tip>
+ <para><package>security/sudo</package> ist nützlich um
+ Kommandos mit erhöhten Berechtigungen auszuführen, wie
+ beispielsweise <command>pfctl</command>. Das Programm kann
+ aus der Ports-Sammlung installiert werden.</para>
+ </tip>
+
+ <para>Um den ein- und ausgehenden Verkehr im Auge zu behalten,
+ können Sie ein Werkzeug wie <package>sysutils/pftop</package>
+ benutzen. Sobald das Programm installiert ist, können Sie
+ <application>pftop</application> ausführen, um einen Snapshot
+ des Datenverkehrs zu sehen. Das Format der Ausgabe ist der
+ von &man.top.1; sehr ähnlich.</para>
</sect2>
<sect2>
- <title>PF Kernel-Optionen</title>
+ <title><application>ALTQ</application> aktivieren</title>
- <indexterm>
- <primary>Kerneloptionen</primary>
+ <para>Unter &os; kann <application>ALTQ</application> zusammen
+ mit <application>PF</application> benutzt werden, um Quality
+ of Service (<acronym>QoS</acronym>) bereitzustellen. Sobald
+ <application>ALTQ</application> aktiviert ist, können
+ Warteschlangen definiert werden, mit denen Sie die Priorität
+ für ausgehende Pakete festlegen können.</para>
+
+ <para>Bevor Sie <application>ALTQ</application> aktivieren,
+ sollten Sie &man.altq.4; lesen und sicherstellen, das der
+ Treiber der Netzwerkkarte diese Funktion unterstützt.</para>
+
+ <para><application>ALTQ</application> steht nicht als ladbares
+ Kernelmodul zur Verfügung. Wenn die Netzwerkkarte des Systems
+ <application>ALTQ</application> unterstützt, erstellen Sie
+ nach den Anweisungen in <xref linkend="kernelconfig"/> einen
+ angepassten Kernel. Als erstes muss
+ <application>ALTQ</application> aktiviert werden. Zudem ist
+ mindestens eine weitere Option nötig, um den Algorithmus für
+ die Warteschlange zu bestimmen:</para>
- <secondary>device pf</secondary>
- </indexterm>
+ <programlisting>options ALTQ
+options ALTQ_CBQ # Class Based Queuing (CBQ)
+options ALTQ_RED # Random Early Detection (RED)
+options ALTQ_RIO # RED In/Out
+options ALTQ_HFSC # Hierarchical Packet Schedule (HFSC)
+options ALTQ_PRIQ # Priority Queuing (PRIQ)</programlisting>
- <indexterm>
- <primary>Kerneloptionen</primary>
+ <para>Die folgenden Algorithmen stehen zur Verfügung:</para>
- <secondary>device pflog</secondary>
- </indexterm>
+ <variablelist>
+ <varlistentry>
+ <term>CBQ</term>
+ <listitem>
+ <para>Class Based Queuing (<acronym>CBQ</acronym>) erlaubt
+ es, die Bandbreite einer Verbindung in verschiedene
+ Klassen oder Warteschlangen zu unterteilen, um die
+ Priorität von Datenpaketen basierend auf Filterregeln zu
+ beeinflussen.</para>
+ </listitem>
+ </varlistentry>
- <indexterm>
- <primary>Kerneloptionen</primary>
+ <varlistentry>
+ <term>RED</term>
+ <listitem>
+ <para>Random Early Detection (<acronym>RED</acronym>) wird
+ eingesetzt, um eine Überlastung des Netzwerks zu
+ vermeiden. Dazu ermittelt <acronym>RED</acronym> die
+ Größe der Warteschlange und vergleicht diesen Wert mit
+ den minimalen und maximalen Grenzwerten der
+ Warteschlange. Ist die Warteschlange größer als das
+ erlaubte Maximum, werden alle neuen Pakete nach dem
+ Zufallsprinzip verworfen.</para>
+ </listitem>
+ </varlistentry>
- <secondary>device pfsync</secondary>
- </indexterm>
+ <varlistentry>
+ <term>RIO</term>
+ <listitem>
+ <para>Random Early Detection In and Out
+ (<acronym>RIO</acronym>). Dieser Modus verwaltet
+ mehrere Warteschlangen durchschnittlicher Größe mit
+ mehreren Schwellwerten, eine für jedes
+ <acronym>QoS</acronym>-Level.</para>
+ </listitem>
+ </varlistentry>
- <para>Es ist nicht zwingend nötig, dass Sie
- <acronym>PF</acronym>-Unterstützung in den &os;-Kernel
- kompilieren. Sie werden dies tun müssen, um eine von PFs
- fortgeschritteneren Eigenschaften nutzen zu können, die nicht als
- Kernelmodul verfügbar ist. Genauer handelt es sich dabei um
- &man.pfsync.4;, ein Pseudo-Gerät, welches bestimmte
- Änderungen der <acronym>PF</acronym>-Zustandstabelle offenlegt.
- Es kann mit &man.carp.4; kombiniert werden, um ausfallsichere
- Firewalls mit <acronym>PF</acronym> zu realisieren. Weitere
- Informationen zu <acronym>CARP</acronym> erhalten Sie in
- <xref linkend="carp"/> des Handbuchs.</para>
-
- <para>Die Kernelkonfigurationsoptionen von <acronym>PF</acronym> befinden
- sich in <filename>/usr/src/sys/conf/NOTES</filename> und sind im
- Folgenden wiedergegeben:</para>
+ <varlistentry>
+ <term>HFSC</term>
+ <listitem>
+ <para>Hierachical Fair Service Curve Packet Scheduler
+ (<acronym>HFSC</acronym>) wird in <link
+ xlink:href="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html">
+ http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html</link>
+ beschrieben.</para>
+ </listitem>
+ </varlistentry>
- <programlisting>device pf
-device pflog
-device pfsync</programlisting>
+ <varlistentry>
+ <term>PRIQ</term>
+ <listitem>
+ <para>Priority Queuing (<acronym>PRIQ</acronym>) lässt den
+ Verkehr einer Warteschlange mit höherer Priorität zuerst
+ durch.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
- <para>Die Option <literal>device pf</literal> aktiviert die
- Unterstützung für die <quote>Packet
- Filter</quote>-Firewall (&man.pf.4;).</para>
+ <para>Weitere Informationen über diese Algorithmen und Beispiele
+ für Regelsätze finden Sie unter <link
+ xlink:href="http://www.openbsd.org/faq/pf/queueing.html">
+ http://www.openbsd.org/faq/pf/queueing.html</link>.</para>
+ </sect2>
- <para>Die Option <literal>device pflog</literal> aktiviert das optionale
- &man.pflog.4;-Pseudonetzwerkgerät, das zum Protokollieren
- des Datenverkehrs über einen &man.bpf.4;-Deskriptor
- dient. &man.pflogd.8; ist in der Lage, diese Protokolldateien
- auf Ihre Platte zu speichern.</para>
+ <sect2 xml:id="pf-tutorial">
+ <info>
+ <title><application>PF</application> Regelsätze</title>
+
+ <authorgroup>
+ <author>
+ <personname>
+ <firstname>Peter</firstname>
+ <surname>Hansteen</surname>
+ <othername>N. M.</othername>
+ </personname>
+ <contrib>Beigetragen von </contrib>
+ </author>
+ </authorgroup>
+ </info>
+
+ <para>Dieser Abschnitt beschreibt die Erstellung von angepassten
+ Regelsätzen. Es wird mit dem einfachsten Regelsatz begonnen
+ auf dem dann weitere aufgebaut werden, um die
+ Konzepte und Funktionen von <application>PF</application> an
+ einigen konkreten Beispielen zu verdeutlichen.</para>
+
+ <para>Der einfachste Regelsatz gilt für einen Rechner, der
+ keine Dienste anbietet und Zugriff auf das Internet haben
+ soll. Für diesen minimalen Regelsatz wird
+ <filename>/etc/pf.conf</filename> wie folgt
+ konfiguriert:</para>
+
+ <programlisting>block in all
+pass out all keep state</programlisting>
+
+ <para>Die erste Regel blockiert jeglichen eingehenden
+ Datenverkehr. Die zweite Regel erlaubt ausgehende
+ Verbindungen von diesem Rechner, während die
+ Zustandsinformationen dieser Verbindungen gespeichert werden.
+ Diese Zustandsinformationen machen es möglich, den
+ Antwortverkehr für diese Verbindungen zu erlauben. Der
+ Regelsatz wird mit dem folgenden Befehl geladen:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -e ; pfctl -f /etc/pf.conf</userinput></screen>
+
+ <para>Neben den Zustandsinformationen verfügt
+ <application>PF</application> über
+ <firstterm>Listen</firstterm> und
+ <firstterm>Makros</firstterm>. Diese können bei der
+ Erstellung der Regeln definiert werden. Makros können Listen
+ enthalten und sie müssen vor ihrer ersten Benutzung definiert
+ sein. Fügen Sie beispielsweise folgende Zeilen an den Anfang
+ des Regelsatzes:</para>
+
+ <programlisting>tcp_services = "{ ssh, smtp, domain, www, pop3, auth, pop3s }"
+udp_services = "{ domain }"</programlisting>
+
+ <para><application>PF</application> versteht sowohl Portnamen
+ als auch Portnummern, solange die Namen in
+ <filename>/etc/services</filename> aufgeführt sind. Dieses
+ Beispiel erstellt zwei Makros. Das erste ist eine Liste mit
+ sieben <acronym>TCP</acronym>-Portnamen, die zweite Liste
+ enthält einen <acronym>UDP</acronym>-Portnamen. Sobald ein
+ Makro definiert ist, kann es in den Regeln verwendet werden.
+ In diesem Beispiel wird der gesamte Datenverkehr geblockt, mit
+ Ausnahme der Verbindungen die von diesem Rechner initiiert
+ wurden und sich auf einen der angegebenen
+ <acronym>TCP</acronym>-Dienste oder den
+ <acronym>UDP</acronym>-Dienst beziehen:</para>
+
+ <programlisting>tcp_services = "{ ssh, smtp, domain, www, pop3, auth, pop3s }"
+udp_services = "{ domain }"
+block all
+pass out proto tcp to any port $tcp_services keep state
+pass proto udp to any port $udp_services keep state</programlisting>
+
+ <para>Obwohl <acronym>UDP</acronym> als zustandsloses Protokoll
+ betrachtet wird, ist <application>PF</application> in der Lage
+ einige Zustandsinformationen zu verfolgen. Wenn
+ beispielsweise eine <acronym>UDP</acronym>-Abfrage für einen
+ Nameserver das System verlässt, wird
+ <application>PF</application> nach der Antwort Ausschau halten
+ und das Antwortpaket durch lassen.</para>
+
+ <para>Nachdem der Regelsatz verändert wurde, muss er neu geladen
+ werden:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -f /etc/pf.conf</userinput></screen>
+
+ <para>Wenn keine Syntaxfehler festgestellt werden, wird
+ <command>pfctl</command> keine Ausgabe erzeugen. Die Syntax
+ kann auch getestet werden, bevor der Regelsatz geladen
+ wird:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -nf /etc/pf.conf</userinput></screen>
+
+ <para>Die Option <option>-n</option> bewirkt, dass die Regeln
+ nur interpretiert, jedoch nicht geladen werden. Dies bietet
+ die Möglichkeit, alle Fehler zu korrigieren. Es wird immer
+ der letzte gültige Regelsatz geladen, bis
+ <application>PF</application> entweder deaktiviert, oder ein
+ neuer Regelsatz geladen wird.</para>
+
+ <tip>
+ <para>Wenn Sie beim Laden oder Prüfen des Regelsatzes noch die
+ Option <option>-v</option> hinzufügen, wird
+ <command>pfctl</command> den komplett interpretierten
+ Regelsatz anzeigen. Dies ist äußerst nützlich, wenn Sie
+ versuchen Fehler im Regelsatz zu finden.</para>
+ </tip>
+
+ <sect3 xml:id="pftut-gateway">
+ <title>Einfaches Gateway mit <acronym>NAT</acronym></title>
+
+ <para>Dieser Abschnitt zeigt wie ein &os;-System mit
+ <application>PF</application> als Gateway konfiguriert wird.
+ Das Gateway muss über mindestens zwei Netzwerkkarten
+ verfügen, die jeweils mit einem separaten Netzwerk verbunden
+ sind. In diesem Beispiel ist <filename>xl1</filename> mit
+ dem Internet verbunden und <filename>xl0</filename> ist mit
+ dem internen Netzwerk verbunden.</para>
+
+ <para>Aktivieren Sie zunächst das Gateway, damit der Rechner
+ den Netzwerkverkehr von einer Schnittstelle zur nächsten
+ weiterleiten kann. Diese
+ <application>sysctl</application>-Einstellung sorgt dafür,
+ dass <acronym>IPv4</acronym>-Pakete weitergeleitet
+ werden:</para>
+
+ <screen>&prompt.root; <userinput>sysctl net.inet.ip.forwarding=1</userinput></screen>
+
+ <para>So leiten Sie <acronym>IPv6</acronym>-Datenverkehr
+ weiter:</para>
+
+ <screen>&prompt.root; <userinput>sysctl net.inet6.ip6.forwarding=1</userinput></screen>
+
+ <para>Um diese Einstellungen beim Systemstart zu aktivieren,
+ fügen Sie folgende Zeilen in
+ <filename>/etc/rc.conf</filename> ein:</para>
+
+ <programlisting>gateway_enable="YES" #für ipv4
+ipv6_gateway_enable="YES" #für ipv6</programlisting>
+
+ <para>Prüfen Sie mit <command>ifconfig</command>, dass beide
+ Schnittstellen vorhanden und aktiv sind.</para>
+
+ <para>Als nächstes erstellen Sie die nötigen
+ <application>PF</application>-Regeln, damit das Gateway den
+ Datenverkehr weiterleiten kann. Die folgende Regel erlaubt
+ den zustandsorientierten Verkehr aus dem Internet zu den
+ Rechnern im Netzwerk:</para>
+
+ <programlisting>pass in on xl1 from xl1:network to xl0:network port $ports keep state</programlisting>
+
+ <para>Diese Regel erlaubt lediglich den Datenverkehr über das
+ Gateway auf der internen Schnittstelle. Damit die Pakete
+ noch weiter gehen, wird eine passende Regel benötigt:</para>
+
+ <programlisting>pass out on xl0 from xl1:network to xl0:network port $ports keep state</programlisting>
+
+ <para>Obwohl diese beiden Regeln funktionieren, werden sie
+ in der Praxis so spezifisch selten benötigt. Ein lesbarer
+ Regelsatz ist oft ein sicherer Regelsatz. Der Rest dieses
+ Abschnitts zeigt, wie Sie die Regeln so einfach und lesbar
+ wie möglich halten. Zum Beispiel könnten die beiden Regeln
+ zu einer Regel zusammengefasst werden:</para>
+
+ <programlisting>pass from xl1:network to any port $ports keep state</programlisting>
+
+ <para>Die Notation <literal>interface:network</literal> kann
+ durch ein Makro ersetzt werden, um den Regelsatz besser
+ lesbar zu machen. Zum Beispiel könnte für das Netzwerk an
+ der internen Schnittstelle (<literal>xl0:network</literal>)
+ ein Makro namens <literal>$localnet</literal> definiert
+ werden. Alternativ könnte für die Definition von
+ <literal>$localnet</literal> auch eine
+ <emphasis>IP-Adresse/Netzmaske</emphasis> Notation verwendet
+ werden, um ein Netzwerk zu bezeichnen, beispielsweise
+ <literal>192.168.100.1/24</literal> für ein privates
+ Subnetz.</para>
+
+ <para>Bei Bedarf kann für <literal>$localnet</literal> auch
+ eine Liste von Netzwerken definiert werden. Abhängig von
+ den Bedürfnissen kann <literal>$localnet</literal> auch für
+ eine typische Regel wie folgt verwendet werden:</para>
+
+ <programlisting>pass from $localnet to any port $ports keep state</programlisting>
+
+ <para>Der folgende Regelsatz erlaubt sämtlichen Verkehr, der
+ von den Rechnern im internen Netzwerk initiiert wird.
+ Zunächst werden zwei Makros definiert, die die externen und
+ internen 3COM-Schnittstellen repräsentieren.</para>
+
+ <note>
+ <para>Bei Einwählverbindungen wird <filename>tun0</filename>
+ für die externe Schnittstelle verwendet. Bei
+ <acronym>ADSL</acronym>-Verbindungen, insbesondere denen
+ die <acronym>PPP</acronym> over Ethernet
+ (<acronym>PPPoE</acronym>) verwenden, ist die richtige
+ externe Schnittstelle <filename>tun0</filename> und nicht
+ die physische Ethernet-Schnittstelle.</para>
+ </note>
+
+ <programlisting>ext_if = "xl0" # macro for external interface - use tun0 for PPPoE
+int_if = "xl1" # macro for internal interface
+localnet = $int_if:network
+# ext_if IP address could be dynamic, hence ($ext_if)
+nat on $ext_if from $localnet to any -> ($ext_if)
+block all
+pass from { lo0, $localnet } to any keep state</programlisting>
+
+ <para>Dieser Regelsatz führt die <acronym>NAT</acronym>-Regel
+ ein, die verwendet wird, um die Übersetzung der
+ Netzwerkadressen von den nicht-routebaren Adressen im
+ internen Netzwerk auf die <acronym>IP</acronym>-Adresse der
+ externen Schnittstelle zu handhaben. Die Klammern im
+ letzten Teil der <acronym>NAT</acronym>-Regel
+ <literal>($ext_if)</literal> werden angegeben, wenn die
+ <acronym>IP</acronym>-Adresse der externen Schnittstelle
+ dynamisch zugewiesen wird. Damit wird sichergestellt, dass
+ der Netzwerkverkehr ohne schwerwiegende Unterbrechungen
+ weiterläuft, auch wenn sich die externe
+ <acronym>IP</acronym>-Adresse ändert.</para>
+
+ <para>Beachten Sie, dass dieser Regelsatz wahrscheinlich mehr
+ Verkehr aus dem Netzwerk zulässt, als eigentlich nötig ist.
+ Bei einem angemessenen Aufbau könnte folgendes Makro
+ erstellt werden:</para>
+
+ <programlisting>client_out = "{ ftp-data, ftp, ssh, domain, pop3, auth, nntp, http, \
+ https, cvspserver, 2628, 5999, 8000, 8080 }"</programlisting>
+
+ <para>Dieses Makro wird dann in der Filterregel
+ benutzt:</para>
+
+ <programlisting>pass inet proto tcp from $localnet to any port $client_out \
+ flags S/SA keep state</programlisting>
+
+ <para>Weitere <literal>pass</literal> Regeln werden
+ vielleicht noch benötigt. Diese Regel aktiviert
+ <acronym>SSH</acronym> auf der externen
+ Schnittstelle:</para>
+
+ <programlisting>pass in inet proto tcp to $ext_if port ssh</programlisting>
+
+ <para>Dieses Makrodefinition und Regel erlaubt
+ <acronym>DNS</acronym> und <acronym>NTP</acronym> für
+ interne Clients:</para>
+
+ <programlisting>udp_services = "{ domain, ntp }"
+pass quick inet proto { tcp, udp } to any port $udp_services keep state</programlisting>
+
+ <para>Beachten Sie das Schlüsselwort <literal>quick</literal>
+ in dieser Regel. Da der Regelsatz aus mehreren Regeln
+ besteht, ist es wichtig, die Beziehungen zwischen den
+ einzelnen Regeln zu verstehen. Die Regeln werden von oben
+ nach unten ausgewertet, in der Reihenfolge wie sie
+ geschrieben sind. Für jedes Paket oder jede Verbindung, das
+ <application>PF</application> ausgewertet, wird die letzte
+ übereinstimmende Regel im Regelsatz angewendet. Wenn jedoch
+ ein Paket auf eine Regel passt, welche das Schlüsselwort
+ <literal>quick</literal> enthält, wird das Paket
+ entsprechend dieser Regel behandelt und die
+ Regelverarbeitung wird gestoppt. Diese Vorgehensweise ist
+ sehr nützlich, wenn eine Ausnahme von den allgemeinen Regeln
+ erforderlich ist.</para>
+ </sect3>
- <para>Die Option <literal>device pfsync</literal> aktiviert das optionale
- &man.pfsync.4;-Pseudonetzwerkgerät für die
- Überwachung von <quote>Statusänderungen</quote>.</para>
- </sect2>
+ <sect3 xml:id="pftut-ftp">
+ <title>Einen <acronym>FTP</acronym>-Proxy einrichten</title>
- <sect2>
- <title>Verfügbare rc.conf-Optionen</title>
+ <para>Die Konfiguration einer funktionierenden Regel für
+ <acronym>FTP</acronym> kann aufgrund der Beschaffenheit des
+ <acronym>FTP</acronym>-Protokolls problematisch sein.
+ <acronym>FTP</acronym> ist sehr viel älter als Firewalls
+ und schon vom Design her unsicher. Die häufigsten Argumente
+ gegen eine Verwendung von <acronym>FTP</acronym>
+ sind:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Passwörter werden im Klartext übertragen.</para>
+ </listitem>
+
+ <listitem>
+ <para>Das Protokoll erfordert die Verwendung von
+ mindestens zwei <acronym>TCP</acronym>-Verbindungen
+ (Steuerung und Daten) auf separaten Ports.</para>
+ </listitem>
+
+ <listitem>
+ <para>Wenn eine Sitzung aufgebaut wird, werden die Daten
+ auf zufällig ausgewählten Ports übermittelt.</para>
+ </listitem>
+ </itemizedlist>
- <para>Die folgenden &man.rc.conf.5;-Einträge konfigurieren
- <acronym>PF</acronym> und &man.pflog.4; beim Systemstart:</para>
+ <para>All diese Punkte stellen Herausforderungen dar, noch
+ bevor die Client- oder Server-Software auf potenzielle
+ Sicherheitslücken überprüft wurde. Es existieren aber auch
+ sichere Alternativen für die Dateiübertragung, wie
+ &man.sftp.1; oder &man.scp.1;, wo die Authentifizierung und
+ die Datenübertragung über eine verschlüsselte Verbindung
+ erfolgt.</para>
+
+ <para>Für Situationen, in denen <acronym>FTP</acronym>
+ erforderlich ist, kann <application>PF</application> den
+ <acronym>FTP</acronym>-Datenverkehr an ein kleines
+ Proxy-Programm namens &man.ftp-proxy.8; weiterleiten.
+ Dieses Programm ist im Basissystem von &os; enthalten. Die
+ Aufgabe des Proxies ist das dynamische Einfügen und
+ Entfernen von Regeln im Regelsatz. Dies wird durch den
+ Einsatz von Ankern erreicht, damit der
+ <acronym>FTP</acronym>-Verkehr korrekt verarbeitet werden
+ kann.</para>
+
+ <para>Fügen Sie folgende Zeilen in
+ <filename>/etc/rc.conf</filename> ein, um den Proxy zu
+ aktivieren:</para>
+
+ <programlisting>ftpproxy_enable="YES"</programlisting>
+
+ <para>Danach kann der Proxy mit <command>service ftp-proxy
+ start</command> gestartet werden.</para>
+
+ <para>Für die Grundkonfiguration müssen drei weitere Einträge
+ in <filename>/etc/pf.conf</filename> hinzugefügt werden.
+ Zunächst werden die Anker hinzugefügt, die der Proxy für die
+ <acronym>FTP</acronym>-Sitzungen verwendet:</para>
+
+ <programlisting>nat-anchor "ftp-proxy/*"
+rdr-anchor "ftp-proxy/*"</programlisting>
+
+ <para>Dann wird eine <literal>pass</literal>-Regel benötigt,
+ damit der <acronym>FTP</acronym>-Datenverkehr durch den
+ Proxy geleitet werden kann.</para>
+
+ <para>Die Regeln für Umleitung und <acronym>NAT</acronym>
+ müssen vor den eigentlichen Filterregeln definiert werden.
+ Fügen Sie diese <literal>rdr</literal>-Regel unmittelbar
+ nach der <acronym>NAT</acronym>-Regel ein:</para>
+
+ <programlisting>rdr pass on $int_if proto tcp from any to any port ftp -> 127.0.0.1 port 8021</programlisting>
+
+ <para>Zum Schluss muss der umgeleitete Verkehr die Firewall
+ passieren dürfen:</para>
+
+ <programlisting>pass out proto tcp from $proxy to any port ftp</programlisting>
+
+ <para><literal>$poxy</literal> enthält die Adresse, an dem der
+ Proxy-Daemon gebunden ist.</para>
+
+ <para>Speichern Sie <filename>/etc/pf.conf</filename> und
+ laden Sie die Regeln neu. Prüfen Sie von einem Client, ob
+ die <acronym>FTP</acronym>-Verbindungen
+ funktionieren:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -f /etc/pf.conf</userinput></screen>
+
+ <para>Dieses Beispiel umfasst eine Grundkonfiguration, in der
+ die Rechner im lokalen Netzwerk Zugriff auf entfernte
+ <acronym>FTP</acronym>-Server benötigen. Diese
+ Konfiguration sollte mit den meisten
+ <acronym>FTP</acronym>-Clients und -Servern gut
+ funktionieren. Das Verhalten von &man.ftp-proxy.8; kann
+ durch diverse Optionen in <literal>ftpproxy_flags</literal>
+ beeinflusst werden. Einige Clients und Server haben
+ bestimmte Marotten, die bei der Konfiguration berücksichtigt
+ werden müssen. Es kann zum Beispiel notwendig sein, den
+ <acronym>FTP</acronym>-Datenverkehr für den Proxy einer
+ bestimmten Warteschlange zuzuweisen.</para>
+
+ <para>Es besteht auch die Möglichkeit einen
+ <acronym>FTP</acronym>-Server mit
+ <application>PF</application> und &man.ftp-proxy.8; zu
+ schützen. Konfigurieren Sie einen separaten
+ <command>ftp-proxy</command> mit <option>-R</option> für den
+ Reverse-Modus auf einem separaten Port und einer eigenen
+ Umleitungsregel.</para>
+ </sect3>
- <programlisting>pf_enable="YES" # PF aktivieren (Modul, wenn nötig, aktivieren)
-pf_rules="/etc/pf.conf" # Datei mit Regeldefinitionen für pf
-pf_flags="" # zusätzliche Parameter für den Start von pfctl
-pflog_enable="YES" # starte pflogd(8)
-pflog_logfile="/var/log/pflog" # wo soll pflogd die Protokolldatei speichern
-pflog_flags="" # zusätzliche Parameter für den Start von pflogd</programlisting>
+ <sect3 xml:id="pftut-icmp">
+ <title><acronym>ICMP</acronym> verwalten</title>
- <para>Wenn Sie ein lokales Netzwerk hinter dieser Firewall betreiben
- und Pakete für dessen Rechner weiterleiten oder NAT verwenden
- wollen, benötigen Sie zusätzlich die folgende Option:</para>
+ <para>Viele Werkzeuge zur Fehlerbehebung in
+ <acronym>TCP/IP</acronym>-Netzwerken verlassen sich auf das
+ <foreignphrase>Internet Control Message
+ Protocol</foreignphrase> (<acronym>ICMP</acronym>), das
+ speziell für diese Zwecke entwickelt wurde.</para>
+
+ <para>Das <acronym>ICMP</acronym>-Protokoll sendet und
+ empfängt Kontrollnachrichten zwischen Rechnern und Gateways,
+ hauptsächlich um ungewöhnliche Bedingungen auf dem Weg zum
+ Zielrechner zu berichten. Router verwenden
+ <acronym>ICMP</acronym> um Paketgrößen und andere
+ Übertragungsparameter zu ermitteln. Dieser Prozess ist auch
+ als <emphasis>Path <acronym>MTU</acronym>
+ Discovery</emphasis> bekannt.</para>
+
+ <para>Aus der Sicht einer Firewall sind einige
+ <acronym>ICMP</acronym>-Kontrollnachrichten anfällig für
+ bekannte Angriffsmethoden. Zwar ist die Fehlerbehebung
+ einfacher, wenn alle <acronym>ICMP</acronym>-Pakete
+ bedingungslos durch gelassen werden, aber dass macht es auch
+ für Angreifer leichter, Informationen über das Netzwerk zu
+ extrahieren. Aus diesen Gründen ist die folgende Regel nicht
+ optimal:</para>
+
+ <programlisting>pass inet proto icmp from any to any</programlisting>
+
+ <para>Eine Lösung besteht darin, nur den
+ <acronym>ICMP</acronym>-Verkehr aus dem lokalen Netz zu
+ akzeptieren, während <acronym>ICMP</acronym>-Pakete von
+ außerhalb des Netzwerks verworfen werden:</para>
+
+ <programlisting>pass inet proto icmp from $localnet to any keep state
+pass inet proto icmp from any to $ext_if keep state</programlisting>
+
+ <para>Es stehen noch weitere Optionen zur Verfügung, die die
+ Flexibilität von <application>PF</application>
+ demonstrieren. Anstatt beispielsweise alle
+ <acronym>ICMP</acronym>-Nachrichten zu erlauben, kann man
+ die Nachrichten angeben, die von &man.ping.8; und
+ &man.traceroute.8; verwendet werden. Beginnen Sie damit,
+ ein Makro für diese Art von Nachrichten zu
+ definieren:</para>
+
+ <programlisting>icmp_types = "echoreq"</programlisting>
+
+ <para>Erstellen Sie dann eine Regel, die das eben erstellte
+ Makro benutzt:</para>
+
+ <programlisting>pass inet proto icmp all icmp-type $icmp_types keep state</programlisting>
+
+ <para>Wenn weitere Arten von
+ <acronym>ICMP</acronym>-Nachrichten benötigt werden, kann
+ die Liste <literal>icmp_types</literal> einfach erweitert
+ werden. Geben Sie <command>more
+ /usr/src/contrib/pf/pfctl/pfctl_parser.c</command> ein, um
+ eine Liste der von <application>PF</application>
+ unterstützten <acronym>ICMP</acronym>-Nachrichten zu sehen.
+ Die Webseite <link
+ xlink:href="http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml">
+ http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml</link>
+ enthält eine Erklärung für jeden Nachrichtentyp.</para>
+
+ <para>Da &unix; <command>traceroute</command> in der
+ Voreinstellung <acronym>UDP</acronym> verwendet, wird eine
+ weitere Regel benötigt:</para>
+
+ <programlisting># allow out the default range for traceroute(8):
+pass out on $ext_if inet proto udp from any to any port 33433 >< 33626 keep state</programlisting>
+
+ <para>Da <command>TRACERT.EXE</command> unter
+ µsoft.windows;-Systemen <acronym>ICMP</acronym> Echo
+ Request Meldungen verwendet, ist nur die erste Regel
+ notwendig um Traces für solche Systeme zu ermöglichen.
+ &unix; <command>traceroute</command> kann aber auch andere
+ Protokolle verwenden, zum Beispiel <acronym>ICMP</acronym>
+ Echo Request, wenn der Schalter <option>-I</option> benutzt
+ wird. Details finden Sie in &man.traceroute.8;.</para>
+
+ <sect4 xml:id="pftut-pathmtudisc">
+ <title>Path <acronym>MTU</acronym> Discovery</title>
+
+ <para>Internet-Protokolle sind so ausgelegt, dass sie
+ geräteunabhängig sind. Eine Folge davon ist, dass die
+ optimale Paketgröße nicht immer zuverlässig vorhergesagt
+ werden kann. Das größte Hindernis ist hier die
+ <emphasis>Maximum Transmission Unit</emphasis>
+ (<literal>MTU</literal>), welche die Obergrenze für die
+ Paketgröße festlegt. Die <acronym>MTU</acronym> für die
+ Schnittstelle des Systems können Sie sich mit
+ <command>ifconfig</command> anzeigen lassen.</para>
+
+ <para><acronym>TCP/IP</acronym> benutzt ein Verfahren, das
+ als <foreignphrase>path MTU discovery</foreignphrase>
+ bekannt ist, um die korrekte Paketgröße für eine
+ Verbindung zu bestimmen. Dieses Verfahren sendet Pakete
+ unterschiedlicher Größe mit dem Flag <quote>do not
+ fragment</quote> und erwartet ein
+ <acronym>ICMP</acronym>-Antwortpaket vom Typ
+ <quote>type 3, code 4</quote>, wenn die Obergrenze
+ erreicht worden ist. Typ 3 bedeutet <quote>Ziel nicht
+ erreichbar</quote> und Code 4 ist die Abkürzung für
+ <quote>Fragmentierung nötig, aber Do-not-Fragment Flag ist
+ gesetzt</quote>. Um <foreignphrase>path MTU
+ discovery</foreignphrase> zu erlauben und damit
+ Verbindungen zu anderen <acronym>MTU</acronym>s zu
+ unterstützen, fügen Sie dem Makro
+ <literal>icmp_types</literal> den Typ <literal>destination
+ unreachable</literal> hinzu:</para>
+
+ <programlisting>icmp_types = "{ echoreq, unreach }"</programlisting>
+
+ <para>Da die <literal>pass</literal>-Regel bereits das Makro
+ verwendet, braucht es nicht geändert werden um den neuen
+ <acronym>ICMP</acronym>-Typ zu unterstützen:</para>
+
+ <programlisting>pass inet proto icmp all icmp-type $icmp_types keep state</programlisting>
+
+ <para><application>PF</application> kann alle Variationen
+ von <acronym>ICMP</acronym>-Typen und Codes filtern. Eine
+ Liste der verfügbaren Typen und Codes ist in &man.icmp.4;
+ und &man.icmp6.4; dokumentiert.</para>
+ </sect4>
+ </sect3>
- <programlisting>gateway_enable="YES" # LAN Gateway aktivieren</programlisting>
- </sect2>
+ <sect3 xml:id="pftut-tables">
+ <title>Tabellen benutzen</title>
- <sect2>
- <title>Filterregeln erstellen</title>
+ <para>Manchmal sind bestimmte Daten für die Filterung und
+ Weiterleitung interessant, jedoch wäre eine Definition einer
+ solchen Filterregel für einen Regelsatz viel zu lang.
+ <application>PF</application> unterstützt die Verwendung von
+ Tabellen. Dies sind definierte Listen, die verändert werden
+ können, ohne den gesamten Regelsatz neu laden zu müssen.
+ Zudem können diese Listen sehr schnell durchsucht werden.
+ Tabellennamen sind immer in <literal>< ></literal>
+ eingeschlossen und sehen wie folgt aus:</para>
+
+ <programlisting>table <clients> { 192.168.2.0/24, !192.168.2.5 }</programlisting>
+
+ <para>In diesem Beispiel ist das Netzwerk
+ <literal>192.168.2.0/24</literal> Teil der Tabelle.
+ <literal>192.168.2.5</literal> wurde im dem Operator
+ <literal>!</literal> ausgeschlossen und ist somit nicht Teil
+ der Tabelle. Es ist auch möglich Tabellen aus Dateien zu
+ laden, wo jeder Eintrag in einer separaten Zeile steht.
+ Dieses Beispiel verwendet dazu die Datei
+ <filename>/etc/clients</filename>:</para>
+
+ <programlisting>192.168.2.0/24
+!192.168.2.5</programlisting>
+
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-doc-head
mailing list