Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F111040650
D6738.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
70 KB
Referenced Files
None
Subscribers
None
D6738.diff
View Options
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
@@ -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>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>
- <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>
+ <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>
+
+ <programlisting>pf_rules="<replaceable>/path/to/pf.conf</replaceable>"</programlisting>
+
+ <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>
- <screen>&prompt.root; <userinput>/etc/rc.d/pf start</userinput></screen>
+ <programlisting>pflog_enable="YES"</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>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>
- <programlisting>pf_rules="<replaceable>/path/to/pf.conf</replaceable>"</programlisting>
+ <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>
+
+ <row>
+ <entry><command>pfctl -s [ rules | nat |
+ states ]</command></entry>
+ <entry>Zusammenfassung der Filterregeln,
+ <application>NAT</application>-Regeln, oder der
+ Zustandstabelle.</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 -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>
- <para>Die folgenden &man.rc.conf.5;-Einträge konfigurieren
- <acronym>PF</acronym> und &man.pflog.4; beim Systemstart:</para>
+ <listitem>
+ <para>Das Protokoll erfordert die Verwendung von
+ mindestens zwei <acronym>TCP</acronym>-Verbindungen
+ (Steuerung und Daten) auf separaten Ports.</para>
+ </listitem>
- <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>
+ <listitem>
+ <para>Wenn eine Sitzung aufgebaut wird, werden die Daten
+ auf zufällig ausgewählten Ports übermittelt.</para>
+ </listitem>
+ </itemizedlist>
- <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>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>gateway_enable="YES" # LAN Gateway aktivieren</programlisting>
- </sect2>
+ <sect3 xml:id="pftut-icmp">
+ <title><acronym>ICMP</acronym> verwalten</title>
- <sect2>
- <title>Filterregeln erstellen</title>
+ <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>
- <para><acronym>PF</acronym> liest seine konfigurierten Regeln aus
- &man.pf.conf.5; (standardmässig <filename>/etc/pf.conf</filename>)
- und modifiziert, verwirft oder lässt Pakete passieren anhand der
- Regeln oder Definitionen, die in dieser Datei gespeichert sind. &os;
- enthält dazu nach der Installation mehrere Beispieldateien, die
- in <filename>/usr/share/examples/pf/</filename> abgelegt sind.
- Für eine ausführliche Behandlung des
- <acronym>PF</acronym>-Regelwerks lesen Sie bitte die <link xlink:href="http://www.openbsd.org/faq/pf/">PF FAQ</link>.</para>
+ <sect3 xml:id="pftut-tables">
+ <title>Tabellen benutzen</title>
- <warning>
- <para>Beim Lesen der <link xlink:href="http://www.openbsd.org/faq/pf/">PF FAQ</link> wollten Sie
- darauf achten, dass verschiedene Versionen von &os; auch
- unterschiedliche Versionen von PF enthalten.
- &os; 8.<replaceable>X</replaceable> (und älter)
- &os;-Versionen benutzen <acronym>PF</acronym> aus OpenBSD 4.1.
- &os; 9.<replaceable>X</replaceable> (und neuer) benutzen
- hingegen <acronym>PF</acronym> aus OpenBSD 4.5.</para>
- </warning>
+ <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>
+
+ <para>Um sich auf diese Datei zu beziehen, definieren Sie die
+ Tabelle wie folgt:</para>
+
+ <programlisting>table <clients> persist file "/etc/clients"</programlisting>
+
+ <para>Sobald die Tabelle definiert ist, kann eine Filterregel
+ Bezug darauf nehmen:</para>
+
+ <programlisting>pass inet proto tcp from <clients> to any port $client_out flags S/SA keep state</programlisting>
+
+ <para>Die Inhalte einer Tabelle können mit
+ <command>pfctl</command> direkt verändert werden. Dieses
+ Beispiel fügt ein weiteres Netzwerk zur Tabelle
+ hinzu:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -t clients -T add 192.168.1.0/16</userinput></screen>
+
+ <para>Beachten Sie, dass auf diese Weise vorgenommene
+ Änderungen direkt übernommen werden, jedoch bei einem
+ Neustart des Systems oder bei einem Stromausfall verloren
+ gehen. Um die Änderungen dauerhaft zu speichern, müssen sie
+ in der Definition der Tabelle oder in der Datei, auf die
+ sich die Tabelle bezieht, bearbeitet werden. Mit einem
+ &man.cron.8; Job und einem Befehl wie
+ <command>pfctl -t clients -T show >/etc/clients</command>
+ können Sie auch eine Kopie der Tabelle auf Platte speichern
+ und dann in regelmäßigen Abständen aktualisieren.
+ Alternativ kann <filename>/etc/clients</filename> auch mit
+ den Tabelleneinträgen, die sich aktuell im Speicher
+ befinden, aktualisiert werden.</para>
- <para>Die &a.pf; ist eine erste Anlaufstelle für
- Fragen zur Konfiguration und dem Einsatz der <acronym>PF</acronym>
- Firewall. Vergessen Sie nicht, vorher die Mailinglistenarchive zu
- durchsuchen, bevor Sie dort eine Frage stellen!</para>
- </sect2>
+ <screen>&prompt.root; <userinput>pfctl -t clients -T replace -f /etc/clients</userinput></screen>
+ </sect3>
- <sect2>
- <title>Arbeiten mit PF</title>
+ <sect3 xml:id="pftut-overload">
+ <title>Verwendung von Tabellen zum Schutz von
+ <acronym>SSH</acronym></title>
+
+ <para>Benutzer, die <acronym>SSH</acronym> auf einer externen
+ Schnittstelle ausführen, haben wahrscheinlich schon einmal
+ ähnliche Meldungen in den Protokolldateien gesehen:</para>
+
+ <programlisting>Sep 26 03:12:34 skapet sshd[25771]: Failed password for root from 200.72.41.31 port 40992 ssh2
+Sep 26 03:12:34 skapet sshd[5279]: Failed password for root from 200.72.41.31 port 40992 ssh2
+Sep 26 03:12:35 skapet sshd[5279]: Received disconnect from 200.72.41.31: 11: Bye Bye
+Sep 26 03:12:44 skapet sshd[29635]: Invalid user admin from 200.72.41.31
+Sep 26 03:12:44 skapet sshd[24703]: input_userauth_request: invalid user admin
+Sep 26 03:12:44 skapet sshd[24703]: Failed password for invalid user admin from 200.72.41.31 port 41484 ssh2</programlisting>
+
+ <para>Diese Meldungen deuten auf einen Brute-Force-Angriff
+ hin, bei dem ein Angreifer oder ein Programm versucht,
+ den Benutzernamen und das Passwort zu erraten, um Zugriff
+ auf das System zu bekommen.</para>
+
+ <para>Wenn der Zugriff über <acronym>SSH</acronym> für
+ berechtigte Benutzer erforderlich ist, kann eine Änderung
+ des Standard-Ports für <acronym>SSH</acronym> einen gewissen
+ Schutz bieten. Allerdings bietet
+ <application>PF</application> eine elegantere Lösung für
+ dieses Problem. <literal>pass</literal>-Regeln können
+ Einschränkungen für Dinge enthalten, die ein verbindender
+ Rechner tun kann. Bei einem Verstoß gegen diese
+ Einschränkungen kann dann dem betroffenen Rechner der
+ Zugriff teilweise oder ganz entzogen werden. Es ist sogar
+ möglich, alle bestehenden Verbindungen zu trennen, falls die
+ Grenze überschritten wird.</para>
+
+ <para>Um dies zu konfigurieren, erstellen Sie folgende Tabelle
+ im Regelsatz:</para>
+
+ <programlisting>table <bruteforce> persist</programlisting>
+
+ <para>Fügen Sie dann ziemlich am Anfang der Filterregeln
+ folgende Regeln hinzu, um die Brute-Force-Angriffe zu
+ blocken und gleichzeitig berechtigte Verbindungen zu
+ erlauben:</para>
+
+ <programlisting>block quick from <bruteforce>
+pass inet proto tcp from any to $localnet port $tcp_services \
+ flags S/SA keep state \
+ (max-src-conn <replaceable>100</replaceable>, max-src-conn-rate <replaceable>15/5</replaceable>, \
+ overload <bruteforce> flush global)</programlisting>
+
+ <para>Der Teil in Klammern definiert die Grenzwerte. Die
+ Zahlen sollten an die lokalen Anforderungen angepasst
+ werden. Die Zeilen können wie folgt interpretiert
+ werden:</para>
+
+ <para><literal>max-src-conn</literal> definiert die maximal
+ erlaubte Anzahl gleichzeitiger Verbindungen von einem
+ Rechner.</para>
+
+ <para><literal>max-src-conn-rate</literal> definiert die
+ maximal erlaubte Anzahl neuer Verbindungen eines einzelnen
+ Rechners (<replaceable>15</replaceable>) pro Anzahl von
+ Sekunden (<replaceable>5</replaceable>).</para>
+
+ <para><literal>overload <bruteforce></literal> bedeutet,
+ dass jeder Rechner, der diesen Grenzwert überschreitet, zur
+ Tabelle <literal>bruteforce</literal> hinzugefügt wird.
+ Diese Filterregel blockiert jeglichen Datenverkehr von
+ Adressen aus der Tabelle
+ <literal>bruteforce</literal>.</para>
+
+ <para><literal>flush global</literal> besagt, dass alle
+ (<literal>global</literal>) Verbindungen dieses Rechners
+ getrennt (<literal>flush</literal>) werden, wenn der
+ Grenzwert erreicht wird.</para>
+
+ <note>
+ <para>Diese Filterregeln helfen nicht bei langsamen
+ Brute-Force-Angriffen, wie sie in <link
+ xlink:href="http://home.nuug.no/~peter/hailmary2013/">
+ http://home.nuug.no/~peter/hailmary2013/</link>
+ beschrieben sind.</para>
+ </note>
+
+ <para>Dieser Beispielregelsatz dient lediglich als
+ Illustration. Wenn Sie allgemein eine große Anzahl an
+ Verbindungen erlauben wollen, aber gleichzeitig
+ bei <acronym>SSH</acronym> etwas restriktiver vorgehen
+ möchten, können Sie die obige Regel ergänzen:</para>
+
+ <programlisting>pass quick proto { tcp, udp } from any to any port ssh \
+ flags S/SA keep state \
+ (max-src-conn 15, max-src-conn-rate 5/3, \
+ overload <bruteforce> flush global)</programlisting>
+
+ <note>
+ <!-- XXX Overloaders == agressive Rechner -->
+ <title>Es ist möglicherweise nicht notwendig, alle
+ aggressiven Rechner zu blockieren</title>
+
+ <para>Es ist zu erwähnen, dass der
+ <literal>overlaod</literal>-Mechanismus eine allgemeine
+ Technik darstellt, die nicht auf <acronym>SSH</acronym>
+ beschränkt ist. Außerdem ist es nicht immer optimal,
+ Datenverkehr von aggressiven Rechnern zu
+ blockieren.</para>
+
+ <para>Eine <literal>overload</literal>-Regel kann
+ beispielsweise benutzt werden, um einen Mail- oder
+ Webserver zu schützen. Die
+ <literal>overload</literal>-Tabelle könnte dann in einer
+ Regel verwendet werden, um aggressive Rechner einer
+ Warteschlange mit geringerer Bandbreite zuzuweisen, oder
+ den Rechner auf eine bestimtme Webseite umzuleiten.</para>
+ </note>
+
+ <para>Im Laufe der Zeit werden die Tabellen durch die
+ <literal>overload</literal>-Regeln immer größer und belegen
+ immer mehr Speicher. Manchmal wird eine geblockte
+ <acronym>IP</acronym>-Adresse einem Rechner dynamisch
+ zugewiesen, der eigentlich berechtigt ist, mit den Rechnern
+ im lokalen Netzwerk zu kommunizieren.</para>
+
+ <para>Für solche Situationen bietet <command>pfctl</command>
+ die Möglichkeit, Tabelleneinträge auslaufen zu lassen.
+ Dieses Kommando würde beispielsweise Einträge aus der
+ Tabelle <literal><bruteforce></literal> löschen,
+ die seit <literal>86400</literal> Sekunden nicht mehr
+ referenziert wurden:</para>
+
+ <screen>&prompt.root; <userinput>pfctl -t bruteforce -T expire 86400</userinput></screen>
+
+ <para>Eine ähnliche Funktionalität bietet
+ <package>security/expiretable</package>, welches Einträge
+ entfernt, die für einen bestimmten Zeitraum nicht
+ referenziert wurden.</para>
+
+ <para>Nach der Installation kann
+ <application>expiretable</application> benutzt werden, um
+ Einträge aus der Tabelle
+ <literal><bruteforce></literal> nach einer bestimmten
+ Zeit zu entfernen. Dieses Beispiel entfernt alle Einträge,
+ die älter sind als 24 Stunden:</para>
- <para>Benutzen Sie &man.pfctl.8;, um <acronym>PF</acronym> zu steuern.
- Unten finden Sie ein paar nützliche Befehle (lesen Sie auch die
- Manualpage zu &man.pfctl.8;, um alle verfügbaren Optionen
- nachzuschlagen):</para>
+ <programlisting>/usr/local/sbin/expiretable -v -d -t 24h bruteforce</programlisting>
+ </sect3>
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Befehl</entry>
- <entry>Zweck</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry><command>pfctl -e</command></entry>
- <entry>PF aktivieren</entry>
- </row>
-
- <row>
- <entry><command>pfctl -d</command></entry>
- <entry>PF deaktivieren</entry>
- </row>
-
- <row>
- <entry><command>pfctl -F all -f /etc/pf.conf</command></entry>
- <entry>Alle Filterregeln zurücksetzen (NAT, Filter, Zustand,
- Tabelle, etc.) und erneut aus der Datei
- <filename>/etc/pf.conf</filename> auslesen</entry>
- </row>
-
- <row>
- <entry><command>pfctl -s [ rules | nat |
- states ]</command></entry>
- <entry>Bericht über die Filterregeln, NAT-Regeln, oder
- Zustandstabellen</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 das Regelwerk nicht neu</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect2>
+ <sect3 xml:id="pftut-spamd">
+ <title>Schutzt vor <acronym>SPAM</acronym></title>
- <sect2>
- <title><acronym>ALTQ</acronym> aktivieren</title>
+ <para>Im Gegensatz zum <application>spamd</application>-Daemon
+ von <application>spamassassin</application>, kann
+ <package>mail/spamd</package> zusammen mit
+ <application>PF</application> den <acronym>SPAM</acronym>
+ direkt an der Firewall abwehren. Dieser
+ <application>spamd</application> wird in
+ <application>PF</application> über einen Satz von
+ Umleitungen konfiguriert.</para>
+
+ <para>Spammer neigen dazu, eine große Anzahl von Nachrichten
+ zu versenden. Dabei nutzten Sie
+ <acronym>SPAM</acronym>-freundliche Netzwerke und gekaperte
+ Rechner, welche dann ziemlich schnell bei sogenannten
+ <foreignphrase>Blacklists</foreignphrase> gemeldet
+ werden.</para>
+
+ <para>Wenn eine <acronym>SMTP</acronym>-Verbindung von einer
+ Adresse in der Blacklist empfangen wird, präsentiert
+ <application>spamd</application> einen Banner und schaltet
+ sofort in einen Modus, in dem die Antworten auf den
+ <acronym>SMTP</acronym>-Verkehr jeweils ein Byte groß sind.
+ Diese Technik, die möglichst viel Zeit des Spammers
+ verschwenden soll, wird
+ <foreignphrase>Tarpitting</foreignphrase> genannt. Die
+ spezifische Implementierung, welche ein Byte
+ <acronym>SMTP</acronym>-Antworten verwendet, wird als
+ <foreignphrase>Stuttering</foreignphrase> bezeichnet.</para>
+
+ <para>Dieses Beispiel zeigt das grundlegende Verfahren zur
+ Konfiguration von <application>spamd</application> mit
+ automatisch aktualisierten Blacklists. Für weitere
+ Informationen lesen die Manualpages, die zusammen mit
+ <package>mail/spamd</package> installiert werden.</para>
+
+ <procedure>
+ <title>Konfiguration von
+ <application>spamd</application></title>
+
+ <step>
+ <para>Installieren Sie das Paket oder den Port
+ <package>mail/spamd</package>. Um
+ <application>spamd</application>'s Greylisting-Funktion
+ zu nutzen, muss &man.fdescfs.5; in
+ <filename>/dev/fd</filename> eingehängt werden. Fügen
+ Sie folgende Zeile in <filename>/etc/fstab</filename>
+ ein:</para>
+
+ <programlisting>fdescfs /dev/fd fdescfs rw 0 0</programlisting>
+
+ <para>Danach hängen Sie das Dateisystem ein:</para>
+
+ <screen>&prompt.root; <userinput>mount fdescfs</userinput></screen>
+ </step>
+
+ <step>
+ <para>Fügen Sie folgende Zeilen in den
+ <application>PF</application>-Regelsatz ein:</para>
+
+ <programlisting>table <spamd> persist
+table <spamd-white> persist
+rdr pass on $ext_if inet proto tcp from <spamd> to \
+ { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025
+rdr pass on $ext_if inet proto tcp from !<spamd-white> to \
+ { $ext_if, $localnet } port smtp -> 127.0.0.1 port 8025</programlisting>
+
+ <para>Die beiden Tabellen <literal><spamd></literal>
+ und <literal><spam-white></literal> sind von
+ großer Bedeutung. <acronym>SMTP</acronym>-Verkehr von
+ einer Adresse, die in <literal><spamd></literal>
+ aber nicht in <literal><spamd-white></literal>
+ ist, wird an den <application>spamd</application>-Daemon
+ auf Port 8025 umgeleitet.</para>
+ </step>
+
+ <step>
+ <para>Im nächsten Schritt wird
+ <application>spamd</application> in
+ <filename>/usr/local/etc/spamd.conf</filename>
+ konfiguriert und einige Parameter werden in
+ <filename>/etc/rc.conf</filename> hinzugefügt.</para>
+
+ <para>Die Installation von <package>mail/spamd</package>
+ enthält eine Beispielkonfiguration
+ (<filename>/usr/local/etc/spamd.conf.sample</filename>)
+ und eine Manualpage für <filename>spamd.conf</filename>.
+ Beziehen Sie sich für zusätzliche Konfigurationsoptionen
+ auf diese Dokumentation.</para>
+
+ <para>Die Konfigurationsdatei enthält einen Block, in dem
+ die <literal>all</literal>-Liste definiert ist, die
+ wiederum weitere Listen spezifiziert:</para>
+
+ <programlisting>all:\
+ :traplist:whitelist:</programlisting>
+
+ <para>Dieser Eintrag fügt die gewünschten Blacklists,
+ getrennt durch einen Doppelpunkt (<literal>:</literal>),
+ hinzu. Um auch eine Whitelist zu verwenden, fügen Sie
+ den Namen unmittelbar hinter dem Namen der Blacklist
+ ein. Zum Beispiel:
+ <literal>:Blacklist:Whitelist:</literal>.</para>
+
+ <para>Danach folgt die Definition der verwendeten
+ Blacklist:</para>
+
+ <programlisting>traplist:\
+ :black:\
+ :msg="SPAM. Your address %A has sent spam within the last 24 hours":\
+ :method=http:\
+ :file=www.openbsd.org/spamd/traplist.gz</programlisting>
+
+ <para>In der ersten Zeile steht der Name der Blacklist und
+ die zweite Zeile gibt den Typ an. Das Feld
+ <literal>msg</literal> enthält die Nachricht, die dem
+ Absender während des <acronym>SMTP</acronym>-Dialogs
+ angezeigt wird. Das Feld <literal>mehtod</literal> legt
+ fest, wie <application>spamd-setup</application> die
+ Listen bezieht; unterstützte Methoden sind
+ <literal>http</literal>, <literal>ftp</literal>,
+ <literal>file</literal> und ein externes Programm via
+ <literal>exec</literal>. Im letzten Feld gibt
+ <literal>file</literal> den Namen der Datei an, die
+ <application>spamd</application> erwartet.</para>
+
+ <para>Die Definition der Whitelist ist ähnlich. Das Feld
+ <literal>msg</literal> wird jedoch nicht definiert, da
+ eine Meldung hier nicht erforderlich ist:</para>
+
+ <programlisting>whitelist:\
+ :white:\
+ :method=file:\
+ :file=/var/mail/whitelist.txt</programlisting>
+
+ <tip>
+ <title>Wählen Sie die Datenquellen mit Sorgfalt:</title>
+
+ <para>Bei der Verwendung von sämtlichen Blacklists aus
+ der Beispieldatei <filename>spamd.conf</filename>
+ würden große Teile des Internets geblockt. Der
+ Administrator muss diese Datei bearbeiten, um eine
+ optimale Konfiguration zu erzielen. Dazu gehört auch
+ die Auswahl von geeigneten Blacklists und, wenn nötig,
+ die Erstellung von benutzerdefinierten Listen.</para>
+ </tip>
+
+ <para>Als nächstes fügen Sie folgenden Eintrag in
+ <filename>/etc/rc.conf</filename> hinzu. Zusätzliche
+ Optionen sind in der Manualpage beschrieben:</para>
+
+ <programlisting>spamd_flags="-v" # use "" and see spamd-setup(8) for flags</programlisting>
+
+ <para>Wenn Sie fertig sind, starten Sie
+ <application>spamd</application> durch die Eingabe von
+ <command>service obspamd start</command>. Führen Sie
+ die weitere Konfiguration mit
+ <command>spamd-setup</command> durch. Erstellen Sie zum
+ Schluss einen &man.cron.8;-Job, der
+ <command>spamd-setup</command> in regelmäßigen Abständen
+ aufruft, um die Listen zu aktualisieren.</para>
+ </step>
+ </procedure>
+
+ <para>Auf einem typischen Gateway vor dem Mailserver, werden
+ Rechner innerhalb von wenigen Minuten geblockt.</para>
+
+ <para><application>PF</application> unterstützt auch
+ <firstterm>Greylisting</firstterm>, das Nachrichten von
+ unbekannten Rechnern vorübergehend mit
+ <replaceable>45n</replaceable>-Codes ablehnt. Nachrichten
+ von diesen Rechnern werden bei einem erneuten Versuch nach
+ einer angemessenen Zeit durchgelassen. Nachrichten von
+ Rechnern, die nach RFC 1123 und RFC 2821 konfiguriert sind,
+ werden sofort durchgelassen.</para>
+
+ <para>Weitere Informationen über Greylisting finden Sie unter
+ <link xlink:href="http://www.greylisting.org/">
+ greylisting.org</link>. Das Erstaunlichste an Greylisting
+ ist, neben der einfachen Benutzung, dass es immer noch
+ funktioniert. Spammer und Malware-Autoren gelingt es
+ bislang nur schwer, diese Technik zu umgehen.</para>
+
+ <para>Die grundsätzliche Vorgehensweise zur Konfiguration von
+ Greylisting ist wie folgt:</para>
+
+ <procedure>
+ <title>Konfiguration von Greylisting</title>
+
+ <step>
+ <para>Stellen Sie sicher, dass &man.fdescfs.5; eingehängt
+ ist. Dies wird in Schritt 1 der vorherigen Prozedur
+ beschrieben.</para>
+ </step>
+
+ <step>
+ <para>Um <application>spamd</application> im
+ Greylisting-Modus auszuführen, fügen Sie folgende Zeilen
+ in <filename>/etc/rc.conf</filename> ein:</para>
+
+ <programlisting>spamd_grey="YES" # use spamd greylisting if YES</programlisting>
+
+ <para>Lesen Sie die Manualpage von
+ <application>spamd</application> für Beschreibungen von
+ zusätzlichen Parametern.</para>
+ </step>
+
+ <step>
+ <para>Starten Sie die Dienste, um die Konfiguration von
+ Greylisting abzuschließen:</para>
+
+ <screen>&prompt.root; <userinput>service obspamd restart</userinput>
+&prompt.root; <userinput>service spamlogd start</userinput></screen>
+ </step>
+ </procedure>
+
+ <para>Hinter den Kulissen führen die
+ <application>spamdb</application>-Datenbank und
+ <application>spamlogd</application> wesentliche Aufgaben der
+ Greylisting-Funktion aus. <application>spamdb</application>
+ ist die Schnittstelle für den Administrator, der über den
+ Inhalt der Datenbank <filename>/var/db/spamdb</filename>
+ Blaklists, Whitelists und Greylists verwaltet.</para>
+ </sect3>
- <para><acronym>ALTQ</acronym> muss vor der Verwendung in den
- &os;-Kernel kompiliert werden. Beachten Sie, dass
- <acronym>ALTQ</acronym> nicht von allen verfügbaren
- Netzwerkkartentreibern unterstützt wird. Sehen Sie daher
- zuerst in &man.altq.4; nach, ob Ihre Netzwerkkarte diese
- Funktion unter Ihrer &os;-Version unterstützt.</para>
+ <sect3 xml:id="pftut-hygiene">
+ <title>Netzwerk-Hygiene</title>
- <para>Die folgenden Kerneloptionen aktivieren <acronym>ALTQ</acronym>
- sowie alle Zusatzfunktionen:</para>
+ <para>Dieser Abschnitt beschreibt die Verwendung von
+ <literal>block-policy</literal>, <literal>scrub</literal>
+ und <literal>antispoof</literal>, mit denen das Verhalten
+ des Regelsatzes weiter optimiert werden kann.</para>
+
+ <para>Die Option <literal>block-policy</literal> kann im
+ Teil <literal>options</literal> des Regelwerks konfiguriert
+ werden, vor den Umleitungen und den eigentlichen
+ Filterregeln. Diese Option legt fest, welche Rückmeldung
+ <application>PF</application> an einen geblockten Rechner
+ sendet. Es existieren zwei mögliche Werte:
+ <literal>drop</literal> verwirft das Paket ohne Rückmeldung
+ und <literal>return</literal> gibt eine Statusmeldung, wie
+ etwa <computeroutput>Connection refused</computeroutput>
+ zurück.</para>
+
+ <para>Die Voreinstellung ist <literal>drop</literal>. Geben
+ Sie den gewünschten Wert ein, um die
+ <literal>block-policy</literal>-Richtlinie zu ändern:</para>
+
+ <programlisting>set block-policy return</programlisting>
+
+ <para><literal>scrub</literal> ist ein Schlüsselwort in
+ <application>PF</application>, das die Paket-Normalisierung
+ aktiviert. Dieser Prozess fügt fragmentierte Pakete wieder
+ zusammen und blockt <acronym>TCP</acronym>-Pakete mit
+ ungültigen Flag-Kombinationen. Ein aktiviertes
+ <literal>scrub</literal> bietet einen gewissen Schutz gegen
+ Angriffe, die auf die falsche Handhabung von fragmentierten
+ Paketen aufbauen. Es stehen viele Optionen zur Verfügung,
+ jedoch sollte die einfachste Form für die meisten
+ Konfigurationen ausreichend sein:</para>
+
+ <programlisting>scrub in all</programlisting>
+
+ <para>Einige Dienste, wie beispielsweise
+ <acronym>NFS</acronym>, erfordern eine bestimmte Handhabung
+ von fragmentierten Paketen. Weitere Informationen finden
+ Sie unter <link
+ xlink:href="http://www.openbsd.org/faq/pf/scrub.html">
+ http://www.openbsd.org/faq/pf/scrub.html</link>.</para>
+
+ <para>Dieses Beispiel fügt fragmentierte Pakete wieder
+ zusammen, löscht das <quote>do not fragment</quote>-Bit und
+ setzt die maximale Segmentgröße auf 1440 Bytes:</para>
+
+ <programlisting>scrub in all fragment reassemble no-df max-mss 1440</programlisting>
+
+ <para>Der <literal>antispoof</literal>-Mechanismus bietet
+ einen Schutz gegen gefälschte
+ <acronym>IP</acronym>-Adressen. Dabei werden hauptsächlich
+ Pakete verworfen, die auf der falschen Schnittstellen
+ ankommen.</para>
- <programlisting>options ALTQ
-options ALTQ_CBQ # Class Bases Queuing (CBQ)
-options ALTQ_RED # Random Early Detection (RED)
-options ALTQ_RIO # RED In/Out
-options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC)
-options ALTQ_PRIQ # Priority Queuing (PRIQ)
-options ALTQ_NOPCC # Wird von SMP benötigt</programlisting>
-
- <para><literal>options ALTQ</literal> aktiviert das
- <acronym>ALTQ</acronym>-Framework.</para>
-
- <para><literal>options ALTQ_CBQ</literal> aktiviert das
- <emphasis>Class Based Queuing</emphasis> (<acronym>CBQ</acronym>).
- <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
- ändern.</para>
-
- <para><literal>options ALTQ_RED</literal> aktiviert
- <emphasis>Random Early Detection</emphasis>
- (<acronym>RED</acronym>). <acronym>RED</acronym> wird
- zur Vermeidung einer Netzwerkverstopfung verwendet. 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 verworfen. Getreu seinem Namen
- verwirft <acronym>RED</acronym> Pakete unterschiedlicher
- Verbindungen nach dem Zufallsprinzip.</para>
-
- <para><literal>options ALTQ_RIO</literal> aktiviert
- <emphasis>Random Early Detection In and Out</emphasis>.</para>
-
- <para><literal>options ALTQ_HFSC</literal> aktiviert den
- <emphasis>Hierarchical Fair Service Curve</emphasis>-Paketplaner.
- Weitere Informationen zu <acronym>HFSC</acronym> finden Sie
- unter <uri xlink:href="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html">http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html</uri>.</para>
-
- <para><literal>options ALTQ_PRIQ</literal> aktiviert
- <emphasis>Priority Queuing</emphasis> (<acronym>PRIQ</acronym>).
- <acronym>PRIQ</acronym> lässt Verkehr einer Warteschlange mit
- höherer Priorität zuerst durch.</para>
-
- <para><literal>options ALTQ_NOPCC</literal> aktiviert die
- <acronym>SMP</acronym> Unterstützung von
- <acronym>ALTQ</acronym>. Diese Option ist nur auf
- <acronym>SMP</acronym>-System erforderlich.</para>
+ <para>Folgende Regeln verwerfen gefälschte Adressen, wenn sie
+ aus dem Internet oder dem lokalen Netzwerk stammen:</para>
+
+ <programlisting>antispoof for $ext_if
+antispoof for $int_if</programlisting>
+ </sect3>
+
+ <sect3 xml:id="pftut-unrouteables">
+ <title>Handhabung von nicht-routebaren Adressen</title>
+
+ <para>Sogar bei einem richtig konfigurierten
+ <acronym>NAT</acronym>-Gateway müssen Sie vielleicht die
+ Fehlkonfiguration anderer Personen ausgleichen. Ein
+ typischer Fehler besteht darin, nicht-routebare Adressen ins
+ Internet zu lassen. Da der Verkehr von nicht-routebaren
+ Adressen Teil eines <acronym>DoS</acronym>-Angriffs sein
+ kann, sollten Sie in Betracht ziehen, diesen Verkehr
+ explizit an der externen Schnittstelle des Netzwerks zu
+ blockieren.</para>
+
+ <para>In diesem Beispiel wird ein Makro erstellt, das die
+ nicht-routebaren Adressen enthält. Datenverkehr von und zu
+ diesen Adressen wird dann an der externen Schnittstelle des
+ Gateways verworfen.</para>
+
+ <programlisting>martians = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
+ 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, \
+ 0.0.0.0/8, 240.0.0.0/4 }"
+
+block drop in quick on $ext_if from $martians to any
+block drop out quick on $ext_if from any to $martians</programlisting>
+ </sect3>
</sect2>
</sect1>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Feb 27, 2:21 PM (20 h, 10 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16869883
Default Alt Text
D6738.diff (70 KB)
Attached To
Mode
D6738: Update de/books/handbook/firewalls/chapter.xml
Attached
Detach File
Event Timeline
Log In to Comment