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
oder
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:
Ein Eintrag für den IPv4 verwendenden ftpd(8)-Daemon könnte so aussehen:
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:
Protokoll | Bedeutung |
---|---|
tcp, tcp4 | TCP (IPv4) |
udp, udp4 | UDP (IPv4) |
tcp6 | TCP (IPv6) |
udp6 | UDP (IPv6) |
tcp46 | TCP sowohl unter IPv4 als auch unter IPv6 |
udp46 | UDP sowohl unter IPv4 als auch unter IPv6 |
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:
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).
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.