Der inetd(8)-Daemon wird manchmal auch als „Internet Super-Server“ bezeichnet, weil er Verbindungen für viele Dienste verwaltet. Anstatt mehrere Anwendungen zu starten, muss nur der inetd-Dienst gestartet werden. Wenn eine Verbindung für einen Dienst eintrifft, der von inetd verwaltet wird, bestimmt inetd, welches Programm für die eingetroffene Verbindung zuständig ist, aktiviert den entsprechenden Prozess und reicht den Socket an ihn weiter. Der Einsatz von inetd 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 intern verwaltet. Dazu gehören chargen, auth, time, echo, discard sowie daytime.
Dieser Abschnitt beschreibt die Konfiguration von inetd.
Die Konfiguration von inetd
erfolgt über /etc/inetd.conf
Jede Zeile
dieser Datei repräsentiert eine Anwendung, die von
inetd gestartet werden kann. In
der Voreinstellung beginnt jede Zeile mit einem Kommentar
(#
), was bedeutet dass
inetd keine Verbindungen für
Anwendungen akzeptiert. Entfernen Sie den Kommentar am Anfang
der Zeile, damit inetd Verbindungen
für diese Anwendung entgegennimmt.
Nachdem Sie die Änderungen gespeichert haben, fügen Sie
folgende Zeile in /etc/rc.conf
ein, damit
inetd bei Booten automatisch
gestartet wird:
inetd_enable="YES"
Starten Sie jetzt inetd, so dass er Verbindungen für die von Ihnen konfigurierten Dienste entgegennimmt:
#
service inetd start
Sobald inetd gestartet ist,
muss der Dienst benachrichtigt werden, wenn eine Änderung in
/etc/inetd.conf
gemacht wird:
Normalerweise müssen Sie lediglich den Kommentar vor der Anwendung entfernen. In einigen Situationen kann es jedoch sinnvoll sein, den Eintrag weiter zu bearbeiten.
Als Beispiel dient hier der Standardeintrag für ftpd(8) über IPv4:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
Die sieben Spalten in diesem Eintrag haben folgende Bedeutung:
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
Der Dienstname eines bestimmten Daemons. Er muss
einem in /etc/services
aufgelisteten
Dienst entsprechen. Hier wird festgelegt, auf
welchen Port inetd
eingehende Verbindungen für diesen Dienst entgegennimmt.
Wenn ein neuer Dienst benutzt wird, muss er zuerst
in /etc/services
eingetragen werden.
Entweder stream
,
dgram
, raw
, oder
seqpacket
. Nutzen Sie
stream
für
TCP-Verbindungen und
dgram
für
UDP-Dienste.
Benutzen Sie eines der folgenden Protokolle:
Protokoll | Bedeutung |
---|---|
tcp oder tcp4 | TCP (IPv4) |
udp oder 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 |
In diesem Feld muss wait
oder
nowait
angegeben werden.
max-child
,
max-connections-per-ip-per-minute
sowie
max-child-per-ip
sind optional.
wait|nowait
gibt an, ob der Dienst
seinen eigenen Socket verwalten kann oder nicht.
dgram
-Sockets müssen
wait
verwenden, während Daemonen mit
stream
-Sockets, die normalerweise auch
aus mehreren Threads bestehen, nowait
verwenden sollten. 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, wird
der Wert /10
hinter die Option
nowait
gesetzt. Der Wert
/0
gibt an, das es keine
Beschränkung gibt.
max-connections-per-ip-per-minute
legt die maximale Anzahl von Verbindungsversuchen pro
Minute fest,
die von einer bestimmten IP-Adresse aus unternommen werden
können. Sobald das Limit erreicht ist, werden weitere
Verbindungen von dieser IP-Adresse
geblockt, bis die Minute vorüber ist. Ein Wert von
/10
würde die maximale Anzahl der
Verindungsversuche einer bestimmten
IP-Adresse auf zehn Versuche in der
Minute beschränken. max-child-per-ip
legt fest, wie viele Child-Daemonen von einer bestimmten
IP-Adresse aus gestartet werden
können. Durch diese Optionen lassen sich
Ressourcenverbrauch sowie die Auswirkungen eines
Denial of Service (DoS)
-Angriffs
begrenzen.
Ein Beispiel finden Sie in den Voreinstellungen für fingerd(8):
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -s
Der Benutzername, unter dem der jeweilige Daemon
laufen soll. Meistens laufen Daemonen als
root
,
daemon
oder
nobody
.
Der vollständige Pfad des Daemons.
Wird der Daemon von inetd
intern bereitgestellt, verwenden Sie
internal
.
Dieser Eintrag legt die Argumente fest, die bei
der Aktivierung an den Daemon übergeben werden. Wenn es
sich beim Daemon um einen internen Dienst handelt,
verwenden Sie wiederum
internal
.
Wie die meisten anderen Server-Daemonen lässt sich auch
inetd über verschiedene Optionen
steuern. In der Voreinstellung wird
inetd mit
-wW -C 60
gestartet. Durch das Setzen
dieser Werte wird das TCP-Wrapping für alle
inetd-Dienste aktiviert.
Zudem wird verhindert, dass eine IP-Adresse
eine Dienst öfter als 60 Mal pro Minute anfordern kann.
Um die Voreinstellungen für
inetd zu ändern, fügen Sie einen
Eintrag für inetd_flags
in
/etc/rc.conf
hinzu. Wenn
inetd bereits ausgeführt wird,
starten Sie ihn mit service inetd restart
neu.
Die verfügbaren Optionen sind:
Legt die maximale Anzahl von parallelen Aufrufen
eines Dienstes fest; in der Voreinstellung gibt es keine
Einschränkung. Diese Einstellung kann für jeden Dienst
durch Setzen des Parameters max-child
in /etc/inetd.conf
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
das Setzen des Parameters
max-connections-per-ip-per-minute
in /etc/inetd.conf
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 von
max-child-per-ip
in
/etc/inetd.conf
angepasst
werden.
Es sind noch weitere Optionen verfügbar. Eine vollständige Liste der Optionen finden Sie in inetd(8).
Viele Daemonen, die von inetd
verwaltet werden, sind nicht auf Sicherheit bedacht. Einige
Damonen, wie beispielsweise
fingerd, liefern Informationen, die
für einen Angreifer nützlich sein könnten. Aktivieren Sie nur
erforderliche Dienste und überwachen Sie das System auf
übermäßige Verbindungsversuche.
max-connections-per-ip-per-minute
,
max-child
und
max-child-per-ip
können verwendet werden,
um solche Angriffe zu begrenzen.
TCP-Wrapper 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.
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>.