[[Vorlage(getestet, focal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:Dienste: Serverdienste starten/stoppen] [:inetd: Herkömmliche inetd-Server] }}} [[Inhaltsverzeichnis(2)]] 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. {{{#!vorlage Paketinstallation rlinetd, universe }}} 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 [man:rlinetd.conf: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. {{{ interface 127.0.0.1, 10.0.0.10; #für IPv4 interface [::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 interface-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 [man:inetd: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. = Links = * [man_de:rlinetd:Manpage von rlinetd] * [man_de:rlinetd.conf:Manpage der Konfigurationsdatei von rlinetd] * [:inetd:einfachere Alternative zu rlinetd] * [:xinetd:erweiterte Alternative zu rlinetd] # tag: Netzwerk, Server, System