diff options
Diffstat (limited to 'de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml')
-rw-r--r-- | de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml | 6366 |
1 files changed, 6366 insertions, 0 deletions
diff --git a/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml b/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml new file mode 100644 index 0000000000..27724ca3d8 --- /dev/null +++ b/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml @@ -0,0 +1,6366 @@ +<?xml version="1.0" encoding="iso-8859-1" standalone="no"?> +<!-- + The FreeBSD Documentation Project + The FreeBSD German Documentation Project + + $FreeBSD$ + $FreeBSDde: de-docproj/books/handbook/network-servers/chapter.xml,v 1.103 2011/12/24 15:51:18 bcr Exp $ + basiert auf: 1.138 +--> + +<chapter id="network-servers"> + <chapterinfo> + <authorgroup> + <author> + <firstname>Murray</firstname> + <surname>Stokely</surname> + <contrib>Überarbeitet von </contrib> + </author> + </authorgroup> + <!-- 23 July 2004 --> + <authorgroup> + <author> + <firstname>Johann</firstname> + <surname>Kois</surname> + <contrib>Übersetzt von </contrib> + </author> + </authorgroup> + </chapterinfo> + + <title>Netzwerkserver</title> + + <sect1 id="network-servers-synopsis"> + <title>Übersicht</title> + + <para>Dieses Kapitel beschreibt einige der häufiger verwendeten + Netzwerkdienste auf &unix;-Systemen. Beschrieben werden + Installation und Konfiguration sowie Test und Wartung + verschiedener Netzwerkdienste. Zusätzlich sind im ganzen + Kapitel Beispielkonfigurationsdateien vorhanden, von denen Sie + sicherlich profitieren werden.</para> + + <para>Nachdem Sie dieses Kapitel gelesen haben, werden Sie</para> + + <itemizedlist> + <listitem> + <para>Den <application>inetd</application>-Daemon konfigurieren + können.</para> + </listitem> + + <listitem> + <para>Wissen, wie man ein Netzwerkdateisystem einrichtet.</para> + </listitem> + + <listitem> + <para>Einen <foreignphrase>Network Information + Server</foreignphrase> einrichten können, um damit + Benutzerkonten im Netzwerk zu verteilen.</para> + </listitem> + + <listitem> + <para>Rechner durch Nutzung von DHCP automatisch für ein + Netzwerk konfigurieren können.</para> + </listitem> + + <listitem> + <para>In der Lage sein, einen <foreignphrase>Domain Name + Server</foreignphrase> einzurichten.</para> + </listitem> + + <listitem> + <para>Den <application>Apache</application> HTTP-Server + konfigurieren können.</para> + </listitem> + + <listitem> + <para>Wissen, wie man einen <foreignphrase>File Transfer + Protocol</foreignphrase> (FTP)-Server einrichtet.</para> + </listitem> + + <listitem> + <para>Mit <application>Samba</application> einen Datei- und + Druckserver für &windows;-Clients konfigurieren + können.</para> + </listitem> + + <listitem> + <para>Unter Nutzung des NTP-Protokolls Datum und Uhrzeit + synchronisieren sowie einen Zeitserver installieren + können.</para> + </listitem> + + <listitem> + <para>Wissen, wie man den Standard-Protokollierungsdienst, + <command>syslogd</command>, konfiguriert, um Protokolle von + anderen Hosts zu akzeptieren.</para> + </listitem> + </itemizedlist> + + <para>Bevor Sie dieses Kapitel lesen, sollten Sie</para> + + <itemizedlist> + <listitem> + <para>Die Grundlagen der <filename>/etc/rc</filename>-Skripte + verstanden haben.</para> + </listitem> + + <listitem> + <para>Mit der grundlegenden Netzwerkterminologie vertraut sein.</para> + </listitem> + + <listitem> + <para>Wissen, wie man zusätzliche Softwarepakete von + Drittherstellern installiert (<xref linkend="ports"/>).</para> + </listitem> + </itemizedlist> + </sect1> + + <sect1 id="network-inetd"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <contrib>Aktualisiert vom </contrib> + <othername>&os; Documentation Project</othername> + </author> + </authorgroup> + </sect1info> + + <title>Der <application>inetd</application> + <quote>Super-Server</quote></title> + + <sect2 id="network-inetd-overview"> + <title>Überblick</title> + + <para>&man.inetd.8; wird manchmal auch als <quote>Internet + Super-Server</quote> bezeichnet, weil er Verbindungen für + mehrere Dienste verwaltet. Wenn eine Verbindung eintrifft, + bestimmt <application>inetd</application>, welches Programm + für die eingetroffene Verbindung zuständig ist, + aktiviert den entsprechenden Prozess und reicht den Socket an + ihn weiter (der Socket dient dabei als Standardein- und -ausgabe + sowie zur Fehlerbehandlung). Der Einsatz des + <application>inetd</application>-Daemons an Stelle + viele einzelner Daemonen kann auf nicht komplett ausgelasteten + Servern zu einer Verringerung der Systemlast führen.</para> + + <para><application>inetd</application> wird vor allem dazu + verwendet, andere Daemonen zu aktivieren, einige Protokolle + werden aber auch direkt verwaltet. Dazu gehören + <application>chargen</application>, + <application>auth</application>, sowie + <application>daytime</application>.</para> + + <para>Dieser Abschnitt beschreibt die Konfiguration von + <application>inetd</application> durch Kommandozeilenoptionen + sowie die Konfigurationsdatei + <filename>/etc/inetd.conf</filename>.</para> + </sect2> + + <sect2 id="network-inetd-settings"> + <title>Einstellungen</title> + + <para><application>inetd</application> wird durch das + &man.rc.8;-System initialisiert. Die Option + <literal>inetd_enable</literal> ist in der Voreinstellung zwar + auf <literal>NO</literal> gesetzt, sie kann aber in + Abhängigkeit von der vom Benutzer bei der Installation + gewählten Konfiguration von + <application>sysinstall</application> aktiviert werden. + Die Verwendung von</para> + + <programlisting>inetd_enable="YES"</programlisting> + + <para>oder</para> + + <programlisting>inetd_enable="NO"</programlisting> + + <para>in <filename>/etc/rc.conf</filename> deaktiviert oder startet + <application>inetd</application> beim Systemstart. Über + den Befehl</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/inetd rcvar</userinput></screen> + + <para>können Sie die aktuelle Konfiguration + abfragen.</para> + + <para>Weitere Optionen können über die Option + <literal>inetd_flags</literal> an + <application>inetd</application> übergeben werden.</para> + </sect2> + + <sect2 id="network-inetd-cmdline"> + <title>Kommandozeilenoptionen</title> + + <para>Wie die meisten anderen Server-Daemonen lässt + sich auch <application>inetd</application> über + verschiedene Optionen steuern. Die vollständige Syntax + für <application>inetd</application> lautet:</para> + + <para><command>inetd</command> <option>[-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] + [-p filename] [-R rate] [-s maximum] [configuration file]</option></para> + + <para>Die verschiedenen Optionen können über die Option + <literal>inetd_flags</literal> der Datei + <filename>/etc/rc.conf</filename> an + <application>inetd</application> übergeben werden. In + der Voreinstellung hat diese Option den Wert + <literal>-wW -C 60</literal>. Durch das Setzen dieser Werte + wird das TCP-Wrapping für alle + <application>inetd</application>-Dienste aktiviert. + Zusätzlich kann eine einzelne IP-Adresse jeden Dienst + nur maximal 60 Mal pro Minute anfordern.</para> + + <para>Für Einsteiger ist es erfreulich, dass diese Parameter + in der Regel nicht angepasst werden müssen. Da diese + Parameter aber dennoch von Interesse sein können + (beispielsweise, wenn Sie eine enorme Anzahl von + Verbindungsanfragen erhalten), werden einige dieser + einschränkenden Parameter im Folgenden näher + erläutert. Eine vollständige Auflistung aller + Optionen finden Sie hingegen in &man.inetd.8;.</para> + + <variablelist> + <varlistentry> + <term>-c maximum</term> + + <listitem> + <para>Legt die maximale Anzahl von parallen Aufrufen eines + Dienstes fest; in der Voreinstellung gibt es keine + Einschränkung. Diese Einstellung kann für jeden + Dienst durch Setzen des <option>max-child</option> + -Parameters festgelegt werden.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-C rate</term> + + <listitem> + <para>Legt fest, wie oft ein Dienst von einer einzelnen + IP-Adresse in einer Minute aufgerufen werden kann; in der + Voreinstellung gibt es keine Einschränkung. Dieser + Wert kann für jeden Dienst durch Setzen des + Parameters + <option>max-connections-per-ip-per-minute</option> + festgelegt werden.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-R rate</term> + + <listitem> + <para>Legt fest, wie oft ein Dienst in der Minute aktiviert + werden kann; in der Voreinstellung sind dies 256 + Aktivierungen pro Minute. Ein Wert von 0 erlaubt + unbegrenzt viele Aktivierungen.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>-s maximum</term> + + <listitem> + <para>Legt fest, wie oft ein Dienst in der Minute von einer + einzelnen IP-Adresse aus aktiviert werden kann; in der + Voreinstellung gibt es hier keine Beschränkung. Diese + Einstellung kann für jeden Dienst durch die Angabe + <option>max-child-per-ip</option> angepasst werden.</para> + </listitem> + </varlistentry> + </variablelist> + </sect2> + + <sect2 id="network-inetd-conf"> + <!-- XXX Dieser Abschnitt ist etwas verwirrend und sollte mal überarbeitet werden. --> + <title><filename>inetd.conf</filename></title> + + <para>Die Konfiguration von <application>inetd</application> + erfolgt über die Datei + <filename>/etc/inetd.conf</filename>.</para> + + <para>Wenn <filename>/etc/inetd.conf</filename> geändert + wird, kann <application>inetd</application> veranlasst werden, + seine Konfigurationsdatei neu einzulesen.</para> + + <example id="network-inetd-reread"> + <title>Die <application>inetd</application>-Konfiguration neu + einlesen</title> + + <screen>&prompt.root; <userinput>/etc/rc.d/inetd reload</userinput></screen> + </example> + + <para>Jede Zeile der Konfigurationsdatei beschreibt jeweils einen + Daemon. Kommentare beginnen mit einem <quote>#</quote>. Ein + Eintrag der Datei <filename>/etc/inetd.conf</filename> hat + folgenden Aufbau:</para> + + <programlisting>service-name +socket-type +protocol +{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] +user[:group][/login-class] +server-program +server-program-arguments</programlisting> + + <para>Ein Eintrag für den IPv4 verwendenden + &man.ftpd.8;-Daemon könnte so aussehen:</para> + + <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting> + + <variablelist> + <varlistentry> + <term>service-name</term> + + <listitem> + <para>Der Dienstname eines bestimmten Daemons. Er muss + einem in <filename>/etc/services</filename> aufgelisteten + Dienst entsprechen. In dieser Datei wird festgelegt, + welchen Port <application>inetd</application> abhören + muss. Wenn ein neuer Dienst erzeugt wird, muss er zuerst + in die Datei <filename>/etc/services</filename> + eingetragen werden.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>socket-type</term> + + <listitem> + <para>Entweder <literal>stream</literal>, + <literal>dgram</literal>, <literal>raw</literal>, oder + <literal>seqpacket</literal>. <literal>stream</literal> + muss für verbindungsorientierte TCP-Daemonen + verwendet werden, während <literal>dgram</literal> + das <acronym>UDP</acronym>-Protokoll verwaltet.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>protocol</term> + + <listitem> + <para>Eines der folgenden:</para> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <thead> + <row> + <entry>Protokoll</entry> + + <entry>Bedeutung</entry> + </row> + </thead> + + <tbody> + <row> + <entry>tcp, tcp4</entry> + + <entry>TCP (IPv4)</entry> + </row> + <row> + <entry>udp, udp4</entry> + + <entry>UDP (IPv4)</entry> + </row> + <row> + <entry>tcp6</entry> + + <entry>TCP (IPv6)</entry> + </row> + <row> + <entry>udp6</entry> + + <entry>UDP (IPv6)</entry> + </row> + <row> + <entry>tcp46</entry> + + <entry>TCP sowohl unter IPv4 als auch unter IPv6</entry> + </row> + <row> + <entry>udp46</entry> + + <entry>UDP sowohl unter IPv4 als auch unter IPv6</entry> + </row> + </tbody> + </tgroup> + </informaltable> + </listitem> + </varlistentry> + + <varlistentry> + <term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]</term> + + <listitem> + <para><option>wait|nowait</option> gibt an, ob der von + <application>inetd</application> aktivierte Daemon seinen + eigenen Socket verwalten kann oder nicht. + <option>dgram</option>-Sockets müssen die Option + <option>wait</option> verwenden, während Daemonen mit + Stream-Sockets, die normalerweise auch aus mehreren + Threads bestehen, die Option <option>nowait</option> + verwenden sollten. Die Option <option>wait</option> + gibt in der Regel mehrere Sockets an einen einzelnen + Daemon weiter, während <option>nowait</option> + für jeden neuen Socket einen Childdaemon erzeugt.</para> + + <para>Die maximale Anzahl an Child-Daemonen, die + <application>inetd</application> erzeugen kann, wird durch + die Option <option>max-child</option> festgelegt. Wenn + ein bestimmter Daemon 10 Instanzen benötigt, sollte + der Wert <literal>/10</literal> hinter die Option + <option>nowait</option> gesetzt werden. Geben Sie + hingegen den Wert <literal>/0</literal> an, gibt es + keine Beschränkung.</para> + + <para>Zusätzlich zu <option>max-child</option> kann + die maximale Anzahl von Verbindungen eines Rechners mit + einem bestimmten Daemon durch zwei weitere Optionen + beschränkt werden. Die Option + <option>max-connections-per-ip-per-minute</option> + legt die maximale Anzahl von Verbindungsversuchen fest, + die von einer bestimmten IP-Adresse aus unternommen werden + können. Ein Wert von zehn würde die maximale + Anzahl von Verbindungsversuchen einer IP-Adresse mit einem + bestimmten Dienst auf zehn Versuche in der Minute + beschränken. Durch die Angabe der Option + <option>max-child-per-ip</option> können Sie hingegen + festlegen, wie viele Child-Daemonen von einer bestimmten + IP-Adresse aus gestartet werden können. Durch diese + Optionen lassen sich ein absichtlicher oder unabsichtlicher + Ressourcenverbrauch sowie die Auswirkungen eines + <literal>Denial of Service (DoS)</literal>-Angriffs auf + einen Rechner begrenzen.</para> + + <para>Sie müssen hier entweder <option>wait</option> + oder <option>nowait</option> angeben. Die Angabe von + <option>max-child</option>, + <option>max-connections-per-ip-per-minute</option> und + <option>max-child-per-ip</option> ist hingegen + optional.</para> + + <para>Ein multithread-Daemon vom Streamtyp ohne die Optionen + <option>max-child</option>, + <option>max-connections-per-ip-per-minute</option> oder + <option>max-child-per-ip</option> sieht so aus: + <literal>nowait</literal></para> + + <para>Der gleiche Daemon mit einer maximal möglichen + Anzahl von 10 parallelen Daemonen würde so aussehen: + <literal>nowait/10</literal></para> + + <para>Wird zusätzlich die Anzahl der möglichen + Verbindungen pro Minute für jede IP-Adresse auf + 20 sowie die mögliche Gesamtzahl von Childdaemonen + auf 10 begrenzt, so sieht der Eintrag so aus: + <literal>nowait/10/20</literal></para> + + <para>All diese Optionen werden vom + &man.fingerd.8;-Daemon bereits in der Voreinstellung + verwendet:</para> + + <programlisting>finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s</programlisting> + + <para>Will man die maximale Anzahl von Child-Daemonen auf + 100 beschränken, wobei von jeder IP-Adresse aus + maximal 5 Child-Daemonen gestartet werden dürfen, + verwendet man den folgenden Eintrag: + <literal>nowait/100/0/5</literal>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>user</term> + + <listitem> + <para>Der Benutzername, unter dem der jeweilige Daemon + laufen soll. Meistens laufen Daemonen als User + <username>root</username>. Aus Sicherheitsgründen + laufen einige Server aber auch als User + <username>daemon</username>, oder als am wenigsten + privilegierter User <username>nobody</username>.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>server-program</term> + + <listitem> + <para>Der vollständige Pfad des Daemons, der eine + Verbindung entgegennimmt. Wird der Daemon von + <application>inetd</application> intern bereitgestellt, + sollte die Option <option>internal</option> verwendet + werden.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>server-program-arguments</term> + + <listitem> + <para>Dieser Eintrag legt (gemeinsam mit + <option>server-program</option> und beginnend mit + <literal>argv[0]</literal>), die Argumente fest, die bei + der Aktivierung an den Daemon übergeben werden. + Wenn die Anweisung auf der Kommandozeile also + <command>mydaemon -d</command> lautet, wäre + <literal>mydaemon -d</literal> auch der Wert der Option + <option>server program arguments</option>. Wenn es sich + beim Daemon um einen internen Dienst handelt, sollte + wiederum die Option <option>internal</option> verwendet + werden.</para> + </listitem> + </varlistentry> + </variablelist> + </sect2> + + <sect2 id="network-inetd-security"> + <title>Sicherheit</title> + + <para>Abhängig von der bei der Installation festgelegten + Konfiguration werden viele der von + <application>inetd</application> verwalteten Dienste automatisch + aktiviert! Wenn Sie einen bestimmten Daemon nicht + benötigen, sollten Sie ihn deaktivieren! Dazu kommentieren + Sie den jeweiligen Daemon in <filename>/etc/inetd.conf</filename> + mit einem <quote>#</quote> aus, um danach die + <link linkend="network-inetd-reread">inetd-Konfiguration neu + einzulesen</link>. Einige Daemonen, zum Beispiel + <application>fingerd</application>, sollten generell deaktiviert + werden, da sie zu viele Informationen an einen potentiellen + Angreifer liefern.</para> + + <para>Einige Daemonen haben unsichere Einstellungen, etwa + große oder nichtexistierende Timeouts für + Verbindungsversuche, die es einem Angreifer erlauben, über + lange Zeit langsam Verbindungen zu einem bestimmten Daemon + aufzubauen, um dessen verfügbare Ressourcen zu verbrauchen. + Es ist daher eine gute Idee, diese Daemonen durch die Optionen + <option>max-connections-per-ip-per-minute</option>, + <option>max-child</option> sowie + <option>max-child-per-ip</option> zu beschränken, wenn + Sie sehr viele Verbindungsversuche mit Ihrem System + registrieren.</para> + + <para>TCP-Wrapping ist in der Voreinstellung aktiviert. Lesen Sie + &man.hosts.access.5;, wenn Sie weitere Informationen zum + Setzen von TCP-Beschränkungen für verschiedene von + <application>inetd</application> aktivierte Daemonen + benötigen.</para> + </sect2> + + <sect2 id="network-inetd-misc"> + <title>Verschiedenes</title> + + <para>Bei <application>daytime</application>, + <application>time</application>, + <application>echo</application>, + <application>discard</application>, + <application>chargen</application>, und + <application>auth</application> handelt es sich um intern + von <application>inetd</application> bereitgestellte Dienste. + </para> + + <para>Der <application>auth</application>-Dienst bietet + Identifizierungsdienste über das Netzwerk + an und ist bis zu einem bestimmten Grad konfigurierbar, + während die meisten anderen Dienste nur aktiviert + oder deaktiviert werden können.</para> + + <para>Eine ausführliche Beschreibung finden Sie in + &man.inetd.8;.</para> + </sect2> + </sect1> + + <sect1 id="network-nfs"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>Reorganisiert und erweitert von </contrib> + </author> + </authorgroup> + + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>Geschrieben von </contrib> + </author> + </authorgroup> + </sect1info> + + <title>NFS – Network File System</title> + + <indexterm><primary>NFS</primary></indexterm> + + <para>Eines der vielen von FreeBSD unterstützten Dateisysteme + ist das Netzwerkdateisystem, das auch als <acronym role="Network + File System">NFS</acronym> + bekannt ist. <acronym role="Network File System">NFS</acronym> + ermöglicht es einem System, Dateien und Verzeichnisse + über ein Netzwerk mit anderen zu teilen. Über + <acronym role="Network File System">NFS</acronym> können + Benutzer und Programme auf Daten entfernter Systeme zugreifen, und + zwar genauso, wie wenn es sich um lokale Daten handeln würde. + </para> + + <para>Einige der wichtigsten Vorteile von <acronym>NFS</acronym> + sind:</para> + + <itemizedlist> + <listitem> + <para>Lokale Arbeitsstationen benötigen weniger + Plattenplatz, da gemeinsam benutzte Daten nur auf einem + einzigen Rechner vorhanden sind. Alle anderen Stationen + greifen über das Netzwerk auf diese Daten zu.</para> + </listitem> + + <listitem> + <para>Benutzer benötigen nur noch ein zentrales + Heimatverzeichnis auf einem <acronym>NFS</acronym>-Server. + Diese Verzeichnisse sind über das Netzwerk auf allen + Stationen verfügbar.</para> + </listitem> + + <listitem> + <para>Speichergeräte wie Disketten-, CD-ROM- oder + &iomegazip;-Laufwerke können über das Netzwerk von + anderen Arbeitstationen genutzt werden. Dadurch sind für + das gesamte Netzwerk deutlich weniger Speichergeräte + nötig.</para> + </listitem> + </itemizedlist> + + <sect2> + <title>Wie funktioniert <acronym>NFS</acronym>?</title> + + <para><acronym>NFS</acronym> besteht aus zwei Hauptteilen: Einem + Server und einem oder mehreren Clients. Der Client greift + über das Netzwerk auf die Daten zu, die auf dem Server + gespeichert sind. Damit dies korrekt funktioniert, müssen + einige Prozesse konfiguriert und gestartet werden:</para> + + <para>Der Server benötigt folgende Daemonen:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>Server</secondary> + </indexterm> + + <indexterm> + <primary>Dateiserver</primary> + <secondary>Unix-Clients</secondary> + </indexterm> + + <indexterm> + <primary><application>rpcbind</application></primary> + </indexterm> + + <indexterm> + <primary><application>mountd</application></primary> + </indexterm> + + <indexterm> + <primary><application>nfsd</application></primary> + </indexterm> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <colspec colwidth="1*"/> + <colspec colwidth="3*"/> + + <thead> + <row> + <entry>Daemon</entry> + + <entry>Beschreibung</entry> + </row> + </thead> + + <tbody> + <row> + <entry><application>nfsd</application></entry> + + <entry>Der <acronym>NFS</acronym>-Daemon. Er bearbeitet + Anfragen der <acronym>NFS</acronym>-Clients.</entry> + </row> + + <row> + <entry><application>mountd</application></entry> + + <entry>Der <acronym>NFS</acronym>-Mount-Daemon. Er + bearbeitet die Anfragen, die &man.nfsd.8; an ihn + weitergibt.</entry> + </row> + + <row> + <entry><application>rpcbind</application></entry> + + <entry> Der Portmapper-Daemon. Durch ihn erkennen die + <acronym>NFS</acronym>-Clients, welchen Port der + <acronym>NFS</acronym>-Server verwendet.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Der Client kann ebenfalls einen Daemon aufrufen, und zwar + den <application>nfsiod</application>-Daemon. Der + <application>nfsiod</application>-Daemon bearbeitet Anfragen vom + <acronym>NFS</acronym>-Server. Er ist optional und verbessert + die Leistung des Netzwerks. Für eine normale und korrekte + Arbeit ist er allerdings nicht erforderlich. Mehr erfahren + Sie in der Hilfeseite &man.nfsiod.8;.</para> + </sect2> + + <sect2 id="network-configuring-nfs"> + <title><acronym>NFS</acronym> einrichten</title> + + <indexterm> + <primary>NFS</primary> + <secondary>einrichten</secondary> + </indexterm> + + <para><acronym>NFS</acronym> lässt sich leicht + einrichten. Die nötigen Prozesse werden durch einige + Änderungen in <filename>/etc/rc.conf</filename> bei + jedem Systemstart gestartet.</para> + + <para>Stellen Sie sicher, dass auf dem + <acronym>NFS</acronym>-Server folgende Optionen in der Datei + <filename>/etc/rc.conf</filename> gesetzt sind:</para> + + <programlisting>rpcbind_enable="YES" +nfs_server_enable="YES" +mountd_flags="-r"</programlisting> + + <para><application>mountd</application> läuft automatisch, + wenn der <acronym>NFS</acronym>-Server aktiviert ist.</para> + + <para>Auf dem Client muss in <filename>/etc/rc.conf</filename> + folgende Option gesetzt sein:</para> + + <programlisting>nfs_client_enable="YES"</programlisting> + + <para><filename>/etc/exports</filename> legt fest, welche + Dateisysteme <acronym>NFS</acronym> exportieren (manchmal auch + als <quote>teilen</quote> bezeichnet) soll. Jede Zeile in + <filename>/etc/exports</filename> legt ein Dateisystem sowie + die Arbeitsstationen, die darauf Zugriff haben, fest. + Außerdem ist es möglich, Zugriffsoptionen + festzulegen. Es gibt viele verschiedene Optionen, allerdings + werden hier nur einige von ihnen erwähnt. Wenn Sie + Informationen zu weiteren Optionen benötigen, lesen Sie + &man.exports.5;.</para> + + <para>Nun folgen einige Beispieleinträge für + <filename>/etc/exports</filename>:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>Export von Dateisystemen</secondary> + </indexterm> + + <para>Die folgenden Beispiele geben Ihnen Anhaltspunkte zum + Exportieren von Dateisystemen, obwohl diese Einstellungen + natürlich von Ihrer Arbeitsumgebung und Ihrer + Netzwerkkonfiguration abhängen. Das nächste + Beispiel exportiert das Verzeichnis <filename>/cdrom</filename> + für drei Rechner, die sich in derselben Domäne wie + der Server befinden oder für die entsprechende + Einträge in <filename>/etc/hosts</filename> existieren. + Die Option <option>-ro</option> kennzeichnet das + exportierte Dateisystem als schreibgeschützt. Durch dieses + Flag ist das entfernte System nicht in der Lage, das exportierte + Dateisystem zu verändern.</para> + + <programlisting>/cdrom -ro host1 host2 host3</programlisting> + + <para>Die nächste Zeile exportiert <filename>/home</filename> + auf drei durch IP-Adressen bestimmte Rechner. Diese Einstellung + ist nützlich, wenn Sie über ein privates Netzwerk ohne + <acronym>DNS</acronym>-Server verfügen. Optional + könnten interne Rechnernamen auch in + <filename>/etc/hosts</filename> konfiguriert werden. + Benötigen Sie hierzu weitere Informationen, lesen Sie bitte + &man.hosts.5;. Durch das Flag <option>-alldirs</option> wird es + möglich, auch Unterverzeichnisse als Mountpunkte + festzulegen. Dies bedeutet aber nicht, dass alle + Unterverzeichnisse eingehängt werden, vielmehr wird es dem + Client ermöglicht, nur diejenigen Verzeichnisse + einzuhängen, die auch benötigt werden.</para> + + <programlisting>/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4</programlisting> + + <para>Die nächste Zeile exportiert <filename>/a</filename>, + damit Clients von verschiedenen Domänen auf das Dateisystem + zugreifen können. Das <option>-maproot=root</option>-Flag + erlaubt es dem Benutzer <username>root</username> des entfernten + Systems, als <username>root</username> auf das exportierte + Dateisystem zu schreiben. Wenn dieses Flag nicht gesetzt ist, + kann selbst <username>root</username> nicht auf das exportierte + Dateisystem schreiben.</para> + + <programlisting>/a -maproot=root host.example.com box.example.org</programlisting> + + <para>Damit ein Client auf ein exportiertes Dateisystem zugreifen + kann, muss ihm dies explizit gestattet werden. Stellen Sie also + sicher, dass der Client in <filename>/etc/exports</filename> + aufgeführt wird.</para> + + <para>Jede Zeile in <filename>/etc/exports</filename> entspricht + der Exportinformation für ein Dateisystem auf einen + Rechner. Ein entfernter Rechner kann für jedes Dateisystem + nur einmal festgelegt werden, und kann auch nur einen + Standardeintrag haben. Nehmen wir an, dass + <filename>/usr</filename> ein einziges Dateisystem ist. Dann + wären folgende Zeilen ungültig:</para> + + <programlisting>#Nicht erlaubt, wenn /usr ein einziges Dateisystem ist +/usr/src client +/usr/ports client</programlisting> + + <para>Das Dateisystem <filename>/usr</filename> wird hier zweimal + auf den selben Rechner (<hostid>client</hostid>) + exportiert. Dies ist aber nicht zulässig. Der korrekte + Eintrag sieht daher so aus:</para> + + <programlisting>/usr/src /usr/ports client</programlisting> + + <para>Die Eigenschaften eines auf einen anderen Rechner + exportierten Dateisystems müssen alle in einer Zeile + stehen. Zeilen, in denen kein Rechner festgelegt wird, werden + als einzelner Rechner behandelt. Dies schränkt die + Möglichkeiten zum Export von Dateisystemen ein, für + die meisten Anwender ist dies aber kein Problem.</para> + + <para>Eine gültige Exportliste, in der + <filename>/usr</filename> und <filename>/exports</filename> + lokale Dateisysteme sind, sieht so aus:</para> + + <programlisting># Export src and ports to client01 and client02, but only +# client01 has root privileges on it +/usr/src /usr/ports -maproot=root client01 +/usr/src /usr/ports client02 +# The client machines have root and can mount anywhere +# on /exports. Anyone in the world can mount /exports/obj read-only +/exports -alldirs -maproot=root client01 client02 +/exports/obj -ro</programlisting> + + <para>Der Daemon <application>mountd</application> muss + die Datei <filename>/etc/exports</filename> nach jeder + Änderung neu einlesen, damit die Änderungen + wirksam werden. Dies kann durch das Senden des + HUP-Signals an den <command>mountd</command>-Prozess + erfolgen:</para> + + <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen> + + <para>Alternativ können Sie das + <command>mountd</command>-&man.rc.8;-Skript auch mit dem + passenden Parameter aufrufen:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/mountd onereload</userinput></screen> + + <para>Lesen Sie bitte <xref linkend="configtuning-rcd"/> + des Handbuchs für Informationen zum Einsatz der + rc-Skripte.</para> + + <para>Eine weitere Möglichkeit, diese Änderungen zu + übernehmen, wäre der Neustart des Systems. Dies ist + allerdings nicht nötig. Wenn Sie die folgenden + Befehle als <username>root</username> ausführen, sollte + alles korrekt gestartet werden.</para> + + <para>Auf dem <acronym>NFS</acronym>-Server:</para> + + <screen>&prompt.root; <userinput>rpcbind</userinput> +&prompt.root; <userinput>nfsd -u -t -n 4</userinput> +&prompt.root; <userinput>mountd -r</userinput></screen> + + <para>Auf dem <acronym>NFS</acronym>-Client:</para> + + <screen>&prompt.root; <userinput>nfsiod -n 4</userinput></screen> + + <para>Nun sollte alles bereit sein, um ein entferntes Dateisystem + einhängen zu können. In unseren Beispielen nennen wir + den Server <hostid>server</hostid>, den Client + <hostid>client</hostid>. Wenn Sie ein entferntes Dateisystem + nur zeitweise einhängen wollen, oder nur Ihre Konfiguration + testen möchten, führen Sie auf dem Client als + <username>root</username> einen Befehl ähnlich dem + folgenden aus:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>Dateisysteme einhängen</secondary> + </indexterm> + + <screen>&prompt.root; <userinput>mount server:/home /mnt</userinput></screen> + + <para>Dadurch wird das Verzeichnis <filename>/home</filename> des + Servers auf dem Client unter <filename>/mnt</filename> + eingehängt. Wenn alles korrekt konfiguriert wurde, sehen + Sie auf dem Client im Verzeichnis <filename>/mnt</filename> alle + Dateien des Servers.</para> + + <para>Wenn Sie ein entferntes Dateisystem nach jedem Systemstart + automatisch einhängen wollen, fügen Sie das + Dateisystem in <filename>/etc/fstab</filename> ein. Dazu ein + Beispiel:</para> + + <programlisting>server:/home /mnt nfs rw 0 0</programlisting> + + <para>Eine Beschreibung aller Optionen enthält + die Hilfeseite &man.fstab.5;.</para> + </sect2> + + <sect2> + <title>Dateien sperren (<foreignphrase>Locking</foreignphrase>)</title> + + <para>Einige Anwendungen (beispielsweise + <application>mutt</application>) erfordern die Sperrung von + Dateien, damit sie korrekt arbeiten. Verwenden Sie + <acronym>NFS</acronym>, so können Sie für die + Sperrung von Dateien <application>rpc.lockd</application> + einsetzen. Um diesen Daemon zu aktivieren, müssen Sie + in <filename>/etc/rc.conf</filename> (sowohl auf Client- als + auch auf Serverseite) folgende Zeilen aufnehmen (wobei + vorausgesetzt wird, dasss <acronym>NFS</acronym> auf beiden + Systemen bereits konfiguriert ist):</para> + + <programlisting>rpc_lockd_enable="YES" +rpc_statd_enable="YES"</programlisting> + + <para>Danach starten Sie die Anwendung zur Verwaltung der + Dateisperren durch folgenden Befehl:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/lockd start</userinput> +&prompt.root; <userinput>/etc/rc.d/statd start</userinput></screen> + + <para>Benötigen Sie keine echten Dateisperren zwischen den + <acronym>NFS</acronym>-Clients und dem + <acronym>NFS</acronym>-Server, können Sie den + <acronym>NFS</acronym>-Client durch die Übergabe der + Option <option>-L</option> an &man.mount.nfs.8; zu einer lokalen + Sperrung von Dateien zwingen. Lesen Sie dazu auch die + Manualpage &man.mount.nfs.8;.</para> + </sect2> + + <sect2> + <title>Praktische Anwendungen</title> + + <para><acronym>NFS</acronym> ist in vielen Situationen + nützlich. Einige Anwendungsbereiche finden Sie in der + folgenden Liste:</para> + + <indexterm> + <primary>NFS</primary> + <secondary>Anwendungsbeispiele</secondary> + </indexterm> + + <itemizedlist> + <listitem> + <para>Mehrere Maschinen können sich ein CD-ROM-Laufwerk + oder andere Medien teilen. Dies ist billiger und + außerdem praktischer, um Programme auf mehreren + Rechnern zu installieren.</para> + </listitem> + + <listitem> + <para>In größeren Netzwerken ist es praktisch, + einen zentralen <acronym>NFS</acronym>-Server einzurichten, + auf dem die Heimatverzeichnisse der Benutzer gespeichert + werden. Diese Heimatverzeichnisse werden über das + Netzwerk exportiert. Dadurch haben die Benutzer immer das + gleiche Heimatverzeichnis zur Verfügung, + unabhängig davon, an welchem Arbeitsplatz sie sich + anmelden.</para> + </listitem> + + <listitem> + <para>Verschiedene Rechner können auf ein gemeinsames + Verzeichnis <filename>/usr/ports/distfiles</filename> + zugreifen. Wenn Sie nun einen Port auf mehreren Rechnern + installieren wollen, greifen Sie einfach auf dieses + Verzeichnis zu, ohne die Quelldateien auf jede Maschine + zu kopieren.</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2 id="network-amd"> + <sect2info> + <authorgroup> + <author> + <firstname>Wylie</firstname> + <surname>Stilwell</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Überarbeitet von </contrib> + </author> + </authorgroup> + </sect2info> + + <title><application>AMD</application></title> + + <indexterm><primary>amd</primary></indexterm> + <indexterm><primary>Automatic Mounter Daemon</primary></indexterm> + + <para>&man.amd.8; (Automatic Mounter Daemon) hängt ein + entferntes Dateisystem automatisch ein, + wenn auf eine Datei oder ein Verzeichnis in diesem Dateisystem + zugegriffen wird. Dateisysteme, die über einen gewissen + Zeitraum inaktiv sind, werden von <application>amd</application> + automatisch abgehängt. + <application>amd</application> ist eine einfache + Alternative zum dauerhaften Einhängen von Dateisystemen + in <filename>/etc/fstab</filename>.</para> + + <para>In der Voreinstellung stellt <application>amd</application> + die Verzeichnisse <filename>/host</filename> und + <filename>/net</filename> als NFS-Server bereit. Wenn auf eine + Datei in diesen Verzeichnissen zugegriffen wird, sucht + <application>amd</application> den entsprechenden Mountpunkt + und hängt das Dateisystem automatisch ein. + <filename>/net</filename> wird zum Einhängen von + exportierten Dateisystemen von einer IP-Adresse verwendet, + während <filename>/host</filename> zum Einhängen + von exportierten Dateisystemen eines durch seinen Namen + festgelegten Rechners dient.</para> + + <para>Ein Zugriff auf eine Datei in + <filename>/host/foobar/usr</filename> würde + <application>amd</application> veranlassen, + das von <hostid>foobar</hostid> exportierte Dateisystem + <filename>/usr</filename> einzuhängen.</para> + + <example> + <title>Ein exportiertes Dateisystem mit + <application>amd</application> in den Verzeichnisbaum + einhängen</title> + + <para>Sie können sich die verfügbaren Mountpunkte + eines entfernten Rechners mit <command>showmount</command> + ansehen. Wollen Sie sich die Mountpunkte des Rechners + <hostid>foobar</hostid> ansehen, so verwenden Sie:</para> + + <screen>&prompt.user; <userinput>showmount -e foobar</userinput> +Exports list on foobar: +/usr 10.10.10.0 +/a 10.10.10.0 +&prompt.user; <userinput>cd /host/foobar/usr</userinput></screen> + </example> + + <para>Wie Sie an diesem Beispiel erkennen können, zeigt + <command>showmount</command> <filename>/usr</filename> + als exportiertes Dateisystem an. Wenn man in das Verzeichnis + <filename>/host/foobar/usr</filename> wechselt, versucht + <application>amd</application> den Rechnernamen + <hostid>foobar</hostid> aufzulösen und den gewünschten + Export in den Verzeichnisbaum einzuhängen.</para> + + <para><application>amd</application> kann durch das Einfügen + der folgenden Zeile in <filename>/etc/rc.conf</filename> + automatisch gestartet werden:</para> + + <programlisting>amd_enable="YES"</programlisting> + + <para>Mit der Option <varname>amd_flags</varname> kann + <application>amd</application> angepasst werden. + Die Voreinstellung für <varname>amd_flags</varname> sieht + so aus:</para> + + <programlisting>amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"</programlisting> + + <para><filename>/etc/amd.map</filename> legt die Standardoptionen + fest, mit denen exportierte Dateisysteme in den Verzeichnisbaum + eingehängt werden. <filename>/etc/amd.conf</filename> + hingegen legt einige der erweiterten Optionen von + <application>amd</application> fest.</para> + + <para>Weitere Informationen finden Sie in den Hilfeseiten + &man.amd.8; und &man.amd.conf.5;.</para> + </sect2> + + <sect2 id="network-nfs-integration"> + <sect2info> + <authorgroup> + <author> + <firstname>John</firstname> + <surname>Lind</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + </sect2info> + + <title>Integrationsprobleme mit anderen Systemen</title> + + <para>Bestimmte ISA-Ethernetadapter haben Beschränkungen, die + zu ernsthaften Netzwerkproblemen, insbesondere mit NFS + führen können. Es handelt sich dabei nicht um ein + FreeBSD-spezifisches Problem, aber FreeBSD-Systeme sind davon + ebenfalls betroffen.</para> + + <para>Das Problem tritt fast ausschließlich dann auf, wenn + (FreeBSD)-PC-Systeme mit Hochleistungsrechnern verbunden werden, + wie Systemen von Silicon Graphics, Inc. oder + Sun Microsystems, Inc. Das Einhängen via NFS + funktioniert problemlos, auch einige Dateioperationen + können erfolgreich sein. Plötzlich aber wird der + Server nicht mehr auf den Client reagieren, obwohl Anfragen von + anderen Rechnern weiterhin bearbeitet werden. Dieses + Problem betrifft stets den Client, egal ob es sich beim Client + um das FreeBSD-System oder den Hochleistungsrechner handelt. + Auf vielen Systemen gibt es keine Möglichkeit mehr, den + Client ordnungsgemäß zu beenden. Die einzige + Lösung ist es oft, den Rechner neu zu starten, da dieses + NFS-Problem nicht mehr behoben werden kann.</para> + + <para>Die <quote>korrekte</quote> Lösung für dieses + Problem ist es, sich eine schnellere Ethernetkarte für + FreeBSD zu kaufen. Allerdings gibt es auch eine einfache und + meist zufriedenstellende Lösung, um dieses Problem zu + umgehen. Wenn es sich beim FreeBSD-System um den + <emphasis>Server</emphasis> handelt, verwenden Sie beim + Einhängen in den Verzeichnisbaum auf der Clientseite + zusätzlich die Option <option>-w=1024</option> . Wenn es + sich beim FreeBSD-System um den <emphasis>Client</emphasis> + handelt, dann hängen Sie das NFS-Dateisystem mit der + zusätzlichen Option <option>-r=1024</option> ein. + Diese Optionen können auf der Clientseite auch durch + das vierte Feld der Einträge in + <filename>/etc/fstab</filename> festgelegt werden, damit die + Dateisysteme automatisch eingehängt werden. Um die + Dateisysteme manuell einzuhängen, verwendet man bei + &man.mount.8; zusätzlich die Option + <option>-o</option>.</para> + + <para>Es gibt ein anderes Problem, das oft mit diesem verwechselt + wird. Dieses andere Problem tritt auf, wenn sich über NFS + verbundene Server und Clients in verschiedenen Netzwerken + befinden. Wenn dies der Fall ist, stellen Sie + <emphasis>sicher</emphasis>, dass Ihre Router die + nötigen <acronym>UDP</acronym>-Informationen weiterleiten, + oder Sie werden nirgends hingelangen, egal was Sie machen.</para> + + <para>In den folgenden Beispielen ist <hostid>fastws</hostid> der + Name des Hochleistungsrechners (bzw. dessen Schnittstelle), + <hostid>freebox</hostid> hingegen ist der Name des + FreeBSD-Systems, das über eine Netzkarte mit geringer + Leistung verfügt. <filename>/sharedfs</filename> ist das + exportierte NFS -Dateisystem (lesen Sie dazu auch + &man.exports.5;). Bei <filename>/project</filename> handelt es + sich um den Mountpunkt, an dem das exportierte Dateisystem auf + der Clientseite eingehängt wird. In allen Fällen + können zusätzliche Optionen, wie z.B. + <option>hard</option>, <option>soft</option> oder + <option>bg</option> wünschenswert sein.</para> + + <para>FreeBSD als Client (eingetragen in + <filename>/etc/fstab</filename> auf <hostid>freebox</hostid>): + </para> + + <programlisting>fastws:/sharedfs /project nfs rw,-r=1024 0 0</programlisting> + + <para>Manuelles Einhängen auf + <hostid>freebox</hostid>:</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -r=1024 fastws:/sharedfs /project</userinput></screen> + + <para>&os; als Server (eingetragen in + <filename>/etc/fstab</filename> auf <hostid>fastws</hostid>): + </para> + + <programlisting>freebox:/sharedfs /project nfs rw,-w=1024 0 0</programlisting> + + <para>Manuelles Einhängen auf <hostid>fastws</hostid>:</para> + + <screen>&prompt.root; <userinput>mount -t nfs -o -w=1024 freebox:/sharedfs /project</userinput></screen> + + <para>Nahezu alle 16-bit Ethernetadapter erlauben Operationen + ohne obengenannte Einschränkungen auf die Lese- oder + Schreibgröße.</para> + + <para>Für alle technisch Interessierten wird nun beschrieben, + was passiert, wenn dieser Fehler auftritt, und warum er + irreversibel ist. NFS arbeitet üblicherweise mit einer + <quote>Blockgröße</quote> von 8 kByte (obwohl + es kleinere Fragmente zulassen würde). Da die maximale + Rahmengröße von Ethernet 1500 Bytes + beträgt, wird der NFS-<quote>Block</quote> in einzelne + Ethernetrahmen aufgeteilt, obwohl es sich nach wie vor um eine + Einheit handelt, die auch als Einheit empfangen, verarbeitet + und <emphasis>bestätigt</emphasis> werden muss. Der + Hochleistungsrechner verschickt die Pakete, aus denen der + NFS-Block besteht, so eng hintereinander, wie es der Standard + erlaubt. Auf der anderen Seite (auf der sich die langsamere + Netzkarte befindet), überschreiben die späteren + Pakete ihre Vorgänger, bevor diese vom System verarbeitet + werden (Überlauf!). Dies hat zur Folge, dass der NFS-Block + nicht mehr rekonstruiert und bestätigt werden kann. Als + Folge davon glaubt der Hochleistungsrechner, dass der andere + Rechner nicht erreichbar ist (Timeout!) und versucht die + Sendung zu wiederholen. Allerdings wird wiederum der komplette + NFS-Block verschickt, so dass sich der ganze Vorgang wiederholt, + und zwar immer wieder (oder bis zum Systemneustart).</para> + + <para>Indem wir die Einheitengröße unter der maximalen + Größe der Ethernetpakete halten, können wir + sicherstellen, dass jedes vollständig erhaltene + Ethernetpaket individuell angesprochen werden kann und vermeiden + die Blockierung des Systems.</para> + + <para>Überläufe können zwar nach wie vor auftreten, + wenn ein Hochleistungsrechner Daten auf ein PC-System + transferiert. Durch die besseren (und schnelleren) Netzkarten + treten solche Überläufe allerdings nicht mehr + <emphasis>zwingend</emphasis> auf, wenn + NFS-<quote>Einheiten</quote> übertragen werden. Tritt nun + ein Überlauf auf, wird die betroffene Einheit erneut + verschickt, und es besteht eine gute Chance, dass sie nun + erhalten, verarbeitet und bestätigt werden kann.</para> + </sect2> + </sect1> + + <sect1 id="network-nis"> + <sect1info> + <authorgroup> + <author> + <firstname>Bill</firstname> + <surname>Swingle</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + + <authorgroup> + <author> + <firstname>Eric</firstname> + <surname>Ogren</surname> + <contrib>Erweitert von </contrib> + </author> + + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + </author> + </authorgroup> + </sect1info> + + <title>NIS/YP – Network Information Service</title> + + <sect2> + <title>Was ist NIS?</title> + + <indexterm><primary>NIS</primary></indexterm> + <indexterm><primary>Solaris</primary></indexterm> + <indexterm><primary>HP-UX</primary></indexterm> + <indexterm><primary>AIX</primary></indexterm> + <indexterm><primary>Linux</primary></indexterm> + <indexterm><primary>NetBSD</primary></indexterm> + <indexterm><primary>OpenBSD</primary></indexterm> + + <para><acronym role="Network Information Service">NIS</acronym> + wurde von Sun Microsystems entwickelt, um &unix;-Systeme + (ursprünglich &sunos;) zentral verwalten zu können. + Mittlerweile hat es sich zu einem Industriestandard entwickelt, + der von allen wichtigen &unix;-Systemen (&solaris;, HP-UX, + &aix;, Linux, NetBSD, OpenBSD, FreeBSD und anderen) + unterstützt wird.</para> + + <indexterm> + <primary>yellow pages</primary> + <see>NIS</see> + </indexterm> + + <para><acronym role="Network Information Service">NIS</acronym> war + ursprünglich als <emphasis>Yellow Pages</emphasis> bekannt, + aus markenrechtlichen Gründen wurde der Name aber + geändert. Die alte Bezeichnung (sowie die Abkürzung YP) + wird aber nach wie vor häufig verwendet.</para> + + <indexterm> + <primary>NIS</primary> + <secondary>Domänen</secondary> + </indexterm> + + <para>Bei NIS handelt es sich um ein RPC-basiertes + Client/Server-System. Eine Gruppe von Rechnern greift dabei + innerhalb einer NIS-Domäne auf gemeinsame + Konfigurationsdateien zu. Ein Systemadministrator wird dadurch + in die Lage versetzt, NIS-Clients mit minimalem Aufwand + einzurichten, sowie Änderungen an der Systemkonfiguration + von einem zentralen Ort aus durchzuführen.</para> + + <indexterm> + <primary>Windows NT</primary> + </indexterm> + + <para>Die Funktion entspricht dem Domänensystem von + &windowsnt;; auch wenn sich die interne Umsetzung unterscheidet, + sind die Basisfunktionen vergleichbar.</para> + </sect2> + + <sect2> + <title>Wichtige Prozesse und Begriffe</title> + + <para>Es gibt verschiedene Begriffe und Anwenderprozesse, auf die + Sie stoßen werden, wenn Sie NIS unter FreeBSD einrichten, + egal ob Sie einen Server oder einen Client konfigurieren:</para> + + <indexterm> + <primary><application>rpcbind</application></primary> + </indexterm> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <colspec colwidth="1*"/> + <colspec colwidth="3*"/> + + <thead> + <row> + <entry>Begriff</entry> + + <entry>Beschreibung</entry> + </row> + </thead> + + <tbody> + <row> + <entry>NIS-Domänenname</entry> + + <entry>Ein NIS-Masterserver sowie alle Clients + (inklusive der Slaveserver) haben einen + NIS-Domänennamen. Dieser hat (ähnlich den + &windowsnt;-Domänennamen) nichts mit DNS zu tun. + </entry> + </row> + + <row> + <entry><application>rpcbind</application></entry> + + <entry>Muss laufen, damit RPC (Remote Procedure Call, ein + von NIS verwendetes Netzwerkprotokoll) funktioniert. + NIS-Server sowie Clients funktionieren ohne + <application>rpcbind</application> nicht.</entry> + </row> + + <row> + <entry><application>ypbind</application></entry> + + <entry><quote>Bindet</quote> einen NIS-Client an seinen + NIS-Server. Der Client bezieht den + NIS-Domänennamen vom System und stellt über + das RPC-Protokoll eine Verbindung zum NIS-Server her. + <application>ypbind</application> ist der zentrale + Bestandteil der Client-Server-Kommunikation in einer + NIS-Umgebung. Wird <application>>ypbind</application> + auf einem Client beendet, ist dieser nicht mehr in der + Lage, auf den NIS-Server zuzugreifen.</entry> + </row> + + <row> + <entry><application>ypserv</application></entry> + + <entry>Sollte nur auf dem NIS-Server laufen, da es sich um + den Serverprozess selbst handelt. Wenn &man.ypserv.8; + nicht mehr läuft, kann der Server nicht mehr auf + NIS-Anforderungen reagieren (wenn ein Slaveserver + existiert, kann dieser als Ersatz fungieren). Einige + NIS-Systeme (allerdings nicht das von FreeBSD) versuchen + allerdings erst gar nicht, sich mit einem anderen Server + zu verbinden, wenn der bisher verwendete Server nicht + mehr reagiert. Die einzige Lösung dieses Problems + besteht dann darin, den Serverprozess (oder gar den + Server selbst) oder den + <application>ypbind</application>-Prozess auf dem Client + neu zu starten.</entry> + </row> + + <row> + <entry><application>rpc.yppasswdd</application></entry> + + <entry>Ein weiterer Prozess, der nur auf dem + NIS-Masterserver laufen sollte. Es handelt sich um einen + Daemonprozess, der es NIS-Clients ermöglicht, sich + auf dem NIS-Masterserver anzumelden, um ihr Passwort zu + ändern.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + <!-- XXX Missing: rpc.ypxfrd (not important, though) May only run + on the master --> + </sect2> + + <sect2> + <title>Wie funktioniert NIS?</title> + + <para>In einer NIS-Umgebung gibt es drei Rechnerarten: + Masterserver, Slaveserver und Clients. Server dienen als + zentraler Speicherort für Rechnerkonfigurationen. + Masterserver speichern die maßgebliche Kopie dieser + Informationen, während Slaveserver diese Informationen + aus Redundanzgründen spiegeln. Die Clients beziehen + ihre Informationen immer vom Server.</para> + + <para>Auf diese Art und Weise können Informationen aus + verschiedenen Dateien von mehreren Rechnern gemeinsam + verwendet werden. <filename>master.passwd</filename>, + <filename>group</filename>, und <filename>hosts</filename> + werden oft gemeinsam über NIS verwendet. Immer, wenn + ein Prozess auf einem Client auf Informationen zugreifen will, + die normalerweise in lokalen Dateien vorhanden wären, + wird stattdessen eine Anfrage an den NIS-Server gestellt, an + den der Client gebunden ist.</para> + + <sect3> + <title>Arten von NIS-Rechnern</title> + + <itemizedlist> + <listitem> + <indexterm> + <primary>NIS</primary> + <secondary>Masterserver</secondary> + </indexterm> + + <para>Ein <emphasis>NIS-Masterserver</emphasis> verwaltet, + ähnlich einem &windowsnt;-Domänencontroller, die + von allen NIS-Clients gemeinsam verwendeten Dateien. + <filename>passwd</filename>, <filename>group</filename>, + sowie verschiedene andere von den Clients verwendete + Dateien existieren auf dem Masterserver.</para> + + <note><para>Ein Rechner kann auch für mehrere + NIS-Domänen als Masterserver fungieren. Dieser + Abschnitt konzentriert sich im Folgenden allerdings auf + eine relativ kleine NIS-Umgebung.</para></note> + </listitem> + + <listitem> + <indexterm> + <primary>NIS</primary> + <secondary>Slaveserver</secondary> + </indexterm> + + <para><emphasis>NIS-Slaveserver</emphasis>. Ähnlich + einem &windowsnt;-Backupdomänencontroller, verwalten + NIS-Slaveserver Kopien der Daten des NIS-Masterservers. + NIS-Slaveserver bieten die Redundanz, die für + kritische Umgebungen benötigt wird. Zusätzlich + entlasten Slaveserver den Masterserver: NIS-Clients + verbinden sich immer mit dem NIS-Server, der zuerst + reagiert. Dieser Server kann auch ein Slaveserver sein. + </para> + </listitem> + + <listitem> + <indexterm> + <primary>NIS</primary> + <secondary>Client</secondary> + </indexterm> + + <para><emphasis>NIS-Clients</emphasis>. NIS-Clients + identifizieren sich gegenüber dem NIS-Server + (ähnlich den &windowsnt;-Workstations), um sich am + Server anzumelden.</para> + </listitem> + </itemizedlist> + </sect3> + </sect2> + + <sect2> + <title>NIS/YP konfigurieren</title> + + <para>Dieser Abschnitt beschreibt an Hand eines Beispiels die + Einrichtung einer NIS-Umgebung.</para> + + <sect3> + <title>Planung</title> + + <para>Nehmen wir an, Sie seien der Administrator eines kleinen + Universitätsnetzes. Dieses Netz besteht aus + fünfzehn FreeBSD-Rechnern, für die derzeit keine + zentrale Verwaltung existiert, jeder Rechner hat also eine + eigene Version von <filename>/etc/passwd</filename> und + <filename>/etc/master.passwd</filename>. Diese Dateien werden + manuell synchron gehalten; legen Sie einen neuen Benutzer an, + so muss dies auf allen fünfzehn Rechnern manuell + erledigt werden (unter Verwendung von + <command>adduser</command>). Da diese Lösung sehr + ineffizient ist, soll das Netzwerk in Zukunft NIS verwenden, + wobei zwei der Rechner als Server dienen sollen.</para> + + <para>In Zukunft soll das Netz also wie folgt aussehen:</para> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="3"> + <thead> + <row> + <entry>Rechnername</entry> + <entry>IP-Adresse</entry> + <entry>Rechneraufgabe</entry> + </row> + </thead> + <tbody> + <row> + <entry><hostid>ellington</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.2</hostid></entry> + <entry>NIS-Master</entry> + </row> + <row> + <entry><hostid>coltrane</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.3</hostid></entry> + <entry>NIS-Slave</entry> + </row> + <row> + <entry><hostid>basie</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.4</hostid></entry> + <entry>Workstation der Fakultät</entry> + </row> + <row> + <entry><hostid>bird</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.5</hostid></entry> + <entry>Clientrechner</entry> + </row> + <row> + <entry><hostid>cli[1-11]</hostid></entry> + <entry><hostid role="ipaddr">10.0.0.[6-17]</hostid></entry> + <entry>Verschiedene andere Clients</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Wenn Sie NIS das erste Mal einrichten, ist es ratsam, sich + zuerst über die Vorgangsweise Gedanken zu machen. + Unabhängig von der Größe Ihres Netzwerks + müssen Sie stets einige Entscheidungen treffen.</para> + + <sect4> + <title>Einen NIS-Domänennamen wählen</title> + + <indexterm> + <primary>NIS</primary> + <secondary>Domänenname</secondary> + </indexterm> + + <para>Dies muss nicht der <quote>Domainname</quote> sein. Es + handelt sich vielmehr um den <quote>NIS-Domainnamen</quote>. + Wenn ein Client Informationen anfordert, ist in dieser + Anforderung der Name der NIS-Domäne enthalten. + Dadurch weiß jeder Server im Netzwerk, auf welche + Anforderung er antworten muss. Stellen Sie sich den + NIS-Domänennamen als den Namen einer Gruppe von + Rechnern vor, die etwas gemeinsam haben.</para> + + <para>Manchmal wird der Name der Internetdomäne auch + für die NIS-Domäne verwendet. Dies ist allerdings + nicht empfehlenswert, da dies bei der Behebung von Problemen + verwirrend sein kann. Der Name der NIS-Domäne sollte + innerhalb Ihres Netzwerks einzigartig sein. Hilfreich ist + es, wenn der Name die Gruppe der in ihr zusammengefassten + Rechner beschreibt. Die Kunstabteilung von Acme Inc. + hätte daher die NIS-Domäne + <quote>acme-art</quote>. Für unser Beispiel verwenden + wir den NIS-Domänennamen + <literal>test-domain</literal>.</para> + + <indexterm><primary>SunOS</primary></indexterm> + + <para>Es gibt jedoch auch Betriebssysteme (vor allem &sunos;), + die als NIS-Domänennamen den Name der + Internetdomäne verwenden. Wenn dies für einen + oder mehrere Rechner Ihres Netzwerks zutrifft, + <emphasis>müssen</emphasis> Sie den Namen der + Internetdomäne als Ihren NIS-Domänennamen + verwenden.</para> + </sect4> + + <sect4> + <title>Anforderungen an den Server</title> + + <para>Wenn Sie einen NIS-Server einrichten wollen, müssen + Sie einige Dinge beachten. Eine unangenehme Eigenschaft + von NIS ist die Abhängigkeit der Clients vom Server. + Wenn sich der Client nicht über den Server mit seiner + NIS-Domäne verbinden kann, wird der Rechner oft + unbenutzbar, da das Fehlen von Benutzer- und + Gruppeninformationen zum Einfrieren des Clients führt. + Daher sollten Sie für den Server einen Rechner + auswählen, der nicht regelmäßig neu + gestartet werden muss und der nicht für Testversuche + verwendet wird. Idealerweise handelt es sich um einen + alleinstehenden Rechner, dessen einzige Aufgabe es ist, als + NIS-Server zu dienen. Wenn Sie ein Netzwerk haben, das + nicht zu stark ausgelastet ist, ist es auch möglich, + den NIS-Server als weiteren Dienst auf einem anderen Rechner + laufen zu lassen. Denken Sie aber daran, dass ein Ausfall + des NIS-Servers <emphasis>alle</emphasis> NIS-Clients + betrifft.</para> + </sect4> + </sect3> + + <sect3> + <title>NIS-Server</title> + + <para>Die verbindlichen Kopien aller NIS-Informationen befinden + sich auf einem einzigen Rechner, dem NIS-Masterserver. Die + Datenbanken, in denen die Informationen gespeichert sind, + bezeichnet man als NIS-Maps. Unter FreeBSD werden diese + Maps unter <filename>/var/yp/[domainname]</filename> + gespeichert, wobei <filename>[domainname]</filename> der + Name der NIS-Domäne ist. Ein einzelner NIS-Server + kann gleichzeitig mehrere NIS-Domänen verwalten, daher + können auch mehrere Verzeichnisse vorhanden sein. Jede + Domäne verfügt über ein eigenes Verzeichnis + sowie einen eigenen, von anderen Domänen + unabhängigen Satz von NIS-Maps.</para> + + <para>NIS-Master- und Slaveserver verwenden den + <command>ypserv</command>-Daemon, um NIS-Anfragen zu + bearbeiten. <command>ypserv</command> empfängt + eingehende Anfragen der NIS-Clients, ermittelt aus der + angeforderten Domäne und Map einen Pfad zur + entsprechenden Datenbank, und sendet die angeforderten + Daten von der Datenbank zum Client.</para> + + <sect4> + <title>Einen NIS-Masterserver einrichten</title> + + <indexterm> + <primary>NIS</primary> + <secondary>Serverkonfiguration</secondary> + </indexterm> + + <para>Abhängig von Ihren Anforderungen ist die + Einrichtung eines NIS-Masterservers relativ einfach, da + NIS von FreeBSD bereits in der Standardkonfiguration + unterstützt wird. Sie müssen nur folgende + Zeilen in <filename>/etc/rc.conf</filename> einfügen: + </para> + + <procedure> + <step> + <programlisting>nisdomainname="test-domain"</programlisting> + + <para>Diese Zeile setzt den NIS-Domänennamen auf + <literal>test-domain</literal>, wenn Sie das Netzwerk + initialisieren (beispielsweise nach einem Systemstart). + </para> + </step> + + <step> + <para><programlisting>nis_server_enable="YES"</programlisting> + Dadurch werden die NIS-Serverprozesse gestartet.</para> + </step> + + <step> + <para><programlisting>nis_yppasswdd_enable="YES"</programlisting> + Durch diese Zeile wird der + <command>rpc.yppasswdd</command>-Daemon aktiviert, der, + wie bereits erwähnt, die Änderung von + NIS-Passwörtern von einem Client aus + ermöglicht.</para> + </step> + </procedure> + + <note> + <para>In Abhängigkeit von Ihrer NIS-Konfiguration + können weitere Einträge erforderlich sein. + Weitere Informationen finden Sie im Abschnitt + <link linkend="nis-server-is-client">NIS-Server, die + auch als NIS-Clients arbeiten</link>.</para> + </note> + + <para>Nachdem Sie obige Parameter konfiguriert haben, müssen + Sie nur noch <command>/etc/netstart</command> als Superuser + ausführen, um alles entsprechend Ihren Vorgaben in der + Datei <filename>/etc/rc.conf</filename> einzurichten. + Bevor Sie die NIS-Maps einrichten können, müssen Sie + nun noch den <application>ypserv</application>-Daemon + manuell starten:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/ypserv start</userinput></screen> + </sect4> + + <sect4> + <title>Die NIS-Maps initialisieren</title> + + <indexterm> + <primary>NIS</primary> + <secondary>maps</secondary> + </indexterm> + + <para><emphasis>NIS-Maps</emphasis> sind Datenbanken, die + sich im Verzeichnis <filename>/var/yp</filename> befinden. + Sie werden am NIS-Masterserver aus den Konfigurationsdateien + unter <filename>/etc</filename> erzeugt. Einzige Ausnahme: + <filename>/etc/master.passwd</filename>. Dies ist auch + sinnvoll, da Sie die Passwörter für Ihr + <username>root</username>- oder andere + Administratorkonten nicht an alle Server der NIS-Domäne + verteilen wollen. Bevor Sie also die NIS-Maps des + Masterservers einrichten, sollten Sie Folgendes tun:</para> + + <screen>&prompt.root; <userinput>cp /etc/master.passwd /var/yp/master.passwd</userinput> +&prompt.root; <userinput>cd /var/yp</userinput> +&prompt.root; <userinput>vi master.passwd</userinput></screen> + + <para>Entfernen Sie alle Systemkonten + (wie <username>bin</username>, <username>tty</username>, + <username>kmem</username> oder <username>games</username>), + sowie alle Konten, die Sie nicht an die NIS-Clients + weitergeben wollen (beispielsweise <username>root</username> + und alle Konten mit der UID 0 (=Superuser).</para> + + <note><para>Stellen Sie sicher, dass + <filename>/var/yp/master.passwd</filename> weder von der + Gruppe noch von der Welt gelesen werden kann (Zugriffsmodus + 600)! Ist dies nicht der Fall, ändern Sie dies mit + <command>chmod</command>.</para></note> + + <indexterm><primary>Tru64 UNIX</primary></indexterm> + + <para>Nun können Sie die NIS-Maps initialisieren. + FreeBSD verwendet dafür das Skript + <command>ypinit</command> (lesen Sie dazu auch + &man.ypinit.8;). Dieses Skript ist auf fast allen + UNIX-Betriebssystemen verfügbar. Bei + Digitals Unix/Compaq Tru64 UNIX nennt es sich allerdings + <command>ypsetup</command>. Da wir Maps für einen + NIS-Masterserver erzeugen, verwenden wir + <command>ypinit</command> mit der Option + <option>-m</option>. Nachdem Sie die beschriebenen + Aktionen durchgeführt haben, erzeugen Sie nun die + NIS-Maps:</para> + + <screen>ellington&prompt.root; <userinput>ypinit -m test-domain</userinput> +Server Type: MASTER Domain: test-domain +Creating an YP server will require that you answer a few questions. +Questions will all be asked at the beginning of the procedure. +Do you want this procedure to quit on non-fatal errors? [y/n: n] <userinput>n</userinput> +Ok, please remember to go back and redo manually whatever fails. +If you don't, something might not work. +At this point, we have to construct a list of this domains YP servers. +rod.darktech.org is already known as master server. +Please continue to add any slave servers, one per line. When you are +done with the list, type a <control D>. +master server : ellington +next host to add: <userinput>coltrane</userinput> +next host to add: <userinput>^D</userinput> +The current list of NIS servers looks like this: +ellington +coltrane +Is this correct? [y/n: y] <userinput>y</userinput> + +[..output from map generation..] + +NIS Map update completed. +ellington has been setup as an YP master server without any errors.</screen> + + <para>Dadurch erzeugt <command>ypinit</command> + <filename>/var/yp/Makefile</filename> aus der Datei + <filename>/var/yp/Makefile.dist</filename>. + Durch diese Datei wird festgelegt, dass Sie in einer + NIS-Umgebung mit nur einem Server arbeiten und dass alle + Clients unter FreeBSD laufen. Da + <literal>test-domain</literal> aber auch über einen + Slaveserver verfügt, müssen Sie + <filename>/var/yp/Makefile</filename> entsprechend anpassen: + </para> + + <screen>ellington&prompt.root; <userinput>vi /var/yp/Makefile</userinput></screen> + + <para>Sie sollten die Zeile</para> + + <programlisting>NOPUSH = "True"</programlisting> + + <para>auskommentieren (falls dies nicht bereits der Fall ist).</para> + </sect4> + + <sect4> + <title>Einen NIS-Slaveserver einrichten</title> + + <indexterm> + <primary>NIS</primary> + <secondary>Slaveserver</secondary> + </indexterm> + + <para>Ein NIS-Slaveserver ist noch einfacher einzurichten als + ein Masterserver. Melden Sie sich am Slaveserver an und + ändern Sie <filename>/etc/rc.conf</filename> analog + zum Masterserver. Der einzige Unterschied besteht in der + Verwendung der Option <option>-s</option>, wenn Sie + <command>ypinit</command> aufrufen. Die Option + <option>-s</option> erfordert den Namen des + NIS-Masterservers, daher sieht unsere Ein- und Ausgabe wie + folgt aus:</para> + + <screen>coltrane&prompt.root; <userinput>ypinit -s ellington test-domain</userinput> + +Server Type: SLAVE Domain: test-domain Master: ellington + +Creating an YP server will require that you answer a few questions. +Questions will all be asked at the beginning of the procedure. + +Do you want this procedure to quit on non-fatal errors? [y/n: n] <userinput>n</userinput> + +Ok, please remember to go back and redo manually whatever fails. +If you don't, something might not work. +There will be no further questions. The remainder of the procedure +should take a few minutes, to copy the databases from ellington. +Transferring netgroup... +ypxfr: Exiting: Map successfully transferred +Transferring netgroup.byuser... +ypxfr: Exiting: Map successfully transferred +Transferring netgroup.byhost... +ypxfr: Exiting: Map successfully transferred +Transferring master.passwd.byuid... +ypxfr: Exiting: Map successfully transferred +Transferring passwd.byuid... +ypxfr: Exiting: Map successfully transferred +Transferring passwd.byname... +ypxfr: Exiting: Map successfully transferred +Transferring group.bygid... +ypxfr: Exiting: Map successfully transferred +Transferring group.byname... +ypxfr: Exiting: Map successfully transferred +Transferring services.byname... +ypxfr: Exiting: Map successfully transferred +Transferring rpc.bynumber... +ypxfr: Exiting: Map successfully transferred +Transferring rpc.byname... +ypxfr: Exiting: Map successfully transferred +Transferring protocols.byname... +ypxfr: Exiting: Map successfully transferred +Transferring master.passwd.byname... +ypxfr: Exiting: Map successfully transferred +Transferring networks.byname... +ypxfr: Exiting: Map successfully transferred +Transferring networks.byaddr... +ypxfr: Exiting: Map successfully transferred +Transferring netid.byname... +ypxfr: Exiting: Map successfully transferred +Transferring hosts.byaddr... +ypxfr: Exiting: Map successfully transferred +Transferring protocols.bynumber... +ypxfr: Exiting: Map successfully transferred +Transferring ypservers... +ypxfr: Exiting: Map successfully transferred +Transferring hosts.byname... +ypxfr: Exiting: Map successfully transferred + +coltrane has been setup as an YP slave server without any errors. +Don't forget to update map ypservers on ellington.</screen> + + <para>Sie sollten nun über das Verzeichnis + <filename>/var/yp/test-domain</filename> verfügen. + Die Kopien der NIS-Masterserver-Maps sollten sich in diesem + Verzeichnis befinden. Allerdings müssen Sie diese + auch aktuell halten. Die folgenden Einträge in + <filename>/etc/crontab</filename> erledigen diese Aufgabe: + </para> + + <programlisting>20 * * * * root /usr/libexec/ypxfr passwd.byname +21 * * * * root /usr/libexec/ypxfr passwd.byuid</programlisting> + + <para>Diese zwei Zeilen zwingen den Slaveserver, seine Maps + mit denen des Masterservers zu synchronisieren. Diese + Einträge sind nicht zwar nicht unbedingt nötig, + da der Masterserver automatisch versucht, alle + Änderungen seiner NIS-Maps an seine + Slaveserver weiterzugeben. Da Passwortinformationen aber + auch für nur vom Slaveserver abhängige Systeme + vital sind, + ist es eine gute Idee, diese Aktualisierungen zu erzwingen. + Besonders wichtig ist dies in stark ausgelasteten Netzen, + in denen Map-Aktualisierungen unvollständig sein + könnten.</para> + + <para>Führen Sie nun <command>/etc/netstart</command> + auch auf dem Slaveserver aus, um den NIS-Server erneut zu + starten.</para> + </sect4> + </sect3> + + <sect3> + <title>NIS-Clients</title> + + <para>Ein NIS-Client <literal>bindet</literal> sich unter + Verwendung des <command>ypbind</command>-Daemons an einen + NIS-Server. <command>ypbind</command> prüft die + Standarddomäne des Systems (die durch + <command>domainname</command> gesetzt wird), und beginnt + RPCs über das lokale Netzwerk zu verteilen (broadcast). + Diese Anforderungen legen den Namen der Domäne fest, + für die <command>ypbind</command> eine Bindung erzeugen + will. Wenn der Server der entsprechenden Domäne eine + solche Anforderung erhält, schickt er eine Antwort an + <command>ypbind</command>. <command>ybind</command> speichert + daraufhin die Adresse des Servers. Wenn mehrere Server + verfügbar sind (beispielsweise ein Master- und mehrere + Slaveserver), verwendet <command>ypbind</command> die erste + erhaltene Adresse. Ab diesem Zeitpunkt richtet der Client alle + Anfragen an genau diesen Server. <command>ypbind</command> + <quote>pingt</quote> den Server gelegentlich an, um + sicherzustellen, dass der Server funktioniert. Antwortet der + Server innerhalb eines bestimmten Zeitraums nicht (Timeout), + markiert <command>ypbind</command> die Domäne als + ungebunden und beginnt erneut, RPCs über das Netzwerk zu + verteilen, um einen anderen Server zu finden.</para> + + <sect4> + <title>Einen NIS-Client konfigurieren</title> + + <indexterm> + <primary>NIS</primary> + <secondary>Client konfigurieren</secondary> + </indexterm> + + <para>Einen FreeBSD-Rechner als NIS-Client einzurichten, ist + recht einfach.</para> + + <procedure> + <step> + <para>Fügen Sie folgende Zeilen in + <filename>/etc/rc.conf</filename> ein, um den + NIS-Domänennamen festzulegen, und um + <command>ypbind</command> bei der Initialisierung des + Netzwerks zu starten:</para> + + <programlisting>nisdomainname="test-domain" +nis_client_enable="YES"</programlisting> + </step> + + <step> + <para>Um alle Passworteinträge des NIS-Servers zu + importieren, löschen Sie alle Benutzerkonten in + <filename>/etc/master.passwd</filename> und fügen + mit <command>vipw</command> folgende Zeile am Ende der + Datei ein:</para> + + <programlisting>+:::::::::</programlisting> + + <note> + <para>Diese Zeile legt für alle gültigen + Benutzerkonten der NIS-Server-Maps einen Zugang an. + Es gibt verschiedene Wege, Ihren NIS-Client durch + Änderung dieser Zeile zu konfigurieren. Lesen + Sie dazu auch den Abschnitt über + <link linkend="netgroups">Netzgruppen</link> weiter + unten. Weitere detaillierte Informationen finden Sie + im Buch <literal>Managing NFS and NIS</literal> von + O'Reilly.</para> + </note> + + <note> + <para>Sie sollten zumindest ein lokales Benutzerkonto, + das nicht über NIS importiert wird, in Ihrer + <filename>/etc/master.passwd</filename> behalten. + Dieser Benutzer sollte außerdem ein Mitglied der + Gruppe <groupname>wheel</groupname> sein. Wenn es + mit NIS Probleme gibt, können Sie diesen Zugang + verwenden, um sich anzumelden, + <username>root</username> zu werden und das Problem + zu beheben.</para> + </note> + </step> + + <step> + <para>Um alle möglichen Gruppeneinträge vom + NIS-Server zu importieren, fügen sie folgende Zeile + in <filename>/etc/group</filename> ein:</para> + + <programlisting>+:*::</programlisting> + </step> + </procedure> + + <para>Um den NIS-Client sofort zu starten, führen Sie als + Superuser die folgenden Befehle aus:</para> + + <screen>&prompt.root; <userinput>/etc/netstart</userinput> +&prompt.root; <userinput>/etc/rc.d/ypbind start</userinput></screen> + + + <para>Nachdem Sie diese Schritte erledigt haben, sollten Sie + mit <command>ypcat passwd</command> die + <literal>passwd-Map</literal> des NIS-Servers anzeigen + können.</para> + </sect4> + </sect3> + </sect2> + + <sect2> + <title>Sicherheit unter NIS</title> + + <indexterm> + <primary>NIS</primary> + <secondary>Sicherheit</secondary> + </indexterm> + + <para>Im Allgemeinen kann jeder entfernte Anwender einen RPC an + &man.ypserv.8; schicken, um den Inhalt Ihrer NIS-Maps abzurufen, + falls er Ihren NIS-Domänennamen kennt. Um solche + unautorisierten Transaktionen zu verhindern, unterstützt + &man.ypserv.8; <quote>securenets</quote>, durch die man den + Zugriff auf bestimmte Rechner beschränken kann. + &man.ypserv.8; versucht, beim Systemstart die Informationen + über <literal>securenets</literal> aus der Datei + <filename>/var/yp/securenets</filename> zu laden.</para> + + <note> + <para>Die Datei <filename>securenets</filename> kann auch + in einem anderen Verzeichnis stehen, das mit der Option + <option>-p</option> angegeben wird. Diese Datei + enthält Einträge, die aus einer Netzwerkadresse und + einer Netzmaske bestehen, die durch Leerzeichen getrennt + werden. Kommentarzeilen beginnen mit <quote>#</quote>. + <filename>/var/yp/securnets</filename> könnte + beispielsweise so aussehen:</para> + </note> + + <programlisting># allow connections from local host -- mandatory +127.0.0.1 255.255.255.255 +# allow connections from any host +# on the 192.168.128.0 network +192.168.128.0 255.255.255.0 +# allow connections from any host +# between 10.0.0.0 to 10.0.15.255 +# this includes the machines in the testlab +10.0.0.0 255.255.240.0</programlisting> + + <para>Wenn &man.ypserv.8; eine Anforderung von einer zu diesen + Regeln passenden Adresse erhält, wird die Anforderung + bearbeitet. Gibt es keine passende Regel, wird die + Anforderung ignoriert und eine Warnmeldung aufgezeichnet. Wenn + <filename>/var/yp/securenets</filename> nicht vorhanden ist, + erlaubt <command>ypserv</command> Verbindungen von jedem Rechner + aus.</para> + + <para><command>ypserv</command> unterstützt auch das + <application>TCP-Wrapper</application>-Paket von Wietse Venema. + Mit diesem Paket kann der Administrator für + Zugriffskontrollen die Konfigurationsdateien von + <application>TCP-Wrapper</application> anstelle von + <filename>/var/yp/securenets</filename> verwenden.</para> + + <note> + <para>Während beide Kontrollmechanismen einige Sicherheit + gewähren, beispielsweise durch privilegierte Ports, sind + sie gegenüber <quote>IP spoofing</quote>-Attacken + verwundbar. Jeder NIS-Verkehr sollte daher von Ihrer Firewall + blockiert werden.</para> + + <para>Server, die <filename>/var/yp/securenets</filename> + verwenden, können Schwierigkeiten bei der Anmeldung von + Clients haben, die ein veraltetes TCP/IP-Subsystem + besitzen. Einige dieser TCP/IP-Subsysteme setzen alle + Rechnerbits auf Null, wenn Sie einen + <literal>Broadcast</literal> durchführen und/oder + können die Subnetzmaske nicht auslesen, wenn sie die + Broadcast-Adresse berechnen. Einige Probleme können + durch Änderungen der Clientkonfiguration behoben werden. + Andere hingegen lassen sich nur durch das Entfernen des + betreffenden Rechners aus dem Netzwerk oder den Verzicht auf + <filename>/var/yp/securenets</filename> umgehen.</para> + + <para>Die Verwendung von <filename>/var/yp/securenets</filename> + auf einem Server mit einem solch veralteten + TCP/IP-Subsystem ist eine sehr schlechte Idee, die zu + einem Verlust der NIS-Funktionalität für große + Teile Ihres Netzwerks führen kann.</para> + + <indexterm> + <primary>TCP-Wrapper</primary> + </indexterm> + + <para>Die Verwendung der <application>TCP-Wrapper</application> + verlangsamt die Reaktion Ihres NIS-Servers. Diese + zusätzliche Reaktionszeit kann in Clientprogrammen zu + Timeouts führen. Dies vor allem in Netzwerken, die + stark ausgelastet sind, oder nur über langsame NIS-Server + verfügen. Wenn ein oder mehrere Ihrer Clientsysteme + dieses Problem aufweisen, sollten Sie die betreffenden Clients + in NIS-Slaveserver umwandeln, und diese an sich selbst binden. + </para> + </note> + </sect2> + + <sect2> + <title>Bestimmte Benutzer an der Anmeldung hindern</title> + + <indexterm> + <primary>NIS</primary> + <secondary>Benutzer blockieren</secondary> + </indexterm> + + <para>In unserem Labor gibt es den Rechner <hostid>basie</hostid>, + der nur für Mitarbeiter der Fakultät bestimmt ist. + Wir wollen diesen Rechner nicht aus der NIS-Domäne + entfernen, obwohl <filename>passwd</filename> des + NIS-Masterservers Benutzerkonten sowohl für + Fakultätsmitarbeiter als auch für Studenten + enthält. Was können wir also tun?</para> + + <para>Es gibt eine Möglichkeit, bestimmte Benutzer an der + Anmeldung an einem bestimmten Rechner zu hindern, selbst wenn + diese in der NIS-Datenbank vorhanden sind. Dazu müssen + Sie lediglich an diesem Rechner den Eintrag + <literal>-<replaceable>Benutzername</replaceable></literal> an + das Ende von <filename>/etc/master.passwd</filename> setzen, + wobei <replaceable>Benutzername</replaceable> der zu + blockierende Benutzername ist. Diese Änderung sollte + bevorzugt durch <command>vipw</command> erledigt werden, da + <command>vipw</command> Ihre Änderungen an + <filename>/etc/master.passwd</filename> auf Plausibilität + überprüft und nach erfolgter Änderung die + Passwortdatenbank automatisch aktualisiert. Um also den + Benutzer <username>bill</username> an der Anmeldung am Rechner + <hostid>basie</hostid> zu hindern, gehen wir wie folgt vor: + </para> + + <screen>basie&prompt.root; <userinput>vipw</userinput> +<userinput>[add -bill to the end, exit]</userinput> +vipw: rebuilding the database... +vipw: done + +basie&prompt.root; <userinput>cat /etc/master.passwd</userinput> + +root:[password]:0:0::0:0:The super-user:/root:/bin/csh +toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh +daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin +operator:*:2:5::0:0:System &:/:/sbin/nologin +bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin +tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin +kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin +games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin +news:*:8:8::0:0:News Subsystem:/:/sbin/nologin +man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin +bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin +uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico +xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin +pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin +nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin ++::::::::: +-bill + +basie&prompt.root;</screen> + </sect2> + + <sect2 id="netgroups"> + <sect2info> + <authorgroup> + <author> + <firstname>Udo</firstname> + <surname>Erdelhoff</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + </sect2info> + + <title>Netzgruppen verwenden</title> + + <indexterm><primary>Netzgruppen</primary></indexterm> + + <para>Die im letzten Abschnitt beschriebene Methode eignet sich + besonders, wenn Sie spezielle Regeln für wenige + Benutzer oder wenige Rechner benötigen. In großen + Netzwerken werden Sie allerdings + <emphasis>mit Sicherheit</emphasis> vergessen, einige Benutzer + von der Anmeldung an bestimmten Rechnern auszuschließen. + Oder Sie werden gezwungen sein, jeden Rechner einzeln zu + konfigurieren. Dadurch verlieren Sie aber den Hauptvorteil von + NIS, die <emphasis>zentrale</emphasis> Verwaltung.</para> + + <para>Die Lösung für dieses Problem sind + <emphasis>Netzgruppen</emphasis>. Ihre Aufgabe und Bedeutung + ist vergleichbar mit normalen, von UNIX-Dateisystemen + verwendeten Gruppen. Die Hauptunterschiede sind das Fehlen + einer numerischen ID sowie die Möglichkeit, Netzgruppen + zu definieren, die sowohl Benutzer als auch andere Netzgruppen + enthalten.</para> + + <para>Netzgruppen wurden entwickelt, um große, komplexe + Netzwerke mit Hunderten Benutzern und Rechnern zu verwalten. + Sie sind also von Vorteil, wenn Sie von dieser Situation + betroffen sind. Andererseits ist es dadurch beinahe + unmöglich, Netzgruppen mit einfachen Beispielen zu + erklären. Das hier verwendete Beispiel veranschaulicht + dieses Problem.</para> + + <para>Nehmen wir an, dass Ihre erfolgreiche Einführung von + NIS die Aufmerksamkeit Ihrer Vorgesetzten geweckt hat. Ihre + nächste Aufgabe besteht nun darin, Ihre NIS-Domäne + um zusätzliche Rechner zu erweitern. Die folgenden + Tabellen enthalten die neuen Benutzer und Rechner inklusive + einer kurzen Beschreibung.</para> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <thead> + <row> + <entry>Benutzername(n)</entry> + <entry>Beschreibung</entry> + </row> + </thead> + + <tbody> + <row> + <entry><username>alpha</username>, + <username>beta</username></entry> + <entry>Beschäftigte der IT-Abteilung</entry> + </row> + + <row> + <entry><username>charlie</username>, + <username>delta</username></entry> + <entry>Die neuen Lehrlinge der IT-Abteilung</entry> + </row> + + <row> + <entry><username>echo</username>, + <username>foxtrott</username>, + <username>golf</username>, ...</entry> + <entry>Normale Mitarbeiter</entry> + </row> + + <row> + <entry><username>able</username>, + <username>baker</username>, ...</entry> + <entry>Externe Mitarbeiter</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <thead> + <row> + <entry>Rechnername(n)</entry> + <entry>Beschreibung</entry> + </row> + </thead> + + <tbody> + <row> + <!-- Names taken from "Good Omens" by Neil Gaiman and Terry + Pratchett. Many thanks for a brilliant book. --> + <entry><hostid>war</hostid>, <hostid>death</hostid>, + <hostid>famine</hostid>, <hostid>pollution</hostid></entry> + <entry>Ihre wichtigsten Server. Nur IT-Fachleute + dürfen sich an diesen Rechnern anmelden.</entry> + </row> + + <row> + <!-- gluttony was omitted because it was too fat --> + <entry><hostid>pride</hostid>, <hostid>greed</hostid>, + <hostid>envy</hostid>, <hostid>wrath</hostid>, + <hostid>lust</hostid>, <hostid>sloth</hostid></entry> + <entry>Weniger wichtige Server. Alle Mitarbeiter der + IT-Abteilung dürfen sich auf diesen Rechnern + anmelden.</entry> + </row> + + <row> + <entry><hostid>one</hostid>, <hostid>two</hostid>, + <hostid>three</hostid>, <hostid>four</hostid>, ...</entry> + <entry>Gewöhnliche Arbeitsrechner. Nur die + <emphasis>wirklichen</emphasis> Mitarbeiter dürfen + diese Rechner verwenden.</entry> + </row> + + <row> + <entry><hostid>trashcan</hostid></entry> + <entry>Ein sehr alter Rechner ohne kritische Daten. Sogar + externe Mitarbeiter dürfen diesen Rechner + verwenden.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Wollten Sie diese Einschränkungen umsetzen, indem Sie + jeden Benutzer einzeln blockieren, müssten Sie auf jedem + System für jeden Benutzer eine entsprechende Zeile in + <filename>passwd</filename> einfügen. Wenn Sie nur einen + Eintrag vergessen, haben Sie ein Problem. Es mag noch angehen, + dies während der ersten Installation zu erledigen, im + täglichen Betrieb werden Sie allerdings + <emphasis>mit Sicherheit</emphasis> einmal vergessen, die + entsprechenden Einträge anzulegen. Vergessen Sie nicht: + Murphy war Optimist.</para> + + <para>Die Verwendung von Netzgruppen hat in dieser Situation + mehrere Vorteile. Sie müssen nicht jeden Benutzer einzeln + verwalten; weisen Sie stattdessen den Benutzer einer Netzgruppe + zu und erlauben oder verbieten Sie allen Mitglieder dieser + Gruppe die Anmeldung an einem Server. Wenn Sie einen neuen + Rechner hinzufügen, müssen Sie + Zugangsbeschränkungen nur für die Netzgruppen + festlegen. Legen Sie einen neuen Benutzer an, müssen Sie + ihn nur einer oder mehrere Netzgruppen zuweisen. Diese + Veränderungen sind voneinander unabhängig; Anweisungen + der Form <quote>für diese Kombination aus Benutzer und + Rechner mache Folgendes ...</quote> sind nicht mehr nötig. + Wenn Sie die Einrichtung von NIS sorgfältig geplant haben, + müssen Sie nur noch eine zentrale Konfigurationsdatei + bearbeiten, um den Zugriff auf bestimmte Rechner zu erlauben + oder zu verbieten.</para> + + <para>Der erste Schritt ist die Initialisierung der NIS-Maps + der Netzgruppe. &man.ypinit.8; kann dies unter FreeBSD nicht + automatisch durchführen. Sind die Maps aber erst einmal + erzeugt, werden sie jedoch von NIS problemlos unterstützt. + Um eine leere Map zu erzeugen, geben Sie Folgendes ein:</para> + + <screen>ellington&prompt.root; <userinput>vi /var/yp/netgroup</userinput></screen> + + <para>Danach legen Sie die Einträge an. Für unser + Beispiel benötigen wir mindestens vier Netzgruppen: + IT-Beschäftige, IT-Lehrlinge, normale Beschäftigte + sowie Externe.</para> + + <programlisting>IT_EMP (,alpha,test-domain) (,beta,test-domain) +IT_APP (,charlie,test-domain) (,delta,test-domain) +USERS (,echo,test-domain) (,foxtrott,test-domain) \ + (,golf,test-domain) +INTERNS (,able,test-domain) (,baker,test-domain)</programlisting> + + <para>Bei <literal>IT_EMP</literal>, <literal>IT_APP</literal> + usw. handelt es sich um Netzgruppennamen. In den Klammern + werden diesen Netzgruppen jeweils ein oder mehrere + Benutzerkonten hinzugefügt. Die drei Felder in der + Klammer haben folgende Bedeutung:</para> + + <orderedlist> + <listitem> + <para>Der Name des Rechners, auf dem die folgenden Werte + gültig sind. Legen Sie keinen Rechnernamen fest, ist + der Eintrag auf allen Rechnern gültig. Dadurch + gehen Sie vielen Problemen aus dem Weg.</para> + </listitem> + + <listitem> + <para>Der Name des Benutzerkontos, der zu dieser Netzgruppe + gehört.</para> + </listitem> + + <listitem> + <para>Die NIS-Domäne für das Benutzerkonto. Sie + können Benutzerkonten von anderen NIS-Domänen in + Ihre Netzgruppe importieren, wenn Sie mehrere + NIS-Domänen verwalten.</para> + </listitem> + </orderedlist> + + <para>Jedes Feld kann Wildcards enthalten. Die Einzelheiten + entnehmen Sie bitte &man.netgroup.5;.</para> + + <note> + <indexterm><primary>Netzgruppen</primary></indexterm> + + <para>Netzgruppennamen sollten nicht länger als 8 Zeichen + sein, vor allem dann, wenn Sie Rechner mit verschiedenen + Betriebssystemen in Ihrer NIS-Domäne haben. Es wird + zwischen Groß- und Kleinschreibung unterschieden. + Die Verwendung von Großbuchstaben für + Netzgruppennamen ermöglicht eine leichte Unterscheidung + zwischen Benutzern, Rechnern und Netzgruppen.</para> + + <para>Einige NIS-Clients (dies gilt nicht für FreeBSD) + können keine Netzgruppen mit einer großen Anzahl + von Einträgen verwalten. Einige ältere Versionen + von &sunos; haben beispielsweise Probleme, wenn Netzgruppen + mehr als fünfzehn <emphasis>Einträge</emphasis> + enthalten. Sie können dieses Problem umgehen, indem Sie + mehrere Subnetzgruppen mit weniger als fünfzehn Benutzern + anlegen und diese Subnetzgruppen wiederum in einer Netzgruppe + zusammenfassen:</para> + + <programlisting>BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] +BIGGRP2 (,joe16,domain) (,joe17,domain) [...] +BIGGRP3 (,joe31,domain) (,joe32,domain) +BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3</programlisting> + + <para>Sie können diesen Vorgang wiederholen, wenn Sie mehr + als 255 Benutzer in einer einzigen Netzgruppe benötigen. + </para> + </note> + + <para>Das Aktivieren und Verteilen Ihre neuen NIS-Map ist + einfach:</para> + + <screen>ellington&prompt.root; <userinput>cd /var/yp</userinput> +ellington&prompt.root; <userinput>make</userinput></screen> + + <para>Dadurch werden die NIS-Maps <filename>netgroup</filename>, + <filename>netgroup.byhost</filename> und + <filename>netgroup.byuser</filename> erzeugt. Prüfen Sie + die Verfügbarkeit Ihrer neuen NIS-Maps mit &man.ypcat.1;. + </para> + + <screen>ellington&prompt.user; <userinput>ypcat -k netgroup</userinput> +ellington&prompt.user; <userinput>ypcat -k netgroup.byhost</userinput> +ellington&prompt.user; <userinput>ypcat -k netgroup.byuser</userinput></screen> + + <para>Die Ausgabe des ersten Befehls gibt den Inhalt von + <filename>/var/yp/netgroup</filename> wieder. Der zweite Befehl + erzeugt nur dann eine Ausgabe, wenn Sie rechnerspezifische + Netzgruppen erzeugt haben. Der dritte Befehl gibt die + Netzgruppen nach Benutzern sortiert aus.</para> + + <para>Die Einrichtung der Clients ist einfach. Sie müssen + lediglich auf dem Server <hostid>war</hostid> + &man.vipw.8; aufrufen und die Zeile</para> + + <programlisting>+:::::::::</programlisting> + + <para>durch</para> + + <programlisting>+@IT_EMP:::::::::</programlisting> + + <para>ersetzen.</para> + + <para>Ab sofort werden nur noch die Daten der in der Netzgruppe + <literal>IT_EMP</literal> vorhandenen Benutzer in die + Passwortdatenbank von <hostid>war</hostid> importiert. + Nur diese Benutzer dürfen sich am Server anmelden.</para> + + <para>Unglücklicherweise gilt diese Einschränkung auch + für die <literal>~</literal>-Funktion der Shell und + für alle Routinen, die auf Benutzernamen und numerische + Benutzer-IDs zugreifen. Oder anders formuliert, + <command>cd ~<replaceable>user</replaceable></command> ist nicht + möglich, <command>ls -l</command> zeigt die numerische + Benutzer-ID statt dem Benutzernamen und + <command>find . -user joe -print</command> erzeugt die + Fehlermeldung <errorname>No such user</errorname>. Um dieses + Problem zu beheben, müssen Sie alle Benutzereinträge + importieren, <emphasis>ohne ihnen jedoch zu erlauben, sich an + Ihrem Server anzumelden</emphasis>.</para> + + <para>Dazu fügen Sie eine weitere Zeile in + <filename>/etc/master.passwd</filename> ein. Diese Zeile sollte + ähnlich der folgenden aussehen:</para> + + <para><literal>+:::::::::/sbin/nologin</literal>, was in etwa + <quote>Importiere alle Einträge, aber ersetze die Shell in + den importierten Einträgen durch + <filename>/sbin/nologin</filename></quote> entspricht. Sie + können jedes Feld dieses Eintrages ersetzen, indem Sie + einen Standardwert in <filename>/etc/master.passwd</filename> + eintragen.</para> + + <warning> + <para>Stellen Sie sicher, dass die Zeile + <literal>+:::::::::/sbin/nologin</literal> + <emphasis>nach</emphasis> der Zeile + <literal>+@IT_EMP:::::::::</literal> eingetragen ist. Sonst + haben alle via NIS importierten Benutzerkonten + <filename>/sbin/nologin</filename> als Loginshell.</para> + </warning> + + <para>Danach müssen Sie nur mehr eine einzige NIS-Map + ändern, wenn ein neuer Mitarbeiter berücksichtigt + werden muss. Für weniger wichtige Server gehen Sie analog + vor, indem Sie den alten Eintrag <literal>+:::::::::</literal> + in den lokalen Versionen von + <filename>/etc/master.passwd</filename> durch folgende + Einträge ersetzen:</para> + + <programlisting>+@IT_EMP::::::::: ++@IT_APP::::::::: ++:::::::::/sbin/nologin</programlisting> + + <para>Die entsprechenden Zeilen für normale Arbeitsplätze + lauten:</para> + + <programlisting>+@IT_EMP::::::::: ++@USERS::::::::: ++:::::::::/sbin/nologin</programlisting> + + <para>Ab jetzt wäre alles wunderbar, allerdings ändert + sich kurz darauf die Firmenpolitik: Die IT-Abteilung beginnt + damit, externe Mitarbeiter zu beschäftigen. Externe + dürfen sich an normalen Arbeitsplätzen sowie an den + weniger wichtigen Servern anmelden. Die IT-Lehrlinge + dürfen sich nun auch an den Hauptservern anmelden. Sie + legen also die neue Netzgruppe <literal>IT_INTERN</literal> an, + weisen Ihr die neuen IT-Externen als Benutzer zu und beginnen + damit, die Konfiguration auf jedem einzelnen Rechner zu + ändern ... Halt. Sie haben gerade die alte Regel + <quote>Fehler in der zentralisierten Planung führen zu + globaler Verwirrung.</quote> bestätigt.</para> + + <para>Da NIS in der Lage ist, Netzgruppen aus anderen Netzgruppen + zu bilden, lassen sich solche Situationen leicht vermeiden. + Eine Möglichkeit ist die Erzeugung rollenbasierter + Netzgruppen. Sie könnten eine Netzgruppe + <literal>BIGSRV</literal> erzeugen, um den Zugang zu + den wichtigsten Servern zu beschränken, eine weitere + Gruppe <literal>SMALLSRV</literal> für die weniger + wichtigen Server und eine dritte Netzgruppe + <literal>USERBOX</literal> für die normalen + Arbeitsplatzrechner. Jede dieser Netzgruppen enthält die + Netzgruppen, die sich auf diesen Rechnern anmelden dürfen. + Die Einträge der Netzgruppen in der NIS-Map sollten + ähnlich den folgenden aussehen:</para> + + <programlisting>BIGSRV IT_EMP IT_APP +SMALLSRV IT_EMP IT_APP ITINTERN +USERBOX IT_EMP ITINTERN USERS</programlisting> + + <para>Diese Methode funktioniert besonders gut, wenn Sie + Rechner in Gruppen mit identischen Beschränkungen einteilen + können. Unglücklicherweise ist dies die Ausnahme und + nicht die Regel. Meistens werden Sie die Möglichkeit zur + rechnerspezischen Zugangsbeschränkung benötigen. + </para> + + <para>Rechnerspezifische Netzgruppen sind die zweite + Möglichkeit, um mit den oben beschriebenen Änderungen + umzugehen. In diesem Szenario enthält + <filename>/etc/master.passwd</filename> auf jedem Rechner zwei + mit <quote>+</quote> beginnende Zeilen. Die erste Zeile + legt die Netzgruppe mit den Benutzern fest, die sich auf diesem + Rechner anmelden dürfen. Die zweite Zeile weist allen + anderen Benutzern <filename>/sbin/nologin</filename> als Shell + zu. Verwenden Sie auch hier (analog zu den Netzgruppen) + Großbuchstaben für die Rechnernamen. Die Zeilen + sollten also ähnlich den folgenden aussehen:</para> + + <programlisting>+@<replaceable>BOXNAME</replaceable>::::::::: ++:::::::::/sbin/nologin</programlisting> + + <para>Wenn Sie dies für alle Rechner erledigt haben, werden + Sie die lokalen Versionen von + <filename>/etc/master.passwd</filename> nie mehr verändern + müssen. Alle weiteren Änderungen geschehen über + die NIS-Maps. Nachfolgend ein Beispiel für eine + mögliche Netzgruppen-Map, die durch einige Besonderheiten + erweitert wurde:</para> + + <programlisting># Define groups of users first +IT_EMP (,alpha,test-domain) (,beta,test-domain) +IT_APP (,charlie,test-domain) (,delta,test-domain) +DEPT1 (,echo,test-domain) (,foxtrott,test-domain) +DEPT2 (,golf,test-domain) (,hotel,test-domain) +DEPT3 (,india,test-domain) (,juliet,test-domain) +ITINTERN (,kilo,test-domain) (,lima,test-domain) +D_INTERNS (,able,test-domain) (,baker,test-domain) +# +# Now, define some groups based on roles +USERS DEPT1 DEPT2 DEPT3 +BIGSRV IT_EMP IT_APP +SMALLSRV IT_EMP IT_APP ITINTERN +USERBOX IT_EMP ITINTERN USERS +# +# And a groups for a special tasks +# Allow echo and golf to access our anti-virus-machine +SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain) +# +# machine-based netgroups +# Our main servers +WAR BIGSRV +FAMINE BIGSRV +# User india needs access to this server +POLLUTION BIGSRV (,india,test-domain) +# +# This one is really important and needs more access restrictions +DEATH IT_EMP +# +# The anti-virus-machine mentioned above +ONE SECURITY +# +# Restrict a machine to a single user +TWO (,hotel,test-domain) +# [...more groups to follow] + </programlisting> + + <para>Wenn Sie eine Datenbank verwenden, um Ihre Benutzerkonten zu + verwalten, sollten Sie den ersten Teil der NIS-Map mit Ihren + Datenbanktools erstellen können. Auf diese Weise haben + neue Benutzer automatisch Zugriff auf die Rechner.</para> + + <para>Eine letzte Warnung: Es ist nicht immer ratsam, + rechnerbasierte Netzgruppen zu verwenden. Wenn Sie Dutzende + oder gar Hunderte identische Rechner einrichten müssen, + sollten Sie rollenbasierte Netzgruppen verwenden, um die + Grösse der NISs-Maps in Grenzen zu halten.</para> + </sect2> + + <sect2> + <title>Weitere wichtige Punkte</title> + + <para>Nachdem Sie Ihre NIS-Umgebung eingerichtet haben, + müssen Sie einige Dinge anders als bisher erledigen.</para> + + <itemizedlist> + <listitem> + <para>Jedes Mal, wenn Sie einen neuen Benutzer anlegen wollen, + tun Sie dies <emphasis>ausschließlich</emphasis> am + NIS-Masterserver. Außerdem + <emphasis>müssen</emphasis> Sie anschließend die + NIS-Maps neu erzeugen. Wenn Sie diesen Punkt vergessen, + kann sich der neue Benutzer <emphasis>nur</emphasis> am + NIS-Masterserver anmelden. Wenn Sie also den neuen Benutzer + <username>jsmith</username> anlegen, gehen Sie + folgerndermassen vor:</para> + + <screen>&prompt.root; <userinput>pw useradd jsmith</userinput> +&prompt.root; <userinput>cd /var/yp</userinput> +&prompt.root; <userinput>make test-domain</userinput></screen> + + <para>Statt <command>pw useradd jsmith</command> könnten + Sie auch <command>adduser jsmith</command> verwenden.</para> + </listitem> + + <listitem> + <para><emphasis>Tragen Sie die Administratorkonten nicht + in die NIS-Maps ein</emphasis>. Administratorkonten und + Passwörter dürfen nicht auf Rechnern verbreitet + werden, auf denen sich Benutzer anmelden können, die + auf diese Konten keine Zugriff haben sollen.</para> + </listitem> + + <listitem> + <para><emphasis>Sichern Sie die NIS-Master- und Slaveserver + und minimieren Sie die Ausfallzeiten</emphasis>. Wenn + diese Rechner gehackt oder einfach nur ausgeschaltet werden, + haben viele Leute keinen Netzwerkzugriff mehr.</para> + + <para>Dies ist die größte Schwäche + jeder zentralen Verwaltung. Wenn Sie Ihre NIS-Server nicht + schützen, werden Sie viele verärgerte Anwender + haben.</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2> + <title>Kompatibilität zu NIS v1</title> + + <indexterm> + <primary>NIS</primary> + <secondary>Kompatibilität zu NIS v1</secondary> + </indexterm> + + <para><application>ypserv</application> unterstützt NIS v1 + unter FreeBSD nur eingeschränkt. Die NIS-Implementierung + von FreeBSD verwendet nur NIS v2, andere Implementierungen + unterstützen aus Gründen der + Abwärtskompatibilität mit älteren Systemen auch + NIS v1. Die mit diesen Systemen gelieferten + <application>ypbind</application>-Daemonen versuchen, sich an + einen NIS-v1-Server zu binden (Dies selbst dann, wenn sie ihn + nie benötigen. Außerdem versuchen Sie auch dann, + einen v1-Server zu erreichen, wenn Sie zuvor eine Antwort von + einem v2-Server erhalten.). Während normale Clientaufrufe + unter FreeBSD unterstützt werden, sind Anforderungen zum + Transfer von v1-Maps nicht möglich. Daher kann FreeBSD + nicht als Client oder Server verwendet werden, wenn ein + NIS-Server vorhanden ist, der nur NIS v1 unterstützt. + Glücklicherweise sollte es heute keine Server mehr geben, + die nur NIS v1 unterstützen.</para> + </sect2> + + <sect2 id="nis-server-is-client"> + <title>NIS-Server, die auch als NIS-Clients arbeiten</title> + + <para>Wenn Sie <application>ypserv</application> in einer + Multi-Serverdomäne verwenden, in der NIS-Server + gleichzeitig als NIS-Clients arbeiten, ist es eine gute Idee, + diese Server zu zwingen, sich an sich selbst zu binden. Damit + wird verhindert, dass Bindeanforderungen gesendet werden und + sich die Server gegenseitig binden. Sonst könnten seltsame + Fehler auftreten, wenn ein Server ausfällt, auf den andere + Server angewiesen sind. Letztlich werden alle Clients einen + Timeout melden, und versuchen, sich an andere Server zu binden. + Die dadurch entstehende Verzögerung kann beträchtlich + sein. Außerdem kann der Fehler erneut auftreten, da sich + die Server wiederum aneinander binden könnten.</para> + + <para>Sie können einen Rechner durch die Verwendung von + <command>ypbind</command> sowie der Option <option>-S</option> + zwingen, sich an einen bestimmten Server zu binden. Um diesen + Vorgang zu automatisieren, können Sie folgende Zeilen in + <filename>/etc/rc.conf</filename> einfügen:</para> + + <programlisting>nis_client_enable="YES" # run client stuff as well +nis_client_flags="-S <replaceable>NIS domain</replaceable>,<replaceable>server</replaceable>"</programlisting> + + <para>Lesen Sie &man.ypbind.8;, wenn Sie weitere Informationen + benötigen.</para> + </sect2> + + <sect2> + <title>Passwortformate</title> + <indexterm> + <primary>NIS</primary> + <secondary>Passwortformate</secondary> + </indexterm> + <para>Unterschiedliche Passwortformate sind das Hauptproblem, + das beim Einrichten eines NIS-Servers auftreten kann. + Wenn der NIS-Server mit DES verschlüsselte Passwörter + verwendet, werden nur Clients unterstützt, die ebenfalls + DES benutzen. Wenn sich auf Ihrem Netzwerk beispielsweise + &solaris; NIS-Clients befinden, müssen die Passwörter + mit DES verschlüsselt werden.</para> + + <para>Welches Format die Server und Clients verwenden, + steht in <filename>/etc/login.conf</filename>. Wenn ein + System Passwörter mit DES verschlüsselt, + enthält die <literal>default</literal>-Klasse einen + Eintrag wie den folgenden:</para> + + <programlisting>default:\ + :passwd_format=des:\ + :copyright=/etc/COPYRIGHT:\ + [weitere Einträge]</programlisting> + + <para>Mögliche Werte für + <literal>passwd_format</literal> sind unter anderem + <literal>blf</literal> und <literal>md5</literal> (mit + Blowfish und MD5 verschlüsselte Passwörter).</para> + + <para>Wenn die Datei <filename>/etc/login.conf</filename> + geändert wird, muss die Login-Capability Datenbank + neu erstellt werden. Geben Sie dazu als + <username>root</username> den folgenden Befehl ein:</para> + + <screen>&prompt.root; <userinput>cap_mkdb /etc/login.conf</userinput></screen> + + <note> + <para>Das Format der schon in + <filename>/etc/master.passwd</filename> befindlichen + Passwörter wird erst aktualisiert, wenn ein Benutzer + sein Passwort ändert, <emphasis>nachdem</emphasis> + die Datenbank neu erstellt wurde.</para> + </note> + + <para>Damit die Passwörter auch im gewählten + Format abgespeichert werden, muss mit + <literal>crypt_default</literal> in der Datei + <filename>/etc/auth.conf</filename> die richtige + Priorität der Formate eingestellt werden. Das + gewählte Format sollte als Erstes in der Liste + stehen. Sollen die Passwörter mit DES verschlüsselt + werden, verwenden Sie den folgenden Eintrag:</para> + + <programlisting>crypt_default = des blf md5</programlisting> + + <para>Wenn Sie alle &os; NIS-Server und NIS-Clients entsprechend + den obigen Schritten eingestellt haben, wird im ganzen + Netzwerk dasselbe Passwortformat verwendet. Falls Sie + Probleme mit der Authentifizierung eines NIS-Clients + haben, kontrollieren Sie die verwendeten Passwortformate. + In einer heterogenen Umgebung werden Sie DES benutzen + müssen, da dies der meist unterstützte Standard + ist.</para> + </sect2> + </sect1> + + <sect1 id="network-dhcp"> + <sect1info> + <authorgroup> + <author> + <firstname>Greg</firstname> + <surname>Sutter</surname> + <contrib>Geschrieben von </contrib> + </author> + </authorgroup> + </sect1info> + + <title>Automatische Netzwerkkonfiguration mit DHCP</title> + + <sect2> + <title>Was ist DHCP?</title> + + <indexterm> + <primary>Dynamic Host Configuration Protocol</primary> + <see>DHCP</see> + </indexterm> + + <indexterm> + <primary>Internet Systems Consortium (ISC)</primary> + </indexterm> + + <para>Über DHCP, das Dynamic Host Configuration Protocol, + kann sich ein System mit einem Netzwerk verbinden und die + für die Kommunikation mit diesem Netzwerk nötigen + Informationen beziehen. &os; verwendet den von + OpenBSD 3.7 stammenden <command>dhclient</command>. + Die Informationen in diesem Abschnitt + beziehen sich daher sowohl auf den <command>dhclient</command> + von ISC als auch auf den von OpenBSD. Als DHCP-Server wird + in beiden Fällen der DHCP-Server der ISC-Distribution + verwendet.</para> + </sect2> + + <sect2> + <title>Übersicht</title> + + <para>Dieser Abschnitt beschreibt sowohl die Clientseite des + ISC- als auch des OpenBSD-Clients sowie die + Serverseite des DHCP-Systems von ISC. Das Clientprogramm + <command>dhclient</command> ist in FreeBSD integriert, das + Serverprogramm kann über den Port + <filename role="package">net/isc-dhcp42-server</filename> + installiert werden. Weiter Informationen finden Sie in + &man.dhclient.8;, &man.dhcp-options.5; sowie + &man.dhclient.conf.5;.</para> + </sect2> + + <sect2> + <title>Wie funktioniert DHCP?</title> + + <indexterm><primary>UDP</primary></indexterm> + + <para>Der DHCP-Client <command>dhclient</command> beginnt von + einem Clientrechner aus über den UDP-Port 68 + Konfigurationsinformationen anzufordern. Der Server antwortet + auf dem UDP-Port 67, indem er dem Client eine IP-Adresse + zuweist und ihm weitere wichtige Informationen über das + Netzwerk, wie Netzmasken, Router und DNS-Server mitteilt. Diese + Informationen werden als + <firstterm>DHCP-Lease</firstterm> bezeichnet und + sind nur für eine bestimmte Zeit, die vom Administrator des + DHCP-Servers vorgegeben wird, gültig. Dadurch fallen + verwaiste IP-Adressen, deren Clients nicht mehr mit dem Netzwerk + verbunden sind, automatisch an den Server zurück.</para> + + <para>DHCP-Clients können sehr viele Informationen von einem + DHCP-Server erhalten. Eine ausführliche Liste finden Sie + in &man.dhcp-options.5;.</para> + </sect2> + + <sect2> + <title>Integration in FreeBSD</title> + + <para>&os; verwendet den DHCP-Client von OpenBSD. + Sowohl während der Installation als + auch im Basissystem steht der DHCP-Client zur Verfügung. + In Netzen mit DHCP-Servern wird dadurch die Konfiguration von + Systemen erheblich vereinfacht.</para> + + <indexterm> + <primary><application>sysinstall</application></primary> + </indexterm> + + <para>DHCP wird von <application>sysinstall</application> + unterstützt. Wenn Sie eine Netzwerkkarte mit + <application>sysinstall</application> konfigurieren, lautet + die zweite Frage <quote>Do you want to try DHCP configuration + of the interface?</quote>. Wenn Sie diese Frage bejahen, wird + <command>dhclient</command> aufgerufen, und die Netzkarte wird + automatisch eingerichtet.</para> + + <para>Um DHCP beim Systemstart zu aktivieren, müssen Sie zwei + Dinge erledigen:</para> + + <indexterm> + <primary>DHCP</primary> + <secondary>Anforderungen</secondary> + </indexterm> + + <itemizedlist> + <listitem> + <para>Stellen Sie sicher, dass <devicename>bpf</devicename> in + Ihren Kernel kompiliert ist. Dazu fügen Sie die Zeile + <literal>device bpf</literal> + in Ihre Kernelkonfigurationsdatei ein und erzeugen einen + neuen Kernel. Weitere Informationen zur Kernelkonfiguration + finden Sie in <xref linkend="kernelconfig"/> des Handbuchs. + </para> + + <para>Das Gerät <devicename>bpf</devicename> ist im + <filename>GENERIC</filename>-Kernel bereits enthalten. + Für die Nutzung von DHCP muss also kein angepasster + Kernel erzeugt werden.</para> + + <note> + <para>Wenn Sie um die Sicherheit Ihres Systems besorgt + sind, sollten Sie wissen, dass + <devicename>bpf</devicename> auch zur Ausführung + von Paketsniffern erforderlich ist (obwohl diese dennoch + als <username>root</username> ausgeführt werden + müssen). <devicename>bpf</devicename> + <emphasis>muss</emphasis> vorhanden sein, damit DHCP + funktioniert. Sind Sie sehr sicherheitsbewusst, sollten + Sie <devicename>bpf</devicename> aus Ihrem Kernel + entfernen, wenn Sie DHCP nicht verwenden.</para> + </note> + </listitem> + + <listitem> + <para>Standardmässig läuft die DHCP-Konfiguration + bei &os; im Hintergrund oder auch + <firstterm>asynchron</firstterm>. Andere Startskripte laufen + weiter, während DHCP fertig abgearbeitet wird, was den + Systemstart beschleunigt.</para> + + <para>DHCP im Hintergrund funktioniert gut, wenn der DHCP-Server + schnell auf Anfragen antwortet und der + DHCP-Konfigurationsprozess ebenso schnell abläuft. + Jedoch kann DHCP eine lange Zeit benötigen, um auf + manchen Systemen fertig zu werden. Falls Netzwerkdienste + versuchen, vor DHCP zum Ende zu kommen, werden diese + fehlschlagen. Durch die Verwendung von DHCP im + <firstterm>asynchronen</firstterm>-Modus wird das Problem + verhindert, so dass die Startskripte pausiert werden, bis + die DHCP-Konfiguration abgeschlossen ist.</para> + + <para>Um sich zu einem DHCP-Server im Hintergrund zu verbinden, + während andere Startskripte fortfahren + (asynchroner Modus), benutzen Sie den + <quote><literal>DHCP</literal></quote>-Wert in + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>ifconfig_<replaceable>fxp0</replaceable>="DHCP"</programlisting> + + <para>Um den Start zu pausieren, damit DHCP vorher + abgeschlossen werden kann, benutzen Sie den synchronen Modus + mit dem Eintrag + <quote><literal>SYNCDHCP</literal></quote>:</para> + + <programlisting>ifconfig_<replaceable>fxp0</replaceable>="SYNCDHCP"</programlisting> + + <note> + <para>Ersetzen Sie <replaceable>fxp0</replaceable>, das + in diesen Beispielen verwendet wurde, durch den Namen Ihrer + Netzwerkschnittstelle, so wie es in <xref + linkend="config-network-setup"/> beschrieben ist.</para> + </note> + + <para>Wenn Sie <command>dhclient</command> an einem anderen + Ort installiert haben, oder zusätzliche Flags an + <command>dhclient</command> übergeben wollen, + fügen Sie auch folgende (entsprechend angepasste) + Zeilen ein:</para> + + <programlisting>dhclient_program="/sbin/dhclient" +dhclient_flags=""</programlisting> + </listitem> + </itemizedlist> + + <indexterm> + <primary>DHCP</primary> + <secondary>Server</secondary> + </indexterm> + + <para>Der DHCP-Server <application>dhcpd</application> ist als + Teil des Ports + <filename role="package">net/isc-dhcp42-server</filename> + verfügbar. Dieser Port enthält die komplette + ISC-DHCP-Distribution, inklusive der Dokumentation.</para> + </sect2> + + <sect2> + <title>Dateien</title> + + <indexterm> + <primary>DHCP</primary> + <secondary>Konfigurationsdateien</secondary> + </indexterm> + + <itemizedlist> + <listitem> + <para><filename>/etc/dhclient.conf</filename></para> + + <para><command>dhclient</command> benötigt die + Konfigurationsdatei <filename>/etc/dhclient.conf</filename>. + Diese Datei enthält normalerweise nur Kommentare, da + die Vorgabewerte zumeist ausreichend sind. Lesen Sie dazu + auch &man.dhclient.conf.5;.</para> + </listitem> + + <listitem> + <para><filename>/sbin/dhclient</filename></para> + + <para><command>dhclient</command> ist statisch gelinkt und + befindet sich in <filename>/sbin</filename>. Weitere + Informationen finden Sie in &man.dhclient.8;.</para> + </listitem> + + <listitem> + <para><filename>/sbin/dhclient-script</filename></para> + + <para>Bei <command>dhclient-script</command> handelt es sich + um das FreeBSD-spezifische Konfigurationsskript des + DHCP-Clients. Es wird in &man.dhclient-script.8; + beschrieben und kann meist unverändert übernommen + werden.</para> + </listitem> + + <listitem> + <para><filename>/var/db/dhclient.leases</filename></para> + + <para>Der DHCP-Client verfügt über eine Datenbank, + die alle derzeit gültigen Leases enthält und als + Logdatei erzeugt wird. Weitere Informationen finden Sie in + &man.dhclient.8;.</para> + </listitem> + </itemizedlist> + </sect2> + + <sect2> + <title>Weitere Informationen</title> + + <para>Das DHCP-Protokoll wird vollständig im + <ulink url="http://www.freesoft.org/CIE/RFC/2131/">RFC 2131</ulink> + beschrieben. Eine weitere, lehrreiche Informationsquelle + existiert unter + <ulink url="http://www.dhcp.org/"></ulink>.</para> + </sect2> + + <sect2 id="network-dhcp-server"> + <title>Einen DHCP-Server installieren und einrichten</title> + + <sect3> + <title>Übersicht</title> + + <para>Dieser Abschnitt beschreibt die Einrichtung eines + FreeBSD-Systems als DHCP-Server. Dazu wird die + DHCP-Implementation von ISC (Internet Systems Consortium) + verwendet.</para> + + <para>Der DHCP-Server ist nicht im Basissystem von FreeBSD + enthalten, daher müssen Sie als Erstes den Port + <filename role="package">net/isc-dhcp42-server</filename> + installieren. Lesen Sie <xref linkend="ports"/>, wenn Sie + weitere Informationen zur Ports-Sammlung benötigen. + </para> + </sect3> + + <sect3> + <title>Den DHCP-Server installieren</title> + + <indexterm> + <primary>DHCP</primary> + <secondary>installieren</secondary> + </indexterm> + + <para>Stellen Sie sicher, dass &man.bpf.4; in Ihren Kernel + kompiliert ist. Dazu fügen Sie die Zeile + <literal>device bpf</literal> + Ihre Kernelkonfigurationsdatei ein und erzeugen einen neuen + Kernel. Die Kernelkonfiguration wird in + <xref linkend="kernelconfig"/> beschrieben.</para> + + <para>Das Gerät <devicename>bpf</devicename> ist im + <filename>GENERIC</filename>-Kernel bereits enthalten. + Für die Nutzung von DHCP muss also kein angepasster + Kernel erzeugt werden.</para> + + <note> + <para>Wenn Sie um die Sicherheit Ihres Systems besorgt + sind, sollten Sie wissen, dass + <devicename>bpf</devicename> auch zur Ausführung + von Paketsniffern erforderlich ist (obwohl diese dennoch + als <username>root</username> ausgeführt werden + müssen). <devicename>bpf</devicename> + <emphasis>muss</emphasis> vorhanden sein, damit DHCP + funktioniert. Sind Sie sehr sicherheitsbewusst, sollten + Sie <devicename>bpf</devicename> aus Ihrem Kernel + entfernen, wenn Sie DHCP nicht verwenden.</para> + </note> + + <para>Danach müssen Sie die vom Port + <filename role="package">net/isc-dhcp42-server</filename> + erzeugte Vorlage für <filename>dhcpd.conf</filename> + anpassen. Die bei der Installation erzeugte Datei + <filename>/usr/local/etc/dhcpd.conf.sample</filename> + sollten Sie nach + <filename>/usr/local/etc/dhcpd.conf</filename> kopieren, + bevor Sie Veränderungen vornehmen.</para> + </sect3> + + <sect3> + <title>Den DHCP-Server einrichten</title> + + <indexterm> + <primary>DHCP</primary> + <secondary>dhcpd.conf</secondary> + </indexterm> + + <para><filename>dhcpd.conf</filename> besteht aus Festlegungen + zu Subnetzen und Rechnern und lässt sich am besten an + einem Beispiel erklären:</para> + + <programlisting>option domain-name "example.com";<co id="domain-name"/> +option domain-name-servers 192.168.4.100;<co id="domain-name-servers"/> +option subnet-mask 255.255.255.0;<co id="subnet-mask"/> + +default-lease-time 3600;<co id="default-lease-time"/> +max-lease-time 86400;<co id="max-lease-time"/> +ddns-update-style none;<co id="ddns-update-style"/> + +subnet 192.168.4.0 netmask 255.255.255.0 { + range 192.168.4.129 192.168.4.254;<co id="range"/> + option routers 192.168.4.1;<co id="routers"/> +} + +host mailhost { + hardware ethernet 02:03:04:05:06:07;<co id="hardware"/> + fixed-address mailhost.example.com;<co id="fixed-address"/> +}</programlisting> + + <calloutlist> + <callout arearefs="domain-name"> + <para>Diese Option beschreibt die Domäne, die den + Clients als Standardsuchdomäne zugewiesen wird. + Weitere Informationen finden Sie in man.resolv.conf.5;. + </para> + </callout> + + <callout arearefs="domain-name-servers"> + <para>Diese Option legt eine, durch Kommata getrennte + Liste von DNS-Servern fest, die von den Clients + verwendet werden sollen.</para> + </callout> + + <callout arearefs="subnet-mask"> + <para>Die den Clients zugewiesene Netzmaske.</para> + </callout> + + <callout arearefs="default-lease-time"> + <para>Ein Client kann eine Lease einer bestimmten Dauer + anfordern. Geschieht dies nicht, weist der Server eine + Lease mit einer vorgegebenen Ablaufdauer (in Sekunden) + zu.</para> + </callout> + + <callout arearefs="max-lease-time"> + <para>Die maximale Zeitdauer, für die der Server + Konfigurationsinformationen vergibt. Sollte ein Client + eine längere Zeitspanne anfordern, wird dennoch + nur der Wert <literal>max-lease-time</literal> in + Sekunden zugewiesen.</para> + </callout> + + <callout arearefs="ddns-update-style"> + <para>Diese Option legt fest, ob der DHCP-Server eine + DNS-Aktualisierung versuchen soll, wenn + Konfigurationsdateien vergeben oder zurückgezogen + werden. In der ISC-Implementation + <emphasis>muss</emphasis> diese Option gesetzt sein. + </para> + </callout> + + <callout arearefs="range"> + <para>Dadurch werden die IP-Adressen festgelegt, die den + Clients zugewiesen werden können. IP-Adressen + zwischen diesen Grenzen sowie die einschließenden + Adressen werden den Clients zugewiesen.</para> + </callout> + + <callout arearefs="routers"> + <para>Legt das Standard-Gateway fest, das den Clients + zugewiesen wird.</para> + </callout> + + <callout arearefs="hardware"> + <para>Die (Hardware-)MAC-Adresse eines Rechners (durch die + der DHCP-Server den Client erkennt, der eine Anforderung + an ihn stellt).</para> + </callout> + + <callout arearefs="fixed-address"> + <para>Einem Rechner soll immer die gleiche IP-Adresse + zugewiesen werden. Beachten Sie, dass hier auch ein + Rechnername gültig ist, da der DHCP-Server den + Rechnernamen auflöst, bevor er die + Konfigurationsinformationen zuweist.</para> + </callout> + </calloutlist> + + <para>Nachdem Sie <filename>dhcpd.conf</filename> fertig + konfiguriert haben, sollten Sie den DHCP-Server aktivieren, + indem Sie folgende Zeilen in + <filename>/etc/rc.conf</filename> aufnehmen:</para> + + <programlisting>dhcpd_enable="YES" +dhcpd_ifaces="dc0"</programlisting> + + <para>Dabei müssen Sie den Geräteeintrag + <literal>dc0</literal> durch die Gerätedatei (mehrere + Gerätedateien müssen durch Leerzeichen getrennt + werden) ersetzen, die Ihr DHCP-Server auf Anfragen von + DHCP-Clients hin überwachen soll.</para> + + <para>Danach können Sie den Server durch Eingabe des + folgenden Befehls starten:</para> + + <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/isc-dhcpd start</userinput></screen> + + <para>Sollten Sie die Konfiguration Ihres Servers einmal + verändern müssen, reicht es nicht aus, ein + <literal>SIGHUP</literal>-Signal an + <application>dhcpd</application> zu senden, weil damit die + Konfiguration <emphasis>nicht</emphasis> erneut geladen wird + (im Gegensatz zu den meisten Daemonen). Sie müssen + den Prozess vielmehr mit dem Signal + <literal>SIGTERM</literal> stoppen, um ihn + anschließend neu zu starten.</para> + </sect3> + + <sect3> + <title>Dateien</title> + + <indexterm> + <primary>Server</primary> + <secondary>Konfigurationsdateien</secondary> + </indexterm> + + <itemizedlist> + <listitem> + <para><filename>/usr/local/sbin/dhcpd</filename></para> + + <para><application>dhcpd</application> ist statisch + gelinkt und befindet sich in + <filename>/usr/local/sbin</filename>. Lesen Sie auch die + mit dem Port installierte Hilfeseite &man.dhcpd.8;, wenn + Sie weitere Informationen zu + <application>dhcpd</application> benötigen.</para> + </listitem> + + <listitem> + <para><filename>/usr/local/etc/dhcpd.conf</filename></para> + + <para><application>dhcpd</application> benötigt die + Konfigurationsdatei + <filename>/usr/local/etc/dhcpd.conf</filename>, damit + der Server den Clients seine Dienste anbieten kann. + Diese Datei muss alle Informationen enthalten, die an + die Clients weitergegeben werden soll. Außerdem + sind hier Informationen zur Konfiguration des Servers + enthalten. Die mit dem Port installierte Hilfeseite + &man.dhcpd.conf.5; enthält weitere Informationen. + </para> + </listitem> + + <listitem> + <para><filename>/var/db/dhcpd.leases</filename></para> + + <para>Der DHCP-Server hat eine Datenbank, die alle + vergebenen Leases enthält. Diese wird als Logdatei + erzeugt. Weitere Informationen finden Sie in der vom + Port installierten Hilfeseite &man.dhcpd.leases.5;.</para> + </listitem> + + <listitem> + <para><filename>/usr/local/sbin/dhcrelay</filename></para> + + <para><application>dhcrelay</application> wird in + komplexen Umgebungen verwendet, in denen ein DHCP-Server + eine Anfrage eines Clients an einen DHCP-Server in einem + separaten Netzwerk weiterleitet. Wenn Sie diese + Funktion benötigen, müssen Sie den Port + <filename role="package">net/isc-dhcp42-relay</filename> + installieren. Weitere Informationen zu diesem Thema + finden Sie in &man.dhcrelay.8;.</para> + </listitem> + </itemizedlist> + </sect3> + </sect2> + </sect1> + + <sect1 id="network-dns"> + <sect1info> + <authorgroup> + <author> + <firstname>Chern</firstname> + <surname>Lee</surname> + <contrib>Beigetragen von </contrib> + </author> + + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + </author> + + <author> + <firstname>Daniel</firstname> + <surname>Gerzo</surname> + </author> + </authorgroup> + </sect1info> + + <title><acronym>DNS</acronym> – Domain Name Service</title> + + <sect2> + <title>Überblick</title> + + <indexterm><primary>BIND</primary></indexterm> + + <para>DNS ist das für die Umwandlung von Rechnernamen in + IP-Adressen zuständige Protokoll. &os; verwendet dazu + BIND (Berkeley Internet Name Domain), die am häufigsten + verwendete Implementierung von <acronym>DNS</acronym>). + Eine Anfrage nach <hostid + role="fqdn">www.FreeBSD.org</hostid> gibt die + <acronym>IP</acronym>-Adresse des &os;-Webservers, eine Anfrage + nach <hostid role="fqdn">ftp.FreeBSD.org</hostid> die + <acronym>IP</acronym>-Adresse des entsprechenden + <acronym>FTP-Servers</acronym> zurück. Der umgekehrte Weg + ist ebenso möglich, eine <acronym>IP</acronym>-Adresse + kann also auch in ihren Rechnernamen aufgelöst werden. Um + eine <acronym>DNS</acronym>-Abfrage durchzuführen, muss auf + dem jeweiligen Rechner kein Nameserver installiert sein.</para> + + <para>&os; verwendet derzeit in der Voreinstellung + <acronym>BIND</acronym>9 als + <acronym>DNS</acronym>-Serversoftware. Unsere Installation + bietet Ihnen eine erhöhte Sicherheit, ein neues + Dateisystemlayout sowie eine automatisierte + &man.chroot.8;-Konfiguration.</para> + + <indexterm><primary>DNS</primary></indexterm> + + <para>Im Internet wird <acronym>DNS</acronym> durch ein komplexes + System von autoritativen Root-Nameservern, + Top Level Domain-Servern (<acronym>TLD</acronym>) sowie anderen + kleineren Nameservern verwaltet, die individuelle Rechnerinformationen + speichern und untereinander abgleichen.</para> + + <para>Derzeit wird BIND vom Internet Systems Consortium + (<ulink url="https://www.isc.org/"></ulink>) verwaltet.</para> + </sect2> + + <sect2> + <title>Begriffsbestimmungen</title> + + <para>Um dieses Dokument besser verstehen zu können, + müssen einige <acronym>DNS</acronym>-spezifische + Begriffe genauer definiert werden.</para> + + <indexterm><primary>Resolver</primary></indexterm> + <indexterm><primary>Reverse-DNS</primary></indexterm> + <indexterm><primary>Root-Zone</primary></indexterm> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <colspec colwidth="1*"/> + <colspec colwidth="3*"/> + + <thead> + <row> + <entry>Begriff</entry> + + <entry>Bedeutung</entry> + </row> + </thead> + + <tbody> + <row> + <entry>Forward-<acronym>DNS</acronym></entry> + + <entry>Rechnernamen in <acronym>IP</acronym>-Adressen + umwandeln.</entry> + </row> + + <row> + <entry>Origin (Ursprung)</entry> + + <entry>Die in einer bestimmten Zonendatei beschriebene + Domäne.</entry> + </row> + + <row> + <entry><application>named</application>, BIND</entry> + + <entry>Gebräuchliche Namen für das unter &os; + verwendete BIND-Nameserverpaket.</entry> + </row> + + <row> + <entry>Resolver</entry> + + <entry>Ein Systemprozess, durch den ein Rechner + Zoneninformationen von einem Nameserver anfordert.</entry> + </row> + + <row> + <entry>Reverse-<acronym>DNS</acronym></entry> + + <entry>die Umwandlung von <acronym>IP</acronym>-Adressen in + Rechnernamen</entry> + </row> + + <row> + <entry>Root-Zone</entry> + + <entry>Der Beginn der Internet-Zonenhierarchie. Alle + Zonen befinden sich innerhalb der Root-Zone. Dies ist + analog zu einem Dateisystem, in dem sich alle Dateien + und Verzeichnisse innerhalb des Wurzelverzeichnisses + befinden.</entry> + </row> + + <row> + <entry>Zone</entry> + + <entry>Eine individuelle Domäne, Unterdomäne, + oder ein Teil von <acronym>DNS</acronym>, der von der + gleichen Autorität verwaltet wird.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <indexterm> + <primary>Zonen</primary> + <secondary>Beispiele</secondary> + </indexterm> + + <para>Es folgen nun einige Zonenbeispiele:</para> + + <itemizedlist> + <listitem> + <para>Innerhalb der Dokumentation wird die Root-Zone in der + Regel mit <hostid>.</hostid> bezeichnet.</para> + </listitem> + + <listitem> + <para><hostid>org.</hostid> ist eine Top level Domain + (<acronym>TLD</acronym>) innerhalb der Root-Zone.</para> + </listitem> + + <listitem> + <para><hostid role="domainname">example.org.</hostid> + ist eine Zone innerhalb der + <hostid>org.</hostid>-<acronym>TLD</acronym>.</para> + </listitem> + + <listitem> + <para><hostid>1.168.192.in-addr.arpa.</hostid> ist die Zone mit + allen IP-Adressen des <hostid + role="domainname">192.168.1.*</hostid>-IP-Bereichs.</para> + </listitem> + </itemizedlist> + + <para>Wie man an diesen Beispielen erkennen kann, befindet sich + der spezifischere Teil eines Rechnernamens auf der linken Seite + der Adresse. <hostid role="domainname">example.org.</hostid> + beschreibt einen Rechner also genauer als <hostid>org.</hostid>, + während <hostid>org.</hostid> genauer als die Root-Zone + ist. Jeder Teil des Rechnernamens hat Ähnlichkeiten mit + einem Dateisystem, in dem etwa <filename>/dev</filename> dem + Wurzelverzeichnis untergeordnet ist.</para> + </sect2> + + <sect2> + <title>Gründe für die Verwendung eines + Nameservers</title> + + <para>Es gibt zwei Arten von Nameservern: Autoritative Nameserver + sowie zwischenspeichernde (cachende, auch bekannt als + auflösende) Nameserver.</para> + + <para>Ein autoritativer Nameserver ist notwendig, wenn</para> + + <itemizedlist> + <listitem> + <para>Sie anderen verbindliche + <acronym>DNS</acronym>-Auskünfte erteilen wollen.</para> + </listitem> + + <listitem> + <para>eine Domain, beispielsweise + <hostid role="domainname">example.org</hostid>, registriert + wird, und den zu dieser Domain gehörenden Rechnern + <acronym>IP</acronym>-Adressen zugewiesen werden + müssen.</para> + </listitem> + + <listitem> + <para>ein <acronym>IP</acronym>-Adressblock + reverse-<acronym>DNS</acronym>-Einträge benötigt, + um <acronym>IP</acronym>-Adressen in Rechnernamen + auflösen zu können.</para> + </listitem> + + <listitem> + <para>ein Backup-Nameserver (auch Slaveserver genannt) oder + ein zweiter Nameserver auf Anfragen antworten soll.</para> + </listitem> + </itemizedlist> + + <para>Ein cachender Nameserver ist notwendig, weil</para> + + <itemizedlist> + <listitem> + <para>ein lokaler DNS-Server Daten zwischenspeichern und daher + schneller auf Anfragen reagieren kann als ein entfernter + Server.</para> + </listitem> + </itemizedlist> + + <para>Wird nach <hostid role="fqdn">www.FreeBSD.org</hostid> + gesucht, leitet der Resolver diese Anfrage an den Nameserver des + ISPs weiter und nimmt danach das Ergebnis der + Abfrage entgegen. Existiert ein lokaler, zwischenspeichernder + <acronym>DNS</acronym>-Server, muss dieser die Anfrage nur einmal + nach außen weitergeben. Für alle weiteren Anfragen + ist dies nicht mehr nötig, da diese Information nun lokal + gespeichert ist.</para> + </sect2> + + <sect2> + <title>Wie funktioniert <acronym>DNS</acronym>?</title> + + <para>Unter &os; wird der BIND-Daemon als + <application>named</application> bezeichnet.</para> + + <informaltable frame="none" pgwide="1"> + <tgroup cols="2"> + <thead> + <row> + <entry>Datei</entry> + + <entry>Beschreibung</entry> + </row> + </thead> + + <tbody> + <row> + <entry><application>named</application></entry> + + <entry>Der BIND-Daemon.</entry> + </row> + + <row> + <entry>&man.rndc.8;</entry> + + <entry>Das Steuerprogramm für + <application>named</application>.</entry> + </row> + + <row> + <entry><filename class="directory">/etc/namedb</filename></entry> + + <entry>Das Verzeichnis, in dem sich die Zoneninformationen + für BIND befinden.</entry> + </row> + + <row> + <entry><filename>/etc/namedb/named.conf</filename></entry> + + <entry>Die Konfigurationsdatei für + <application>named</application>.</entry> + </row> + </tbody> + </tgroup> + </informaltable> + + <para>Je nachdem, wie eine Zone auf dem Server konfiguriert wurde, + finden sich die zur Zone gehörendenden Dateien in den + Unterverzeichnissen <filename + class="directory">master</filename>, <filename + class="directory">slave</filename>, oder <filename + class="directory">dynamic</filename> des Verzeichnisses + <filename class="directory">/etc/namedb</filename>. Diese + Dateien enthalten die <acronym>DNS</acronym>-Informationen, + die der Nameserver für die Beantwortung von Anfragen + benötigt.</para> + </sect2> + + <sect2> + <title>BIND starten</title> + + <indexterm> + <primary>BIND</primary> + <secondary>Start</secondary> + </indexterm> + + <para>Da BIND automatisch installiert wird, ist die Konfiguration + relativ einfach.</para> + + <para>In der Voreinstellung wird ein in einer &man.chroot.8;-Umgebung + betriebener <application>named</application>-Server zur einfachen + Namensauflösung eingerichtet, der nur im lokalen + IPv4-Loopback-Adressbereich (127.0.0.1) lauscht. Um den Server + manuell zu starten, verwenden Sie den folgenden Befehl:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/named onestart</userinput></screen> + + <para>Um den <application>named</application>-Daemon beim + Systemstart automatisch zu starten, fügen Sie folgende + Zeile in <filename>/etc/rc.conf</filename> ein:</para> + + <programlisting>named_enable="YES"</programlisting> + + <para><filename>/etc/namedb/named.conf</filename> bietet zahlreiche + Konfigurationsoptionen, die in diesem Dokument nicht alle + beschrieben werden können. Wollen Sie die Startoptionen + von <application>named</application> unter &os; anpassen, sollten + Sie sich die + <literal>named_<replaceable>*</replaceable></literal>-Flags in der + Datei <filename>/etc/defaults/rc.conf</filename> sowie die + Manualpage zu &man.rc.conf.5; näher ansehen. Zusätzliche + Informationen bietet Ihnen auch der Abschnitt <xref + linkend="configtuning-rcd"/> des Handbuchs.</para> + </sect2> + + <sect2> + <title>Konfigurationsdateien</title> + + <indexterm> + <primary>BIND</primary> + <secondary>Konfigurationsdateien</secondary> + </indexterm> + + <para>Die Konfigurationsdateien von + <application>named</application> finden sich unter + <filename class="directory">/etc/namedb</filename> und müssen + in der Regel an Ihre Bedürfnisse angepasst werden. Es sei + denn, Sie benötigen nur einen einfachen Resolver. Ein + Großteil der Konfigurationsarbeiten erfolgt dabei in + diesem Verzeichnis.</para> + + <sect3> + <title><filename>/etc/namedb/named.conf</filename></title> + + <programlisting>// $FreeBSD$ +// +// Refer to the named.conf(5) and named(8) man pages, and the documentation +// in /usr/share/doc/bind9 for more details. +// +// If you are going to set up an authoritative server, make sure you +// understand the hairy details of how DNS works. Even with +// simple mistakes, you can break connectivity for affected parties, +// or cause huge amounts of useless Internet traffic. + +options { +// All file and path names are relative to the chroot directory, +// if any, and should be fully qualified. + directory "/etc/namedb/working"; + pid-file "/var/run/named/pid"; + dump-file "/var/dump/named_dump.db"; + statistics-file "/var/stats/named.stats"; + +// If named is being used only as a local resolver, this is a safe default. +// For named to be accessible to the network, comment this option, specify +// the proper IP address, or delete this option. + listen-on { 127.0.0.1; }; + +// If you have IPv6 enabled on this system, uncomment this option for +// use as a local resolver. To give access to the network, specify +// an IPv6 address, or the keyword "any". +// listen-on-v6 { ::1; }; + +// These zones are already covered by the empty zones listed below. +// If you remove the related empty zones below, comment these lines out. + disable-empty-zone "255.255.255.255.IN-ADDR.ARPA"; + disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; + disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA"; + +// If you've got a DNS server around at your upstream provider, enter +// its IP address here, and enable the line below. This will make you +// benefit from its cache, thus reduce overall DNS traffic in the Internet. +/* + forwarders { + 127.0.0.1; + }; +*/ + +// If the 'forwarders' clause is not empty the default is to 'forward first' +// which will fall back to sending a query from your local server if the name +// servers in 'forwarders' do not have the answer. Alternatively you can +// force your name server to never initiate queries of its own by enabling the +// following line: +// forward only; + +// If you wish to have forwarding configured automatically based on +// the entries in /etc/resolv.conf, uncomment the following line and +// set named_auto_forward=yes in /etc/rc.conf. You can also enable +// named_auto_forward_only (the effect of which is described above). +// include "/etc/namedb/auto_forward.conf"; + </programlisting> + + <para>Um vom Cache Ihres Internetproviders zu profitieren, + können hier <literal>forwarders</literal> aktiviert + werden. Normalerweise sucht ein Nameserver das Internet + rekursiv ab, bis er die gesuchte Antwort findet. Durch + diese Option wird stets der Nameserver Ihres + Internetproviders zuerst abgefragt, um von dessen + Cache zu profitieren. Wenn es sich um einen schnellen, + viel benutzten Nameserver handelt, kann dies zu einer + Geschwindigkeitssteigerung führen.</para> + + <warning> + <para><hostid role="ipaddr">127.0.0.1</hostid> funktioniert + hier <emphasis>nicht</emphasis>. Ändern Sie diese + Adresse in einen Nameserver Ihres Einwahlproviders.</para> + </warning> + + <programlisting> /* + Modern versions of BIND use a random UDP port for each outgoing + query by default in order to dramatically reduce the possibility + of cache poisoning. All users are strongly encouraged to utilize + this feature, and to configure their firewalls to accommodate it. + + AS A LAST RESORT in order to get around a restrictive firewall + policy you can try enabling the option below. Use of this option + will significantly reduce your ability to withstand cache poisoning + attacks, and should be avoided if at all possible. + + Replace NNNNN in the example with a number between 49160 and 65530. + */ + // query-source address * port NNNNN; +}; + +// If you enable a local name server, don't forget to enter 127.0.0.1 +// first in your /etc/resolv.conf so this server will be queried. +// Also, make sure to enable it in /etc/rc.conf. + +// The traditional root hints mechanism. Use this, OR the slave zones below. +zone "." { type hint; file "/etc/namedb/named.root"; }; + +/* Slaving the following zones from the root name servers has some + significant advantages: + 1. Faster local resolution for your users + 2. No spurious traffic will be sent from your network to the roots + 3. Greater resilience to any potential root server failure/DDoS + + On the other hand, this method requires more monitoring than the + hints file to be sure that an unexpected failure mode has not + incapacitated your server. Name servers that are serving a lot + of clients will benefit more from this approach than individual + hosts. Use with caution. + + To use this mechanism, uncomment the entries below, and comment + the hint zone above. + + As documented at http://dns.icann.org/services/axfr/ these zones: + "." (the root), ARPA, IN-ADDR.ARPA, IP6.ARPA, and ROOT-SERVERS.NET + are availble for AXFR from these servers on IPv4 and IPv6: + xfr.lax.dns.icann.org, xfr.cjr.dns.icann.org +*/ +/* +zone "." { + type slave; + file "/etc/namedb/slave/root.slave"; + masters { + 192.5.5.241; // F.ROOT-SERVERS.NET. + }; + notify no; +}; +zone "arpa" { + type slave; + file "/etc/namedb/slave/arpa.slave"; + masters { + 192.5.5.241; // F.ROOT-SERVERS.NET. + }; + notify no; +}; +*/ + +/* Serving the following zones locally will prevent any queries + for these zones leaving your network and going to the root + name servers. This has two significant advantages: + 1. Faster local resolution for your users + 2. No spurious traffic will be sent from your network to the roots +*/ +// RFCs 1912 and 5735 (and BCP 32 for localhost) +zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; }; +zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; +zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// RFC 1912-style zone for IPv6 localhost address +zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; + +// "This" Network (RFCs 1912 and 5735) +zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// Private Use Networks (RFCs 1918 and 5735) +zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// Link-local/APIPA (RFCs 3927 and 5735) +zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IETF protocol assignments (RFCs 5735 and 5736) +zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737) +zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IPv6 Range for Documentation (RFC 3849) +zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + + +// Domain Names for Documentation and Testing (BCP 32) +zone "test" { type master; file "/etc/namedb/master/empty.db"; }; +zone "example" { type master; file "/etc/namedb/master/empty.db"; }; +zone "invalid" { type master; file "/etc/namedb/master/empty.db"; }; +zone "example.com" { type master; file "/etc/namedb/master/empty.db"; }; +zone "example.net" { type master; file "/etc/namedb/master/empty.db"; }; +zone "example.org" { type master; file "/etc/namedb/master/empty.db"; }; + + +// Router Benchmark Testing (RFCs 2544 and 5735) +zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IANA Reserved - Old Class E Space (RFC 5735) +zone "240.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "241.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "242.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "243.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "244.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "245.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "246.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "247.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "248.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "249.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "250.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "251.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "252.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "253.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "254.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IPv6 Unassigned Addresses (RFC 4291) +zone "1.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "3.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "4.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "5.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "6.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "7.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "8.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "9.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "a.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "b.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "c.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "d.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "e.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "0.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "1.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "2.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "3.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "4.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "5.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "6.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "7.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "8.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "9.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "a.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "b.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "0.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "1.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "2.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "3.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "4.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "5.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IPv6 ULA (RFC 4193) +zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IPv6 Link Local (RFC 4291) +zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IPv6 Deprecated Site-Local Addresses (RFC 3879) +zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "f.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; + +// IP6.INT is Deprecated (RFC 4159) +zone "ip6.int" { type master; file "/etc/namedb/master/empty.db"; }; + +// NB: Do not use the IP addresses below, they are faked, and only +// serve demonstration/documentation purposes! +// +// Example slave zone config entries. It can be convenient to become +// a slave at least for the zone your own domain is in. Ask +// your network administrator for the IP address of the responsible +// master name server. +// +// Do not forget to include the reverse lookup zone! +// This is named after the first bytes of the IP address, in reverse +// order, with ".IN-ADDR.ARPA" appended, or ".IP6.ARPA" for IPv6. +// +// Before starting to set up a master zone, make sure you fully +// understand how DNS and BIND work. There are sometimes +// non-obvious pitfalls. Setting up a slave zone is usually simpler. +// +// NB: Don't blindly enable the examples below. :-) Use actual names +// and addresses instead. + +/* An example dynamic zone +key "exampleorgkey" { + algorithm hmac-md5; + secret "sf87HJqjkqh8ac87a02lla=="; +}; +zone "example.org" { + type master; + allow-update { + key "exampleorgkey"; + }; + file "/etc/named/dynamic/example.org"; +}; +*/ + +/* Example of a slave reverse zone +zone "1.168.192.in-addr.arpa" { + type slave; + file "/etc/namedb/slave/1.168.192.in-addr.arpa"; + masters { + 192.168.1.1; + }; +}; +*/</programlisting> + + <para>Hierbei handelt es sich um Slave-Einträge für + eine Reverse- und Forward-DNS-Zone, die in der Datei + <filename>named.conf</filename> definiert sind.</para> + + <para>Für jede neue Zone muss ein zusätzlicher Eintrag + in <filename>named.conf</filename> erstellt werden.</para> + + <para>Ein einfacher Eintrag für eine Zone + <hostid role="domainname">example.org</hostid> könnte + beispielsweise so aussehen:</para> + + <programlisting>zone "example.org" { + type master; + file "master/example.org"; +}; </programlisting> + + <para>Die Option <option>type</option> legt fest, dass es sich + um eine Master-Zone handelt, deren Zoneninformationen sich in + der Datei <filename>/etc/namedb/master/example.org</filename> + befinden. Diese Datei wird durch die Option + <option>file</option> festgelegt.</para> + + <programlisting>zone "example.org" { + type slave; + file "slave/example.org"; +}; </programlisting> + + <para>Hier handelt es sich um einen Slaveserver, der seine + Informationen vom Masterserver der betreffenden Zone bezieht + und diese in der angegebenen Datei speichert. Wenn der + Masterserver nicht erreichbar ist, verfügt der + Slaveserver über die transferierten Zoneninformationen + und kann diese an andere Rechner weitergeben.</para> + </sect3> + + <sect3> + <title>Zonendateien</title> + + <indexterm> + <primary>BIND</primary> + <secondary>Zonendatei</secondary> + </indexterm> + + <para>Die in der Datei + <filename>/etc/namedb/master/example.org</filename> definierte + Zonendatei für + <hostid role="domainname">example.org</hostid> könnte + etwa so aussehen:</para> + + <programlisting>$TTL 3600 ; 1 hour default TTL +example.org. IN SOA ns1.example.org. admin.example.org. ( + 2006051501 ; Serial + 10800 ; Refresh + 3600 ; Retry + 604800 ; Expire + 300 ; Negative Response TTL + ) + +; DNS Servers + IN NS ns1.example.org. + IN NS ns2.example.org. + +; MX Records + IN MX 10 mx.example.org. + IN MX 20 mail.example.org. + + IN A 192.168.1.1 + +; Machine Names +localhost IN A 127.0.0.1 +ns1 IN A 192.168.1.2 +ns2 IN A 192.168.1.3 +mx IN A 192.168.1.4 +mail IN A 192.168.1.5 + +; Aliases +www IN CNAME example.org.</programlisting> + + <para>Beachten Sie, dass jeder mit einem <quote>.</quote> + endende Rechnername ein exakter Rechnername ist, während + sich alles ohne einen abschließenden <quote>.</quote> + relativ auf den Ursprung bezieht. <literal>ns1</literal> steht + daher beispielsweise für + <literal>ns1.<replaceable>example.org.</replaceable></literal>.</para> + + <para>Eine Zonendatei hat folgenden Aufbau:</para> + + <programlisting>recordname IN recordtype value</programlisting> + + <indexterm> + <primary>DNS</primary> + <secondary>Einträge</secondary> + </indexterm> + + <para>Die am häufigsten verwendeten DNS-Einträge sind:</para> + + <variablelist> + <varlistentry> + <term>SOA</term> + + <listitem> + <para>Start der Zonenautorität</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>NS</term> + + <listitem> + <para>Ein autoritativer Nameserver</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>A</term> + + <listitem><para>Eine Rechneradresse</para></listitem> + </varlistentry> + + <varlistentry> + <term>CNAME</term> + + <listitem> + <para>Der kanonische Name eines Alias</para> + </listitem> + </varlistentry> + + <varlistentry> + <term>MX</term> + + <listitem><para>Mail Exchanger</para></listitem> + </varlistentry> + + <varlistentry> + <term>PTR</term> + + <listitem> + <para>Ein (bei Reverse-DNS verwendeter) Domain Name + Pointer</para> + </listitem> + </varlistentry> + </variablelist> + + <programlisting>example.org. IN SOA ns1.example.org. admin.example.org. ( + 2006051501 ; Serial + 10800 ; Refresh after 3 hours + 3600 ; Retry after 1 hour + 604800 ; Expire after 1 week + 300 ) ; Negative Response TTL</programlisting> + + <variablelist> + <varlistentry> + <term><hostid role="domainname">example.org.</hostid></term> + + <listitem><para>Der Name der Domäne und damit der + Ursprung dieser Zonendatei.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><hostid role="fqdn">ns1.example.org.</hostid></term> + + <listitem><para>Der primäre/autoritative Nameserver + dieser Zone.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>admin.example.org.</literal></term> + + <listitem><para>Die für diese Zone verantwortliche + Person. Das Zeichen <quote>@</quote> wird dabei + ersetzt (<email>admin@example.org</email> wird also zu + <literal>admin.example.org</literal>).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>2006051501</literal></term> + + <listitem><para>Die Seriennummer der Datei. Sie muss + stets inkrementiert werden, wenn die Zonendatei + geändert wird. Viele Administratoren bevorzugen + ein <literal>JJJJMMTTRR</literal>-Format, um die + Seriennummer festzulegen. + <literal>2006051501</literal> steht also für + den 15.05.2006, die beiden letzten Stellen für die + erste Modifikation der Zonendatei an diesem Tag. Die + Seriennummer ist von großer Bedeutung, da + Slaveserver daran eine aktualisierte Zonendatei erkennen + können.</para> + </listitem> + </varlistentry> + </variablelist> + + <programlisting> + IN NS ns1.example.org.</programlisting> + + <para>Ein NS-Eintrag. Jeder Nameserver, der für eine Zone + verantwortlich ist, muss über einen solchen Eintrag + verfügen.</para> + + <programlisting> + localhost IN A 127.0.0.1 + ns1 IN A 192.168.1.2 + ns2 IN A 192.168.1.3 + mx IN A 192.168.1.4 + mail IN A 192.168.1.5</programlisting> + + <para>Der Eintrag <literal>A</literal> bezieht sich auf + Rechnernamen. <hostid role="fqdn">ns1.example.org</hostid> + würde also zu <hostid role="ipaddr">192.168.1.2</hostid> + aufgelöst werden.</para> + + <programlisting> + IN A 192.168.1.1</programlisting> + + <para>Diese Zeile weist die IP-Adresse + <hostid role="ipaddr">192.168.1.1</hostid> dem aktuellen + Ursprung, in unserem Fall also + <hostid role="domainname">example.org</hostid>, zu.</para> + + <programlisting> + www IN CNAME @</programlisting> + + <para>Der Eintrag für den kanonischen Namen wird dazu + verwendet, Aliase für einen Rechner zu vergeben. Im + Beispiel ist <hostid>www</hostid> ein Alias für den + <quote>Master</quote>-Rechner, dessen Name dem Domainnamen + <hostid role="domainname">example.org</hostid> (oder + <hostid role="ipaddr">192.168.1.1</hostid>) entspricht. + CNAMEs können daher niemals gleichzeitig mit einem + anderen Eintrag für denselben Hostname eingerichtet + werden.</para> + + <indexterm> + <primary>MX-Eintrag</primary> + </indexterm> + + <programlisting> + IN MX 10 mail.example.org.</programlisting> + + <para>Die Option MX legt fest, welcher Mailserver für + eintreffende Mails der Zone verantwortlich ist. + <hostid role="fqdn">mail.example.org</hostid> ist der + Rechnername des Mailservers, der eine Priorität von 10 + hat.</para> + + <para>Es können auch mehrere Mailserver mit verschiedener + Priorität (10, 20, ...) vorhanden sein. Ein Mailserver, + der eine Mail an <hostid role="domainname">example.org</hostid> + verschicken will, verwendet zuerst den MX mit der höchsten + Priorität (das heißt den mit der niedrigsten + Prioritätsnummer), danach den mit der + nächsthöheren Priorität. Und dies solange, + bis die E-Mail zugestellt werden kann.</para> + + <para>Für (bei Reverse-DNS verwendete) + <literal>in-addr.arpa</literal>-Zonendateien wird das gleiche + Format verwendet. Der einzige Unterschied besteht in der + Verwendung der Option PTR an Stelle der Optionen A und + CNAME.</para> + + <programlisting>$TTL 3600 + +1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( + 2006051501 ; Serial + 10800 ; Refresh + 3600 ; Retry + 604800 ; Expire + 300 ) ; Negative Response TTL + + IN NS ns1.example.org. + IN NS ns2.example.org. + +1 IN PTR example.org. +2 IN PTR ns1.example.org. +3 IN PTR ns2.example.org. +4 IN PTR mx.example.org. +5 IN PTR mail.example.org.</programlisting> + + <para>Durch diese Datei werden den Rechnernamen der fiktiven + Domäne IP-Adressen zugewiesen.</para> + + <para>Beachten Sie bitte, dass es sich bei allen Namen auf der + rechten Seite eines PTR-Eintrags um absolute + (<emphasis>fully qualified</emphasis>) Domainnamen handeln + muss, die mit <quote>.</quote> enden.</para> + </sect3> + </sect2> + + <sect2> + <title>Zwischenspeichernde (cachende) Nameserver</title> + + <indexterm> + <primary>BIND</primary> + <secondary>Zwischenspeichernde Nameserver</secondary> + </indexterm> + + <para>Ein cachender Nameserver hat primär die Aufgabe, + rekursive Abfragen aufzulösen. Er stellt lediglich + eigene Anfragen und speichert deren Ergebnisse ab.</para> + </sect2> + + <sect2> + <title><acronym + role="Doman Name Security Extensions">DNSSEC</acronym></title> + <indexterm> + <primary>BIND</primary> + <secondary>DNS security extensions</secondary> + </indexterm> + + <para>Domain Name System Security Extensions, oder kurz <acronym + role="Domain Name Security Extensions">DNSSEC</acronym>, ist eine + Sammlung von Spezifikationen, um auflösende Nameserver von + gefälschten <acronym>DNS</acronym>-Daten, wie beispielsweise + vorgetäuschte <acronym>DNS</acronym>-Einträge, zu + schützen. Durch die Verwendung von digitalen Signaturen kann + ein Resolver die Integrität des Eintrages + überprüfen. Wichtig dabei ist, dass <acronym + role="Domain Name Security Extensions">DNSSEC</acronym> nur die + Integrität über digital signierte Resource Records + (<acronym role="Resource Record">RR</acronym>e) bereitstellt. + Weder wird die Vertraulichkeit noch der Schutz vor falschen + Annahmen des Endbenutzers sichergestellt. Dies bedeutet, dass es + Leute nicht davor schützen kann, zu <hostid + role="domainname">example.net</hostid> anstatt zu <hostid + role="domainname">example.com</hostid> zu gelangen. Das + einzige, was <acronym>DNSSEC</acronym> tut, ist die + Authentifizierung, dass die Daten während der + Übertragung nicht verändert wurden. Die Sicherheit von + <acronym>DNS</acronym> ist ein wichtiger Schritt in der + generellen Absicherung des Internets. Für weitere, + tiefergehende Details über die Funktionsweise von + <acronym>DNSSEC</acronym> sind die dazugehörigen + <acronym>RFC</acronym>s ein guter Einstieg in die Thematik. Sehen + Sie sich dazu die Liste in <xref linkend="dns-read"/> an.</para> + + <para>Der folgende Abschnitt wird zeigen, wie man + <acronym>DNSSEC</acronym> für einen autoritativen + <acronym>DNS</acronym>-Server und einen rekursiven (oder cachenden) + <acronym>DNS</acronym>-Server, der jeweils + <acronym>BIND</acronym> 9 verwenden, einrichten kann. Obwohl alle + Versionen von <acronym>BIND</acronym> 9 <acronym>DNSSEC</acronym> + unterstützen, ist es notwendig, mindestens die Version 9.6.2 + zu verwenden, um in der Lage zu sein, die signierten Root-Zonen zu + benutzen, wenn <acronym>DNS</acronym>-Abfragen geprüft + werden. Der Grund dafür ist, dass früheren Versionen + die Algorithmen fehlen, um die Überprüfung des + Root-Zonenschlüssels zu aktivieren. Es wird dringend empfohlen, + die letzte Version von <acronym>BIND</acronym> 9.7 oder höher + einzusetzen, um von den Vorteilen der automatischen + Schlüsselaktualisierung des Root-Zonenschlüssels + Gebrauch zu machen, genauso wie andere Eigenschaften, um + automatisch Zonen signieren zu lassen und Signaturen aktuell zu + halten. Unterschiede zwischen den Versionen 9.6.2 und 9.7 und + höher werden an den betreffenden Stellen angesprochen.</para> + + <sect3> + <title>Rekursive <acronym>DNS</acronym>-Server Konfiguration</title> + + <para>Die Aktivierung der + <acronym>DNSSEC</acronym>-Überprüfung von Anfragen, + die von einem rekursiven <acronym>DNS</acronym>-Server + stammen, benötigt ein paar Änderungen in der + <filename>named.conf</filename>. Bevor man jedoch diese + Änderungen durchführt, muss der + Root-Zonenschlüssel oder Vertrauensanker erworben werden. + Momentan ist der Root-Zonenschlüssel nicht in einem + Dateiformat verfügbar, dass von <acronym>BIND</acronym> + benutzt werden kann, so dass dieser manuell in das richtige + Format konvertiert werden muss. Der Schlüssel selbst kann + durch Abfrage an die Root-Zone erhalten werden, indem man dazu + <application>dig</application> verwendet. Durch Aufruf + von</para> + + <screen>&prompt.user; <userinput>dig +multi +noall +answer DNSKEY . > root.dnskey</userinput></screen> + + <para>wird der Schlüssel in + <filename>root.dnskey</filename> abgelegt. Der Inhalt sollte + so ähnlich wie folgt aussehen:</para> + + <programlisting>. 93910 IN DNSKEY 257 3 8 ( + AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ + bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh + /RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA + JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp + oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3 + LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO + Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc + LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0= + ) ; key id = 19036 +. 93910 IN DNSKEY 256 3 8 ( + AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69Hf + UyuGBbRN0+HuTOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjE + g58sRr4ZQ6Iu6b1xTBKgc193zUARk4mmQ/PPGxn7Cn5V + EGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlFrXDW3tjt +) ; key id = 34525</programlisting> + + <para>Seien Sie nicht alarmiert, wenn der von Ihnen bezogene + Schlüssel anders als in diesem Beispiel aussieht. Diese + könnten sich in der Zwischenzeit geändert haben. In + dieser Ausgabe sind eigentlich zwei Schlüssel enthalten. + Der erste Schüssel mit dem Wert 257 nach dem + DNSKEY-Eintrag ist derjenige, der benötigt wird. Der + Wert zeigt an, dass es sich um einen sicheren Einstiegspunkt + (<acronym role="Secure Entry Point">SEP</acronym>), gemein + auch als Schlüsselsignierungsschlüssel (<acronym + role="Key Signing Key">KSK</acronym>) bekannt, handelt. Der + zweite Schüssel mit dem Wert 256 ist der untergeordnete + Schlüssel, im allgemeinen auch als + Zonen-Signaturschlüssel (<acronym + role="Zone Signing Key">ZSK</acronym>) bezeichnet. Weitere + Schlüsselarten werden später in <xref + linkend="dns-dnssec-auth"/> erläutert.</para> + + <para>Nun muss der Schlüssel verifiziert und so formatiert + werden, dass <acronym>BIND</acronym> diesen verwenden kann. + Um den Schlüssel zu verifizieren, erzeugen Sie einen + <acronym role="Delegation Signer">DS</acronym> <acronym + role="Resource Record">RR</acronym>-Satz. Erstellen Sie eine + Datei, welche die <acronym + role="Resource Record">RR</acronym>s enthält, + mittels</para> + + <screen>&prompt.user; <userinput>dnssec-dsfromkey -f root-dnskey . > root.ds</userinput></screen> + + <para>Diese Einträge verwenden SHA-1 sowie SHA-256 und + sollten ähnlich zu folgendem Beispiel aussehen, in dem + der längere, SHA-256, benutzt wird.</para> + + <programlisting>. IN DS 19036 8 1 B256BD09DC8DD59F0E0F0D8541B8328DD986DF6E +. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5</programlisting> + + <para>Der SHA-256 <acronym>RR</acronym> kann nun mit dem Abriss + in <ulink + url="https://data.iana.org/root-anchors/root-anchors.xml">https://data.iana.org/root-anchors/root-anchors.xml</ulink> verglichen werden. Um + absolut sicher zu sein, dass der Schlüssel nicht + zusammen mit den <acronym>XML</acronym>-Daten verändert + wurde, kann die Datei mittels der <acronym>PGP</acronym> + Signatur in <ulink + url="https://data.iana.org/root-anchors/root-anchors.asc">https://data.iana.org/root-anchors/root-anchors.asc</ulink> überprüft werden.</para> + + <para>Als nächstes muss der Schlüssel in das passende + Format gebracht werden. Dies unterscheidet sich ein bisschen + von den <acronym>BIND</acronym> Versionen 9.6.2 und 9.7 und + höhere. In Version 9.7 wurde die Ünterstützung + zur automatischen Verfolgung und notwendigen Aktualisierung + von Änderungen am Schlüssel eingebaut. Dies wird + durch den Einsatz von <literal>managed-keys</literal> + erreicht, wie in dem Beispiel unten gezeigt ist. Wenn die + ältere Version eingesetzt wird, kann der Schlüssel + durch eine <literal>trusted-keys</literal>-Anweisung eingebaut + werden und die Aktualisierung muss händisch erfolgen. + In <acronym>BIND</acronym> 9.6.2 sollte das Format + folgendermassen aussehen:</para> + + <programlisting>trusted-keys { + "." 257 3 8 + "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF + FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX + bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD + X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz + W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS + Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq + QxA+Uk1ihz0="; +};</programlisting> + + <para>In 9.7 wird das Format stattdessen wie folgt + aussehen:</para> + + <programlisting>managed-keys { + "." initial-key 257 3 8 + "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF + FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX + bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD + X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz + W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS + Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq + QxA+Uk1ihz0="; +};</programlisting> + + <para>Der Root-Schlüssel kann nun zu + <filename>named.conf</filename> hinzugefügt werden, + entweder direkt oder durch Inkludierung der Datei, die den + Schlüssel enthält. Nachdem diese Schritte + absolviert sind, muss <acronym>BIND</acronym> konfiguriert + werden, um <acronym>DNSSEC</acronym>-Validierung für + Anfragen durchzuführen, indem + <filename>named.conf</filename> bearbeitet und die folgende + <literal>options</literal>-Direktive hinzugefügt + wird:</para> + + <programlisting>dnssec-enable yes; +dnssec-validation yes;</programlisting> + + <para>Um zu prüfen, dass es tatsächlich funktioniert, + benutzen Sie <application>dig</application>, um eine Anfrage + zu einer signierten Zone durch den Resolver, der gerade + konfiguriert wurde, zu stellen. Eine erfolgreiche Antwort + wird den <literal>AD</literal>-Eintrag aufweisen, um + anzudeuten, dass die Daten authentisiert sind. Eine Anfrage + wie</para> + + <screen>&prompt.user; <userinput>dig @<replaceable>resolver</replaceable> +dnssec se ds </userinput></screen> + + <para>sollte den <acronym>DS</acronym> <acronym>RR</acronym> + für die <literal>.se</literal>-Zone zurückgeben. In + dem Abschnitt <literal>flags:</literal> sollte der + <literal>AD</literal>-Eintrag gesetzt sein, wie im folgenden + zu sehen ist:</para> + + <programlisting>... +;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 +...</programlisting> + + <para>Der Resolver ist nun in der Lage, Anfragen ans + <acronym>DNS</acronym> zu authentisieren.</para> + + </sect3> + + <sect3 id="dns-dnssec-auth"> + <title>Autoritative <acronym>DNS</acronym>-Server + Konfiguration</title> + + <para>Um einen autoritativen Nameserver dazu zu bringen, als + eine <acronym>DNSSEC</acronym>-signierte Zone zu fungieren, + ist ein wenig mehr Aufwand nötig. Eine Zone ist durch + kryptographische Schlüssel signiert, die erzeugt werden + müssen. Es ist möglich, nur einen Schlüssel + dazu zu verwenden. Die vorgeschlagene Methode ist jedoch, + einen starken, gut geschützten + Schlüsselsignierungsschlüssel (<acronym + role="Key Signing Key">KSK</acronym>) einzusetzen, der nicht + oft gewechselt wird und einen Zonensignierungsschlüssel + (<acronym role="Zone Signing Key">ZSK</acronym>), der + öfter ausgewechselt wird. Informationen zu + vorgeschlagenen Einsatzarten können in <ulink + url="http://tools.ietf.org/rfc/rfc4641.txt"><acronym>RFC</acronym> + 4641: <acronym>DNSSEC</acronym> Operational Practices</ulink> + nachgelesen werden. Einsatzszenarien, welche die Root-Zone + betreffen, finden Sie in <ulink + url="http://www.root-dnssec.org/wp-content/uploads/2010/06/icann-dps-00.txt"><acronym>DNSSEC</acronym> Practice Statement for the Root Zone + <acronym>KSK</acronym> operator</ulink> sowie <ulink + url="http://www.root-dnssec.org/wp-content/uploads/2010/06/vrsn-dps-00.txt"><acronym>DNSSEC</acronym> Practice Statement for the Root Zone + <acronym>ZSK</acronym> operator</ulink>. Der <acronym + role="Key Signing Key">KSK</acronym> wird dazu verwendet, um + eine Kette von Autorität für die Daten, die diese + Validierung benötigen, zu erschaffen und wird als solche + auch als sicherer Einstiegspunkt (<acronym + role="Secure Entry Point">SEP</acronym>)-Schlüssel + bezeichnet. Ein Nachrichtenabriss dieses Schlüssels, + der auch Delegation Signer (<acronym + role="Delegation Signer">DS</acronym>)-Eintrag genannt wird, + muss in der Elternzone veröffentlicht werden, um die + Vertrauenskette herzustellen. Wie dies erreicht wird, + hängt von dem Besitzer der Elternzone ab. Der <acronym + role="Zone Signing Key">ZSK</acronym> wird verwendet, um die + Zone zu signieren und muss nur dort öffentlich + zugänglich gemacht werden.</para> + + <para>Um <acronym>DNSSEC</acronym> für die <hostid + role="domainname">example.com</hostid>-Zone, welche in den + vorherigen Beispielen verwendet wird, zu aktivieren, muss + als erster Schritt <application>dnssec-keygen</application> + benutzt werden, um das <acronym>KSK</acronym> und + <acronym>ZSK</acronym> Schlüsselpaar zu generieren. + Dieses Schlüsselpaar kann unterschiedliche + kryptographische Algorithmen nutzen. Es wird empfohlen, + RSA/SHA256 für die Schlüssel zu nutzen. Eine + Schlüssellänge von 2048 Bits sollte genügen. + Um den <acronym>KSK</acronym> für <hostid + role="domainname">example.com</hostid> zu generieren, geben + Sie</para> + + <screen>&prompt.user; <userinput>dnssec-keygen -f KSK -a RSASHA256 -b 2048 -n ZONE example.com</userinput></screen> + + <para>ein und um den <acronym>ZSK</acronym> zu erzeugen, setzen + Sie folgenden Befehl ab:</para> + + <screen>&prompt.user; <userinput>dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com</userinput></screen> + + <para><application>dnssec-keygen</application> gibt zwei + Dateien aus, den öffentlichen und den privaten + Schlüssel und zwar in Dateinamen, die ähnlich + lauten wie <filename>Kexample.com.+005+nnnnn.key</filename> + (öffentlich) und + <filename>Kexample.com.+005+nnnnn.private</filename> + (privat). Der <literal>nnnnn</literal>-Teil des Dateinamens + ist eine fünfstellige Schlüsselkennung. Passen + Sie genau auf, welche Kennung zu welchem Schlüssel + gehört. Das ist besonders wichtig, wenn mehrere + Schlüssel in einer Zone vorliegen. Es ist auch + möglich, die Schlüssel umzubenennen. Für + jede <acronym>KSK</acronym>-Datei tun Sie folgendes:</para> + + <screen>&prompt.user; <userinput>mv Kexample.com.+005+nnnnn.key Kexample.com.+005+nnnnn.KSK.key</userinput> +&prompt.user; <userinput>mv Kexample.com.+005+nnnnn.private Kexample.com.+005+nnnnn.KSK.private</userinput></screen> + + <para>Für die <acronym>ZSK</acronym>-Dateien ersetzen Sie + <literal>KSK</literal> für <literal>ZSK</literal> wenn + nötig. Die Dateien können nun in der Zonendatei + inkludiert werden, indem die <literal>$include</literal> + Anweisung verwendet wird. Es sollte folgendermassen + aussehen:</para> + + <programlisting>$include Kexample.com.+005+nnnnn.KSK.key ; KSK +$include Kexample.com.+005+nnnnn.ZSK.key ; ZSK</programlisting> + + <para>Schliesslich signieren Sie die Zone und weisen + <acronym>BIND</acronym> an, die signierte Zonendatei zu + benutzen. Um eine Zone zu signieren, wird + <application>dnssec-signzone</application> eingesetzt. Der + Befehl, um eine Zone <hostid + role="domainname">example.com</hostid> zu signieren, die in + <filename>example.com.db</filename> liegt, sollte + wie folgt aussehen:</para> + + <screen>&prompt.user; <userinput>dnssec-signzone -o example.com -k Kexample.com.+005+nnnnn.KSK example.com.db Kexample.com.+005+nnnnn.ZSK.key</userinput></screen> + + <para>Der Schlüssel, welcher mit dem Argument + <option>-k</option> übergeben wird, ist der + <acronym>KSK</acronym> und die andere Schlüsseldatei ist + der <acronym>ZSK</acronym>, welcher für die Signatur + benutzt werden soll. Es ist möglich, mehr als einen + <acronym>KSK</acronym> und <acronym>ZSK</acronym> anzugeben, + was das Ergebnis zur Folge hat, dass die Zone mit allen + übergebenen Schlüsseln signiert wird. Dies kann + dann benötigt werden, um Zonendaten mit mehr als einem + Algorithmus zur Signierung zu verwenden. Die Ausgabe von + <application>dnssec-signzone</application> ist eine + Zonendatei mit allen signierten <acronym>RR</acronym>s. + Diese Ausgabe wird in einer Datei mit der Endung + <literal>.signed</literal> abgelegt, wie beispielsweise + <filename>example.com.db.signed</filename>. Die <acronym + role="Delegation Signer">DS</acronym>-Einträge werden + ebenfalls in eine separate Datei + <filename>dsset-example.com</filename> geschrieben. Um diese + signierte Zone zu verwenden, ändern Sie die + Zonendirektive in <filename>named.conf</filename>, so dass + <filename>example.com.db.signed</filename> benutzt wird. + Standardmässig sind die Signaturen nur 30 Tage + gültig, was bedeutet, dass die Zone in etwa 15 Tagen + erneut signiert werden muss, um sicher zu stellen, dass + Resolver keine Einträge mit veralteten Signaturen + zwischenspeichern. Es ist möglich, ein Skript und einen + cron-Job zu schreiben, um dies zu erledigen. Lesen Sie dazu + die relevanten Anleitungen, um Details zu erfahren.</para> + + <para>Stellen Sie sicher, dass die privaten Schlüssel + vertraulich bleiben, genau wie mit allen anderen + kryptographischen Schlüsseln auch. Wenn ein + Schlüssel geändert wird, ist es gute Praxis den + neuen Schlüssel in die Zone zu inkludieren, noch + während der alte Schlüssel noch zum signieren + eingesetzt wird, um dann auf den neuen Schlüssel zum + signieren zu wechseln. Nachdem diese Schritte erfolgt sind, + kann der alte Schlüssel aus der Zone entfernt werden. + Wenn das nicht geschieht, können + <acronym>DNS</acronym>-Daten für einige Zeit nicht + verfügbar sein, bis der neue Schlüssel durch die + <acronym>DNS</acronym>-Hierarchie propagiert wurde. + Für weitere Informationen bezüglich + Schlüsselübergabe und andere + <acronym>DNSSEC</acronym>-Einsatzszenarien lesen Sie <ulink + url="http://www.ietf.org/rfc/rfc4641.txt"><acronym>RFC</acronym> + 4641: <acronym>DNSSEC</acronym> Operational practices</ulink>.</para> + </sect3> + + <sect3> + <title>Automatisierung mittels <acronym>BIND</acronym> 9.7 oder + höher</title> + + <para>Beginnend mit der Version 9.7 von <acronym>BIND</acronym> + wurde eine neue Eigenschaft vorgestellt, die + <emphasis>Smart Signing</emphasis> genannt wird. Diese zielt + darauf ab, das Schlüsselmanagement und den + Signierungsprozess einfacher zu gestalten und zu + automatisieren. Durch ablegen der Schlüssel in ein + Verzeichnis, genannt <emphasis>key repository</emphasis> + und die Verwendung der neuen Option + <literal>auto-dnssec</literal>, ist es möglich eine + dynamische Zone zu erzeugen, welche dann erneut signiert + wird, wenn dazu der Bedarf besteht. Um diese Zone zu + aktualisieren, benutzen Sie + <application>nsupdate</application> mit der neuen Option + <option>-l</option>. Es hat also + <application>rndc</application> die Fähigkeit gewonnen, + Zonen mit Schlüsseln im Key Repository zu verwenden, + indem die Option <option>sign</option> eingesetzt wird. Um + <acronym>BIND</acronym> anzuweisen, diese automatische + Signierung und Zonenaktualisierung für <hostid + role="domainname">example.com</hostid> zu nutzen, fügen + Sie die folgenden Zeilen zur <filename>named.conf</filename> + hinzu:</para> + + <programlisting>zone example.com { + type master; + key-directory "/etc/named/keys"; + update-policy local; + auto-dnssec maintain; + file "/etc/named/dynamic/example.com.zone"; +};</programlisting> + + <para>Nachdem diese Änderungen durchgeführt wurden, + erzeugen Sie die Schlüssel für die Zone wie in + <xref linkend="dns-dnssec-auth"/> beschrieben wird, legen + diese Schlüssel im Key Repository ab, dass als Argument + <literal>key-directory</literal> in der Zonenkonfiguration + steht und die Zone wird automatisch signiert. + Aktualisierungen für eine Zone, die auf diese Art und + Weise konfiguriert wurde, muss mittels + <application>nsupdate</application> erfolgen, dass sich um + die erneute Signierung der Zone mit den hinzugefügten + Daten kümmern wird. Für weitere Details, lesen + Sie <xref linkend="dns-read"/> und die Dokumentation von + <acronym>BIND</acronym>.</para> + </sect3> + </sect2> + + <sect2> + <title>Sicherheit</title> + + <para>Obwohl BIND die am meisten verwendete (und kontrollierte) + Implementierung von DNS darstellt, werden dennoch manchmal neue + Sicherheitsprobleme entdeckt.</para> + + <para>Zwar startet &os; <application>named</application> + automatisch in einer &man.chroot.8;-Umgebung, es gibt aber + noch weitere Sicherheitsmechanismen, mit denen Sie potentielle + <acronym>DNS</acronym>-Serviceattacken erschweren + können.</para> + + <para>Es ist daher eine gute Idee, die Sicherheitshinweise von + <ulink url="http://www.cert.org/">CERT</ulink> zu lesen sowie + die Mailingliste &a.security-notifications; zu abonnieren, um + sich über Sicherheitsprobleme im Zusammenhang mit dem + Internet und FreeBSD zu informieren.</para> + + <tip> + <para>Tritt ein Problem auf, kann es nie schaden, die + Quellen zu aktualisieren und <application>named</application> + neu zu kompilieren.</para> + </tip> + </sect2> + + <sect2 id="dns-read"> + <title>Weitere Informationsquellen</title> + + <para>Hilfeseiten zu BIND/<application>named</application>: + &man.rndc.8; &man.named.8; &man.named.conf.5; &man.nsupdate.8; + &man.dnssec-signzone.8; &man.dnssec-keygen.8;</para> + + <itemizedlist> + <listitem> + <para><ulink + url="https://www.isc.org/software/bind">Offizielle ISC-Seite + zu BIND</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="https://www.isc.org/software/guild">Offizielles Forum zu + ISC- BIND</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://www.oreilly.com/catalog/dns5/">O'Reilly + DNS and BIND 5th Edition</ulink></para> + </listitem> + + <listitem> + <para><ulink + url="http://www.root-dnssec.org/documentation/">Root + <acronym>DNSSEC</acronym></ulink></para> + </listitem> + + <listitem> + <para><ulink + url="http://data.iana.org/root-anchors/draft-icann-dnssec-trust-anchor.html"> + <acronym>DNSSEC</acronym> Vertrauensanker-Publikation für + die Root-Zone</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://tools.ietf.org/html/rfc1034">RFC1034 + - Domain Names - Concepts and Facilities</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://tools.ietf.org/html/rfc1035">RFC1035 + - Domain Names - Implementation and + Specification</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://tools.ietf.org/html/rfc4033">RFC4033 + - DNS Security Introduction and Requirements</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://tools.ietf.org/html/rfc4034">RFC4034 + - Resource Records for the DNS Security + Extensions</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://tools.ietf.org/html/rfc4035">RFC4035 + - Protocol Modifications for the DNS Security + Extensions</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://tools.ietf.org/html/rfc4641">RFC4641 + - DNSSEC Operational Practices</ulink></para> + </listitem> + + <listitem> + <para><ulink url="http://tools.ietf.org/html/rfc5011">RFC 5011 + - Automated Updates of DNS Security (<acronym>DNSSEC</acronym>) + Trust Anchors</ulink></para> + </listitem> + </itemizedlist> + </sect2> + </sect1> + + <sect1 id="network-apache"> + <sect1info> + <authorgroup> + <author> + <firstname>Murray</firstname> + <surname>Stokely</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + </sect1info> + + <title>Der Apache HTTP-Server</title> + + <indexterm> + <primary>Webserver</primary> + <secondary>konfigurieren</secondary> + </indexterm> + + <indexterm><primary>Apache</primary></indexterm> + + <sect2> + <title>Überblick</title> + + <para>Einige der weltgrößten Internetauftritte laufen + unter &os;. Die Mehrzahl der Webserver im Internet nutzt + den <application>Apache</application> HTTP-Server. Die + Installationspakete für den + <application>Apache</application> sollten auf Ihrem + Installationsmedium vorhanden sein. Wenn Sie den + <application>Apache</application> noch nicht installiert haben, + können Sie dies jederzeit über den Port + <filename role="package">www/apache13</filename> oder + <filename role="package">www/apache22</filename> nachholen.</para> + + <para>Nachdem der <application>Apache</application> erfolgreich + installiert wurde, muss er noch konfiguriert werden.</para> + + <note><para>Dieser Abschnitt beschreibt die Version 1.3.X des + <application>Apache</application> HTTP-Servers, da diese Version + unter &os; am häufigsten verwendet wird. + <application>Apache</application> 2.X bringt zwar viele + Verbesserungen mit sich, wird hier aber nicht beschrieben. + Sollten Sie an <application>Apache</application> 2.X + interessiert sein, informieren Sie sich bitte auf + <ulink url="http://httpd.apache.org/"></ulink>.</para></note> + + </sect2> + + <sect2> + <title>Konfiguration</title> + + <indexterm><primary>Apache</primary> + <secondary>Konfigurationsdatei</secondary></indexterm> + + <para>Der <application>Apache</application> HTTP-Server wird unter + &os; primär über die Datei + <filename>/usr/local/etc/apache/httpd.conf</filename> + konfiguriert. Bei dieser Datei handelt es sich um eine typische + &unix;-Konfigurationsdatei, in der Kommentarzeilen mit einem + <literal>#</literal>-Zeichen beginnen. Eine komplette + Beschreibung aller Optionen würde den Rahmen dieses + Handbuchs sprengen, daher beschreiben wir hier nur die am + häufigsten verwendeten Optionen.</para> + + <variablelist> + <varlistentry> + <term><literal>ServerRoot "/usr/local"</literal></term> + + <listitem> + <para>Legt das Standardwurzelverzeichnis für die + <application>Apache</application>-Installation fest. + Binärdateien werden in die Verzeichnisse + <filename class="directory">bin</filename> und + <filename class="directory">sbin</filename> unterhalb des + Serverwurzelverzeichnisses installiert, während sich + Konfigurationsdateien im Verzeichnis + <filename class="directory">etc/apache</filename> + befinden.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>ServerAdmin you@your.address</literal></term> + + <listitem> + <para>Die E-Mail-Adresse, an die Mitteilungen über + Serverprobleme geschickt werden sollen. Diese Adresse + erscheint auf vom Server erzeugten Seiten, beispielsweise + auf Fehlerseiten.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>ServerName www.example.com</literal></term> + + <listitem> + <para>Über die Option <literal>ServerName</literal> + können Sie einen Rechnernamen festlegen, den Ihr + Server an die Clients sendet, wenn sich dieser von + tatsächlichen Rechnernamen unterscheidet (sie + könnten etwa <hostid>www</hostid> statt des richtigen + Rechnernamens verwenden).</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>DocumentRoot "/usr/local/www/data"</literal></term> + + <listitem> + <para><literal>DocumentRoot</literal>: Das Verzeichnis, in + dem Sie Ihre Dokumente ablegen. In der Voreinstellung + befinden sich alle Seiten in diesem Verzeichnis, durch + symbolische Links oder Aliase lassen sich aber auch andere + Orte festlegen.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Es ist empfehlenswert, eine Sicherungskopie Ihrer + Konfigurationsdatei anzulegen, bevor Sie Änderungen + durchführen. Nachdem Sie die Konfiguration beendet + haben, können Sie den + <application>Apache</application> starten.</para> + +<!-- sect3 for performance tuning directives? maxservers minservers --> +<!-- etc..?? --> + +<!-- Advanced configuration section. + +Performance tuning directives. + +Log file format --> + + </sect2> + + <sect2> + <title>Den <application>Apache</application> betreiben</title> + + <indexterm><primary>Apache</primary> + <secondary>Starten oder Beenden</secondary></indexterm> + + <para>Der <application>Apache</application> wird, im Gegensatz zu + vielen anderen Netzwerkservern, nicht vom + <application>inetd</application>-Super-Server verwaltet, sondern + wird als eigenständiger Server betrieben, um die + Leistung für eintreffende HTTP-Anfragen von den Clients + (also von Internetbrowsern) zu verbessern. Gestartet, beendet + oder neu gestartet wird der Server über einen + Shellskript-Wrapper. Um den <application>Apache</application> + erstmals zu starten, geben Sie einfach Folgendes ein:</para> + + <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl start</userinput></screen> + + <para>Wenn Sie den Server beenden wollen, geben Sie Folgendes ein:</para> + + <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl stop</userinput></screen> + + <para>Wenn Sie die Konfigurationsdatei verändern, müssen + Sie den Server neu starten:</para> + + <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl restart</userinput></screen> + + <para>Um den <application>Apache</application> ohne den Abbruch + bestehender Verbindungen neu zu starten, geben Sie Folgendes + ein:</para> + + <screen>&prompt.root; <userinput>/usr/local/sbin/apachectl graceful</userinput></screen> + + <para>Diese und weitere Optionen werden in + &man.apachectl.8; beschrieben.</para> + + <para>Um den <application>Apache</application> beim Systemstart + zu starten, fügen Sie folgende Zeile in + <filename>/etc/rc.conf</filename> ein:</para> + + <programlisting>apache_enable="YES"</programlisting> + + <para>Um <application>Apache</application> 2.2 zu starten, + fügen Sie hingegen folgende Zeile ein:</para> + + <programlisting>apache22_enable="YES"</programlisting> + + <para>Wenn Sie während des Systemstarts weitere Parameter an + den + <application>Apache</application>-<command>httpd</command>-Daemon + übergeben wollen, können Sie diese durch eine + zusätzliche Zeile in <filename>rc.conf</filename> + angeben:</para> + + <programlisting>apache_flags=""</programlisting> + + <para>Nachdem der Webserver gestartet ist, können Sie sich + Ihre Internetseite ansehen, indem Sie in Ihren Browser die + Adresse <literal>http://localhost/</literal> eingeben. Die + vordefinierte Standardstartseite ist + <filename>/usr/local/www/data/index.html</filename>.</para> + + </sect2> + + <sect2> + <title>Virtual Hosting</title> + + <para>Der <application>Apache</application> unterstützt zwei + Formen des <foreignphrase>Virtual Hostings</foreignphrase>. Die + erste Möglichkeit bezeichnet man als namenbasiertes + virtuelles Hosting. Dabei wird der HTTP/1.1-Header der Clients + dazu verwendet, den Rechnernamen zu bestimmen. Dadurch wird es + möglich, mehrere Domains unter der gleichen IP-Adresse zu + betreiben.</para> + + <para>Damit der <application>Apache</application> namenbasierte + virtuelle Domains verwalten kann, fügen Sie die folgende + Zeile in <filename>httpd.conf</filename> ein:</para> + + <programlisting>NameVirtualHost *</programlisting> + + <para>Wenn Ihr Webserver + <hostid role="fqdn">www.domain.tld</hostid> heißt und Sie die + virtuelle Domain + <hostid role="fqdn">www.someotherdomain.tld</hostid> einrichten + wollen, ergänzen Sie <filename>httpd.conf</filename> um + folgende Einträge:</para> + + <screen><VirtualHost *> +ServerName www.domain.tld +DocumentRoot /www/domain.tld +</VirtualHost> + +<VirtualHost *> +ServerName www.someotherdomain.tld +DocumentRoot /www/someotherdomain.tld +</VirtualHost></screen> + + <para>Ersetzen Sie dabei die Adressen sowie den Pfad zu den + Dokumenten durch Ihre eigenen Einstellungen.</para> + + <para>Ausführliche Informationen zum Einrichten von + virtuellen Domains finden Sie in der offiziellen + <application>Apache</application>-Dokumentation unter + <ulink + url="http://httpd.apache.org/docs/vhosts/"></ulink>.</para> + + </sect2> + + <sect2> + <title>Häufig verwendete Apache-Module</title> + + <indexterm><primary>Apache</primary> + <secondary>Module</secondary></indexterm> + + <para>Es gibt viele verschiedene + <application>Apache</application>-Module, die den Server + um zusätzliche Funktionen erweitern. Die + FreeBSD-Ports-Sammlung ermöglicht es Ihnen, den + <application>Apache</application> gemeinsam mit einigen der + beliebtesten Zusatzmodule zu installieren.</para> + + <sect3> + <title>mod_ssl</title> + + <indexterm> + <primary>Webserver</primary> + <secondary>Verschlüsselung</secondary> + </indexterm> + + <indexterm> + <primary>SSL</primary> + </indexterm> + + <indexterm> + <primary>Verschlüsselung</primary> + </indexterm> + + <para>Das Modul <application>mod_ssl</application> verwendet die + OpenSSL-Bibliothek, um, unter Nutzung der Protokolle Secure + Sockets Layer (SSL v2/v3) sowie Transport Layer Security + (TLS v1) starke Verschlüsselung zu ermöglichen. + Durch dieses Modul können Sie ein signiertes Zertifikat + von einer Zertifizierungsstelle anfordern, damit Sie einen + sicheren Webserver unter &os; betreiben können.</para> + + <para>Wenn Sie den <application>Apache</application> 1.3.X noch + nicht installiert haben, können Sie über den + Port <filename + role="package">www/apache13-modssl</filename> eine + <application>Apache</application>-Version installieren, in die + <application>mod_ssl</application> als Modul einkompiliert + wurde. Bevorzugen Sie den + <application>Apache</application> 2.X, installieren Sie + stattdessen den Port + <filename role="package">www/apache22</filename>, bei dem die + SSL-Unterstützung bereits in der Voreinstellung aktiviert + ist.</para> + +<!-- XXX add more information about configuring mod_ssl here. --> +<!-- Generating keys, getting the key signed, setting up your secure --> +<!-- web server! --> + </sect3> + + <sect3> + <title>Skriptsprachen</title> + + <para>Für die wichtigsten Skriptsprachen existieren Module, + die es erlauben, <application>Apache</application>-Module + nahezu vollständig in einer Skriptsprache zu programmieren. + Derartige Module dienen oft dazu, einen Sprach-Interpreter in + den Webserver einzubetten. Dadurch wird ein zusätzlicher + externer Interpreter überflüssig, was die Startzeit + von dynamischen Internetseiten deutlich verringert.</para> + </sect3> + </sect2> + + <sect2> + <title>Dynamische Webseiten</title> + + <indexterm><primary>Webserver</primary> + <secondary>dynamisch</secondary></indexterm> + + <para>In den vergangenen Jahren haben immer mehr Unternehmen + das Internet als Mittel für die Steigerung ihrer + Einnahmen sowie für die Erhöhung ihrer Reichweite + entdeckt. Dadurch stieg auch die Nachfrage nach interaktiven + Internetinhalten. Neben einigen Unternehmen, darunter + µsoft;, die dafür proprietäre Produkte + entwickelt haben, hat auch die Open Source Community auf + diesen Umstand reagiert und unter anderem mit Django, + Ruby on Rails, <application>mod_perl</application>, und + <application>mod_php</application> Möglichkeiten zur + Generierung dynamischer Internetseiten geschaffen.</para> + + <sect3> + <title>Django</title> + + <indexterm><primary>Python</primary></indexterm> + <indexterm><primary>Django</primary></indexterm> + + <para>Bei <foreignphrase>Django</foreignphrase> handelt es + sich um ein unter der BSD-Lizenz verfügbares + Framework zur schnellen Erstellung von mächtigen + Internet-Applikationen. Es beinhaltet einen + objekt-relationalen Mapper (wodurch Datentypen als + Phyton-Objekte entwickelt werden können) sowie eine + API für den dynamischen Datenbankzugriff auf diese + Objekte, ohne dass Entwickler jemals SQL-Code schreiben + müssen. Zusätzlich existiert ein umfangreiches + Template-System, wodurch die Programmlogik von der + HTML-Präsentation getrennt werden kann.</para> + + <para>Django setzt das Modul + <application>mod_python</application>, + den <application>Apache</application>-Webserver sowie eine + SQL-Datenbank voraus. Für FreeBSD gibt es einen Port, + der alle Abhängigkeiten mit sinnvollen Optionen + konfiguriert und installiert.</para> + + <example id="network-www-django-install"> + <title>Django mit Apache2, mod_python3, und PostgreSQL + installieren</title> + + <screen>&prompt.root; <userinput>cd /usr/ports/www/py-django; make all install clean -DWITH_MOD_PYTHON3 -DWITH_POSTGRESQL</userinput></screen> + </example> + + <para>Nachdem Django (sowie die abhängigen Pakete) + installiert ist, müssen Sie ein Projektverzeichnis + erstellen. Danach konfigurieren Sie Apache so, dass + der eingebettete Python-Interpreter spezifische URLs + Ihrer Seiten aufruft.</para> + + <example id="network-www-django-apache-config"> + <title>Apache-Konfiguration für Django/mod_python</title> + + <para>Sie müssen die Apache-Konfigurationsdatei + <filename>httpd.conf</filename> anpassen, damit Apache + Anfragen für bestimmte URLs an Ihre + Internet-Applikation übergibt:</para> + + <screen><Location "/"> + SetHandler python-program + PythonPath "['/dir/to/your/django/packages/'] + sys.path" + PythonHandler django.core.handlers.modpython + SetEnv DJANGO_SETTINGS_MODULE mysite.settings + PythonAutoReload On + PythonDebug On +</Location></screen> + </example> + </sect3> + + <sect3> + <title>Ruby on Rails</title> + + <indexterm><primary>Ruby on Rails</primary></indexterm> + + <para>Bei <foreignphrase>Ruby on Rails</foreignphrase> handelt + es sich um ein weiteres, als Open Source verfügbares + Webframework. Es bietet einen kompletten Entwicklungsstack + und erlaubt es Webentwicklern, umfangreiche und mächtige + Applikationen in kurzer Zeit zu programmieren. Das + Framework kann über die Ports-Sammlung installiert + werden.</para> + + <screen>&prompt.root; <userinput>cd /usr/ports/www/rubygem-rails; make all install clean</userinput></screen> + </sect3> + + <sect3> + <title>mod_perl</title> + + <indexterm> + <primary>mod_perl</primary> + <secondary>Perl</secondary> + </indexterm> + + <para>Die Kombination <application>Apache</application>/Perl + vereinigt die Vorteile der Programmiersprache Perl und des + <application>Apache</application> HTTP-Servers. Durch + das Modul <application>mod_perl</application> ist es + möglich, vollständig in Perl geschriebene + <application>Apache</application>-Module zu erzeugen. + Da der Perl-Interpreter in den Server eingebettet wird, + müssen Sie weder einen externen Interpreter noch + Perl zusätzlich aufrufen.</para> + + <para><application>mod_perl</application> ist in verschiedenen + Versionen erhältlich. Bevor Sie + <application>mod_perl</application> einsetzen,denken Sie + bitte daran, dass <application>mod_perl</application> 1.0 + nur mit <application>Apache</application> 1.3 und + <application>mod_perl</application> 2.0 nur mit + <application>Apache</application> 2.X zusammenarbeitet. + <application>mod_perl</application> 1.0 kann über + den Port <filename role="package">www/mod_perl</filename>, + eine statisch kompilierte Version hingegen über den + Port <filename role="package">www/apache13-modperl</filename> + installiert werden. Für die Installation von + <application>mod_perl</application> 2.0 schließlich + verwenden Sie den Port <filename + role="package">www/mod_perl2</filename>.</para> + </sect3> + + <sect3> + <sect3info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>Geschrieben von </contrib> + </author> + </authorgroup> + </sect3info> + + <title>mod_php</title> + + <indexterm> + <primary>mod_php</primary> + <secondary>PHP</secondary> + </indexterm> + + <para>Bei PHP, dem <quote>Hypertext Preprocessor</quote>, + handelt es sich um eine vielseitig verwendbare Skriptsprache, + die besonders für die Internetprogrammierung geeignet + ist. PHP kann in <acronym>HTML</acronym> eingebettet werden + und ähnelt von der Syntax her Sprachen wie C, &java; und + Perl. Das Hauptanliegen von PHP ist es, Internetprogrammierern + die rasche Erstellung von dynamisch erzeugten Internetseiten zu + ermöglichen.</para> + + <para>Damit Ihr System <acronym>PHP</acronym>5 unterstützt, + müssen Sie als Erstes den <application>Apache</application> + Webserver über den Port + <filename role="package">lang/php5</filename> + installieren.</para> + + <para>Wenn Sie den Port <filename role="package">lang/php5</filename> + das erste Mal installieren, werden die verfügbaren Optionen + (<literal>OPTIONS</literal>) automatisch angezeigt. Erscheint das + Konfigurationsmenü bei Ihnen nicht, so liegt dies daran, + dass Sie den Port <filename role="package">lang/php5</filename> + schon einmal auf Ihrem System installiert hatten. Es ist aber + jederzeit möglich, dieses Menü aus dem + Ports-Verzeichnis heraus über folgenden Befehl erneut + aufzurufen:</para> + + <screen>&prompt.root; <userinput>make config</userinput></screen> + + <para>In diesem Konfigurationsmenü müssen Sie die + Option <literal>APACHE</literal> auswählen, damit + <application>mod_php5</application> als ein vom + <application>Apache</application>-Webserver ladbares Modul + gebaut wird.</para> + + <note> + <para>Viele Seiten verwenden nach wie vor (beispielsweise wegen + der benötigten Kompatibilität zu bereits + vorhandenen Web-Applikationen) <acronym>PHP</acronym>4. + Ist dies bei Ihnen der Fall, so müssen Sie statt + <application>mod_php5</application> + <application>mod_php4</application> über den Port + <filename role="package">lang/php4</filename> installieren. + Der Port <filename role="package">lang/php4</filename> + unterstützt viele der Konfigurations- und + Laufzeitoptionen von <filename + role="package">lang/php5</filename>.</para> + </note> + + <para>Dieser Port installiert und konfiguriert die Module, die + für die Unterstützung von dynamischen + <acronym>PHP</acronym>-Anwendungen benötigt werden. + Stellen Sie danach sicher, dass Ihre + <filename>/usr/local/etc/apache/httpd.conf</filename> die + folgenden Abschnitte enthält:</para> + + <programlisting>LoadModule php5_module libexec/apache/libphp5.so</programlisting> + + <programlisting>AddModule mod_php5.c + <IfModule mod_php5.c> + DirectoryIndex index.php index.html + </IfModule> + <IfModule mod_php5.c> + AddType application/x-httpd-php .php + AddType application/x-httpd-php-source .phps + </IfModule></programlisting> + + <para>Nachdem dies erledigt ist, rufen Sie + <command>apachectl</command> auf, um das + <acronym>PHP</acronym>-Modul zu laden:</para> + + <screen>&prompt.root; <userinput>apachectl graceful</userinput></screen> + + <para>Bei künftigen Upgrades von <acronym>PHP</acronym> + wird <command>make config</command> nicht mehr benötigt, + da die von Ihnen ursprünglich ausgewählten + Optionen (<literal>OPTIONS</literal>) vom + &os;-Ports-Framework automatisch gespeichert werden.</para> + + <para>Die <acronym>PHP</acronym>-Unterstützung von &os; ist + stark modular aufgebaut, daher verfügt eine + Basisinstallation nur über wenige Funktionen. Eine + Erweiterung um zusätzliche Funktionen ist allerdings sehr + einfach über den Port <filename + role="package">lang/php5-extensions</filename> möglich. + Der Port bietet Ihnen ein Auswahlmenü, über das Sie + verschiedene <acronym>PHP</acronym>-Erweiterungen installieren + können. Alternativ können Sie einzelne Erweiterungen + aber weiterhin direkt über den jeweiligen Port + installieren.</para> + + <para>Um beispielsweise die Unterstützung des + Datenbankservers <application>MySQL</application> in + <acronym>PHP</acronym>5 zu aktivieren, installieren Sie + den Port <filename>databases/php5-mysql</filename>.</para> + + <para>Nachdem Sie eine Erweiterung installiert haben, + müssen Sie den + <application>Apache</application>-Server neu starten, damit + die Erweiterung auch erkannt wird:</para> + + <screen>&prompt.root; <userinput>apachectl graceful</userinput></screen> + + <para>Ab nun wird <application>MySQL</application> von + <application>PHP</application> unterstützt.</para> + </sect3> + </sect2> + </sect1> + + <sect1 id="network-ftp"> + <sect1info> + <authorgroup> + <author> + <firstname>Murray</firstname> + <surname>Stokely</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + </sect1info> + <title>FTP – File Transfer Protocol</title> + + <indexterm><primary>FTP-Server</primary></indexterm> + + <sect2> + <title>Überblick</title> + + <para>Das File Transfer Protocol (FTP) ermöglicht + auf einfache Art und Weise den Dateiaustausch mit einem + <acronym role="File Transfer Protocol">FTP</acronym>-Server. + Der + <acronym role="File Transfer Protocol">FTP</acronym>-Server + <application>ftpd</application> ist bei &os; bereits im + Basisystem enthalten. Daher sind Konfiguration und Betrieb + eines + <acronym role="File Transfer Protocol">FTP</acronym>-Servers + unter FreeBSD relativ einfach.</para> + </sect2> + + <sect2> + <title>Konfiguration</title> + + <para>Der wichtigste Punkt ist hier die Entscheidung darüber, + welche Benutzer auf Ihren FTP-Server zugreifen dürfen. + Ein FreeBSD-System verfügt über diverse + Systembenutzerkonten, um einzelnen Daemonen den Zugriff auf + das System zu ermöglichen. Anonyme Benutzer sollten sich + allerdings nicht über diese Benutzerkonten anmelden + dürfen. Die Datei <filename>/etc/ftpusers</filename> + enthält alle Benutzer, die vom FTP-Zugriff ausgeschlossen + sind. In der Voreinstellung gilt dies auch die gerade + erwähnten Systembenutzerkonten. Sie können über + diese Datei weitere Benutzer vom FTP-Zugriff + ausschließen.</para> + + <para>Sie können den Zugriff für einige Benutzer + einschränken, ohne FTP komplett zu verbieten. Dazu + passen Sie <filename>/etc/ftpchroot</filename> entsprechend an. + Diese Datei enthält Benutzer und Gruppen sowie die für + sie geltenden FTP-Einschränkungen und wird in + &man.ftpchroot.5; ausführlich beschrieben.</para> + + <indexterm> + <primary>FTP</primary> + <secondary>anonymous</secondary> + </indexterm> + + <para>Wenn Sie einen anonymen FTP-Zugriff auf Ihren Server + ermöglichen wollen, müssen Sie den Benutzer + <username>ftp</username> auf Ihrem &os;-System anlegen. + Danach können sich Benutzer mit dem Benutzernamen + <username>ftp</username> oder <username>anonymous</username> + auf Ihrem FTP-Server anmelden. Das Passwort ist dabei + beliebig (allerdings wird dazu in der Regel eine E-Mail-Adresse + verwendet). Meldet sich ein anonymer Benutzer an, aktiviert + der FTP-Server &man.chroot.2;, um den Zugriff auf das + Heimatverzeichnis des Benutzers <username>ftp</username> + zu beschränken.</para> + + <para>Es gibt zwei Textdateien, deren Inhalt Sie bei der Anmeldung + an Ihrem FTP-Server anzeigen lassen können. Der Inhalt von + <filename>/etc/ftpwelcome</filename> wird angezeigt, bevor der + Login-Prompt erscheint. Nach einer erfolgreichen Anmeldung wird + der Inhalt von <filename>/etc/ftpmotd</filename> angezeigt. + Beachten Sie aber, dass es dabei um einen Pfad relativ zur + Umgebung des anzumeldenden Benutzers handelt. Bei einer + anonymen Anmeldung würde also die Datei + <filename>~ftp/etc/ftpmotd</filename> angezeigt.</para> + + <para>Nachdem Sie den FTP-Server konfiguriert haben, müssen + Sie Ihn in <filename>/etc/inetd.conf</filename> aktivieren. + Dazu müssen Sie lediglich das Kommentarsymbol + <quote>#</quote> am Beginn der bereits vorhandenen + <application>ftpd</application>-Zeile entfernen:</para> + + <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting> + + <para>Nachdem Sie diese Änderung durchgeführt haben, + müssen Sie, wie in <xref linkend="network-inetd-reread"/> + beschrieben, die <application>inetd</application>-Konfiguration + neu einlesen. Lesen Sie bitte Abschnitt <xref + linkend="network-inetd-settings"/> des Handbuchs für weitere + Informationen zur Aktivierung von + <application>inetd</application> auf Ihren System.</para> + + <para>Alternativ können Sie auch nur den + <application>ftpd</application>-Server starten. In diesem Fall + ist es ausreichend, die entsprechende Variable in der Datei + <filename>/etc/rc.conf</filename> zu setzen:</para> + + <programlisting>ftpd_enable="YES"</programlisting> + + <para>Nachdem Sie diese Variable gesetzt haben, wird künftig + beim Systemstart nur der FTP-Server gestartet. Alternativ + können Sie den Server auch manuell starten, indem Sie als + Benutzer <username>root</username> den folgenden Befehl + ausführen:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/ftpd start</userinput></screen> + + <para>Danach können Sie sich auf Ihrem FTP-Server anmelden:</para> + + <screen>&prompt.user; <userinput>ftp localhost</userinput></screen> + + </sect2> + + <sect2> + <title>Wartung</title> + + <indexterm><primary>syslog</primary></indexterm> + + <indexterm> + <primary>Logdateien</primary> + <secondary>FTP</secondary> + </indexterm> + + <para>Der <application>ftpd</application>-Daemon verwendet + &man.syslog.3;, um Protokolldateien zu erstellen. In der + Voreinstellung werden alle FTP betreffenden Nachrichten + in die Datei <filename>/var/log/xferlog</filename> + geschrieben. Dies lässt sich aber durch das Einfügen + der folgenden Zeile in <filename>/etc/syslog.conf</filename> + ändern:</para> + + <programlisting>ftp.info /var/log/xferlog</programlisting> + + <indexterm> + <primary>FTP</primary> + <secondary>anonymous</secondary> + </indexterm> + + <para>Beachten Sie, dass mit dem Betrieb eines anonymen + FTP-Servers verschiedene Sicherheitsrisiken verbunden sind. + Problematisch ist hier vor allem die Erlaubnis zum anonymen + Upload von Dateien. Dadurch könnte Ihr Server zur + Verbreitung von illegaler oder nicht lizensierter Software + oder noch Schlimmeren missbraucht werden. Wollen Sie + anonyme Uploads dennoch erlauben, sollten Sie die + Zugriffsrechte so setzen, dass solche Dateien erst nach Ihrer + Zustimmung von anderen Benutzern heruntergeladen werden + können.</para> + + </sect2> + </sect1> + + <sect1 id="network-samba"> + <sect1info> + <authorgroup> + <author> + <firstname>Murray</firstname> + <surname>Stokely</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + </sect1info> + + <title>Mit Samba einen Datei- und Druckserver für + µsoft.windows;-Clients einrichten</title> + + <indexterm><primary>Samba-Server</primary></indexterm> + <indexterm><primary>Microsoft Windows</primary></indexterm> + <indexterm> + <primary>Dateiserver</primary> + <secondary>Windows-Clients</secondary> + </indexterm> + <indexterm> + <primary>Druckserver</primary> + <secondary>Windows-Clients</secondary> + </indexterm> + + <sect2> + <title>Überblick</title> + + <para><application>Samba</application> ist ein beliebtes + Open Source-Softwarepaket, das es Ihnen ermöglicht, + einen Datei- und Druckserver für + µsoft.windows;-Clients einzurichten. Clients können + sich dadurch mit einem FreeBSD-System verbinden und dessen + Speicherplatz oder dessen Drucker verwenden. Dies genauso, als + wenn es sich um lokale Drucker oder Festplatten handeln + würde.</para> + + <para><application>Samba</application> sollte als Softwarepaket + auf Ihren Installationsmedien vorhanden sein. Wenn Sie + <application>Samba</application> noch nicht installiert haben, + können Sie dies jederzeit über den Port oder das + Paket <filename role="package">net/samba34</filename> + nachholen.</para> + +<!-- mention LDAP, Active Directory, WinBIND, ACL, Quotas, PAM, .. --> + + </sect2> + + <sect2> + <title>Konfiguration</title> + + <para>Die Standardkonfigurationsdatei von + <application>Samba</application> heißt + <filename>/usr/local/share/examples/samba34/smb.conf.default</filename>. + Diese Datei muss nach <filename>/usr/local/etc/smb.conf</filename> + kopiert und angepasst werden, bevor + <application>Samba</application> verwendet werden kann.</para> + + <para>Die Datei <filename>smb.conf</filename> enthält + Laufzeitinformationen für + <application>Samba</application>, beispielsweise + Druckerdefinitionen oder + <foreignphrase>filesystem shares</foreignphrase>, also Bereiche + des Dateisystems, die Sie mit &windows;-Clients teilen wollen. + Die Konfiguration der Datei <filename>smb.conf</filename> + erfolgt webbasiert über das im + <application>Samba</application>-Paket enthaltene Programm + <application>swat</application>.</para> + + <sect3> + <title>Das Samba Web Administration Tool (SWAT) verwenden</title> + + <para>Das + <foreignphrase>Samba Web Administration Tool</foreignphrase> + (SWAT) wird als Daemon von <application>inetd</application> + aktiviert. Daher müssen Sie den Kommentar vor der + folgenden Zeile in <filename>/etc/inetd.conf</filename> + entfernen, bevor Sie <application>swat</application> zur + Konfiguration von <application>Samba</application> verwenden + können:</para> + + <programlisting>swat stream tcp nowait/400 root /usr/local/sbin/swat swat</programlisting> + + <para>Wie bereits in <xref linkend="network-inetd-reread"/> + beschrieben, müssen Sie die + <application>inetd</application>-Konfiguration neu einlesen, + nachdem Sie diese Änderung durchgeführt haben.</para> + + <para>Nachdem <application>swat</application> in der Datei + <filename>inetd.conf</filename> aktiviert wurde, rufen Sie + in Ihrem Internetbrowser die Adresse + <ulink url="http://localhost:901"></ulink> auf und melden sich + mit dem <username>root</username>-Benutzerkonto an.</para> + +<!-- XXX screenshots go here, loader is creating them --> + + <para>Nachdem Sie sich erfolgreich angemeldet haben, wird die + Hauptkonfigurationseite von <application>Samba</application> + geladen. Sie können nun die Dokumentation lesen, oder + durch einen Klick auf die + <guimenu>Globals</guimenu>-Karteikarte mit der Konfiguration + beginnen. Die Einstellungen, die Sie hier vornehmen + können, entsprechen denen des Abschnitts + <literal>[global]</literal> von + <filename>/usr/local/etc/smb.conf</filename>.</para> + </sect3> + + <sect3> + <title>Globale Einstellungen</title> + + <para>Unabhängig davon, ob Sie + <application>swat</application> verwenden, oder + <filename>/usr/local/etc/smb.conf</filename> direkt + editieren, sollten Sie zuerst folgende Einstellungen + anpassen:</para> + + <variablelist> + <varlistentry> + <term><literal>workgroup</literal></term> + + <listitem> + <para>Der NT-Domänenname oder der Arbeitsgruppenname der + Rechner, die auf den Server Zugriff haben sollen.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>netbios name</literal></term> + + <listitem> + <indexterm><primary>NetBIOS</primary></indexterm> + + <para>Legt den NetBIOS-Namen fest, unter dem der + <application>Samba</application>-Server bekannt ist. + In der Regel handelt es sich dabei um den ersten + Teil des DNS-Namens des Servers.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>server string</literal></term> + + <listitem> + <para>Legt die Beschreibung fest, die angezeigt werden + soll, wenn mit <command>net view</command> oder + über andere Netzwerkprogramme Informationen + über den Server angefordert werden.</para> + </listitem> + </varlistentry> + </variablelist> + </sect3> + + <sect3> + <title>Samba absichern</title> + + <para>Zwei der wichtigsten Einstellungen in + <filename>/usr/local/etc/smb.conf</filename> betreffen + das zu verwendende Sicherheitsmodell sowie das + Backend-Passwortformat für die Benutzer der + Samba-Clients. Folgende Optionen sind dafür + verantwortlich:</para> + + <variablelist> + <varlistentry> + <term><literal>security</literal></term> + + <listitem> + <para>Die häufigsten Optionen sind + <literal>security = share</literal> und + <literal>security = user</literal>. Wenn Ihre Clients + Benutzernamen verwenden, die den Benutzernamen auf Ihrem + &os;-Rechner entsprechen, dann sollten Sie die + Einstellung <foreignphrase>user level</foreignphrase> + verwenden. Dies ist auch die Standardeinstellung. + Allerdings ist es dazu erforderlich, dass sich die + Clients auf Ihrem Rechner anmelden, bevor sie auf + gemeinsame Ressourcen zugreifen können.</para> + + <para>In der Einstellung + <foreignphrase>share level</foreignphrase> müssen + sich Clients nicht unter Verwendung eines gültigen + Logins auf Ihrem Rechner anmelden, bevor sie auf + gemeinsame Ressourcen zugreifen können. In + früheren <application>Samba</application>-Versionen + war dies die Standardeinstellung.</para> + </listitem> + </varlistentry> + + <varlistentry> + <term><literal>passdb backend</literal></term> + + <listitem> + <indexterm><primary>NIS+</primary></indexterm> + <indexterm><primary>LDAP</primary></indexterm> + <indexterm><primary>SQL database</primary></indexterm> + + <para><application>Samba</application> erlaubt + verschiedene Backend-Authentifizierungsmodelle. Sie + können Clients durch LDAP, NIS+, eine SQL-Datenbank + oder eine Passwortdatei authentifizieren. In der + Voreinstellung wird <literal>smbpasswd</literal> + verwendet. Diese Methode wird im folgenden Abschnitt + näher beschrieben.</para> + </listitem> + </varlistentry> + </variablelist> + + <para>Wenn Sie <literal>smbpasswd</literal> verwenden, müssen + Sie die Datei <filename>/usr/local/etc/samba/smbpasswd</filename> + erzeugen, damit <application>Samba</application> in der Lage + ist, Clients zu authentifizieren. Wenn Sie auf Ihrem + &unix;-Rechner vorhandenen Benutzern den Zugriff von einem + &windows;-Client aus ermöglichen wollen, verwenden Sie den + folgenden Befehl:</para> + + <screen>&prompt.root; <userinput>smbpasswd -a username</userinput></screen> + + <note> + <para>Als Backend wird inzwischen <literal>tdbsam</literal> + empfohlen. Mit dem folgenden Befehl legen Sie neue + Benutzerkonten an:</para> + + <screen>&prompt.root; <userinput><command>pdbedit <option>-a</option> <option>-u</option> <replaceable>username</replaceable></command></userinput></screen> + </note> + + <para>Ausführliche Informationen zur Konfiguration + von <application>Samba</application> finden Sie im <ulink + url="http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/"> + Official Samba HOWTO</ulink>. Sie sollten aber bereits + nach dem Lesen dieses Abschnitts in der Lage sein, + <application>Samba</application> zu starten.</para> + </sect3> + </sect2> + + <sect2> + <title><application>Samba</application> starten</title> + + <para>Der Port <filename role="package">net/samba34</filename> + legt ein neues Startskript an, mit dem + <application>Samba</application> gesteuert (also etwa + gestartet oder beendet) werden kann. Um dieses Skript + zu aktivieren, fügen Sie folgende Zeile in + <filename>/etc/rc.conf</filename> ein:</para> + + <programlisting>samba_enable="YES"</programlisting> + + <para>Alternativ können Sie auch die folgenden + beiden Einträge verwenden:</para> + + <programlisting>nmbd_enable="YES"</programlisting> + <programlisting>smbd_enable="YES"</programlisting> + + <note> + <para>Durch diese Einträge wird + <application>Samba</application> beim Systemstart + automatisch aktiviert.</para> + </note> + + <para>Danach können Sie <application>Samba</application> + jederzeit durch folgenden Befehl starten:</para> + + <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/samba start</userinput> +Starting SAMBA: removing stale tdbs : +Starting nmbd. +Starting smbd.</screen> + + <para>Weitere Informationen zu den rc-Startskripten finden + Sie im <xref linkend="configtuning-rcd"/> des Handbuchs.</para> + + <para><application>Samba</application> verwendet drei Daemonen. + Beachten Sie, dass sowohl <application>nmbd</application> als + auch <application>smbd</application> durch das Skript + <filename>samba</filename> gestartet werden. Wenn Sie die + <foreignphrase>winbind name resolution services</foreignphrase> + in <filename>smb.conf</filename> aktiviert haben, wird + zusätzlich der <application>winbindd</application>-Daemon + gestartet.</para> + + <para>Sie können <application>Samba</application> jederzeit + durch den folgenden Befehl beenden:</para> + + <screen>&prompt.root; <userinput>/usr/local/etc/rc.d/samba stop</userinput></screen> + + <para><application>Samba</application> ist ein komplexes + Softwarepaket mit umfassenden Funktionen, die eine weitreichende + Integration von µsoft.windows;-Netzwerken ermöglichen. + Für eine Beschreibung dieser Zusatzfunktionen sollten Sie + sich auf <ulink url="http://www.samba.org"></ulink> umsehen.</para> + </sect2> + </sect1> + + <sect1 id="network-ntp"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Hukins</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + </sect1info> + + <title>Die Uhrzeit mit NTP synchronisieren</title> + + <indexterm><primary>NTP</primary></indexterm> + + <sect2> + <title>Überblick</title> + + <para>Da die interne Uhrzeit eines Computers nie ganz exakt ist, + wurde mit NTP + (<foreignphrase>Network Time Protocol</foreignphrase>) eine + Möglichkeit geschaffen, die exakte Uhrzeit zu ermitteln + und festzulegen.</para> + + <para>Viele Internetdienste sind von einer exakten Uhrzeit + abhängig. Ein Webserver könnte beispielsweise die + Anforderung erhalten, eine Datei zu versenden, wenn sich diese + in einer bestimmten Zeitspanne geändert hat. In einem + lokalen Netzwerk ist es unbedingt notwendig, dass Rechner, die + Dateien von einem gemeinsamen Dateiserver beziehen, ihre + Uhrzeit synchronisieren, damit die Zeitstempel der Dateien + konstistent bleiben. Dienste wie &man.cron.8; führen + Befehle zu einem bestimmten Zeitpunkt aus. Ist die Uhrzeit + nicht korrekt, kann dies zu Problemen führen.</para> + + <indexterm> + <primary>NTP</primary> + <secondary>ntpd</secondary> + </indexterm> + + <para>&os; verwendet den &man.ntpd.8;- + <acronym role="Network Time Protocol">NTP</acronym>-Server, + um die genaue Uhrzeit von anderen + <acronym role="Network Time Protocol">NTP</acronym>-Servern + abzufragen, die eigene Systemzeit zu setzen, oder um diese + anderen Rechnern anzubieten.</para> + </sect2> + + <sect2> + <title>Einen passenden NTP-Server auswählen</title> + + <indexterm> + <primary>NTP</primary> + <secondary>Serverwahl</secondary> + </indexterm> + + <para>Um die Uhrzeit zu synchronisieren, müssen Sie sich mit + einem + <acronym role="Network Time Protocol">NTP</acronym>-Server + verbinden. Ihr Netzwerkadministrator oder Ihr Internetprovider + haben vielleicht schon einen NTP-Server eingerichtet. Lesen Sie + deren Dokumentation, um dies zu überprüfen. Es gibt + im Internet eine + <ulink url="http://support.ntp.org/bin/view/Servers/WebHome"> + Liste mit frei zugänglichen NTP-Servern</ulink>, aus der + Sie sich einen in Ihrer Nähe gelegenen Server + auswählen können. Beachten Sie aber auf jeden Fall + die Nutzungsbedingungen des entsprechenden Servers, und fragen + Sie um Erlaubnis, wenn dies nötig ist.</para> + + <para>Die Auswahl von mehreren NTP-Servern kann sinnvoll sein, + wenn ein Server ausfällt oder falsche Zeiten liefert. + &man.ntpd.8; verwendet die Antworten anderer Server, um + zuverlässige Server zu bestimmen, die dann bevorzugt + abgefragt werden.</para> + </sect2> + + <sect2> + <title>NTP unter &os; einrichten</title> + + <indexterm> + <primary>NTP</primary> + <secondary>Konfiguration</secondary> + </indexterm> + + <sect3> + <title>NTP aktivieren</title> + + <indexterm><primary>ntpdate</primary></indexterm> + + <para>Wenn Sie Ihre Uhrzeit nur beim Systemstart + synchronisieren wollen, können Sie &man.ntpdate.8; + verwenden. Für Desktoprechner, die regelmäßig + neu gestartet werden und keine ständige Synchronisation + benötigen, ist dies akzeptabel. In allen anderen + Fällen sollten Sie jedoch &man.ntpd.8; verwenden.</para> + + <para>Die Ausführung von &man.ntpdate.8; während des + Systemstarts ist aber auch für Rechner, die &man.ntpd.8; + verwenden, sinnvoll. &man.ntpd.8; passt die Systemzeit nur + bei größeren Abweichungen an, während + &man.ntpdate.8; die Zeit immer synchronisiert, egal wie + groß die Differenz zwischen Systemzeit und korrekter + Zeit ist.</para> + + <para>Um &man.ntpdate.8; beim Systemstart zu aktivieren, + fügen Sie den Eintrag + <literal>ntpdate_enable="YES"</literal> in + <filename>/etc/rc.conf</filename> ein. Außerdem müssen + Sie alle Server, mit denen Sie sich synchronisieren wollen, + sowie alle an &man.ntpdate.8; zu übergebenden Optionen + in den <varname>ntpdate_flags</varname> angeben.</para> + </sect3> + + <sect3> + <title>NTP einrichten</title> + + <indexterm> + <primary>NTP</primary> + <secondary>ntp.conf</secondary> + </indexterm> + + <para>Die Konfiguration von NTP erfolgt über die Datei + <filename>/etc/ntp.conf</filename>, und wird in der + Hilfeseite &man.ntp.conf.5; beschrieben. Dazu ein + einfaches Beispiel:</para> + + <programlisting>server ntplocal.example.com prefer +server timeserver.example.org +server ntp2a.example.net + +driftfile /var/db/ntp.drift</programlisting> + + <para>Die Option <literal>server</literal> legt die zu + verwendenden Server fest, wobei jeder Server in einer eigenen + Zeile steht. Wenn ein Server mit der Option + <literal>prefer</literal> versehen ist, wie dies hier bei + <hostid role="fqdn">ntplocal.example.com</hostid> der Fall + ist, wird dieser Server bevorzugt verwendet. Eine Antwort von + einem bevorzugten Server wird nur dann verworfen, wenn sie + signifikant von denen anderer Server abweicht, ansonsten wird + sie ohne Abfrage weiterer Server verwendet. Die Option + <literal>prefer</literal> wird gewöhnlich nur für + sehr zuverlässige und genaue Server verwendet, die + über eine spezielle Hardware zur Zeitüberwachung + verfügen.</para> + + <para>Die Option <literal>driftfile</literal> legt fest, in + welcher Datei die Abweichungen der Systemuhr protokolliert + werden. &man.ntpd.8; verwendet diese Datei, um die Systemzeit + automatisch anzupassen, selbst wenn kurzzeitig kein NTP-Server + zur Synchronisation verfügbar ist.</para> + + <para>Weiterhin legt die Option <literal>driftfile</literal> fest, + wo Informationen über frühere Antworten des von + Ihnen verwendeten NTP-Servers gespeichert werden sollen. + Diese Datei enthält NTP-interne Informationen, sie sollte + daher von anderen Prozessen nicht verändert werden.</para> + </sect3> + + <sect3> + <title>Den Zugang zu Ihrem NTP-Server beschränken</title> + + <para>In der Voreinstellung ist Ihr NTP-Server für alle + Rechner im Internet erreichbar. Über die Option + <literal>restrict</literal> in der Datei + <filename>/etc/ntp.conf</filename> können Sie den + Zugang zu Ihrem Server beschränken.</para> + + <para>Wenn Sie alle Rechner vom Zugriff auf Ihren NTP-Server + ausschließen wollen, fügen Sie folgende Zeile in + <filename>/etc/ntp.conf</filename> ein:</para> + + <programlisting>restrict default ignore</programlisting> + + <note> + <para>Durch diesen Eintrag verhindern Sie den Zugriff Ihres + Servers auf alle auf Ihrem System konfigurierten Server. + Müssen Sie Ihren NTP-Server mit einem externen + NTP-Server synchronisieren, müssen Sie dies daher + dezidiert zulassen. Lesen Sie in diesem Fall die + Manualpage &man.ntp.conf.5;.</para> + </note> + + <para>Wenn Sie nur Rechnern Ihres eigenen Netzwerks die + Synchronisation mit Ihrem NTP-Server erlauben, gleichzeitig + aber verhindern wollen, dass diese den NTP-Server + konfigurieren oder als Server für andere Rechner dienen + können, fügen Sie folgende Zeile ein:</para> + + <programlisting>restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap</programlisting> + + <para>Bei <hostid role="ipaddr">192.168.1.0</hostid> handelt es + sich um einen Rechner Ihres Netzwerks. + <hostid role="netmask">255.255.255.0</hostid> ist die + Netzmaske Ihres Netzwerks.</para> + + <para><filename>/etc/ntp.conf</filename> kann verschiedene + <literal>restrict</literal>-Optionen enthalten. + Weiteres erfahren Sie im Abschnitt + <literal>Access Control Support</literal> der + Hilfeseite &man.ntp.conf.5;.</para> + </sect3> + </sect2> + + <sect2> + <title>Den NTP-Server starten</title> + + <para>Damit der NTP-Server beim Systemstart automatisch gestartet + wird, fügen Sie den Eintrag + <literal>ntpd_enable="YES"</literal> in + <filename>/etc/rc.conf</filename> ein. Wenn Sie weitere + Argumente an &man.ntpd.8; übergeben wollen, passen Sie + die Option <varname>ntpd_flags</varname> in der Datei + <filename>/etc/rc.conf</filename> entsprechend an.</para> + + <para>Um den NTP-Server ohne einen Systemneustart zu starten, + rufen Sie <command>ntpd</command> mit den unter + <varname>ntpd_flags</varname> in + <filename>/etc/rc.conf</filename> festgelegten Parametern auf. + Hierzu ein Beispiel:</para> + + <screen>&prompt.root; <userinput>ntpd -p /var/run/ntpd.pid</userinput></screen> + </sect2> + + <sect2> + <title>ntpd mit einer Einwahlverbindung verwenden</title> + + <para>&man.ntpd.8; benötigt keine ständige + Internetverbindung. Wenn Sie sich ins Internet einwählen, + ist es sinnvoll, zu verhindern, dass NTP-Verkehr eine Verbindung + aufbauen oder aufrechterhalten kann. Wenn Sie user-PPP + verwenden, können Sie dies in den + <literal>filter</literal>-Direktiven von + <filename>/etc/ppp/ppp.conf</filename> festlegen. Sehen Sie + sich dazu das folgende Beispiel ein:</para> + + <programlisting>set filter dial 0 deny udp src eq 123 +# Prevent NTP traffic from initiating dial out +set filter dial 1 permit 0 0 +set filter alive 0 deny udp src eq 123 +# Prevent incoming NTP traffic from keeping the connection open +set filter alive 1 deny udp dst eq 123 +# Prevent outgoing NTP traffic from keeping the connection open +set filter alive 2 permit 0/0 0/0</programlisting> + + <para>Weitere Informationen finden Sie im Abschnitt + <literal>PACKET FILTERING</literal> von &man.ppp.8; sowie in den + Beispielen unter <filename>/usr/share/examples/ppp/</filename>.</para> + + <note><para>Einige Internetprovider blockieren Ports mit niedrigen + Nummern. In solchen Fällen funktioniert NTP leider + nicht, da Antworten eines NTP-Servers Ihren Rechner nicht + erreichen werden.</para></note> + </sect2> + + <sect2> + <title>Weitere Informationen</title> + + <para>Weiterführende Dokumentation (im HTML-Format) + zum NTP-Server finden Sie unter + <filename>/usr/share/doc/ntp/</filename>.</para> + </sect2> + </sect1> + + <sect1 id="network-syslogd"> + <sect1info> + <authorgroup> + <author> + <firstname>Tom</firstname> + <surname>Rhodes</surname> + <contrib>Beigetragen von </contrib> + </author> + </authorgroup> + <authorgroup> + <author> + <firstname>Benedict</firstname> + <surname>Reuschling</surname> + <contrib>Übersetzt von </contrib> + </author> + </authorgroup> + </sect1info> + + <title>Protokollierung von anderen Hosts mittels + <command>syslogd</command></title> + + <para>Die Interaktion mit Systemprotokollen ist ein wichtiger Aspekt, + sowohl was Sicherheit als auch Systemadministration anbelangt. + Überwachen der Protokolldateien von mehreren Hosts kann sehr + unhandlich werden, wenn diese Hosts über mittlere oder grosse + Netze verteilt sind oder wenn sie Teile von unterschiedlichen Netzwerken + sind. In diesen Fällen macht die Konfiguration der Protokollierung + von anderen Hosts diesen Prozess wesentlich komfortabler.</para> + + <para>Die zentralisierte Protokollierung auf einen bestimmten + Protokollierungshost kann manche der administrativen Belastungen der + Protokolldateiadministration reduzieren. Protokolldateiaggregation, + -zusammenführung und -rotation kann an einer zentralen Stelle mit + den &os;-eigenen Werkzeugen wie &man.syslogd.8; und &man.newsyslog.8; + konfiguriert werden. In der folgenden Beispielkonfiguration sammelt + Host <hostid>A</hostid>, genannt <hostid + role="fqdn">logserv.example.com</hostid>, Protokollinformationen für + das lokale Netzwerk. Host <hostid>B</hostid>, genannt + <hostid role="fqdn">logclient.example.com</hostid> wird seine + Protokollinformationen an den Server weiterleiten. In realen + Konfigurationen benötigen beide Hosts passende Vorwärts- und + Umkehr-Einträge im <acronym>DNS</acronym> oder + in <filename>/etc/hosts</filename>. Andernfalls werden die Daten vom + Server abgelehnt.</para> + + <sect2> + <title>Konfiguration des Protokollierungs-Servers</title> + + <para>Protokollierungs-Server sind Maschinen, die konfiguriert sind, + Protokollinformationen von anderen Hosts zu akzeptieren. In den + meisten Fällen wird dies zur Vereinfachung der Konfiguration + eingesetzt, in anderen Fällen ist es einfach nur ein Schritt in + eine bessere Verwaltung. Was auch immer die Gründe sind, ein paar + Anforderungen müssen vorher erfüllt sein.</para> + + <para>Ein richtig konfigurierter Protokollierungs-Server muss minimal die + folgenden Anforderungen erfüllen:</para> + + <itemizedlist> + <listitem> + <para>Das Regelwerk der Firewall muss <acronym>UDP</acronym> auf + Port 514 sowohl auf Client- als auch auf Serverseite + erlauben;</para> + </listitem> + + <listitem> + <para>syslogd wurde so konfiguriert, dass es Nachrichten von anderen + Clientrechnern akzeptiert;</para> + </listitem> + + <listitem> + <para>Der syslogd-Server und alle Clientrechner müssen + gültige Einträge für sowohl Vorwärts- als auch + Umkehr-<acronym>DNS</acronym> besitzen, oder in + <filename>/etc/hosts</filename> korrekt eingetragen sein.</para> + </listitem> + </itemizedlist> + + <para>Um den Protokollierungs-Server zu konfigurieren, muss der Client in + <filename>/etc/syslog.conf</filename> eingetragen sein und der + Verbindungsweg der Protokollierung muss spezifiziert sein:</para> + + <programlisting>+logclient.example.com +*.* /var/log/logclient.log</programlisting> + + <note> + <para>Weitere Informationen zu den verschiedenen unterstützten + und verfügbaren <emphasis>Verbindungswegen</emphasis> finden + sich in der Manualpage &man.syslog.conf.5;.</para> + </note> + + <para>Einmal hinzugefügt, werden alle Nachrichten über + den <literal>Verbindungsweg</literal> in die zuvor angegebene Datei, + <filename>/var/log/logclient.log</filename> protokolliert.</para> + + <para>Der Server benötigt ausserdem die folgenden Zeilen in der + <filename>/etc/rc.conf</filename>:</para> + + <programlisting>syslogd_enable="YES" +syslogd_flags="-a logclient.example.com -v -v"</programlisting> + + <para>Die erste Option aktiviert den <command>syslogd</command>-Dienst + während des Systemstarts und die zweite Option erlaubt es, Daten + von dem spezifizierten Client auf diesem Server zu akzeptieren. Die + Verwendung von <option>-v -v</option> im letzten Teil erhöht die + Anzahl von Protokollnachrichten. Dies ist sehr hilfreich für die + Feineinstellung der Verbindungspfade, da Administratoren auf diese + Weise erkennen, welche Arten von Nachrichten unter welchen + Einstellungen protokolliert werden.</para> + + <para>Mehrere <option>-a</option>-Optionen können angegeben werden, + um die Protokollierung von mehreren Clients zu erlauben. + <acronym>IP</acronym>-Adressen und ganze Netzblöcke können + ebenfalls spezifiziert werden. Lesen Sie dazu die + &man.syslog.3;-Manualpage, um eine vollständige Liste von + möglichen Optionen zu erhalten.</para> + + <para>Zum Schluss muss noch die Protokolldatei erstellt werden. Auf + welche Weise dies geschieht ist nicht wichtig, aber in den meisten + Fällen funktioniert &man.touch.1; grossartig, wie hier + dargestellt:</para> + + <screen>&prompt.root; <userinput>touch <filename>/var/log/logclient.log</filename></userinput></screen> + + <para>Zu diesem Zeitpunkt sollte der <command>syslogd</command>-Dienst + neu gestartet und überprüft werden:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/syslogd restart</userinput> +&prompt.root; <userinput>pgrep syslog</userinput></screen> + + <para>Wenn eine <acronym>PID</acronym> zurückgegeben wird, wurde + der Server erfolgreich neu gestartet und die Clientkonfiguration kann + beginnen. Wenn der Server nicht neu gestartet wurde, suchen Sie im + <filename>/var/log/messages</filename>-Protokoll nach eventuellen + Fehlermeldungen.</para> + </sect2> + + <sect2> + <title>Konfiguration des Protokollierungs-Clients</title> + + <para>Ein Protokollierungs-Client ist eine Maschine, die + Protokollinformationen an einen Protokollierungs-Server sendet, + zusätzlich zu ihren lokalen Kopien.</para> + + <para>Ähnlich wie Protokollierungs-Server müssen Clients auch + ein paar minimale Anforderungen erfüllen:</para> + + <itemizedlist> + <listitem> + <para>&man.syslogd.8; muss so konfiguriert sein, dass es Nachrichten + eines bestimmten Typs an einen Protokollierungs-Server schickt, + welcher diese akzeptieren muss;</para> + </listitem> + + <listitem> + <para>Die Firewall muss <acronym>UDP</acronym>-Pakete durch Port 514 + erlauben;</para> + </listitem> + + <listitem> + <para>Sowohl Vorwärts- als auch Umkehr-<acronym>DNS</acronym> + muss konfiguriert sein oder es müssen passende Einträge in + <filename>/etc/hosts</filename> vorhanden sein.</para> + </listitem> + </itemizedlist> + + <para>Die Clientkonfiguration ist ein bisschen entspannter, verglichen mit + der des Servers. Der Clientrechner muss ebenfalls die folgenden + Einträge in der <filename>/etc/rc.conf</filename> besitzen:</para> + + <programlisting>syslogd_enable="YES" +syslogd_flags="-s -v -v"</programlisting> + + <para>Wie zuvor aktivieren diese Einträge den + <command>syslogd</command>-Dienst während des Systemstarts und + erhöhen die Anzahl der Protokollnachrichten. Die Option + <option>-s</option> verhindert, dass dieser Client Protokolle von anderen + Hosts akzeptiert.</para> + + <para>Verbindungspfade beschreiben den Systemteil, für den eine + Nachricht generiert wird. Beispielsweise sind <acronym>ftp</acronym> und + <acronym>ipfw</acronym> beides Verbindungspfade. Wenn + Protokollnachrichten für diese beiden Dienste generiert werden, + sind diese beiden Werkzeuge normalerweise in jeder Protokollnachricht + enthalten. Verbindungspfade sind mit einer Priorität oder Stufe + verbunden, die dazu verwendet wird, zu markieren, wie wichtig eine + Nachricht im Protokoll ist. Die Häftigste ist + <literal>warning</literal> und <literal>info</literal>. Bitte lesen Sie + die &man.syslog.3; Manualpage, um eine komplette Liste der + verfügbaren Verbindungspfade und Prioritäten zu + erhalten.</para> + + <para>Der Protokollierungs-Server muss in der + <filename>/etc/syslog.conf</filename> des Clients eingetragen sein. In + diesem Beispiel wird das <literal>@</literal>-Symbol benutzt, um + Protokolldaten an einen anderen Server zu senden. Der Eintrag sieht wie + folgt aus:</para> + + <programlisting>*.* @logserv.example.com</programlisting> + + <para>Einmal hinzugefügt, muss <command>syslogd</command> neu + gestartet werden, damit diese Änderungen wirksam werden:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/syslogd restart</userinput></screen> + + <para>Um zu testen, ob Protokollnachrichten über das Netzwerk + gesendet werden, kann &man.logger.1; auf dem Client benutzt werden, um + eine Nachricht an <command>syslogd</command> zu schicken:</para> + + <screen>&prompt.root; <userinput>logger "<replaceable>Test message from logclient</replaceable>"</userinput></screen> + + <para>Diese Nachricht sollte jetzt sowohl in + <filename>/var/log/messages</filename> auf dem Client, als auch in + <filename>/var/log/logclient.log</filename> auf dem Server vorhanden + sein.</para> + </sect2> + + <sect2> + <title>Fehlerbehebung beim Protokollierungs-Server</title> + + <para>In bestimmten Fällen ist die Fehlerbehebung notwendig, wenn + Nachrichten nicht auf dem Protokollierungs-Server empfangen werden. Es + gibt mehrere Gründe dafür, jedoch treten am häufigsten + Probleme bei der Netzwerkverbindung und beim <acronym>DNS</acronym> auf. + Um diese Fälle zu überprüfen, stellen Sie sicher, dass + beide Hosts in der Lage sind, sich gegenseitig über den Hostnamen zu + erreichen, der in <filename>/etc/rc.conf</filename> angegeben ist. Wenn + das funktioniert, ist möglicherweise eine Änderung der + <literal>syslogd_flags</literal>-Option in + <filename>/etc/rc.conf</filename> notwendig.</para> + + <para>Im folgenden Beispiel ist <filename>/var/log/logclient.log</filename> + leer und die <filename>/var/log/messages</filename>-Dateien enthalten + keine Gründe für den Fehler. Um die Fehlerausgabe zu + erhöhen, ändern Sie die <literal>syslogd_flags</literal>-Option + so, dass diese wie in dem folgenden Beispiel aussieht und initiieren Sie + dann einen Neustart:</para> + + <programlisting>syslogd_flags="-d -a logclien.example.com -v -v"</programlisting> + + <screen>&prompt.root; <userinput>/etc/rc.d/syslogd restart</userinput></screen> + + <para>Fehlerausgabedaten ähnlich der Folgenden werden sofort nach dem + Neustart auf dem Bildschirm erscheinen:</para> + + <screen>logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart +syslogd: restarted +logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel +Logging to FILE /var/log/messages +syslogd: kernel boot file is /boot/kernel/kernel +cvthname(192.168.1.10) +validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; +rejected in rule 0 due to name mismatch.</screen> + + <para>Es scheint klar zu sein, dass die Nachrichten aufgrund eines + fehlerhaften Namens abgewiesen werden. Nach genauer Untersuchung der + Konfiguration, kommt ein Tippfehler in der folgenden Zeile der + <filename>/etc/rc.conf</filename> als Fehler in Betracht:</para> + + <programlisting>syslogd_flags="-d -a logclien.example.com -v -v"</programlisting> + + <para>Die Zeile sollte <literal>logclient</literal> und nicht + <literal>logclien</literal> enthalten. Nachdem die entsprechenden + Veränderungen gemacht wurden, ist ein Neustart fällig, mit den + entsprechenden Ergebnissen:</para> + + <screen>&prompt.root; <userinput>/etc/rc.d/syslogd restart</userinput> +logmsg: pri 56, flags 4, from logserv.example.com, msg syslogd: restart +syslogd: restarted +logmsg: pri 6, flags 4, from logserv.example.com, msg syslogd: kernel boot file is /boot/kernel/kernel +syslogd: kernel boot file is /boot/kernel/kernel +logmsg: pri 166, flags 17, from logserv.example.com, +msg Dec 10 20:55:02 <syslog.err> logserv.example.com syslogd: exiting on signal 2 +cvthname(192.168.1.10) +validate: dgram from IP 192.168.1.10, port 514, name logclient.example.com; +accepted in rule 0. +logmsg: pri 15, flags 0, from logclient.example.com, msg Dec 11 02:01:28 trhodes: Test message 2 +Logging to FILE /var/log/logclient.log +Logging to FILE /var/log/messages</screen> + + <para>Zu diesem Zeitpunkt werden die Nachrichten korrekt empfangen und in + die richtige Datei geschrieben.</para> + </sect2> + + <sect2> + <title>Sicherheitsbedenken</title> + + <para>Wie mit jedem Netzwerkdienst, müssen Sicherheitsanforderungen in + Betracht gezogen werden, bevor diese Konfiguration umgesetzt wird. + Manchmal enthalten Protokolldateien sensitive Daten über aktivierte + Dienste auf dem lokalen Rechner, Benutzerkonten und Konfigurationsdaten. + Daten, die vom Client an den Server geschickt werden, sind weder + verschlüsselt noch mit einem Passwort geschützt. Wenn ein + Bedarf für Verschlüsselung besteht, ist es möglich, + <filename role="package">security/stunnel</filename> zu verwenden, + welches die Daten über einen verschlüsselten Tunnel + versendet.</para> + + <para>Lokale Sicherheit ist ebenfalls ein Thema. Protokolldateien sind + während der Verwendung oder nach ihrer Rotation nicht + verschlüsselt. Lokale Benutzer versuchen vielleicht, auf diese + Dateien zuzugreifen, um zusätzliche Einsichten in die + Systemkonfiguration zu erlangen. In diesen Fällen ist es absolut + notwendig, die richtigen Berechtigungen auf diesen Dateien zu setzen. + Das &man.newsyslog.8;-Werkzeug unterstützt das Setzen von + Berechtigungen auf gerade erstellte oder rotierte Protokolldateien. + Protokolldateien mit Zugriffsmodus <literal>600</literal> sollten + verhindern, dass lokale Benutzer darin herumschnüffeln.</para> + </sect2> + </sect1> +</chapter> |