30.2. Der inetd „Super-Server“
Zurück | Kapitel 30. Netzwerkserver | Weiter

## 30.2. Der inetd „Super-Server“

Beigetragen von Chern Lee.
Aktualisiert vom FreeBSD Documentation Project.

### 30.2.1. Überblick

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`.

### 30.2.2. Einstellungen

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.

### 30.2.3. Kommandozeilenoptionen

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).

-c maximum

  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.

-C rate

  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.

-R rate

  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.

-s maximum

  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.

### 30.2.4. `inetd.conf`

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.

Beispiel 30.1. Die inetd-Konfiguration neu einlesen
`#` `/etc/rc.d/inetd reload`

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

service-name

  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.

socket-type

  Entweder `stream`, `dgram`, `raw`, oder `seqpacket`. `stream` muss für verbindungsorientierte TCP-Daemonen verwendet werden, während `dgram` das UDP-Protokoll verwaltet.

protocol

  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}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]

  `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`.

user

  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`.

server-program

  Der vollständige Pfad des Daemons, der eine Verbindung entgegennimmt. Wird der Daemon von inetd intern bereitgestellt, sollte die Option `internal` verwendet werden.

server-program-arguments

  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.

### 30.2.5. Sicherheit

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.

### 30.2.6. Verschiedenes

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 | Nach oben | Weiter
Kapitel 30. Netzwerkserver | Zum Anfang | 30.3. NFS – Network File System

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>.