inetd(8) wird manchmal auch als “Internet Super-Server” bezeichnet, weil er Verbindungen für mehrere Dienste verwaltet. Wenn eine Verbindung eintrifft, bestimmt inetd, 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 inetd-Daemons an Stelle viele einzelner Daemonen kann auf nicht komplett ausgelasteten Servern zu einer Verringerung der Systemlast führen.
inetd wird vor allem dazu verwendet, andere Daemonen zu aktivieren, einige Protokolle werden aber auch direkt verwaltet. Dazu gehören chargen, auth, sowie daytime.
Dieser Abschnitt beschreibt die Konfiguration von inetd durch Kommandozeilenoptionen sowie die Konfigurationsdatei /etc/inetd.conf.
inetd wird durch das rc(8)-System initialisiert. Die Option inetd_enable ist in der Voreinstellung zwar auf NO gesetzt, sie kann aber in Abhängigkeit von der vom Benutzer bei der Installation gewählten Konfiguration von sysinstall aktiviert werden. Die Verwendung von
inetd_enable="YES"
oder
inetd_enable="NO"
in /etc/rc.conf deaktiviert oder startet inetd beim Systemstart. Über den Befehl
# /etc/rc.d/inetd rcvar
können Sie die aktuelle Konfiguration abfragen.
Weitere Optionen können über die Option inetd_flags an inetd übergeben werden.
Wie die meisten anderen Server-Daemonen lässt sich auch inetd über verschiedene Optionen steuern. Die vollständige Syntax für inetd lautet:
inetd [-d] [-l] [-w] [-W] [-c maximum]
[-C rate] [-a address | hostname] [-p filename] [-R rate] [-s maximum] [configuration
file]
Die verschiedenen Optionen können über die Option inetd_flags der Datei /etc/rc.conf an inetd übergeben werden. In der Voreinstellung hat diese Option den Wert -wW -C 60. Durch das Setzen dieser Werte wird das TCP-Wrapping für alle inetd-Dienste aktiviert. Zusätzlich kann eine einzelne IP-Adresse jeden Dienst nur maximal 60 Mal pro Minute anfordern.
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 inetd(8).
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 max-child
-Parameters festgelegt werden.
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 max-connections-per-ip-per-minute
festgelegt werden.
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.
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 max-child-per-ip
angepasst werden.
Die Konfiguration von inetd erfolgt über die Datei /etc/inetd.conf.
Wenn /etc/inetd.conf geändert wird, kann inetd veranlasst werden, seine Konfigurationsdatei neu einzulesen.
Jede Zeile der Konfigurationsdatei beschreibt jeweils einen Daemon. Kommentare beginnen mit einem “#”. Ein Eintrag der Datei /etc/inetd.conf hat folgenden Aufbau:
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
Ein Eintrag für den IPv4 verwendenden ftpd(8)-Daemon könnte so aussehen:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
Der Dienstname eines bestimmten Daemons. Er muss einem in /etc/services aufgelisteten Dienst entsprechen. In dieser Datei wird festgelegt, welchen Port inetd abhören muss. Wenn ein neuer Dienst erzeugt wird, muss er zuerst in die Datei /etc/services eingetragen werden.
Entweder stream, dgram, raw, oder seqpacket. stream muss für verbindungsorientierte TCP-Daemonen verwendet werden, während dgram das UDP-Protokoll verwaltet.
Eines der folgenden:
wait|nowait
gibt an, ob der von inetd aktivierte Daemon seinen eigenen Socket verwalten kann oder
nicht. dgram
-Sockets müssen die Option wait
verwenden, während Daemonen mit Stream-Sockets, die
normalerweise auch aus mehreren Threads bestehen, die Option nowait
verwenden sollten. Die Option wait
gibt in der Regel mehrere Sockets an einen einzelnen Daemon
weiter, während nowait
für jeden neuen Socket einen
Childdaemon erzeugt.
Die maximale Anzahl an Child-Daemonen, die inetd erzeugen
kann, wird durch die Option max-child
festgelegt. Wenn ein
bestimmter Daemon 10 Instanzen benötigt, sollte der Wert /10
hinter die Option nowait
gesetzt werden. Geben Sie hingegen
den Wert /0 an, gibt es keine Beschränkung.
Zusätzlich zu max-child
kann die maximale Anzahl von
Verbindungen eines Rechners mit einem bestimmten Daemon durch zwei weitere Optionen
beschränkt werden. Die Option max-connections-per-ip-per-minute
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 max-child-per-ip
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 Denial of Service
(DoS)-Angriffs auf einen Rechner begrenzen.
Sie müssen hier entweder wait
oder nowait
angeben. Die Angabe von max-child
, max-connections-per-ip-per-minute
und max-child-per-ip
ist hingegen optional.
Ein multithread-Daemon vom Streamtyp ohne die Optionen max-child
, max-connections-per-ip-per-minute
oder max-child-per-ip
sieht so aus: nowait
Der gleiche Daemon mit einer maximal möglichen Anzahl von 10 parallelen Daemonen würde so aussehen: nowait/10
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: nowait/10/20
All diese Optionen werden vom fingerd(8)-Daemon bereits in der Voreinstellung verwendet:
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
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: nowait/100/0/5.
Der Benutzername, unter dem der jeweilige Daemon laufen soll. Meistens laufen Daemonen als User root. Aus Sicherheitsgründen laufen einige Server aber auch als User daemon, oder als am wenigsten privilegierter User nobody.
Der vollständige Pfad des Daemons, der eine Verbindung entgegennimmt. Wird der Daemon
von inetd intern bereitgestellt, sollte die Option internal
verwendet werden.
Dieser Eintrag legt (gemeinsam mit server-program
und
beginnend mit argv[0]), die Argumente fest, die bei der
Aktivierung an den Daemon übergeben werden. Wenn die Anweisung auf der Kommandozeile also
mydaemon -d lautet, wäre mydaemon -d
auch der Wert der Option server program arguments
. Wenn es
sich beim Daemon um einen internen Dienst handelt, sollte wiederum die Option internal
verwendet werden.
Abhängig von der bei der Installation festgelegten Konfiguration werden viele der von inetd verwalteten Dienste automatisch aktiviert! Wenn Sie einen bestimmten Daemon nicht benötigen, sollten Sie ihn deaktivieren! Dazu kommentieren Sie den jeweiligen Daemon in /etc/inetd.conf mit einem “#” aus, um danach die inetd-Konfiguration neu einzulesen. Einige Daemonen, zum Beispiel fingerd, sollten generell deaktiviert werden, da sie zu viele Informationen an einen potentiellen Angreifer liefern.
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
max-connections-per-ip-per-minute
, max-child
sowie max-child-per-ip
zu
beschränken, wenn Sie sehr viele Verbindungsversuche mit Ihrem System registrieren.
TCP-Wrapping ist in der Voreinstellung aktiviert. Lesen Sie hosts_access(5), wenn Sie weitere Informationen zum Setzen von TCP-Beschränkungen für verschiedene von inetd aktivierte Daemonen benötigen.
Bei daytime, time, echo, discard, chargen, und auth handelt es sich um intern von inetd bereitgestellte Dienste.
Der auth-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.
Eine ausführliche Beschreibung finden Sie in inetd(8).
Zurück | Zum Anfang | Weiter |
Netzwerkserver | Nach oben | NFS – Network File System |
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<[email protected]>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <[email protected]>.