Im Katalog suchen

Linux - Wegweiser für Netzwerker

Online-Version

Copyright © 2001 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser für Netzwerker oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel



Die tcpd-Zugriffs-Kontrolleinrichtung

Da die Erweiterung eines Computers um Netzwerkfähigkeiten viele Sicherheitsrisiken in sich birgt, sind die Anwendungen so entwickelt worden, daß sie sich vor verschiedenen Arten von Angriffen schützen können. Allerdings sind einige Sicherheitsmerkmale mangelhaft (was der RTM-Internet-Wurm auf besonders drastische Weise in einer Reihe von Programmen demonstrierte, zu denen auch alte Versionen des Sendmail-Dämons gehörten), oder es wird nicht unterschieden zwischen sicheren Hosts, von denen Anforderungen nach einem bestimmten Service akzeptiert werden können, und unsicheren Hosts, deren Anforderungen abgelehnt werden müssen. Die Dienste finger und tftp hatten wir ja bereits angesprochen. Netzwerkadministratoren würden den Zugriff auf diese Dienste gerne auf “vertrauenswürdige Hosts” beschränken, was aber mit dem normalen Setup, bei dem inetd den Dienst entweder allen Clients anbietet oder überhaupt keinem, nicht möglich ist.

Ein für die Verwaltung hostspezifischer Zugriffe nützliches Werkzeug ist tcpd, das oft auch als Dämon-“Wrapper” bezeichnet wird.1 Es wird für TCP-Dienste, die Sie überwachen oder schützen wollen, anstelle des normalen Server-Programms gestartet. tcpd prüft, ob der entfernte Host einen solchen Dienst überhaupt benutzen darf, und führt nur dann das eigentliche Serverprogramm aus. tcpd schickt auch eine Meldung über die Anforderungen an den syslog-Dämon. Beachten Sie, daß dies bei UDP-basierten Diensten nicht funktioniert.

Um beispielsweise den finger-Dämon mit einem Wrapper zu schützen, müssen Sie die entsprechende Zeile in inetd.conf

# finger-Dämon (ohne Wrapper) 
finger    stream  tcp  nowait  bin    /usr/sbin/fingerd in.fingerd
wie folgt ändern:
# finger-Dämon (mit Wrapper) 
finger  stream  tcp    nowait  root    leer;/usr/sbin/tcpd  in.fingerd

Ohne eine zusätzliche Zugriffskontrolle erscheint dies für den Client wie ein ganz gewöhnliches finger-Setup, mit derAusnahme, daß alle Anforderungen im auth-Kanal von syslog aufgezeichnet werden.

Die Zugriffskontrolle wird mit Hilfe der beiden Dateien /etc/hosts.allow und /etc/ ­hosts.deny implementiert. Sie enthalten Einträge, die den Zugriff auf bestimmte Dienste und Hosts erlauben oder verweigern. Wenn tcpd eine Anforderung für einen Dienst wie finger von einem Client-Host namens biff.foobar.com behandelt, durchsucht es hosts.allow und hosts.deny (in dieser Reihenfolge) nach einem Eintrag, bei dem sowohl der Dienst als auch der Client übereinstimmen. Wird ein passender Eintrag in hosts.allow gefunden, wird der Zugriff freigegeben, gleichgültig, ob es noch einen Eintrag in hosts. deny gibt. Wird keine Übereinstimmung in hosts.allow, aber eine in hosts.deny gefunden, wird die Anforderung abgewiesen, indem die Verbindung unterbrochen wird. Die Anforderung wird akzeptiert, wenn überhaupt kein passender Eintrag gefunden wird.

Die Einträge in den Zugriffsdateien sehen wie folgt aus:

Dienstliste: Hostliste [:Shellbefehl]

Dienstliste ist eine Liste mit Dienstbezeichnungen aus /etc/services oder das Schlüsselwort ALL. Damit der Eintrag alle Dienste außer finger und tftp betrifft, geben Sie ALL EXCEPT finger, tftp an.

Hostliste ist eine Liste mit Hostnamen, IP-Adressen oder den Schlüsselwörtern ALL, LOCAL, UNKNOWN oder PARANOID. ALL steht für alle Hosts, während LOCAL nur Hostnamen vergleicht, die keinen Punkt enthalten.2 UNKNOWN gilt für jeden Host, dessen Name oder Adresse nicht durch Nachschlagen ermittelt werden konnte. PARANOID gilt für jeden Host, dessen Name sich nicht zu seiner IP-Adresse auflösen läßt.3 Ein mit einem Punkt beginnender Name gilt für alle Hosts, deren Domain mit diesem Namen übereinstimmt. Zum Beispiel paßt .foobar.com zu biff.foobar.com, nicht aber zu nurks.fredsville.com. Ein mit einem Punkt endendes Muster gilt für jeden Host, dessen IP-Adresse mit dem angegebenen Muster beginnt. So paßt 172.16. zu 172.16.32.0, aber nicht zu 172.15.9.1. Ein Muster der Form n.n.n.n/m.m.m.m wird als IP-Adresse und Netzmaske betrachtet. Wir könnten daher in unserem Beispiel von eben auch 172.16.0.0/255.255.0.0 angeben. Schließlich können Sie mit einem Muster, das mit einem “/”-Zeichen beginnt, eine Datei spezifizieren, von der angenommen wird, daß sie eine Liste von Mustern von akzeptablen Hostnamen oder IP-Adressen enthält. So würde die Angabe /var/access/trustedhosts den tcpd-Dämon dazu bringen, diese Datei auszulesen und zu prüfen, ob irgendeine der darin enthaltenen Zeilen zum verbindenden Host paßt.

Um nur den lokalen Hosts Zugriff auf finger und tftp zu gestatten, lassen Sie die Datei /etc/hosts.allow leer und tragen in /etc/hosts.deny folgendes ein:

in.tftpd, in.fingerd: ALL EXCEPT LOCAL, .your.domain

Das optionale Feld Shellbefehl kann einenShellbefehl enthalten, der ausgeführt wird, wenn der Eintrag paßt. Dies ist sinnvoll, wenn Sie Fallen einrichten wollen, die potentielle Angreifer enttarnen. Das folgende Beispiel erzeugt eine Logdatei, die den verbindenden Benutzer und Host anzeigt. Wenn dieser Host nicht vlager.vbrew.com ist, werden die Ausgaben einer finger-Anwendung auf diesen Host eingetragen:

in.ftpd: ALL EXCEPT LOCAL, .vbrew.com : \ 
      echo "request from %d@%h:" >> /var/log/finger.log; \ 
      if [ %h != "vlager.vbrew.com:" ]; then \ 
          finger -l @%h >> /var/log/finger.log \ 
      fi

Die Argumente %h und %d werden von tcpd zum Client-Hostnamen und zum Service-Namen erweitert. Details entnehmen Sie bitte der Manpage hosts_access(5).




1.

Entwickelt von Wietse Venema, wietse@wzv.win.tue.nl.

2.

Üblicherweise enthalten nur lokale Hostnamen, die durch Nachschlagen in /etc/hosts ermittelt wurden, keinen Punkt.

3.

Obwohl PARANOID den Eindruck erweckt, ein extremes Maß zu sein, ist es doch eine gute Standardvorgabe, da es Sie vor böswilligen Hosts schützt, die sich als jemand anderer ausgeben, als sie in Wirklichkeit sind. Nicht jedes tcpd wird standardmäßig mit einkompiliertem PARANOID geliefert. Falls das auch bei Ihnen der Fall ist, müssen Sie Ihr tcpd dafür neu kompilieren.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser für Netzwerker

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home|O'Reilly-Partnerbuchhandlungen|Bestellinformationen
Kontakt|Über O'Reilly|Datenschutz

© 2001, O'Reilly Verlag