ubuntuusers.de

rlinetd

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

rlinetd ist eine Alternative zum herkömmlichen Internet-Superserver inetd, welcher erweiterte Funktionalität bietet. rlinetd bietet z.B. die Optionen, den Dienst nur auf bestimmten IP-Adressen lauschen zu lassen, das Log-Verhalten für jeden Dienst einzeln anzupassen und Textausgaben anhand von Variablen auszugeben (z.B. Quell-IP-Adresse). xinetd bietet mehr Funktionalität, u.a. kann dort die Zeit angepasst werden, in der der Dienst verfügbar ist. Ein Internet-Superserver lauscht statt dem angebotenen Dienst (z.B. FTP-Server) selbst auf dem Port und startet den eigentlichen Server erst, wenn ein Zugriff erfolgt. So können auf einem System mit wenig genutzten Diensten Ressourcen eingespart werden, da nicht mehr alle Serverdienste dauerhaft laufen, sondern nur bei tatsächlichem Bedarf gestartet werden. Bei hochfrequentiert genutzten Diensten ist es jedoch sinnvoller, auf den Internet-Superserver zu verzichten und ausschließlich den eigentlichen Serverdienst zu nutzen.

Die Konfiguration ähnelt der von xinetd. Es ist möglich, Dienste nur an eine bestimmte IP-Adresse zu binden, Diensten mittels nice Prioritäten zu geben sowie das Log-Verhalten anzupassen.

Installation

rlinetd ist über die offiziellen Paketquellen installierbar.

  • rlinetd (universe)

Befehl zum Installieren der Pakete:

sudo apt-get install rlinetd 

Oder mit apturl installieren, Link: apt://rlinetd

Eventuell andere installierte Internet-Superserver werden dann deinstalliert, da immer nur ein inetd gleichzeitig laufen darf.

Konfiguration

In der Datei /etc/rlinetd.conf ist standardmäßig konfiguriert, dass alle Dateien aus dem Verzeichnis /etc/rlinetd.d beachtet werden (einige Dateiendungen sind aber ausgeschlossen). Zudem sind pro Dienst maximal 5 Instanzen erlaubt. Dies kann geändert werden. In den Bereichen für die Dienste können die Standards überschrieben werden.

# look for further configuration files elsewhere (ignore editor backup files)

directory "/etc/rlinetd.d" "" "(~|\.bak|\.swp|\.ucf-.*|\.dpkg-.*)$";

# set up some reasonable defaults

defaults {
  instances 5;
  # only making services available to your inside network?
  # interface 192.168.1.1;
}

Das Verzeichnis /etc/rlinetd.d ist dazu gedacht, einzelne Dateien für jeden Dienst anzulegen, dies wird unter anderem auch von update-inetd und ientd2rlinetd praktiziert.

Beispielhaft eine Konfiguration für einen Telnet-Server (mittels telnetd) für IPv4 und IPv6:

service "telnet_tcp" {
        enabled yes;
        protocol tcp;
        family ipv6;
        port "telnet"; #Entweder Portnummer oder Name aus /etc/services
        user "root";
        exec "telnetd";
        server "/usr/sbin/telnetd";
}

Eigener Dienst, der nur die Standardausgabe nutzt:

service "3000_tcp" {
        enabled yes;
        protocol tcp;
        family ipv6;
        port "3000"; #Entweder Portnummer oder Name aus /etc/services
        user "nobody";
        exec "echo Hallo Welt!";
        server "/bin/echo";
}

Optionen

rlinetd bietet weitere Einstellmöglichkeiten, die optional sind und nicht festgelegt werden müssen. Sie werden in den service-Block oder in die defaults eingetragen.

Beispiel:

service "telnet_tcp" {
        enabled yes; #optional
        protocol tcp;
        family ipv6;
        port "telnet";
        user "root";
        exec "telnetd";
        nice 1; #optional
        server "/usr/sbin/telnetd"; #optional, wenn gleich wie exec (hilfreich z.B. für tcpd in exec)
}

Datei ausgeben

banner "/pfad/datei/";

gibt den Inhalt der Datei aus und beendet die Sitzung.

echo

Echo gibt einen Text aus, trennt die Verbindung aber nicht, kann z.B. als motd genutzt werden. Zudem können Variablen genutzt werden. Eine Liste mit Variablen findet sich in der Manpage unter String Modifiers.

 echo "Sie haben die IP-Adresse %O";

Dienst deaktivieren

enabled no;

deaktiviert einen service-Block, ohne diesen komplett entfernen zu müssen. Statt no kann auch yes angegeben werden, was implizit vorhanden ist, sofern kein enabled festgelegt wurde.

IPv4 und IPv6 festlegen

Wird keine Option family angegeben, so lauscht der Dienst auf allen IPv4-Adressen.

family ipv6;

sorgt dafür, dass der Dienst auf allen IPv4- und IPv6-Adressen lauscht.

IP-Adressen festlegen

Mit rlinetd ist es möglich, festzulegen, auf welchen IP-Adressen der Dienst lauschen soll.

interfaces 127.0.0.1, 10.0.0.10; #für IPv4
interfaces [::1], [2001:db8:6789:abcd::d]; #für IPv6

Diese können nicht in einem service-Block gleichzeitig verwendet werden. Dazu müssen 2 Blöcke erstellt werden:

service "3000_tcp" {
        enabled yes;
        protocol tcp;
        family ipv4;
        port "3000";
        user "nobody";
        exec "echo Hallo Welt!";
        server "/bin/echo";
        interface 127.0.0.1;
}
service "3000_tcp_v6" {
        enabled yes;
        protocol tcp;
        family ipv6;
        port "3000";
        user "nobody";
        exec "echo Hallo Welt!";
        server "/bin/echo";
        interface [::1]; #lässt man die family-option weg, würde es einen Konflikt geben, da der IPv4-Port bereits belegt ist.
}

Durch die interfaces-Option im IPv6-Block wird nur auf der IP-Adresse ::1 gelauscht und damit auf keiner IPv4-Adresse. Durch die Angabe any wird der Dienst auf allen IP-Adressen (IPv4 und IPv6) lauschen.

Priorität ändern

nice 1;

setzt die Priorität mit nice auf 1.

wait

wait yes;

dient dazu, dass der inetd auf die Beendigung des eigentlichen Dienstes wartet. Bei UDP wird dies benötigt, bei TCP normalerweise nicht. Standard ist no (entspricht nowait bei inetd). Mehr Informationen über das Verhalten gibt es in er Manpage von inetd, da genau dessen Verhalten emuliert wird.

Logging anpassen

Standardmäßig schreibt rlinetd die Logs in das syslog nach /var/log/syslog. Dies kann geändert werden und es könne zusätzliche Informationen geloggt werden.

service "telnet_tcp" {
        protocol tcp;
        family ipv6;
        port "telnet";
        user "root";
        exec "/usr/sbin/telnetd";
        log "telnet_log" "Zugriff auf Telnet von IP %O Port %P";
        #server "/usr/sbin/telnetd";
}

Zusätzlich in /etc/rlinetd.conf:

log "telnet_log" {
path "/var/log/rlinetd";
mode 0644;
user "root";
}

Statt "telnet_log" kann auch syslog genutzt werden, es wird direkt ins Syslog geschrieben, ein log-Block ist nicht erforderlich.

Diese Revision wurde am 14. Juli 2021 07:51 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Netzwerk, Server