<!-- The FreeBSD Documentation Project The FreeBSD German Documentation Project $FreeBSD$ $FreeBSDde: de-docproj/books/handbook/firewalls/chapter.sgml,v 1.4 2006/05/13 17:32:31 jkois Exp $ basiert auf: 1.67 --> <chapter id="firewalls"> <chapterinfo> <authorgroup> <author> <firstname>Joseph J.</firstname> <surname>Barbish</surname> <contrib>Beigetragen von </contrib> </author> </authorgroup> <authorgroup> <author> <firstname>Brad</firstname> <surname>Davis</surname> <contrib>Nach SGML konvertiert und aktualisiert von </contrib> </author> </authorgroup> <authorgroup> <author> <firstname>Michael</firstname> <surname>Bunzel</surname> <contrib>Teilweise übersetzt von </contrib> </author> </authorgroup> </chapterinfo> <title>Firewalls</title> <indexterm><primary>firewall</primary></indexterm> <indexterm> <primary>security</primary> <secondary>firewalls</secondary> </indexterm> <sect1 id="firewalls-intro"> <title>Einführung</title> <para>Firewalls ermöglichen es, den ein- und ausgehenden Netzwerkverkehr Ihres Systems zu filtern. Dazu verwendet eine Firewall eine oder mehrere Gruppen von <quote>Regeln</quote>, um ankommende Netzwerkpakete zu untersuchen und entweder durchzulassen oder zu blockieren. Die Regeln einer Firewall untersuchen charakteristische Eigenschaften von Datenpaketen, darunter den Protokolltyp, die Quell- und Zieladresse sowie den Quell- und Zielport.</para> <para>Firewalls können die Sicherheit eines Rechners oder eines Netzwerks erhöhen, indem sie folgende Aufgaben übernehmen:</para> <itemizedlist> <listitem> <para>Den Schutz der Anwendungen, Dienste und Rechner Ihres internen Netzwerks vor unerwünschtem Datenverkehr aus dem Internet.</para> </listitem> <listitem> <para>Die Beschränkung des Zugriffs von Rechnern des internen Netzwerk auf Rechner oder Dienste des externen Internets.</para> </listitem> <listitem> <para>Den Einsatz von Network Address Translation (<acronym>NAT</acronym>), die es Ihnen durch die Verwendung von privaten <acronym>IP</acronym>-Adressen ermöglicht, eine einzige gemeinsame Internetverbindung für mehrere Rechner zu nutzen (entweder über eine einzige Adresse oder über eine Gruppe von jeweils automatisch zugewiesenen öffentlichen <acronym>IP</acronym>-Adressen).</para> </listitem> </itemizedlist> <para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie:</para> <itemizedlist> <listitem> <para>Wissen, wie man korrekte Paketfilterregeln erstellt.</para> </listitem> <listitem> <para>Die Unterschiede zwischen den in &os; eingebauten Firewalls kennen.</para> </listitem> <listitem> <para>Wissen, wie man die <application>PF</application>-Firewall von OpenBSD konfiguriert und einsetzt.</para> </listitem> <listitem> <para><application>IPFILTER</application> konfigurieren und einsetzen können.</para> </listitem> <listitem> <para>Wissen, wie man <application>IPFW</application> konfiguriert und einsetzt.</para> </listitem> </itemizedlist> <para>Bevor Sie dieses Kapitel lesen, sollten Sie:</para> <itemizedlist> <listitem> <para>Die grundlegenden Konzepte von &os; und dem Internet verstehen.</para> </listitem> </itemizedlist> </sect1> <sect1 id="firewalls-concepts"> <title>Firewallkonzepte</title> <indexterm> <primary>firewall</primary> <secondary>rulesets</secondary> </indexterm> <para>Es gibt zwei grundlegende Arten, Regelgruppen für Firewalls zu erstellen: <quote>einschließend</quote> (<foreignphrase>inclusive firewall</foreignphrase>) sowie <quote>auschließend</quote> (<foreignphrase>exclusive Firewall</foreignphrase>). Eine auschließende Firewall lässt jeden Datenverkehr durch, der nicht durch eine Regel ausgeschlossen wurde. Eine einschließende Firewall macht das genaue Gegenteil. Sie lässt Datenverkehr nur dann durch, wenn er einer der definierten Regeln entspricht.</para> <para>Einschließende Firewalls sind tendentiell sicherer als ausschließende Firewalls, da sie das Risiko, dass unerwünschter Datenverkehr die Firewall passiert, signifikant reduzieren.</para> <para>Die Sicherheit einer Firewall kann durch den Einsatz einer <quote>zustandsabhängigen Firewall</quote> (<foreignphrase>stateful firewall</foreignphrase>) weiter erhöht werden. Eine zustandsabhängige Firewall überwacht alle durch die Firewall gehenden offenen Verbindungen und erlaubt nur schon bestehenden Verkehr oder Datenverkehr, der eine neue Verbindung öffnet. Der Nachteil einer zustandsabhängigen Firewall ist allerdings, dass sie anfällig für Denial of Service (<acronym>DoS</acronym>) -Attacken ist, wenn sehr schnell sehr viele neue Verbindungen erstellt werden. Bei den meisten Firewalls können Sie eine Kombination aus zustandsabhängigem und nicht zustandsabhängigem Verhalten verwenden, um eine für Ihre Bedürfnisse optimale Fireall einzurichten.</para> </sect1> <sect1 id="firewalls-apps"> <title>Firewallpakete</title> <para>Das Basissystem von &os; enthält bereits drei Firewallpakete: <emphasis>IPFILTER</emphasis> (auch als <acronym>IPF</acronym> bekannt), <emphasis>IPFIREWALL</emphasis> (auch als <acronym>IPFW</acronym> bezeichnet) sowie das von OpenBSD übernommene <emphasis>PacketFilter</emphasis> (das auch als <acronym>PF</acronym> bezeichnet wird). Zusätzlich verfügt &os; über zwei eingebaute Pakete für das sogenannte <foreignphrase>traffic shaping</foreignphrase> (dabei handelt es sich die Steuerung des Bandbreitenverbrauchs): &man.altq.4; sowie &man.dummynet.4;. Dummynet steht traditionell in enger Verbindung mit <acronym>IPFW</acronym>, während <acronym>ALTQ</acronym> gemeinsam mit <acronym>IPF</acronym>/<acronym>PF</acronym> eingesetzt wird. Gemeinsam ist allen Firewallpaketen (IPF, IPFW sowie PF), dass sie Regeln einsetzen, um den Transfer von Datenpaketen auf und von Ihrem System zu regeln. Unterschiedlich sind aber die Art und Weise, wie dies realisiert wird. Auch die für diese Regeln verwendete Syntax ist unterschiedlich.</para> <para>&os; überlässt es dem Anwender, das Firewallsystem zu wählen, dass seinen Anforderungen und Vorlieben am Besten entspricht. Keines der im Basissystem enthaltenen Firewallpakete wird dabei als <quote>das beste</quote> angesehen.</para> <para>IPFILTER hat etwa den Vorteil, dass dessen zustandsabhängige Regeln relativ einfach in einer <acronym>NAT</acronym>-Umgebung implementiert werden können. Außerdem verfügt es über einen eigenen FTP-Proxy, der die Erstellung von sicheren Regeln für ausgehende FTP-Verbindungen vereinfacht.</para> <para>Da alle Firewalls auf der Untersuchung der Werte ausgewählter Kontrollfelder von Datenpaketen basieren, ist es für die Erstellung von Firewallregeln notwendig, die Funktionsweise von <acronym>TCP</acronym>/IP zu verstehen. Außerdem muss man dazu wissen, was die Werte der einzelnen Kontrollfelder bedeuten und wie diese während einer Verbindung eingesetzt werden. Eine gute Erklärung dieser Thematik finden Sie unter <ulink url="http://www.ipprimer.com/overview.cfm"></ulink>.</para> </sect1> <sect1 id="firewalls-pf"> <title>Paket Filter (PF) von OpenBSD und <acronym>ALTQ</acronym></title> <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. Die erste &os;-Version, die <acronym>PF</acronym> als Teil des Basisssytems enthielt, war &os; 5.3 im November 2004. 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 <foreignphrase>Quality of Service</foreignphrase> (<acronym>QoS</acronym>)-Bandbreitenformung. Dadurch können Sie, basierend auf Filterregeln, unterschiedlichen Diensten eine bestimmte Bandbreite garantieren. Da das OpenBSD-Projekt bereits über eine hervorragende Dokumentation verfügt, wurde das PF-Handbuch nicht in dieses Kapitel aufgenommen.</para> <para>PF ist für folgende &os;-Versionen verfügbar:</para> <informaltable frame="none" pgwide="1"> <tgroup cols="2"> <thead> <row> <entry>&os;-Version</entry> <entry>PF-Verfügbarkeit</entry> </row> </thead> <tbody> <row> <entry>Versionen vor 4.X</entry> <entry>Für &os;-Versionen vor 4.X ist PF nicht verfügbar.</entry> </row> <row> <entry>Alle Versionen des 4.X-Zweiges</entry> <entry>PF ist als Teil von KAME verfügbar.</entry> </row> <row> <entry>5.X-Versionen vor 5.3-RELEASE</entry> <entry>Für diese &os;-Versionen kann der Port <filename role="package">security/pf</filename> verwendet werden, um PF zu installieren. Da diese &os;-Versionen aber nur für Entwickler und Personen gedacht waren, die einen Einblick in die frühen 5.X-Versionen haben wollten, wird Nutzern dieser Versionen dringend empfohlen, Ihr System auf 5.3-RELEASE oder neuer zu aktualisieren.</entry> </row> <row> <entry>5.3-RELEASE und neuer</entry> <entry>Seit 5.3-RELEASE ist PF Teil des Basissystems. Benutzen Sie daher <emphasis>nicht</emphasis> den Port <filename role="package">security/pf</filename>, da dieser unter diesen Versionen nicht funktioniert. Verwenden Sie stattdessen das im Basissystem enthaltene &man.pf.4;.</entry> </row> </tbody> </tgroup> </informaltable> <para>Weitere Informationen finden Sie unter <ulink url="http://pf4freebsd.love2party.net/"></ulink>.</para> <sect2> <title>PF aktivieren</title> <para>PF ist in Standardinstallationen von &os; 5.3 oder neuer als eigenes, zur Laufzeit ladbares Kernelmodul enthalten. Das System lädt das PF-Kernelmodul automatisch, wenn die Anweisung <literal>pf_enable="YES"</literal> in <filename>/etc/rc.conf</filename> enthalten ist. Das ladbare Kernelmodul wurde mit aktivierter &man.pflog.4;-Protokollierung erstellt.</para> <note> <para>Das Kernelmodul geht davon aus, dass die Einträge <literal>options INET</literal> sowie <literal>device bpf</literal> in Ihrer Kernelkonfigurationsdatei vorhanden sind. Haben Sie <literal>NO_INET6</literal> (seit &os; 6.X) oder <literal>NOINET6</literal> (in &os;-Versionen vor 6.X) nicht definiert, benötigen Sie (etwa in &man.make.conf.5;) zusätzlich die Option <literal>options INET6</literal>.</para> </note> <para>Nachdem Sie das Kernelmodul geladen oder die PF-Unterstützung statisch in Ihren Kernel kompiliert haben, können Sie <application>pf</application> über den Befehl <command>pfctl</command> aktivieren beziehungsweise deaktivieren.</para> <para>Das folgende Beispiel zeigt, wie Sie <application>pf</application> aktivieren:</para> <screen>&prompt.root; <userinput>pfctl -e</userinput></screen> <para><command>pfctl</command> ermöglicht es Ihnen, die <application>pf</application>-Firewall zu steuern. Lesen Sie &man.pfctl.8;, bevor Sie das Programm einsetzen.</para> </sect2> <sect2> <title>Kernel-Optionen</title> <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> <para>Es ist nicht zwingend nötig, dass Sie PF durch die Angabe der folgenden Optionen in den &os;-Kernel kompilieren. Kompilieren Sie die PF-Unterstützung in Ihren Kernel, so wird das Kernelmodul <emphasis>nie</emphasis> verwendet werden. Die folgenden Angaben dienen daher nur als Hintergrundinformationen.</para> <para><filename>/usr/src/sys/conf/NOTES</filename> enthält Beispiele für die Kernelkonfigurationsoptionen von PF:</para> <programlisting>device pf device pflog device pfsync</programlisting> <para><literal>device pf</literal> aktiviert die Unterstützung für die <quote>Packet Filter</quote>-Firewall.</para> <para><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> <para><literal>device pfsync</literal> aktiviert das optionale &man.pfsync.4;-Pseudonetzwerkgerät für die Überwachung von <quote>Statusänderungen</quote>. Da es sich dabei nicht um einen Bestandteil des Kernelmoduls handelt, muss diese Option auf jeden Fall in den Kernel kompiliert werden, bevor man sie verwenden kann.</para> <para>Diese Einstellungen werden erst dann übernommen, wenn man einen Kernel mit diesen Optionen kompiliert und installiert.</para> </sect2> <sect2> <title>Verfügbare rc.conf-Optionen</title> <para>Um PF beim Systemstart zu aktivieren, benötigen Sie die folgenden Einträge in <filename>/etc/rc.conf</filename>:</para> <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" # stare 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> <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> <programlisting>gateway_enable="YES" # LAN Gateway aktivieren</programlisting> </sect2> <sect2> <title><acronym>ALTQ</acronym> aktivieren</title> <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. Die folgenden Kerneloptionen aktivieren <acronym>ALTQ</acronym> sowie alle Zusatzfunktionen:</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 <foreignphrase>Class Based Queuing</foreignphrase> (<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 <foreignphrase>Random Early Detection</foreignphrase> (<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 <foreignphrase>Random Early Detection In and Out</foreignphrase>.</para> <para><literal>options ALTQ_HFSC</literal> aktiviert den <foreignphrase>Hierarchical Fair Service Curve</foreignphrase> -Paketplaner. Weitere Informationen zu <acronym>HFSC</acronym> finden Sie unter <ulink url="http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html"></ulink>.</para> <para><literal>options ALTQ_PRIQ</literal> aktiviert <foreignphrase>Priority Queuing</foreignphrase> (<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> </sect2> <sect2> <title>Filterregeln generieren</title> <para>Der Packetfilter liest seine Konfiguration aus der Datei &man.pf.conf.5; ein, um entsprechend der dort definierten Regeln Pakete durchzulassen oder zu verwerfen. Die Standardinstallation von &os; enthält bereits eine beispielhafte Version der Datei <filename>/etc/pf.conf</filename> mit einigen hilfreichen Beispielen und Erklärungen.</para> <para>Obwohl &os; eine eigene Version der Datei <filename>/etc/pf.conf</filename> enthält, wird dennoch die gleiche Syntax wie unter OpenBSD verwendet. Das OpenBSD-Team hat eine großartige Dokumentation zur Konfiguration von <application>pf</application> geschrieben, die unter <ulink url="http://www.openbsd.org/faq/pf/"></ulink> erhältlich ist.</para> <warning> <para>Denken Sie beim Lesen des pf-Handbuch daran, dass die verschiedenen &os;-Versionen unterschiedliche Versionen der <application>pf</application>-Firewall einsetzen. So wird unter &os; 5.X noch die OpenBSD-Version 3.5 der Firewall eingesetzt, während in den &os;-6.X-Versionen die OpenBSD-Version 3.7 zum Einsatz kommt.</para> </warning> <para>Haben Sie weitere Fragen zur <application>pf</application>-Firewall, so können Sie auf der Mailingliste &a.pf; stellen. Vergessen Sie aber nicht, vorher die Archive der Mailinglisten zu durchsuchen, bevor Sie dort eine Frage stellen.</para> </sect2> </sect1> <sect1 id="firewalls-ipf"> <title>Die IPFILTER-Firewall (IPF)</title> <para>Dieses Kapitel ist noch nicht übersetzt. Lesen Sie bitte <ulink url="&url.books.handbook.en;/firewalls-ipf.html"> das Original in englischer Sprache</ulink>. Wenn Sie helfen wollen, dieses Kapitel zu übersetzen, senden Sie bitte eine E-Mail an die Mailingliste &a.de.translators;.</para> </sect1> <sect1 id="firewalls-ipfw"> <title>IPFW</title> <para>Dieses Kapitel ist noch nicht übersetzt. Lesen Sie bitte <ulink url="&url.books.handbook.en;/firewalls-ipfw.html"> das Original in englischer Sprache</ulink>. Wenn Sie helfen wollen, dieses Kapitel zu übersetzen, senden Sie bitte eine E-Mail an die Mailingliste &a.de.translators;.</para> </sect1> </chapter> <!-- Local Variables: mode: sgml sgml-declaration: "../chapter.decl" sgml-indent-data: t sgml-omittag: nil sgml-always-quote-attributes: t sgml-parent-document: ("../book.sgml" "part" "chapter") End: -->