Die Datei /etc/xinetd.conf dient standardmäßig der Konfiguration des
xinetd Daemons (eine alternative Datei kann als Kommandozeilenparameter
übergeben werden). Ist die Konfiguration von xinetd auch nicht allzu
komplex, so doch ein wenig aufwendiger und die Syntax unterscheidet sich
erheblich von der des Vorgängerprogrammes inetd.
Es gibt zwei Werkzeuge namens itox und xconv.pl,
welche mit xinetd mitkommen und den Inhalt von
/etc/inetd.conf als Basis für die
Konfigurationsdatei von xinetd verwenden. Damit ist es das natürlich
nicht gewesen, da die Regeln, definiert in der Wrapper Konfiguration,
nicht berücksichtigt werden. itox wird wohl nicht mehr weiterentwickelt.
Generell ist xconv.pl die bessere Wahl, auch wenn die Ergebnisse noch
zusätzlich per Hand angepasst werden müssen, da xinetd mehr
Funktionalität als inetd bietet.
root@linux #
/usr/local/sbin/xconv.pl < /etc/inetd.conf > /etc/xinetd.conf
|
Am Anfang der Konfigurationsdatei stehen die Standardeinstellungen. Alle
Attribute, die hier zu finden sind, werden für jeden Dienst, der von
xinetd verwaltet wird, verwendet. Für jeden Dienst folgt nun ein eigener
Bereich, in welchem Standardeinstellungungen angepasst werden können.
Der Eintrag für die Standardeinstellungen sieht so aus:
defaults
{
attribut operator wert(e)
...
}
|
Die Werte jedes Attributes, die diesem hier zugwiesen werden, sind für
alle folgenden Dienste gültig. Deswegen kann man mittels des Attributes
only_from eine feste Liste von
IP Adressen angeben, die die Dienste
nutzen dürfen:
only_from = 192.168.1.0/24/192.168.5.0/24 192.168.10.17
|
Dadurch dürfen alle Rechner mit obigen Adressen alle hier konfigurierten
Dienste in Anspruch nehmen. Aber natürlich können diese Werte zusätzlich
noch für jeden Dienst einzeln modifiziert werden (man werfe einen Blick
auf die weiter unten vorgestellten Operatoren). Dies ist allerdings ein
wenig riskant. Es ist besser, will man das System einfach und sicher
halten, nicht erst Standardwerte zu definieren, die dann später für
einzelne Dienste wieder eingeschränkt werden. Betrachtet man beispielsweise
Zugriffsrechte, so besteht die einfachste Vorgehensweise darin, zuerst
generell den Zugriff zu verbieten und dann für jeden Dienst einzeln die
anvisierten Benutzer anzugeben und diesen den Zugriff zu ermöglichen
(bei tcp_wrapper
wird dies dadurch realisiert, dass zuerst in der Datei
hosts.deny die Regel ALL:ALL@ALL eingetragen wird und dann in
hosts.allow alle zugelassenen Dienste und die erlaubten IP Adressen
etwaiger Benutzer angegeben werden).
Die Syntax eines Eintrags für einen Dienst in xinetd.conf sie
folgendermaßen aus:
service
{
attribut operator wert(e)
...
}
|
Als Operatoren stehen zur Auswahl: =, += und -=.
Die meisten Attribute lassen jedoch nur den Operator = zu.
Dieser weist einem Attribut einen bestimmten Wert zu.
Durch += wird ein Eintrag einer Liste von Werten
hinzugefügt, mittels -= hingegen wird der Eintrag aus der Liste
entfernt.
Im Folgenden gibt es eine kurze Übersicht der Attribute. Deren Einsatz wird in
einigen Beispielen verdeutlicht werden. Weitergehende Informationen kann
man der Manpage zu xinetd.conf entnehmen.
Attribut
|
Werte und Beschreibung
|
Flags
|
Nur die gängigsten Werte werden hier aufgeführt; weitere sind in
der Dokumentation zu finden:
-
IDONLY:
Es werden nur Verbindungen mit Client-Rechnern
zugelassen, auf denen ein Server zur Identifikation läuft.
-
NORETRY:
Unterbindet das Anlegen eines neuen Prozesses im
Fehlerfall.
-
NAMEINARGS:
Das erste Argument des Attributes server_args wird
als argv[0] des Servers verwendet. Dadurch wird es möglich, tcpd zu
verwenden, indem es dem Attribut server zugewiesen wird, gefolgt vom
Namen des Servers und dessen Parameter als sever_args, genau, wie bei
inetd.
|
log_type
|
xinetd verwendet syslog, als Selektor wird standardmäßig
daemon.info gewählt.
-
SYSLOG Selektor [level]:
Auswahl zwischen daemon, auth, user oder
local0-7 des syslog Daemons.
-
FILE [max_size [absolute_max_size]]:
In die hier angegebene Datei wird die Ausgabe gesichert.
Die beiden Optionen begrenzen die
Dateigröße. Wird der erste Wert erreicht, wird eine Nachricht an syslog
gesendet. Die Protokollierung des jeweiligen Dienstes wird eingestellt,
sobald die Dateigröße den zweiten Parameter erreicht (sollte es sich um
eine mehrfach verwandte Datei oder um eine Standardeinstellung in
xinetd.conf handeln, können auch mehrere Dienste betroffen sein).
|
log_on_success
|
Bei Start eines Servers können mehrere unterschiedliche
Informationen festgehalten werden:
-
PID:
die Server PID (handelt es sich um einen internen Dienst von
xinetd ist die PID 0)
-
HOST:
Die Adresse des Clients
-
USERID:
Die ID des Benutzers, der den Dienst in Anspruch nimmt,
entsprechend dem in der RFC1413 definierten Protokolles
-
EXIT:
Der Statuswert, den der Prozess bei Beendigung zurückliefert
-
DURATION:
Verbindungsdauer
|
log_on_failure
|
Hierdurch kann eine Vielzahl an Informationen
protokolliert werden, sobald ein Server nicht gestartet werden kann, sei
es aufgrund fehlender Resourcen oder der Verletzung der Zugriffsregeln:
-
HOST, USERID:
wie oben
-
ATTEMPT:
Hält einen Zugriffsversuch fest. Diese Option wird
automatisch gewählt, sobald ein weiterer Wert gesetzt wird
-
RECORD:
Protokolliert alle Informationen, die über den Client
verfügbar sind.
|
nice
|
Ändert die Priorität des Servers, analog dem Unixbefehl nice.
|
no_access
|
Liste der Clients, denen der Zugriff auf den jeweiligen
Dienst verweigert werden soll
|
only_from
|
Liste aller akzeptierten Rechner. Wird diesem Attribut kein
Wert zugewiesen, so ist kein Zugriff auf den Dienst möglich
|
port
|
Port, unter dem der Dienst erreichbar ist. Sollte dieser auch in
der Datei /etc/services stehen, müssen beide Wert übereinstimmen.
|
protocol
|
Das hier angegebene Protokoll muss in der Datei /etc/protocols
aufgeführt sein. Wird dieses Attribut nicht gesetzt, wird das
Standardprotokoll des Servers verwendet
|
server
|
Pfad, unter dem der Server zu finden ist
|
server_args
|
Parameter, die an den Server übergeben werden sollen
|
socket_type
|
stream (TCP), dgram (UDP), raw (IP Direktzugriff) oder seqpacket ()
|
type
|
xinetd verwaltet drei Arten von Diensten:
-
RPC:
alle, die in der Datei /etc/rpc zu finden
sind. Funktioniert nicht besonders gut
-
INTERNAL:
Dienste, die direkt von xinetd verwaltet werden (echo,
time, daytime, chargen und discard)
-
UNLISTED:
Dienste, die weder in /etc/rpc noch in /etc/services
stehen
Bemerkung: man kann mehrere Werte kombinieren, wie bei den internen
Diensten servers, services und xadmin gezeigt wird.
|
wait
|
Legt das threading-Verhalten des Dienstes fest. Es gibt zwei
Möglichkeiten:
-
yes:
Der Dienst ist mono-threaded, dass heisst es kann immer nur
eine Verbindungen dieses Types unterhalten werden
-
no:
Für jede neue Anfrage startet xinetd einen neuen
Serverprozess, unter Berücksichtigung etwaiger Beschränkungen der
maximalen Zahl an Servern (Achtung: Standardmäßig gibt es keine
Obergrenze für die Serverzahl)
|
cps
|
Beschränkt die Zahl der zugelassenen Verbindungen. Als erster
Parameter wird die Zahl selbst angeben. Der zweite Wert legt die Zeit
fest, die der Dienst für weitere Verbindungen erreichbar ist, sobald das
Limit erreicht wurde.
|
instances
|
Maximale Zahl an Servern des gleichen Types, die simultan laufen dürfen
|
max_load
|
Tatsächliche maximale Last eines Servers (z. B. 2 oder 2.5).
Wird dieser Wert überschritten, nimmt der Server keine weiteren
Anfragen an
|
per_source
|
Ein Zahlenwert oder UNLIMITED. Ermöglicht es, die Zahl der
Verbindungen, die ein Dienst mit einem einzelnen Clientrechner
unterhält, zu beschränken
|
Die letzten vier Attribute bieten die Möglichkeit, die
Resourcen je nach Server zu verwalten. Dies stellt einen effizienten
Schutz vor
Denial of Service Angriffen dar.
In diesem Abschnitt wurden ein wenig von der Funktionalität von xinetd
vorgestellt. Im nächsten wird nun gezeigt, wie diese angewandt wird und
einige Regeln erläutert, so dass xinetd korrekt funktioniert.
|