Page MenuHomeFreeBSD

D6738.diff
No OneTemporary

D6738.diff

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;&nbsp;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;&nbsp;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&nbsp;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 -&gt; ($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 -&gt; 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 &gt;&lt; 33626 keep state</programlisting>
+
+ <para>Da <command>TRACERT.EXE</command> unter
+ &microsoft.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;&nbsp;8.<replaceable>X</replaceable> (und älter)
- &os;-Versionen benutzen <acronym>PF</acronym> aus OpenBSD&nbsp;4.1.
- &os;&nbsp;9.<replaceable>X</replaceable> (und neuer) benutzen
- hingegen <acronym>PF</acronym> aus OpenBSD&nbsp;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>&lt; &gt;</literal>
+ eingeschlossen und sehen wie folgt aus:</para>
+
+ <programlisting>table &lt;clients&gt; { 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 &lt;clients&gt; persist file "/etc/clients"</programlisting>
+
+ <para>Sobald die Tabelle definiert ist, kann eine Filterregel
+ Bezug darauf nehmen:</para>
+
+ <programlisting>pass inet proto tcp from &lt;clients&gt; 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 &gt;/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 &lt;bruteforce&gt; 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 &lt;bruteforce&gt;
+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 &lt;bruteforce&gt; 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 &lt;bruteforce&gt;</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 &lt;bruteforce&gt; 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>&lt;bruteforce&gt;</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>&lt;bruteforce&gt;</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 &lt;spamd&gt; persist
+table &lt;spamd-white&gt; persist
+rdr pass on $ext_if inet proto tcp from &lt;spamd&gt; to \
+ { $ext_if, $localnet } port smtp -&gt; 127.0.0.1 port 8025
+rdr pass on $ext_if inet proto tcp from !&lt;spamd-white&gt; to \
+ { $ext_if, $localnet } port smtp -&gt; 127.0.0.1 port 8025</programlisting>
+
+ <para>Die beiden Tabellen <literal>&lt;spamd&gt;</literal>
+ und <literal>&lt;spam-white&gt;</literal> sind von
+ großer Bedeutung. <acronym>SMTP</acronym>-Verkehr von
+ einer Adresse, die in <literal>&lt;spamd&gt;</literal>
+ aber nicht in <literal>&lt;spamd-white&gt;</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

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)

Event Timeline