Red Hat Enterprise Linux

Deployment Guide

Copyright © 2008 Red Hat, Inc. This material may only be distributed subject to the terms and conditions set forth in the Open Publication License, V1.0 or later with the restrictions noted below (the latest version of the OPL is presently available at http://www.opencontent.org/openpub/).

Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.

Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder.

Red Hat and the Red Hat "Shadow Man" logo are registered trademarks of Red Hat, Inc. in the United States and other countries.

All other trademarks referenced herein are the property of their respective owners.

The GPG fingerprint of the security@redhat.com key is:

CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E

1801 Varsity Drive RaleighNC 27606-2072 USA Phone: +1 919 754 3700 Phone: 888 733 4281 Fax: +1 919 754 3701 PO Box 13588 Research Triangle ParkNC 27709 USA

January 2008

Versionsgeschichte
Version 5.2-11 Wed May 21 2008 Michael Hideo
Smith
Resolves: #232215
Changing from XML to HTML Single with floating Table of Contents and viewable by browser
Zusammenfassung

This Deployment Guide documents relevant information regarding the deployment, configuration and administration of Red Hat Enterprise Linux 5.2.


Einführung
1. Senden Sie uns Ihr Feedback
I. Netzwerkbezogene Konfiguration
1. Netzwerk-Schnittstellen
1.1. Netzwerk-Konfigurationsdateien
1.2. Schnittstellen-Konfigurationsdateien
1.2.1. Ethernet-Schnittstellen
1.2.2. IPsec Schnittstellen
1.2.3. Channel-Bonding-Schnittstellen
1.2.4. Alias- und Clone-Dateien
1.2.5. Schnittstellen für den Verbindungsaufbau
1.2.6. Weitere Schnittstellen
1.3. Schnittstellen-Kontrollskripts
1.4. Configuring Static Routes
1.5. Netzwerkfunktionsdateien
1.6. Zusätzliche Ressourcen
1.6.1. Installierte Dokumentation
2. Netzwerkkonfiguration
2.1. Überblick
2.2. Herstellen einer Ethernet-Verbindung
2.3. Herstellen einer ISDN-Verbindung
2.4. Herstellen einer Modem-Verbindung
2.5. Herstellen einer xDSL-Verbindung
2.6. Herstellen einer Token Ring-Verbindung
2.7. Herstellen einer Wireless-Verbindung
2.8. Verwalten von DNS-Einstellungen
2.9. Verwalten von Hosts
2.10. Arbeiten mit Profilen
2.11. Geräte-Aliase
2.12. Sichern und Wiederherstellen der Netzwerkkonfiguration
3. Berkeley Internet Name Domain (BIND)
3.1. Einführung in den DNS
3.1.1. Nameserver Zonen
3.1.2. Nameserver Arten
3.1.3. BIND als Nameserver
3.2. /etc/named.conf
3.2.1. Häufig verwendete Typen von Statements
3.2.2. Andere Statement-Typen
3.2.3. Kommentar-Tags
3.3. Zone-Dateien
3.3.1. Zone-Dateien-Direktiven
3.3.2. Resource-Records der Zone-Datei
3.3.3. Beispiele für Zone-Dateien
3.3.4. Zone-Dateien für die umgekehrte Auflösung von Namen
3.4. Die Verwendung von rndc
3.4.1. Konfigurieren von /etc/named.conf
3.4.2. Konfigurieren von /etc/rndc.conf
3.4.3. Befehlszeilenoptionen
3.5. Erweiterte Funktionen von BIND
3.5.1. DNS-Protokoll-Erweiterungen
3.5.2. Mehrere Ansichten
3.5.3. Sicherheit
3.5.4. IP-Version 6
3.6. Allgemein zu vermeidende Fehler
3.7. Zusätzliche Ressourcen
3.7.1. Installierte Dokumentation
3.7.2. Hilfreiche Webseiten
3.7.3. Bücher zum Thema
4. OpenSSH
4.1. Features von SSH
4.1.1. Wozu dient SSH?
4.2. SSH Protokoll Versionen
4.3. Die Abfolge der Vorgänge einer SSH-Verbindung
4.3.1. Transportschicht
4.3.2. Authentifizierung
4.3.3. Verbindungskanäle
4.4. Konfigurieren eines OpenSSH-Servers
4.4.1. Anfordern von SSH für Fernverbindungen
4.5. OpenSSH-Konfigurationsdateien
4.6. Konfigurieren eines OpenSSH-Clients
4.6.1. Verwenden des Befehlsssh
4.6.2. Verwenden des Befehls scp
4.6.3. Verwenden des Befehls sftp
4.7. Mehr als eine Secure Shell
4.7.1. X11 Forwarding
4.7.2. Port Forwarding
4.7.3. Erstellen eines Schlüsselpaares
4.8. Zusätzliche Ressourcen
4.8.1. Installierte Dokumentation
4.8.2. Hilfreiche Websites
5. Dynamic Host Configuration Protocol (DHCP)
5.1. Warum sollte man DHCP verwenden?
5.2. Konfigurieren eines DHCP Servers
5.2.1. Konfigurationsdatei
5.2.2. Lease-Datenbank
5.2.3. Starten und Stoppen des Servers
5.2.4. DHCP Relay Agent
5.3. Konfigurieren eines DHCP-Clients
5.4. Zusätzliche Ressourcen
5.4.1. Installierte Dokumentation
II. Systemkonfiguration
6. Datums- und Zeitkonfiguration
6.1. Zeit- und Datumseigenschaften
6.2. Eigenschaften des Netzwerk-Zeitprotokolls (NTP)
6.3. Konfiguration der Zeitzone
7. X Window System Konfiguration
7.1. Anzeige-Einstellungen
7.2. Anzeige-Hardwareeinstellungen
7.3. Dualmonitor Anzeige-Einstellungen
III. Sicherheit und Authentifizierung
8. Überblick über Sicherheit
8.1. Schwachstellenanalyse
8.1.1. Denken wie der Feind
8.1.2. Definition von Analyse und Test
8.1.3. Auswerten der Tools
8.2. Häufige Schwachstellen und Attacken
8.3. Sicherheits-Updates
8.3.1. Pakete aktualisieren
9. Sichern Ihres Netzwerkes
9.1. Server-Sicherheit
9.1.1. Sichern von Diensten mit TCP-Wrappern und xinetd
9.1.2. Portmap sichern
9.1.3. Sichern von NIS
9.1.4. Sicherung von NFS
9.1.5. Sicherung des Apache HTTP-Server
9.1.6. Sicherung von FTP
9.1.7. Sicherung von Sendmail
9.1.8. Bestätigen, welche Ports auf Verbindungen abhören
9.2. Pluggable Authentication Modules (PAM)
9.2.1. Vorteile von PAM
9.2.2. PAM-Konfigurationsdateien
9.2.3. Format der PAM Konfigurationsdatei
9.2.4. Beispiele für PAM-Konfigurationsdateien
9.2.5. Module erstellen
9.2.6. PAM und Administrative-Credential-Caching
9.2.7. PAM und Besitzrechte von Geräten
9.2.8. Zusätzliche Ressourcen
9.3. Virtuelle Private Netzwerke (VPNs)
9.3.1. Wie funktioniert ein VPN?
9.3.2. VPNs und Red Hat Enterprise Linux
9.3.3. IPsec
9.3.4. Eine IPsec-Verbindung erstellen
9.3.5. Installation von IPsec
9.3.6. Konfiguration von IPsec Host-zu-Host
9.3.7. IPsec Netzwerk-zu-Netzwerk Konfiguration
9.3.8. Starten und Stoppen einer IPsec-Verbindung
9.4. IPTables
9.4.1. Paket-Filterung
9.4.2. Unterschiede zwischen IPTables und IPChains
9.4.3. Befehlszeilenoptionen für IPTables
9.4.4. IPTables-Regeln speichern
9.4.5. IPTables Kontrollskripte
9.4.6. IPTables und IPv6
9.4.7. Zusätzliche Informationsquellen
10. Sicherheit und SELinux
10.1. Einführung in SELinux
10.1.1. SELinux Überblick
10.1.2. Dateien, die mit SELinux zusammenhängen
10.1.3. Zusätzliche Ressourcen
10.2. Kurzer Hintergrund und Geschichte von SELinux

Einführung

Willkommen beim Red Hat Enterprise Linux Deployment-Handbuch.

Das Red Hat Enterprise Linux Deployment-Handbuch beinhaltet Informationen zur Anpassung Ihres Systems, damit dies Ihren Anforderungen entspricht. Wenn Sie ein umfangreiches, aufgabenorientiertes Handbuch zur Konfiguration und Anpassung Ihres Systems suchen, ist dieses Handbuch genau das Richtige für Sie.

Dieses Handbuch setzt ein grundlegendes Verständnis Ihres Red Hat Enterprise Linux Systems voraus. Falls Sie Hilfe bei der Installation von Red Hat Enterprise Linux benötigen, werfen Sie einen Blick auf das Red Hat Enterprise Linux Installationshandbuch.

1. Senden Sie uns Ihr Feedback

Wenn Sie einen Fehler im Red Hat Deployment-Handbuch finden oder eine Idee haben, wie das Handbuch verbessert werden könnte, freuen wir uns über Ihr Feedback! Reichen Sie einen Fehlerbericht für die Komponente Deployment_Guide in Bugzilla (http://bugzilla.redhat.com/bugzilla/) ein.

Falls Sie uns einen Vorschlag zur Verbesserung der Dokumentation senden möchten, sollten Sie hierzu möglichst genaue Angaben machen. Wenn Sie einen Fehler gefunden haben, geben Sie bitte die Nummer des Abschnitts und einen Ausschnitt des Textes an, damit wir diesen leicht finden können.

Teil I. Netzwerkbezogene Konfiguration

Nachdem erklärt wird, wie ein Netzwerk konfiguriert wird, beschreibt dieser Abschnitt netzwerkbezogene Themen. Darunter fallen Remote-Logins, gemeinsam über ein Netzwerk verwendete (Shared) Dateien und Verzeichnisse und das Einrichten eines Web-Servers.

Inhaltsverzeichnis

1. Netzwerk-Schnittstellen
1.1. Netzwerk-Konfigurationsdateien
1.2. Schnittstellen-Konfigurationsdateien
1.2.1. Ethernet-Schnittstellen
1.2.2. IPsec Schnittstellen
1.2.3. Channel-Bonding-Schnittstellen
1.2.4. Alias- und Clone-Dateien
1.2.5. Schnittstellen für den Verbindungsaufbau
1.2.6. Weitere Schnittstellen
1.3. Schnittstellen-Kontrollskripts
1.4. Configuring Static Routes
1.5. Netzwerkfunktionsdateien
1.6. Zusätzliche Ressourcen
1.6.1. Installierte Dokumentation
2. Netzwerkkonfiguration
2.1. Überblick
2.2. Herstellen einer Ethernet-Verbindung
2.3. Herstellen einer ISDN-Verbindung
2.4. Herstellen einer Modem-Verbindung
2.5. Herstellen einer xDSL-Verbindung
2.6. Herstellen einer Token Ring-Verbindung
2.7. Herstellen einer Wireless-Verbindung
2.8. Verwalten von DNS-Einstellungen
2.9. Verwalten von Hosts
2.10. Arbeiten mit Profilen
2.11. Geräte-Aliase
2.12. Sichern und Wiederherstellen der Netzwerkkonfiguration
3. Berkeley Internet Name Domain (BIND)
3.1. Einführung in den DNS
3.1.1. Nameserver Zonen
3.1.2. Nameserver Arten
3.1.3. BIND als Nameserver
3.2. /etc/named.conf
3.2.1. Häufig verwendete Typen von Statements
3.2.2. Andere Statement-Typen
3.2.3. Kommentar-Tags
3.3. Zone-Dateien
3.3.1. Zone-Dateien-Direktiven
3.3.2. Resource-Records der Zone-Datei
3.3.3. Beispiele für Zone-Dateien
3.3.4. Zone-Dateien für die umgekehrte Auflösung von Namen
3.4. Die Verwendung von rndc
3.4.1. Konfigurieren von /etc/named.conf
3.4.2. Konfigurieren von /etc/rndc.conf
3.4.3. Befehlszeilenoptionen
3.5. Erweiterte Funktionen von BIND
3.5.1. DNS-Protokoll-Erweiterungen
3.5.2. Mehrere Ansichten
3.5.3. Sicherheit
3.5.4. IP-Version 6
3.6. Allgemein zu vermeidende Fehler
3.7. Zusätzliche Ressourcen
3.7.1. Installierte Dokumentation
3.7.2. Hilfreiche Webseiten
3.7.3. Bücher zum Thema
4. OpenSSH
4.1. Features von SSH
4.1.1. Wozu dient SSH?
4.2. SSH Protokoll Versionen
4.3. Die Abfolge der Vorgänge einer SSH-Verbindung
4.3.1. Transportschicht
4.3.2. Authentifizierung
4.3.3. Verbindungskanäle
4.4. Konfigurieren eines OpenSSH-Servers
4.4.1. Anfordern von SSH für Fernverbindungen
4.5. OpenSSH-Konfigurationsdateien
4.6. Konfigurieren eines OpenSSH-Clients
4.6.1. Verwenden des Befehlsssh
4.6.2. Verwenden des Befehls scp
4.6.3. Verwenden des Befehls sftp
4.7. Mehr als eine Secure Shell
4.7.1. X11 Forwarding
4.7.2. Port Forwarding
4.7.3. Erstellen eines Schlüsselpaares
4.8. Zusätzliche Ressourcen
4.8.1. Installierte Dokumentation
4.8.2. Hilfreiche Websites
5. Dynamic Host Configuration Protocol (DHCP)
5.1. Warum sollte man DHCP verwenden?
5.2. Konfigurieren eines DHCP Servers
5.2.1. Konfigurationsdatei
5.2.2. Lease-Datenbank
5.2.3. Starten und Stoppen des Servers
5.2.4. DHCP Relay Agent
5.3. Konfigurieren eines DHCP-Clients
5.4. Zusätzliche Ressourcen
5.4.1. Installierte Dokumentation

Kapitel 1. Netzwerk-Schnittstellen

Unter Red Hat Enterprise Linux verläuft die gesamte Netzwerkkommunikation zwischen konfigurierten Software-Schnittstellen und den physikalischen Netzwerkgeräten, die mit dem System verbunden sind.

Die Konfigurationsdateien für die verschiedenen Netzwerkschnittstellen und die Skripts zu deren Aktivierung oder Deaktivierung befinden sich im /etc/sysconfig/network-scripts/-Verzeichnis. Obwohl die Anzahl und die Art von Schnittstellendateien je nach System variieren können, gibt es jedoch grundsätzlich drei verschiedene Kategorien von Dateien in diesem Verzeichnis:

  1. Schnittstellenkonfigurationsdateien

  2. Schnittstellenkontrollskripte

  3. Netzwerkfunktionsdateien

Die Dateien in jeder dieser Kategorien arbeiten zusammen, um verschiedene Netzwerkgeräte zu ermöglichen.

Dieses Kapitel beschäftigt sich mit den Verbindungen zwischen diesen Dateien und ihrer Verwendungsweise.

1.1. Netzwerk-Konfigurationsdateien

Bevor wir die Schnittstellen-Konfigurationsdateien tiefergehend untersuchen, wollen wir die für die Netzwerk-Konfiguration verwendeten primären Konfigurationsdateien auflisten. Das Verständnis der Rolle, die diese Dateien bei der Einrichtung des Netzwerk-Stack spielen, kann bei der individuellen Anpassung eines Red Hat Enterprise Linux Systems nützlich sein.

Folgende sind primäre Netzwerk-Konfigurationsdateien:

/etc/hosts

Hauptzweck dieser Datei ist es, Host-Namen aufzulösen, die nicht anderweitig aufgelöst werden können. Sie kann auch zur Auflösung von Host-Namen in kleineren Netzwerken ohne DNS-Server verwendet werden. Unabhängig davon, an welches Netzwerk der Computer angeschlossen ist, sollte diese Datei eine Zeile enthalten, die die IP-Adresse des Loopback-Gerätes (127.0.0.1) als localhost.localdomain angibt. Weitere Informationen finden in den Handbuch-Seiten zu hosts.

/etc/resolv.conf

Diese Datei gibt die IP-Adressen von DNS-Servern und der Search-Domain an. Wenn nicht anders konfiguriert, wird diese Datei von Initialisierungs-Skripten gefüllt. Weitere Informationen zu dieser Datei finden Sie auf den Handbuch-Seiten von resolv.conf.

/etc/sysconfig/network-scripts/ifcfg-<interface-name>

Für jede Netzwerk-Schnittstelle gibt es ein entsprechendes Schnittstellen-Konfigurationsskript. Jede dieser Dateien liefert Informationen, die für eine besondere Netzwerk-Schnittstelle spezifisch sind. Unter Abschnitt 1.2, „Schnittstellen-Konfigurationsdateien“ finden Sie weitere Informationen zur Art der Datei und welche Anweisungen sie akzeptiert.

Warnung

Das Verzeichnis /etc/sysconfig/networking/, wird vom Netzwerk-Administrationstool (system-config-network) verwendet und dessen Inhalte sollten nicht manuell bearbeitet werden. Die Verwendung von nur einer Methode zur Netzwerkkonfiguration wird nachdrücklich in Anbetracht des Risikos eines Löschens der Konfiguration empfohlen.

1.2. Schnittstellen-Konfigurationsdateien

Schnittstellen-Konfigurationsdateien steuern die Software-Schnittstellen der einzelnen Netzwerkschnittstellengeräte. Wenn das System bootet, verwendet es diese Dateien, um zu erfahren, welche Schnittstellen automatisch gestartet werden und wie diese zu konfigurieren sind. Diese Dateien heißen normalerweise ifcfg <name>, wobei <name> sich auf den Namen des Geräts bezieht, das von der Konfigurationsdatei gesteuert wird.

1.2.1. Ethernet-Schnittstellen

Zu den am meisten verwendeten Schnittstellendateien gehört auch ifcfg-eth0, mit der die erste Ethernet Netzwerk-Schnittstellen-Karte im System, auch NIC genannt, gesteuert wird. In einem System mit mehreren NICs gibt es entsprechend mehrere ifcfg eth<X> Dateien (wobei <X> eine eindeutige Nummer ist, je nach der entsprechenden Schnittstelle). Da jedes Gerät über eine eigene Konfigurationsdatei verfügt, können Sie die Funktionalität jeder einzelnen Schnittstelle steuern.

Nachfolgend ist eine ifcfg-eth0-Beispielsdatei für ein System mit einer festen IP-Adresse:

DEVICE=eth0 BOOTPROTO=none ONBOOT=yes NETWORK=10.0.1.0 NETMASK=255.255.255.0 IPADDR=10.0.1.27 USERCTL=no

Die in einer Schnittstellen-Konfigurationsdatei benötigten Werte können sich auf der Basis von anderen Werten ändern. Die ifcfg-eth0-Datei für eine Schnittstelle mit DHCP sieht beispielsweise etwas anders aus, weil die IP-Information vom DHCP-Server zur Verfügung gestellt wird:

DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes

Sie können die Konfigurationsdateien für eine bestimmte Netzwerkschnittstelle aber auch manuell bearbeiten.

Folgend ist eine Liste mit konfigurierbaren Parametern für eine Konfigurationsdatei einer Ethernet-Schnittstelle:

BONDING_OPTS=<parameters>

sets the configuration parameters for the bonding device, and is used in /etc/sysconfig/network-scripts/ifcfg-bond<N> (see Abschnitt 1.2.3, „Channel-Bonding-Schnittstellen“). These parameters are identical to those used for bonding devices in /sys/class/net/<bonding device>/bonding, and the module parameters for the bonding driver as described in bonding Module Directives.

Diese Konfigurationsmethode wird verwendet, damit mehrere Bonding-Geräte unterschiedliche Konfigurationen besitzen können. Falls Sie BONDING_OPTS in ifcfg-<name> verwenden, benutzen Sie nicht/etc/modprobe.conf, um Optionen für das Bonding-Gerät festzulegen.

BOOTPROTO=<protocol>

, wobei < protocol> für eine der folgenden Varianten stehen kann:

  • none — Es sollte kein Boot-Time-Protokoll verwendet werden.

  • bootp — Das BOOTP-Protokoll sollte verwendet werden.

  • dhcp — Das DHCP-Protokoll sollte verwendet werden.

BROADCAST=<address>

, wobei <address> die Broadcast-Adresse ist. Diese Anweisung wird nicht mehr verwendet, da der Wert automatisch mit dem ifcalc Befehl berechnet wird.

DEVICE=<name>

, wobei <name> der Name des physikalischen Geräts ist (ausgenommen dynamisch-zugewiesene PPP- Geräte, bei denen es der logische Name) ist.

DHCP_HOSTNAME

Benutzen Sie diese Option lediglich, wenn der DHCP-Server den Client auffordert, vor dem Erhalten einer IP-Adresse einen Hostnamen anzugeben.

DNS{1,2}=<address>

, wobei <Adresse> eine Name-Server-Adresse ist, die in /etc/resolv.conf gesetzt wird, wenn die Anweisung PEERDNS auf yes steht.

ETHTOOL_OPTS=<options>

, wobei <options> für jede gerätespezifische Option steht, die von ethtool unterstützt wird. Wenn Sie zum Beispiel 100 MB, voll Duplex, erzwingen möchten:

ETHTOOL_OPTS="autoneg off speed 100 duplex full"

Instead of a custom initscript, use ETHTOOL_OPTS to set the interface speed and duplex settings. Custom initscripts run outside of the network init script lead to unpredictable results during a post-boot network service restart.

Hinweis

Änderungen der Geschwindigkeit oder der Duplex-Einstellungen erfordern fast immer eine Deaktivierung von "autonegotiation" mit Hilfe der autoneg off-Option. Dies muss immer zuerst angegeben werden, da Optionseinträge abhängig von deren Reihenfolge sind.

GATEWAY=<address>

, wobei<address> die IP-Adresse des Netzwerk-Routers oder des Gateway-Devices ist (falls vorhanden).

HWADDR=<MAC-address>

, wobei <MAC-address> die Hardware-Adresse des Ethernet-Geräts ist, und das Format AA:BB:CC:DD:EE:FF hat. Diese Anweisung ist für Rechner mit mehreren NICs nützlich, um sicherzustellen, dass die Schnittstellen den richtigen Gerätenamen zugewiesen werden, unabhängig von der Lade-Reihenfolge der NIC-Module. Diese Anweisung sollte nicht in Verbindung mit MACADDR verwendet werden.

IPADDR=<address>

, wobei <address> die IP-Adresse ist.

MACADDR=<MAC-address>

, wobei <MAC-address> die Hardware-Adresse des Ethernet-Geräts ist und das Format AA:BB:CC:DD:EE:FF hat. Diese Anweisung wird verwendet, um einer Schnittstelle eine MAC-Adresse zuzuweisen, wobei die der physikalischen NIC überschrieben wird. Diese Anweisung sollte nicht in Verbindung mit HWADDR verwendet werden.

MASTER=<bond-interface>

wobei <bond-interface> das Channel-Bonding-Interface ist, mit dem die Ethernet-Schnittstelle verbunden ist.

Diese Anweisung wird zusammen mit der SLAVE-Anweisung verwendet.

Werfen Sie einen Blick auf Abschnitt 1.2.3, „Channel-Bonding-Schnittstellen“ für weitere Informationen zu Channel-Bonding-Interfaces.

NETMASK=<mask>

, wobei <mask> der Wert der Netzmaske ist.

NETWORK=<address>

, wobei <address> die Netzwerkadresse ist. Diese Anweisung wird nicht länger verwendet, da der Wert automatisch mit Hilfe des Befehls ifcalc berechnet wird.

ONBOOT=<answer>

, wobei <Antwort> Folgendes bedeuten kann:

  • yes — Dieses Gerät sollte beim Booten aktiviert werden.

  • no — Dieses Gerät sollte nicht beim Booten aktiviert werden.

PEERDNS=<answer>

, wobei <Antwort> Folgendes bedeuten kann:

  • yes — Ändern Sie /etc/resolv.conf, wenn die DNS-Anweisung gesetzt ist. Verwenden Sie DCHP, dann ist yes Standard.

  • no — Ändern Sie /etc/resolv.conf nicht.

SLAVE=<bond-interface>

, wobei <bond-interface> Folgendes bedeuten kann:

  • yes — Dieses Gerät wird vom in der MASTER-Direktive angegebenen Channel-Bonding-Interface gesteuert.

  • no — Dieses Gerät wird nicht vom in der MASTER-Direktive angegebenen Channel-Bonding-Interface gesteuert.

Diese Anweisung wird zusammen mit der MASTER-Anweisung verwendet.

Werfen Sie einen Blick auf Abschnitt 1.2.3, „Channel-Bonding-Schnittstellen“ für Weiteres zu Channel-Bonding-Interfaces.

SRCADDR=<address>

, wobei <Adresse> die angegebene Quell-IP-Adresse für ausgehende Pakete ist.

USERCTL=<answer>

, wobei <Antwort> Folgendes bedeuten kann:

  • yes — Benutzer, die nicht root sind, dürfen dieses Gerät kontrollieren.

  • no — Benutzer, die nicht root sind, dürfen dieses Gerät nicht kontrollieren.

1.2.2. IPsec Schnittstellen

Das folgende Beispiel zeigt die Datei ifcfg für eine Netzwerk-zu-Netzwerk IPsec-Verbindung für LAN A. Der eindeutige Name, mit dem die Verbindung in diesem Beispiel identifiziert wird ist ipsec1, weswegen die entsprechende Datei /etc/sysconfig/network-scripts/ifcfg-ipsec1 benannt wird.

TYPE=IPsec ONBOOT=yes IKE_METHOD=PSK SRCNET=192.168.1.0/24 DSTNET=192.168.2.0/24 DST=X.X.X.X

In diesem Beispiel ist X.X.X.X die öffentliche IP-Adresse des Ziel-IPsec-Routers.

Folgend ist eine Liste mit konfigurierbaren Parametern für eine IPsec-Schnittstelle:

DST=<address>

, wobei <address> die IP-Adresse des IPsec Ziel-Hosts oder Routers ist. Dies wird sowohl für Host-zu-Host, als auch für Netzwerk-zu-Netzwerk IPsec-Konfigurationen verwendet.

DSTNET=<network>

, wobei <network> die Netzwerk-Adresse des IPsec Ziel-Netzwerks ist. Dies wird lediglich für Netzwerk-zu-Netzwerk IPsec-Konfigurationen verwendet.

SRC=<address>

, wobei <address> die IP-Adress des IPsec Quell-Hosts oder Routers ist. Diese Einstellung ist optional und wird lediglich für Host-zu-Host IPsec-Konfigurationen verwendet.

SRCNET=<network>

, wobei <network> die Netzwerk-Adresse des IPsec Quell-Netzwerks ist. Dies wird lediglich für Netzwerk-zu-Netzwerk IPsec-Konfigurationen verwendet.

TYPE=<interface-type>

, wobei <interface-type>IPSEC ist. Beide Applikationen sind Teil des ipsec-tools-Paketes.

Siehe /usr/share/doc/initscripts-<version-number>/sysconfig.txt (ersetze <version-number> mit der Version des installierten initscripts-Pakets) für Konfigurationsparameter, wenn manuelle Key-Verschlüsselung mit IPsec verwendet wird.

Der racoon IKEv1 Key-Management-Daemon überträgt und konfiguriert einen Parameter-Satz für IPSec. Es kann dabei "preshared" Keys, RSA-Signatures oder GSS-API verwenden. Wenn racoon dazu benutzt wird, automatisch Key-Verschlüsselungen zu bewerkstelligen, so sind folgende Optionen erforderlich:

IKE_METHOD=<encryption-method>

, wobei <encryption-method> entweder PSK, X509 oder GSSAPI ist. Wenn PSK angegeben wird, muss der IKE_PSK-Parameter ebenfalls gesetzt sein. Wenn X509 angegeben wird, muss der IKE_CERTFILE-Parameter auch gesetzt sein.

IKE_PSK=<shared-key>

, wobei <shared-key> der gemeinsame, geheime Wert für die PSK (Preshared Keys) Methode ist.

IKE_CERTFILE=<cert-file>

, wobei <cert-file> eine gültige X.509-Zertifikatsdatei für den Host ist.

IKE_PEER_CERTFILE=<cert-file>

, wobei <cert-file> eine gültige X.509-Zertifikatsdatei für den Remote-Host ist.

IKE_DNSSEC=<answer>

, wobei <answer>yes ist. Der racoon-Daemon empfängt das X.509-Zertifikat des Remote-Host via DNS. Wenn ein IKE_PEER_CERTFILE angegeben wird, schließen Sie diesen Parameter nicht ein.

Für weitere Informationen zu Verschlüsselungsalgorithmen, die für IPsec verfügbar sind, sehen Sie die setkey man-Seite. Für weitere Informationen zu racoon, sehen Sie racoon und die racoon.conf man-Seiten.

1.2.3. Channel-Bonding-Schnittstellen

Red Hat Enterprise Linux erlaubt Administratoren, mehrere Netzwerk-Schnittstellen in einem einzelnen Kanal zu verbinden, indem die bonding Kernelmodule und eine spezielle Netzwerk-Schnitstelle, Channel-Bonding-Interface genannt, verwendet werden. Channel Bonding erlaubt es mehreren Netzwerk-Schnittstellen als eine zu arbeiten und gleichzeitig die Bandbreite zu erhöhen und Redundanz zu gewähren.

Um ein Channel-Bonding-Interface zu erstellen, erzeugen Sie eine Datei im Verzeichnis /etc/sysconfig/network-scripts/ mit dem Namen ifcfg-bond<N>, wobei Sie <N> mit der Nummer der Schnittstelle, z.B. 0, ersetzen.

Der Inhalt der Datei kann dem Typ der Schnittstelle entsprechen, die zusammengeführt wird, wie beispielsweise einer Ethernet-Schnittstelle. Der einzige Unterschied ist, dass die DEVICE=-Direktive auf bond<N> gesetzt werden muss, wobei <N> die Nummer der Schnittstelle ist.

Die Folgende ist ein Beispiel einer Channel-Bonding Konfigurationsdatei:

DEVICE=bond0 BONDING_OPTS="mode=1 miimon=500" BOOTPROTO=none ONBOOT=yes NETWORK=10.0.1.0 NETMASK=255.255.255.0 IPADDR=10.0.1.27 USERCTL=no

Nachdem das Channel-Bonding-Interface erzeugt wurde, müssen die zu verbindenden Netzwerk-Schnittstellen konfiguriert werden, indem die MASTER= und SLAVE=-Anweisungen zu deren Konfigurationsdateien hinzugefügt werden. Die Konfigurationdateien für jede der verbundenen Schnittstellen können fast identisch sein.

Wenn, zum Beispiel, zwei Ethernet-Schnittstellen verbunden werden, können beide, eth0 und eth1, wie im folgenden Beispiel aussehen:

DEVICE=eth<N> BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes USERCTL=no

In diesem Beispiel steht <N> für die Nummer der Schnittstelle.

1.2.4. Alias- und Clone-Dateien

Zwei weniger verwendete Arten von Schnittstellen-Konfigurationsdateien sind Alias- und Clone Dateien.

Alias-Schnittstellen-Konfigurationsdateien, welche dazu benutzt werden, mehrere Adressen an eine einzige Schnittstelle zu verbinden, muss das ifcfg-<if-name>:<alias-value> Namensgebungsschema verwendet werden.

Eine ifcfg-eth0:0-Datei kann z.B. so konfiguriert werden, dass sie DEVICE=eth0:0 und eine statische IP-Adresse 10.0.0.2 spezifieren kann und somit als Alias einer bereits konfigurierten Ethernet-Schnittstelle dienen kann, um ihre IP- Informationen über DHCP in ifcfg-eth0 zu empfangen. An dieser Stelle ist das eth0-Gerät mit einer dynamischen IP-Adresse verknüpft, dieselbe physikalische Netzwerkkarte kann aber jederzeit über die feste 10.0.0.2 IP-Adresse Anfragen empfangen.

Achtung

Alias-Schnittstellen unterstützen DHCP nicht.

Bei der Namensgebung einer Clone-Schnittstellen-Konfigurationsdatei sollten folgende Konventionen eingehalten werden: ifcfg-<if-name>-<clone-name>. Während eine Alias-Datei mehrere Adressen an einer bestehenden Schnittstelle ermöglicht, wird eine Clone-Datei dazu benutzt, zusätzliche Optionen für eine Schnittstelle festzulegen. Zum Beispiel kann eine Standard-DHCP-Ethernet-Schnittstelle, eth0 genannt, ähnlich aussehen wie in diesem Beispiel:

DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp

Da USERCTL auf no eingestellt ist, können Benutzer, wenn nichts anderes angegeben wird, diese Schnittstelle nicht starten oder beenden. Um den Benutzern dies zu ermöglichen, erstellen Sie einen Clone durch Kopieren von ifcfg-eth0 nach ifcfg-eth0-user und fügen Sie folgende Zeile zu ifcfg-eth0-user hinzu:

USERCTL=yes

Wenn ein Benutzer mit dem Befehl /sbin/ifup eth0-user die eth0-Schnittstelle startet, werden die Konfigurationsoptionen von ifcfg-eth0 und ifcfg-eth0-user kombiniert. Dies ist zwar nur ein sehr einfaches Beispiel, diese Methode kann über für viele verschiedene Optionen und Schnittstellen verwendet werden.

1.2.5. Schnittstellen für den Verbindungsaufbau

Falls Sie sich via Dialup-Verbindung mit dem Internet verbinden, wird eine Konfigurationsdatei für diese Schnittstelle benötigt.

PPP-Schnittstellendateien werden nach dem folgenden Format benannt:

ifcfg-ppp<X>

, wobei <N> für die eindeutige Nummer in Bezug auf eine bestimmte Schnittstelle steht.

Die Konfigurationsdatei der PPP-Schnittstelle wird automatisch erzeugt, wenn Sie wvdial, Netzwerk-Administrationstool oder Kppp verwenden, um einen Dialup-Account zu erzeugen. Sie können diese Datei aber auch manuell erstellen und bearbeiten.

Folgend ist eine typische ifcfg-ppp0-Datei:

DEVICE=ppp0 NAME=test WVDIALSECT=test MODEMPORT=/dev/modem LINESPEED=115200 PAPNAME=test USERCTL=true ONBOOT=no PERSIST=no DEFROUTE=yes PEERDNS=yes DEMAND=no IDLETIMEOUT=600

Serial Line Internet Protocol (SLIP) ist eine weitere Dialup-Schnittstelle, wird im allgemeinen aber seltener verwendet. Ein typischer Name für die Schnittstellen-Konfigurationsdatei der SLIP-Dateien ist z.B. ifcfg-sl0.

Weitere Optionen, die in diesen Dateien verwendet werden können, sind:

DEFROUTE=<answer>

, wobei <Antwort> Folgendes bedeuten kann:

  • yes — Stellt diese Schnittstelle als Standardroute ein.

  • no — Stellt diese Schnittstelle nicht als Standardroute ein.

DEMAND=<answer>

, wobei <Antwort> Folgendes bedeuten kann:

  • yes — Mit dieser Schnittstelle kann pppd eine Verbindung starten, wenn darauf zugegriffen wird.

  • no — Verbindungen mit dieser Schnittstelle müssen manuell hergestellt werden.

IDLETIMEOUT=<value>

, wobei <Wert> die Sekunden ohne Aktivität darstellt, nach denen die Schnittstelle die Verbindung selbst unterbricht.

INITSTRING=<string>

, wobei <Zeichenkette> die erste Zeichenfolge ist, die an das Modem übergeben wird. Diese Option wird hauptsächlich in Verbindung mit SLIP-Schnittstellen verwendet.

LINESPEED=<value>

, wobei <Wert> die Baudrate des Gerätes angibt. Zu den möglichen Standardwerten gehören 57600, 38400, 19200 und 9600.

MODEMPORT=<device>

, wobei <Gerät> der Name des Serial-Geräts ist, das die Verbindung für die Schnittstelle herstellt.

MTU=<value>

, wobei <Wert> die Maximum Transfer Unit (MTU)-Einstellung für die Schnittstelle ist. Die MTU bezieht sich auf die größtmögliche Zahl von Daten (in Bytes), die ein Frame übertragen kann, die Header-Information nicht mitgezählt. Bei einigen Dial-up-Situationen hat die Einstellung dieses Werts auf 576 zur Folge, dass weniger Pakete ausgelassen werden (DROP) und die Durchlässigkeit für Verbindungen leicht erhöht wird.

NAME=<name>

, wobei <Name> sich auf den Oberbegriff der Konfigurationssammlung für Dialup-Verbindungen bezieht.

PAPNAME=<name>

, wobei <Name> für den Benutzernamen steht, der während der Änderung des Password Authentication Protocol (PAP) vergeben wurde und Ihnen die Verbindung zu einem Remote-System ermöglicht.

PERSIST=<answer>

, wobei <Antwort> Folgendes bedeuten kann:

  • yes — Diese Schnittstelle sollte ständig aktiviert sein, auch wenn nach einem Abbruch das Modem deaktiviert wird.

  • no — Diese Schnittstelle sollte nicht ständig aktiv sein.

REMIP=<address>

, wobei <Adresse> die IP-Adresse des Remote-Systems ist. Wird üblicherweise nicht festgelegt.

WVDIALSECT=<name>

, wobei <Name> dieser Schnittstelle in /etc/wvdial.conf eine Anwähl-Konfiguration zuweist, die die anzuwählende Telefonnummer und andere wichtige Informationen für die Schnittstelle enthält.

1.2.6. Weitere Schnittstellen

Weitere übliche Schnittstellen-Konfigurationsdateien beinhalten Folgendes:

ifcfg-lo

Ein lokale Loopback-Schnittstelle wird oft zum Testen verwendet, wie auch in Applikationen, die eine zum System zurückweisende IP-Adresse benötigen. Jegliche Daten, die zum Loopback-Gerät gesendet werden, werden augenblicklich zur Netzwerkschicht des Host zurückgegeben.

Warnung

Das Loopback-Schnittstellenskript /etc/sysconfig/network-scripts/ifcfg-lo sollte niemals von Hand editiert werden. Andernfalls wird möglicherweise die richtige Funktionsweise des Systems beeinträchtigt.

ifcfg-irlan0

Eine Infrarot-Schnittstelle sorgt dafür, dass Informationen zwischen Geräten wie Laptop und Drucker über einen Infrarot-Link fließen, welcher ähnlich arbeitet wie ein Ethernet-Gerät, mit dem Unterschied, dass es normalerweise über eine Peer-to-Peer-Verbindung läuft.

ifcfg-plip0

Eine Parallel-Line-Interface-Protocol (PLIP)-Verbindung arbeitet auf ähnliche Weise wie ein Ethernet-Gerät, mit dem Unterschied, dass sie eine parallele Schnittstelle verwendet.

ifcfg-tr0

Token Ring Topologien sind nicht mehr so verbreitet in Local Area Networks (LANs), da sie durch Ethernet verdrängt wurden.

1.3. Schnittstellen-Kontrollskripts

Die Schnittstellen-Kontrollskripts aktivieren und deaktivieren Systemschnittstellen. Die zwei wichtigsten Schnittstellen-Kontroll-Skripts sind /sbin/ifdown und /sbin/ifup, die verschiedene andere Kontrollskripte aus dem /etc/sysconfig/network scripts/-Verzeichnis verwenden.

Die ifup- und ifdown-Internet-Scripts sind symbolische Links zu den Skripte im /sbin/-Verzeichnis. Wenn eines der beiden Skripte aufgerufen wird, verlangt dieses, dass ein Schnittstellenwert angegeben wird, wie z.B.:

ifup eth0

Achtung

Die ifup- und ifdown-Interface-Scripts sind die einzigen Skripte, die der Benutzer zum Starten und Beenden von Netzwerk-Schnittstellen verwenden sollte.

Die folgenden Skripte sind lediglich zu Referenzzwecken angegeben.

An dieser Stelle werden zwei Dateien, /etc/rc.d/init.d/functions und /etc/sysconfig/network-scripts/network-functions dazu verwendet, eine ganze Reihe von Aufgaben bei der Initialisierung des Netzwerks zu erfüllen. Weitere Informationen finden Sie unter Abschnitt 1.5, „Netzwerkfunktionsdateien“.

Nachdem sichergestellt ist, dass eine Schnittstelle angegeben wurde und dass der Benutzer, der diese Anfrage ausführt, die Berechtigung zur Steuerung der Schnittstelle hat, wird das richtige Skript zum Starten oder Beenden der Schnittstelle aufgerufen. Zu den gängigsten Schnittstellen-Kontrollskripten im Verzeichnis /etc/sysconfig/network-scripts/ gehören die Folgenden:

ifup-aliases

Konfiguriert die IP-Aliase der Schnittstellen-Konfigurationsdateien, wenn einer Schnittstelle mehr als eine IP-Adresse zugeordnet ist.

ifup-ippp und ifdown-ippp

Aktiviert und deaktiviert die ISDN-Schnittstellen.

ifup-ipsec und ifdown-ipsec

Aktiviert und deaktiviert die IPsec-Schnittstellen.

ifup-ipv6 und ifdown-ipv6

Aktiviert und Deaktiviert die IPv6-Schnittstellen.

ifup-ipx

Aktiviert eine IPX-Schnittstelle.

ifup-plip

Aktiviert eine PLIP-Schnittstelle.

ifup-plusb

Aktiviert eine USB-Schnittstelle für Netzwerkverbindungen.

ifup-post und ifdown-post

Enthält Befehle, die nach Aktivierung bzw. Deaktivierung einer Schnittstelle ausgeführt werden müssen.

ifup-ppp und ifdown-ppp

Aktiviert oder deaktiviert eine PPP-Schnittstelle.

ifup-routes

Fügt statische Routes für ein bestimmtes Gerät hinzu, wenn dessen Schnittstelle aktiviert wird.

ifdown-sit und ifup-sit

Enthalten eine Funktion, die zum Aktivieren und Deaktivieren eines IPv6- Tunnels in einer IPv4-Verbindung aufgerufen wird.

ifup-sl und ifdown-sl

Aktiviert oder deaktiviert ein SLIP-Interface.

ifup-wireless

Aktiviert eine Wireless-Schnittstelle.

Warnung

Achten Sie darauf, dass das Entfernen oder Modifizieren irgendeines Skripts im Verzeichnis /etc/sysconfig/network-scripts/ dazu führen kann, dass Schnittstellenverbindungen seltsam reagieren oder scheitern, da sie von diesen Skripts abhängig sind. Nur erfahrene Benutzer sollten daher Skripts verändern, die für eine Netzwerkschnittstelle relevant sind.

Der einfachste Weg, alle Netzwerk-Skripte gleichzeitig zu ändern, ist den Befehl /sbin/service auf dem Netzwerk-Service (/etc/rc.d/init.d/network) wie folgt auszuführen:

/sbin/service network <action>

<action> steht in diesem Beispiel entweder für start, stop oder restart.

Um eine Liste der konfigurierten Geräte und der augenblicklich aktiven Netzwerk-Schnittstellen anzuzueigen, benutzen Sie folgenden Befehl:

/sbin/service network status

1.4. Configuring Static Routes

Routing will be configured on routing devices, therefore it should not be necessary to configure static routes on Red Hat Enterprise Linux servers or clients. However, if static routes are required they can be configured for each interface. This can be useful if you have multiple interfaces in different subnets. Use the route command to display the IP routing table.

Static route configuration is stored in a /etc/sysconfig/network-scripts/route-interface file. For example, static routes for the eth0 interface would be stored in the /etc/sysconfig/network-scripts/route-eth0 file. The route-interface file has two formats: IP command arguments and network/netmask directives.

IP Command Arguments Format

Define a default gateway on the first line. This is only required if the default gateway is not set via DHCP:

default X.X.X.X dev interface

X.X.X.X is the IP address of the default gateway. The interface is the interface that is connected to, or can reach, the default gateway.

Define a static route. Each line is parsed as an individual route:

X.X.X.X/X via X.X.X.X dev interface

X.X.X.X/X is the network number and netmask for the static route. X.X.X.X and interface are the IP address and interface for the default gateway respectively. The X.X.X.X address does not have to be the default gateway IP address. In most cases, X.X.X.X will be an IP address in a different subnet, and interface will be the interface that is connected to, or can reach, that subnet. Add as many static routes as required.

The following is a sample route-eth0 file using the IP command arguments format. The default gateway is 192.168.0.1, interface eth0. The two static routes are for the 10.10.10.0/24 and 172.16.1.0/24 networks:

default 192.168.0.1 dev eth0
10.10.10.0/24 via 192.168.0.1 dev eth0
172.16.1.0/24 via 192.168.0.1 dev eth0

Static routes should only be configured for other subnets. The above example is not necessary, since packets going to the 10.10.10.0/24 and 172.16.1.0/24 networks will use the default gateway anyway. Below is an example of setting static routes to a different subnet, on a machine in a 192.168.0.0/24 subnet. The example machine has an eth0 interface in the 192.168.0.0/24 subnet, and an eth1 interface (10.10.10.1) in the 10.10.10.0/24 subnet:

10.10.10.0/24 via 10.10.10.1 dev eth1

Duplicate Default Gateways

If the default gateway is already assigned from DHCP, the IP command arguments format can cause one of two errors during start-up, or when bringing up an interface from the down state using the ifup command: "RTNETLINK answers: File exists" or 'Error: either "to" is a duplicate, or "X.X.X.X" is a garbage.', where X.X.X.X is the gateway, or a different IP address. These errors can also occur if you have another route to another network using the default gateway. Both of these errors are safe to ignore.

Network/Netmask Directives Format

You can also use the network/netmask directives format for route-interface files. The following is a template for the network/netmask format, with instructions following afterwards:

ADDRESS0=X.X.X.X
NETMASK0=X.X.X.X
GATEWAY0=X.X.X.X
  • ADDRESS0=X.X.X.X is the network number for the static route.

  • NETMASK0=X.X.X.X is the netmask for the network number defined with ADDRESS0=X.X.X.X.

  • GATEWAY0=X.X.X.X is the default gateway, or an IP address that can be used to reach ADDRESS0=X.X.X.X

The following is a sample route-eth0 file using the network/netmask directives format. The default gateway is 192.168.0.1, interface eth0. The two static routes are for the 10.10.10.0/24 and 172.16.1.0/24 networks. However, as mentioned before, this example is not necessary as the 10.10.10.0/24 and 172.16.1.0/24 networks would use the default gateway anyway:

ADDRESS0=10.10.10.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.0.1
ADDRESS1=172.16.1.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.0.1

Subsequent static routes must be numbered sequentially, and must not skip any values. For example, ADDRESS0, ADDRESS1, ADDRESS2, and so on.

Below is an example of setting static routes to a different subnet, on a machine in the 192.168.0.0/24 subnet. The example machine has an eth0 interface in the 192.168.0.0/24 subnet, and an eth1 interface (10.10.10.1) in the 10.10.10.0/24 subnet:

ADDRESS0=10.10.10.0
NETMASK0=255.255.255.0
GATEWAY0=10.10.10.1

DHCP should assign these settings automatically, therefore it should not be necessary to configure static routes on Red Hat Enterprise Linux servers or clients.

1.5. Netzwerkfunktionsdateien

Red Hat Enterprise Linux nutzt verschiedene Dateien, die wichtige allgemeine Funktionen zum Aktivieren und Deaktivieren von Schnittstellen enthalten. Diese Funktionen werden in einigen wenigen Dateien in geeigneter Weise gruppiert und können bei Bedarf einfach abgerufen werden, wodurch diese Funktionen nicht in jeder Kontrolldatei enthalten sein müssen.

Die gängigste Netzwerkfunktionsdatei ist /etc/sysconfig/network-scripts/network-functions. Diese Datei enthält eine Vielzahl von allgemein genutzten IPv4-Funktionen, die für viele Schnittstellenkontrollskripte hilfreich sind. Hierzu gehört das Kontaktieren laufender Programme, die Informationen zu den Änderungen des Schnittstellenstatus benötigen, das Einrichten von Host-Namen, die Suche eines Gateway-Gerätes, das Prüfen, ob ein bestimmtes Gerät ausgefallen ist oder nicht, und das Hinzufügen einer Standard-Route.

Da die Funktionen, die für die IPv6-Schnittstellen benötigt werden, sich von denen für IPv4-Schnittstellen unterscheiden, gibt es eine Datei /etc/sysconfig/network-scripts/network-functions-ipv6, die speziell diese Information beinhaltet. In dieser Datei finden Sie Funktionen, die statische IPv6-Routen konfigurieren und löschen, Tunnel erstellen und entfernen, IPv6-Adressen einer Schnittstelle hinzufügen oder sie von dort entfernen sowie auch testen, ob auf der Schnittstelle eine IPv6-Adresse existiert.

1.6. Zusätzliche Ressourcen

Die Folgenden sind Ressourcen, die näher auf Netzwerk-Schnittstellen eingehen.

1.6.1. Installierte Dokumentation

/usr/share/doc/initscripts-<version>/sysconfig.txt

Ein Leitfaden zu verfügbaren Optionen für Netzwerk-Konfigurationsdateien, einschließlich IPv6-Optionen, die in diesem Kapitel nicht behandelt werden.

/usr/share/doc/iproute-<version>/ip-cref.ps

Diese Datei enthält eine Vielzahl an Informationen zu ip, die u.a. zur Bearbeitung von Routing-Tabellen verwendet werden können. Sehen Sie sich diese Datei mit ggv oder kghostview an.

Kapitel 2. Netzwerkkonfiguration

Computer benötigen eine Netzwerkverbindung, um mit anderen Computern kommunizieren zu können. Dies wird dadurch erreicht, dass das Betriebssystem eine Schnittstellenkarte (wie Ethernet, ISDN-Modem oder Token Ring) erkennt und die Schnittstelle für die Verbindung mit dem Netzwerk konfiguriert.

Das Netzwerk-Administrationstool kann für das Konfigurieren folgender Typen von Netzwerkschnittstellen verwendet werden:

  • Ethernet

  • ISDN

  • Modem

  • xDSL

  • Token Ring

  • CIPE

  • Wireless-Geräte

Es kann auch dazu verwendet werden, IPsec-Verbindungen zu konfigurieren, DNS-Einstellungen zu verwalten und die Datei /etc/hosts, in der zusätzliche Paare von Hostnamen und IP-Adressen gespeichert sind, zu warten.

Um das Netzwerk-Administrationstool verwenden zu können, müssen Sie über Root-Rechte verfügen. Um die Applikation zu starten, klicken Sie auf Applications (the main menu on the panel) (im Panel) => Systemeinstellungen => Netzwerk oder geben Sie den Befehl system-config-network in einem Shell-Prompt ein (zum Beispiel in einem XTerm oder einem GNOME Terminal). Wenn Sie den Befehl eingeben, wird die grafische Version angezeigt, wenn X ausgeführt wird, ansonsten wird die textbasierte Version ausgeführt.

Um die Befehlszeilen-Version zu verwenden, führen Sie den Befehl system-config-network-cmd --help als root aus, um alle Optionen anzuzeigen.

Netzwerk-Administrationstool

Hauptfenster

Abbildung 2.1. Netzwerk-Administrationstool

Tipp

Rufen Sie die Red Hat Hardware Kompatibilitätsliste (http://hardware.redhat.com/hcl/) ab, um zu ermitteln, ob Red Hat Enterprise Linux Ihr Hardware-Gerät unterstützt.

2.1. Überblick

Führen Sie folgende Schritte aus, um eine Netzwerkverbindung mit dem Netzwerk-Administrationstool durchzuführen:

  1. Fügen Sie ein dem physischen Hardware-Gerät zugeordnetes Netzwerkgerät hinzu.

  2. Fügen Sie das physikalische Hardware-Gerät zur Hardwareliste hinzu, sofern noch nicht vorhanden.

  3. Konfigurieren Sie den Hostnamen und die DNS-Einstellungen.

  4. Konfigurieren Sie die Hosts, die nicht über DNS gesucht werden können.

In diesem Kapitel werden diese Schritte für alle Netzwerkverbindungstypen erläutert.

2.2. Herstellen einer Ethernet-Verbindung

Für das Herstellen einer Internetverbindung benötigen Sie eine Netzwerkschnittstellenkarte (Network Interface Card, NIC), ein Netzwerkkabel (in der Regel ein CAT5-Kabel) und ein Netzwerk. Netzwerke weisen verschiedene Geschwindigkeiten auf; stellen Sie sicher, dass die NIC mit dem Netzwerk kompatibel ist, mit dem Sie eine Verbindung herstellen möchten.

Führen Sie diese Schritte aus, um eine Ethernet-Verbindung hinzuzufügen:

  1. Klicken Sie auf das Tab Geräte.

  2. Klicken Sie auf den Button Neu.

  3. Wählen Sie Ethernet-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.

  4. Ist die Netzwerkschnittstellenkarte bereits zur Hardwareliste hinzugefügt, wählen Sie sie aus der Liste Ethernet-Karte aus. Wählen Sie andernfalls Andere Ethernet-Karte, um das Hardware-Gerät hinzuzufügen.

    Anmerkung

    Das Installationsprogramm erkennt in der Regel die unterstützten Ethernet-Geräte und fordert Sie auf, diese zu konfigurieren. Haben Sie während der Installation Ethernet-Geräte konfiguriert, werden diese in der Hardwareliste auf dem Tab Hardware angezeigt.

  5. Wenn Sie Andere Ethernet-Karte ausgewählt haben, wird das FensterEthernet-Adapter wählen angezeigt. Wählen Sie den Hersteller und das Modell der Ethernet-Karte aus. Wählen Sie den Gerätenamen aus. Ist dies die erste Ethernet-Karte des Systems, wählen Sie eth0 als Gerätenamen aus, ist es die zweite Ethernet-Karte, wählen Sie eth1 aus, usw. Das Netzwerk-Administrationstool ermöglicht Ihnen auch das Konfigurieren der Ressourcen für die NIC. Klicken Sie auf Vor, um fortzufahren.

  6. Im Fenster Netzwerkeinstellungen konfigurieren, wie in Abbildung 2.2, „Etherneteinstellungen“ abgebildet, können Sie zwischen DHCP und statischer IP-Adresse wählen. Wenn das Gerät bei jedem Netzwerkstart eine andere IP-Adresse erhält, geben Sie keinen Hostnamen an. Klicken Sie auf Vor, um fortzufahren.

  7. Klicken Sie auf Anwenden auf der Seite Ethernet-Gerät erstellen.

Etherneteinstellungen

Etherneteinstellungen

Abbildung 2.2. Etherneteinstellungen

Nach der Konfiguration wird das Ethernet-Gerät in der Geräteliste wie in Abbildung 2.3, „Ethernet-Gerät“ angezeigt.

Ethernet-Gerät

Ethernet-Gerät

Abbildung 2.3. Ethernet-Gerät

Stellen Sie sicher, dass Sie Datei => Speichern gewählt haben, um Änderungen zu speichern.

Nach dem Hinzufügen des Ethernet-Geräts können Sie die Konfiguration bearbeiten, indem Sie das Gerät aus der Geräteliste auswählen und auf Bearbeiten klicken. Beispiel: Das hinzugefügte Gerät ist so konfiguriert, dass es zur Bootzeit standardmäßig startet. Sie können den Wert Gerät beim Starten des Computers aktivieren bearbeiten, und die Änderungen speichern.

Wenn das Gerät hinzugefügt wurde, wird es nicht sofort aktiviert, wie Sie am Inaktiv-Status erkennen können. Um das Gerät zu aktivieren, wählen Sie dieses aus der Liste aus und klicken Sie auf den Button Aktivieren. Wenn das System zum Aktivieren des Gerätes beim Starten des Computers konfiguriert wurde (Standard), muss dieser Schritt nicht nocheinmal ausgeführt werden.

Wenn Sie einer Ethernet-Karte mehr als ein Gerät zuordnen, sind die nachfolgenden Geräte Geräte-Aliase. Ein Geräte-Alias ermöglicht Ihnen das Einrichten mehrerer virtueller Geräte für ein physisches Gerät, und gibt damit diesem physischen Gerät mehr als eine IP-Adresse. Sie können z.B. ein eth1 und ein eth1:1 Gerät konfigurieren. Informationen hierzu finden Sie unter Abschnitt 2.11, „Geräte-Aliase“.

2.3. Herstellen einer ISDN-Verbindung

Eine ISDN-Verbindung ist eine Internetverbindung, die mit einer ISDN- Modemkarte über eine spezielle Telefonleitung hergestellt wird, die von einer Telefongesellschaft installiert wurde. In Europa sind ISDN-Verbindungen weit verbreitet.

Führen Sie diese Schritte aus, um eine ISDN-Verbindung hinzuzufügen:

  1. Klicken Sie auf das Tab Geräte.

  2. Klicken Sie auf den Button Neu.

  3. Wählen Sie ISDN-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.

  4. Wählen Sie den ISDN-Adapter aus dem Pull-Down-Menü aus. Konfigurieren Sie dann die Ressourcen und das D-Channel-Protokoll für den Adapter. Klicken Sie auf Vor, um fortzufahren.

    ISDN-Einstellungen

    ISDN-Einstellungen

    Abbildung 2.4. ISDN-Einstellungen

  5. Wenn Ihr Internet Service Provider (ISP) in der vorkonfigurierten Liste genannt wird, wählen Sie diesen aus. Geben Sie andernfalls die erforderlichen Informationen über Ihren ISP-Account ein. Wenn Sie die Werte nicht kennen, wenden Sie sich bitte an Ihren ISP. Klicken Sie auf Vor.

  6. Wählen Sie im Fenster IP-Einstellungen den Kapselungsmodus, und ob Sie eine IP-Adresse über DHCP erhalten oder eine statisch einstellen wollen. Klicken Sie wenn Sie fertig sind auf Vor.

  7. Klicken Sie auf der Seite Dialup-Verbindung erstellen auf Anwenden.

Nachdem Sie das ISDN-Gerät konfiguriert haben, erscheint es in der Geräteliste als Gerätetyp ISDN wie in Abbildung 2.5, „ISDN-Gerät“ abgebildet.

Stellen Sie sicher, dass Sie Datei => Speichern gewählt haben, um Änderungen zu speichern.

Nachdem Sie das ISDN-Gerät hinzugefügt haben, können Sie dessen Konfiguration ändern, in dem Sie das Gerät aus der Geräteliste auswählen und auf Bearbeiten klicken. Wenn zum Beispiel das Gerät hinzugefügt wurde, ist es automatisch so konfiguriert, dass es standardmäßig nicht beim Booten startet. Bearbeiten Sie die Konfiguration, um diese Einstellungen zu ändern. Sie können z.B. die Kompression, PPP-Optionen, Login-Namen, Passwörter und vieles mehr ändern.

Wenn das Gerät hinzugefügt wurde, wird es nicht sofort aktiviert, wie Sie am Inaktiv-Status erkennen können. Um das Gerät zu aktivieren, wählen Sie dieses aus der Liste aus und klicken Sie auf den Button Aktivieren. Wenn das System zum Aktivieren des Gerätes beim Starten des Computers konfiguriert wurde (Standard), muss dieser Schritt nicht nocheinmal ausgeführt werden.

ISDN-Gerät

ISDN-Gerät

Abbildung 2.5. ISDN-Gerät

2.4. Herstellen einer Modem-Verbindung

Ein Modem kann zum Konfigurieren einer Internetverbindung über eine aktive Telefonleitung verwendet werden. Ein ISP-Account (auch Einwählkonto) ist erforderlich.

Führen Sie diese Schritte aus, um eine Modem-Verbindung hinzuzufügen:

  1. Klicken Sie auf das Tab Geräte.

  2. Klicken Sie auf den Button Neu.

  3. Wählen Sie Modemverbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.

  4. Ist bereits ein Modem in der Hardwareliste konfiguriert, (auf dem Hardware-Tabulator), nimmt das Netzwerk-Administrationstool an, dass Sie dieses zum Erstellen einer Internetverbindung verwenden wollen. Ist noch kein Modem konfiguriert, wird versucht, etwaige Modems im System zu erkennen. Dies kann eine Weile dauern. Wird kein Modem gefunden, wird eine Mitteilung angezeigt, dass die angezeigten Einstellungen nicht auf durch den Test herausgefunden wurden.

  5. Nach der Prüfung wird das Fenster in Abbildung 2.6, „Modem-Einstellungen“ angezeigt.

    Modem-Einstellungen

    Modem-Einstellungen

    Abbildung 2.6. Modem-Einstellungen

  6. Konfigurieren Sie die Baudrate, Datenflusssteuerung und Modemlautstärke. Wenn Sie die Werte nicht kennen, übernehmen Sie die Standardwerte. Wenn Sie keine Tonwahlverwendung haben, heben Sie die Markierung des entsprechenden Kontrollkästchens auf. Klicken Sie auf Vor.

  7. Wenn Ihr ISP in der vorkonfigurierten Liste genannt wird, wählen Sie diesen aus. Geben Sie andernfalls die erforderlichen Informationen über Ihren ISP-Account ein. Wenn Sie die Werte nicht kennen, wenden Sie sich bitte an Ihren ISP. Klicken Sie auf Vor.

  8. Wählen Sie auf der Seite IP-Einstellungen ob Sie eine IP-Adresse automatisch erhalten oder statisch setzen möchten. Klicken Sie dann auf Vor.

  9. Klicken Sie auf der Seite Dialup-Verbindung erstellen auf Anwenden.

Nach der Konfiguration wird das Modem in der Gerätelistemit dem Gerätetyp Modem wie in Abbildung 2.7, „Modem“ abgebildet, angezeigt.

Modem

Modem

Abbildung 2.7. Modem

Stellen Sie sicher, dass Sie Datei => Speichern gewählt haben, um Änderungen zu speichern.

Nach dem Hinzufügen des Modems können Sie die Konfiguration bearbeiten, indem Sie das Gerät aus der Geräteliste auswählen und auf Bearbeiten klicken. Beispiel: Das hinzugefügte Gerät ist so konfiguriert, dass es zur Bootzeit standardmäßig nicht startet. Bearbeiten Sie die Konfiguration, um diese Einstellung zu modifizieren. Sie können auch Komprimierung, PPP-Optionen, Anmeldenamen, Passwort und vieles mehr ändern.

Wenn das Gerät hinzugefügt wurde, wird es nicht sofort aktiviert, wie Sie am Inaktiv-Status erkennen können. Um das Gerät zu aktivieren, wählen Sie dieses aus der Liste aus und klicken Sie auf den Button Aktivieren. Wenn das System zum Aktivieren des Gerätes beim Starten des Computers konfiguriert wurde (Standard), muss dieser Schritt nicht nocheinmal ausgeführt werden.

2.5. Herstellen einer xDSL-Verbindung

DSL steht für Digital Subscriber Lines. Es gibt verschiedene Arten von DSL wie zum Beispiel ADSL, IDSL und SDSL. Das Netzwerk-Administrationstool verwendet den Begriff xDSL, um alle Arten von DSL-Verbindungen zu bezeichnen.

Manche DSL-Anbieter fordern Sie auf, Ihr System zu konfigurieren, um über DHCP eine IP-Adresse mit einer Ethernet-Karte zu erhalten. Manche DSL-Anbieter fordern Sie auf, eine PPPoE-Verbindung (Point-to-Point Protocol over Ethernet) mit einer Ethernet-Karte zu konfigurieren. Fragen Sie Ihre DSL-Anbieter, welche Methode Sie verwenden sollten.

Falls Sie bei Bedarf DHCP verwenden, lesen Sie Abschnitt 2.2, „Herstellen einer Ethernet-Verbindung“, um die Ethernet-Karte zu konfigurieren.

Wenn Sie PPPoE verwenden sollen, befolgen Sie diese Schritte:

  1. Klicken Sie auf das Tab Geräte.

  2. Klicken Sie auf den Button Hinzufügen.

  3. Wählen Sie xDSL-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Weiter, wie unter Abbildung 2.8, „Gerätetyp auswählen“ dargestellt.

    Gerätetyp auswählen

    Gerätetyp auswählen

    Abbildung 2.8. Gerätetyp auswählen

  4. Wenn sich die Ethernet-Karte bereits auf der Hardwareliste befindet, wählen Sie das Ethernet-Gerät aus dem Pull-Down-Menü auf der in Abbildung 2.9, „xDSL-Einstellungen“ abgebildeten Seite aus. Andernfalls wird das Fenster Ethernet-Adapter wählen angezeigt.

    Anmerkung

    Das Installationsprogramm erkennt in der Regel die unterstützten Ethernet-Geräte und fordert Sie auf, diese zu konfigurieren. Haben Sie während der Installation Ethernet-Geräte konfiguriert, werden diese in der Hardwareliste auf dem Tab Hardware angezeigt.

    xDSL-Einstellungen

    xDSL-Einstellungen

    Abbildung 2.9. xDSL-Einstellungen

  5. Geben Sie den Providername, Anmeldename und Passwort ein. Falls Sie keinen T-Online-Account einrichten, wählen Sie Normal aus dem Pull-Down-Menü Account-Typ.

    Falls Sie einen T-Online-Account einrichten, wählen Sie T-Online aus dem Pull-Down-Menü Account-Typ und geben die entsprechenden Werte in die Felder Login-Name und Passwort ein. Sie können mit der Konfiguration Ihres T-Online-Accounts fortfahren, sobald die DSL-Verbindung vollständig eingerichtet wurde (werfen Sie einen Blick auf Einrichten eines T-Online-Accounts).

  6. Klicken Sie auf Weiter, um zum Menü DSL-Verbindung einrichten zu gelangen. Überprüfen Sie Ihre Einstellungen und klicken Sie auf Anwenden, um den Vorgang abzuschließen.

  7. Nach der Konfiguration der DSL-Verbindung erscheint diese in der Geräteliste wie in Abbildung 2.10, „xDSL-Gerät“ dargestellt.

    xDSL-Gerät

    xDSL-Gerät

    Abbildung 2.10. xDSL-Gerät

  8. Nach dem Hinzufügen der xDSL-Verbindung können Sie die Konfiguration bearbeiten, indem Sie das Gerät aus der Geräteliste auswählen und auf Bearbeiten klicken.

    xDSL-Konfiguration

    xDSL-Konfiguration

    Abbildung 2.11. xDSL-Konfiguration

    Wenn beispielsweise das Gerät hinzugefügt wird, ist es so konfiguriert, dass es standardmäßig nicht während des Startvorgangs gestartet wird. Bearbeiten Sie die Konfiguration des Geräts, um diese Einstellung zu ändern. Klicken Sie auf OK, wenn Sie fertig sind.

  9. Wenn Sie mit der Einrichtung Ihrer xDSL-Verbindung zufrieden sind, wählen Sie Datei => Speichern, um die Änderungen zu speichern.

Einrichten eines T-Online-Accounts

Wenn Sie einen T-Online-Account einrichten, befolgen Sie diese zusätzlichen Schritte:

  1. Wählen Sie das Gerät aus der Geräteliste und klicken Sie auf Bearbeiten.

  2. Wählen Sie den Reiter Provider aus dem Menü xDSL-Konfiguration, wie in Abbildung 2.12, „xDSL-Konfiguration - Reiter "Provider"“ dargestellt.

    xDSL-Konfiguration - Reiter "Provider"

    xDSL-Konfiguration - Reiter "Provider"

    Abbildung 2.12. xDSL-Konfiguration - Reiter "Provider"

  3. Klicken Sie auf die Schaltfläche Einrichten eines T-Online-Accounts. Dies öffnet das Fenster Account-Einrichtung für Ihren T-Online-Account, wie in Abbildung 2.13, „Account-Einrichtung“ dargestellt.

    Account-Einrichtung

    Account-Einrichtung

    Abbildung 2.13. Account-Einrichtung

  4. Geben Sie Ihre Anschlusskennung, Zugehörige T-Online-Nummer, Nummer/Suffix für parallele Benutzer und Ihr persönliches Passwort ein. Klicken Sie nach Abschluss auf OK, um das Fenster Account-Einrichtung zu schließen.

  5. Klicken Sie im Fenster xDSL-Konfiguration auf OK. Stellen Sie sicher, dass Sie Datei => Speichern aus Netzwerk-Administrationstool auswählen, um die Änderungen zu speichern.

Wenn das Gerät hinzugefügt wurde, wird es nicht sofort aktiviert, wie Sie am Inaktiv-Status erkennen können. Um das Gerät zu aktivieren, wählen Sie dieses aus der Liste aus und klicken Sie auf den Button Aktivieren. Wenn das System zum Aktivieren des Gerätes beim Starten des Computers konfiguriert wurde (Standard), muss dieser Schritt nicht nocheinmal ausgeführt werden.

2.6. Herstellen einer Token Ring-Verbindung

Ein Token Ring-Netzwerk ist ein Netzwerk, in dem alle Computer kreisförmig miteinander verbunden sind. Ein Token, oder ein spezielles Netzwerkpaket, bewegt sich durch den Token Ring und ermöglicht den Computern das Senden von Informationen untereinander.

Tipp

Weitere Informationen zur Verwendung eines Token Ring unter Linux finden Sie auf der Linux Token Ring Project-Web-Site unter http://www.linuxtr.net/.

Führen Sie diese Schritte aus, um eine Token Ring-Verbindung hinzuzufügen:

  1. Klicken Sie auf das Tab Geräte.

  2. Klicken Sie auf den Button Neu.

  3. Wählen Sie Token Ring-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.

  4. Ist die Token Ring-Karte bereits zur Hardwareliste hinzugefügt, wählen Sie diese aus der Liste Ethernet-Karte aus. Wählen Sie andernfalls Andere Token Ring-Karte, um das Hardware-Gerät hinzuzufügen.

  5. Wenn Sie Andere Token Ring-Karte ausgewählt haben, wird das Fenster Token Ring-Adapter wählen wie in Abbildung 2.14, „Token Ring-Einstellungen“ angezeigt. Wählen Sie Hersteller und Modell des Adapters aus. Wählen Sie den Gerätenamen aus. Ist dies die erste Token Ring-Karte des Systems, wählen Sie tr0; aus, wenn es die zweite ist, wählen Sie tr1 (usw.). Das Netzwerk-Administrationstool ermöglicht dem Benutzer auch das Konfigurieren der Ressourcen für den Adapter. Klicken Sie auf Vor, um fortzufahren.

    Token Ring-Einstellungen

    Token Ring-Einstellungen

    Abbildung 2.14. Token Ring-Einstellungen

  6. Wählen Sie auf der Seite Netzwerkeinstellungen konfigurieren zwischen DHCP und einer statischen IP-Adresse aus. Sie können einen Hostnamen für das Gerät angeben. Wenn das Gerät bei jedem Netzwerkstart eine dynamische IP-Adresse erhält, geben Sie keinen Hostnamen an. Klicken Sie auf Vor, um fortzufahren.

  7. Klicken Sie auf Anwenden auf der Neues Token Ring-Gerät erstellen Seite.

Nach der Konfiguration wird das Token Ring-Gerät in der Geräteliste wie in Abbildung 2.15, „Token Ring-Gerät“ angezeigt.

Token Ring-Gerät

Token Ring-Gerät

Abbildung 2.15. Token Ring-Gerät

Stellen Sie sicher, dass Sie Datei => Speichern gewählt haben, um Änderungen zu speichern.

Nach dem Hinzufügen des Geräts können Sie die Konfiguration bearbeiten, indem Sie das Gerät aus der Geräteliste auswählen und auf Bearbeiten klicken. So können Sie zum Beispiel konfigurieren, ob das Gerät zur Bootzeit gestartet wird.

Wenn das Gerät hinzugefügt wurde, wird es nicht sofort aktiviert, wie Sie am Inaktiv-Status erkennen können. Um das Gerät zu aktivieren, wählen Sie dieses aus der Liste aus und klicken Sie auf den Button Aktivieren. Wenn das System zum Aktivieren des Gerätes beim Starten des Computers konfiguriert wurde (Standard), muss dieser Schritt nicht nocheinmal ausgeführt werden.

2.7. Herstellen einer Wireless-Verbindung

Kabellose Ethernet-Geräte werden immer beliebter. Die Konfiguration ähnelt der Ethernetkonfiguration. Allerdings können Sie zum Beispiel SSID oder den Schlüssel für das Wireless-Gerät konfigurieren.

Führen Sie diese Schritte aus, um eine Wireless-Ethernet-Verbindung hinzuzufügen:

  1. Klicken Sie auf das Tab Geräte.

  2. Klicken Sie auf den Button Neu.

  3. Wählen Sie Wireless-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.

  4. Ist die Wireless-Netzwerkschnittstellenkarte bereits zur Hardwareliste hinzugefügt, wählen Sie diese aus der Liste Ethernet-Karte aus. Wählen Sie andernfalls Andere Wireless-Karte, um das Hardware-Gerät hinzuzufügen.

    Anmerkung

    Das Installationsprogramm erkennt in der Regel die unterstützten Wireless-Ethernet- Geräte und fordert Sie auf, diese zu konfigurieren. Wurden diese während der Installation konfiguriert, werden sie bereits auf dem Hardware Tab angezeigt.

  5. Wenn Sie Andere Wireless-Karte ausgewählt haben, erscheint das Ethernet-Adapter wählen Fenster. Wählen Sie den Hersteller und das Modell der Ethernet-Karte und des Gerätes aus. Wenn dies die erste Ethernet-Karte des Systems ist, wählen Sie eth0 aus, wenn es die zweite ist, eth1 (usw.). Das Netzwerk-Administrationstool ermöglicht Ihnen auch das Konfigurieren der Ressourcen für die Wireless-Netzwerkschnittstellenkarte. Klicken Sie auf Vor , um fortzufahren.

  6. Auf der Seite Wireless-Verbindungen konfigurieren wie in Abbildung 2.16, „Wireless-Einstellungen“ abgebildet, konfigurieren Sie die Einstellungen für das Wireless-Gerät.

    Wireless-Einstellungen

    Wireless-Einstellungen

    Abbildung 2.16. Wireless-Einstellungen

  7. Wählen Sie auf der Seite Netzwerkeinstellungen konfigurieren zwischen DHCP und einer statischen IP-Adresse aus. Sie können einen Hostnamen für das Gerät angeben. Wenn das Gerät bei jedem Netzwerkstart eine dynamische IP-Adresse erhält, geben Sie keinen Hostnamen an. Klicken Sie auf Vor, um fortzufahren.

  8. Klicken Sie auf Anwenden auf der Seite Wireless-Geräte erstellen.

Nach der Konfiguration wird das Wireless-Gerät in der Geräteliste wie in Abbildung 2.17, „Wireless-Geräte“ angezeigt.

Wireless-Geräte

Wireless-Geräte

Abbildung 2.17. Wireless-Geräte

Stellen Sie sicher, dass Sie Datei => Speichern gewählt haben, um Änderungen zu speichern.

Nach dem Hinzufügen des Wireless-Geräts können Sie die Konfiguration bearbeiten, indem Sie das Gerät aus der Geräteliste auswählen und auf Bearbeiten klicken. So können Sie das Gerät zum Beispiel so konfigurieren, dass es zur Bootzeit aktiviert wird.

Wenn das Gerät hinzugefügt wurde, wird es nicht sofort aktiviert, wie Sie am Inaktiv-Status erkennen können. Um das Gerät zu aktivieren, wählen Sie dieses aus der Liste aus und klicken Sie auf den Button Aktivieren. Wenn das System zum Aktivieren des Gerätes beim Starten des Computers konfiguriert wurde (Standard), muss dieser Schritt nicht nocheinmal ausgeführt werden.

2.8. Verwalten von DNS-Einstellungen

Mit dem Tab DNS können Sie den Hostnamen, Domäne, Namenserver und Suchdomänen des Systems konfigurieren. Nameserver werden zum Suchen anderer Hosts auf dem Netzwerk verwendet.

Wenn die DNS-Servernamen von DHCP oder PPPoE abgerufen (oder von einem ISP), dürfen Sie keine primären, sekundären oder tertiären DNS-Server hinzufügen.

Wurde der Hostname dynamisch von DHCP oder PPPoE (oder vom ISP) abgerufen, ändern Sie diesen nicht.

DNS-Konfiguration

DNS-Konfiguration

Abbildung 2.18. DNS-Konfiguration

Anmerkung

Der Abschnitt Nameserver konfiguriert nicht das gesamte System als Nameserver. Es wird stattdessen konfiguriert, welche Nameserver zum Lösen von IP-Adressen zu Hostnamen und umgekehrt verwendet werden sollen.

Warnung

Falls sich der Hostname ändert und system-config-network auf dem lokalen Host gestartet wird, können Sie möglicherweise keine weitere X11-Anwendung starten. Daher müssen sie sich ggf. zu einer neuen Desktop-Session einloggen.

2.9. Verwalten von Hosts

Mit dem Tab Hosts können Sie Hosts zur Datei /etc/hosts hinzufügen, bearbeiten oder entfernen. Diese Datei enthält IP-Adressen und die jeweiligen Hostnamen.

Versucht Ihr System, einen Hostnamen bei einer IP-Adresse aufzulösen oder den Hostnamen für eine IP-Adresse festzulegen, greift es auf die Datei /etc/hosts zu, ehe es die Nameserver verwendet (wenn Sie die Standardkonfiguration von RHEL; verwenden). Wird die IP-Adresse in der Datei /etc/hosts genannt, werden die Nameserver nicht verwendet. Befinden sich in Ihrem Netzwerk Computer, deren IP-Adressen nicht in DNS genannt werden, ist es empfehlenswert, sie zu /etc/hosts hinzuzufügen.

Um einem Eintrag zur Datei /etc/hosts hinzuzufügen, gehen Sie zum Hosts Tabulator, klicken Sie auf Neu, geben Sie die benötigten Informationen ein und klicken auf OK. Wählen Sie Datei => Speichern oder drücken Sie Strg-S, um die Änderungen in der Datei /etc/hosts zu speichern. Das Netzwerk oder die Netzwerkdienste müssen nicht neu gestartet werden, da jedes Mal, wenn eine Adresse gelöst wird, auf die aktuelle Version der Datei verwiesen wird.

Warnung

Entfernen Sie nicht den Eintrag localhost. Auch wenn das System keine Netzwerkverbindung oder keine Dauerverbindung ins Netzwerk hat, müssen sich einige Programme über die localhost Loopback-Schnittstelle mit dem System verbinden.

Hostkonfiguration

Hostkonfiguration

Abbildung 2.19. Hostkonfiguration

Tipp

Um die Suchreihenfolge zu ändern, bearbeiten Sie die Datei /etc/host.conf. Die Zeile order hosts, bind gibt an, dass /etc/hosts Vorrang vor dem Nameserver hat. Wenn Sie die Zeile in order bind, hosts ändern, konfiguriert dies das System so, dass Hostnamen und IP-Adressen zuerst unter Verwendung des Nameservers aufgelöst werden. Kann die IP-Adresse nicht über den Nameserver aufgelöst werden, sucht das System nach der IP-Adresse in der Datei /etc/hosts.

2.10. Arbeiten mit Profilen

Für jedes physische Hardware-Gerät können mehrere logische Netzwerkgeräte erstellt werden. Besitzt Ihr System zum Beispiel eine Ethernet-Karte (eth0), können Sie logische Netzwerkgeräte mit unterschiedlichen Beinamen und Konfigurationsoptionen erstellen, die alle mit eth0 zusammenhängen.

Logische Netzwerkgeräte unterscheiden sich von Geräte-Aliasen. Logische Netzwerkgeräte, die mit dem gleichen physikalischen Gerät verbunden sind, müssen in unterschiedlichen Profilen vorhanden sein und können nicht gleichzeitig aktiviert werden. Geräte-Aliase sind auch mit dem gleichen physikalischen Hardware-Gerät verbunden, können jedoch zur gleichen Zeit aktiviert werden. Weitere Einzelheiten zur Erstellung von Geräte-Aliasen finden Sie unter Abschnitt 2.11, „Geräte-Aliase“.

Profile können dazu benutzt werden, mehrere Konfigurationssets für unterschiedliche Netzwerke zu erstellen. Ein Konfigurationsset kann logische Geräte, sowie Hosts und DNS-Einstellungen, beinhalten. Nachdem Sie die Profile konfiguriert haben, können Sie das Netzwerk-Administrationstool verwenden, um zwischen diesen hin und her zu schalten.

Standardmäßig gibt es ein Profil mit dem Namen Allgemein. Legen Sie ein neues Profil an, indem Sie Profil => Neu aus dem Pull-Down-Menü auswählen und einen einmaligen Namen für dieses Profil eingeben.

Sie ändern nun das neue Profil wie in der Statuszeile unten im Hauptfenster angegeben.

Klicken Sie auf ein bestehendes Gerät in der Liste, und klicken Sie dann auf Kopieren, um das bestehende Gerät in ein logisches Netzwerkgerät zu kopieren. Wenn Sie den Button Neu verwenden, wird ein Netzwerk-Alias erstellt, der nicht korrekt ist. Um die Eigenschaften des logischen Geräts zu ändern, wählen Sie dieses aus der Liste aus, und klicken Sie auf Bearbeiten. Es kann zum Beispiel der Nickname in einen eindeutigeren Namen wie zum Beispiel eth0_office geändert werden, damit dieser einfacher erkannt werden kann.

In der Geräteliste befindet sich eine Spalte mit Kontrollkästchen mit der Kennung Profil. Sie können für jedes Profil Geräte ankreuzen bzw. die Auswahl entfernen. Nur die angekreuzten Geräte werden für die derzeit ausgewählten Profile mit eingeschlossen. Wenn Sie zum Beispiel ein logisches Gerät mit dem Namen eth0_office in einem Profil Office erstellt haben, und das logische Gerät aktiviert werden soll, wenn das Profil ausgewählt wird, heben Sie die Auswahl von eth0 auf und markieren Sie stattdessen eth0_office.

Abbildung 2.20, „Office-Profil“ zeigt zum Beispiel ein Profil mit dem Namen Office mit dem logischen Gerät eth0_office. Es ist so konfiguriert, dass es die erste Ethernet-Karte via von DHCP aktiviert.

Office-Profil

Erstellen eines Office-Profils

Abbildung 2.20. Office-Profil

Beachten Sie, dass das Profil Home wie in Abbildung 2.21, „Home-Profil“ gezeigt, das logische Gerät eth0_home aktiviert, das mit eth0 verbunden ist.

Home-Profil

Erstellen eines Home-Profils

Abbildung 2.21. Home-Profil

Sie können eth0 auch so konfigurieren, dass es nur im Office-Profil aktiviert wird und ein PPP (Modem) Gerät nur im Home-Profil. Eine andere Möglichkeit wäre, dass das Allgemein-Profil eth0 aktiviert, und ein Away-Profil auf Reisen ein PPP-Gerät aktiviert.

Um ein Profile zur Bootzeit zu aktivieren, ändern Sie die Konfigurationsdatei des Bootloaders, um die Option netprofile=<profilename> zu enthalten. Wenn das System, zum Beispiel, GRUB als Bootloader verwendet und /boot/grub/grub.conf Folgendes enthält:

title Red Hat Enterprise Linux (2.6.9-5.EL) root (hd0,0) kernel /vmlinuz-2.6.9-5.EL ro root=/dev/VolGroup00/LogVol00 rhgb quiet initrd /initrd-2.6.9-5.EL.img

Ändern Sie dies wie folgt (ersetzen Sie <profilname> mit dem Namen des Profils, dass zur Bootzeit aktiviert werden soll):

title Red Hat Enterprise Linux (2.6.9-5.EL) root (hd0,0) kernel /vmlinuz-2.6.9-5.EL ro root=/dev/VolGroup00/LogVol00 \ netprofile=<profilename> \ rhgb quiet initrd /initrd-2.6.9-5.EL.img

Um Profile nach dem Booten zu wechseln, gehen Sie zu Applications (the main menu on the panel) (im Panel) = > Systemtools => Netzwerkgerät-Kontrolle (oder geben Sie den Befehl system-control-network ein), um ein Profil auszuwählen und zu aktivieren. Der Abschnitt für das aktivierte Profil erscheint nur in der Network Device Control Schnittstelle wenn mehr als die standardmäßige Allgemein-Schnittstelle bestehen.

Alternativ dazu können Sie den folgenden Befehl ausführen, um ein Profil zu aktivieren (ersetzen Sie <Profilname> mit dem Namen des Profils):

system-config-network-cmd --profile <profilename> --activate

2.11. Geräte-Aliase

Geräte-Aliase sind virtuelle Geräte, die mit der gleichen physikalischen Hardware verbunden sind, jedoch gleichzeitig aktiviert werden können, um unterschiedliche IP-Adressen zu haben. Sie werden normalerweise mit dem Gerätennahmen gefolgt von einem Doppelpunkt und einer Zahl dargestellt (zum Beispiel eth0:1). Sie sind dann von Nutzen, wenn Sie mehr als eine IP-Adresse für ein System möchten, das System jedoch nur eine Netzwerkkarte besitzt.

Nachdem Sie ein Ethernet-Gerät — wie eth0 — zur Verwendung einer statischen IP-Adresse konfiguriert haben (DHCP funktioniert nicht mit Aliasen), gehen Sie zum Tabulator Geräte und klicken Sie auf Neu. Wählen Sie die Ethernet-Karte, die mit einem Alias konfiguriert werden soll, geben Sie eine statische IP-Adresse für den Alias an und klicken Sie auf Anwenden, um diese zu erstellen. Da das Gerät bereits für diese Ethernet-Karte besteht, ist das eben erstellte der Alias, wie z.B. eth0:1.

Warnung

Wenn Sie ein Ethernet-Gerät konfigurieren, um einen Alias zu erhalten, können weder das Gerät noch der Alias zur Verwendung von DHCP konfiguriert werden. Sie müssen Sie IP-Adressen manuell konfigurieren.

Abbildung 2.22, „Beispiel eines Netzwerkgerätalias“ zeigt ein Beispiel eines Alias für ein eth0-Gerät. Beachten Sie das Gerät eth0:1 — der erste Alias für eth0. Der zweite Alias für eth0 hätte den Gerätenamen eth0:2, usw. Zur Änderung der Einstellungen für den Geräte-Alias wie das Aktivieren beim Booten oder die Alias-Zahl, wählen Sie diesen aus der Liste und klicken Sie auf den Button Bearbeiten.

Beispiel eines Netzwerkgerätalias

Beispiel eines Netzwerkalias

Abbildung 2.22. Beispiel eines Netzwerkgerätalias

Wählen Sie den Alias und klicken Sie auf den Button Aktivieren, um den Alias zu aktivieren. Haben Sie mehrere Profile konfiguriert, wählen Sie in welchen Profilen dieser enthalten sein soll.

Prüfen Sie anhand des Befehls /sbin/ifconfig, dass der Alias tatsächlich aktiviert wurde. Der Ausdruck sollte das Gerät und den Geräte-Alias mit unterschiedlichen IP-Adressen enthalten:

eth0 Link encap:Ethernet HWaddr 00:A0:CC:60:B7:G4 inet addr:192.168.100.5 Bcast:192.168.100.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:161930 errors:1 dropped:0 overruns:0 frame:0 TX packets:244570 errors:0 dropped:0 overruns:0 carrier:0 collisions:475 txqueuelen:100 RX bytes:55075551 (52.5 Mb) TX bytes:178108895 (169.8 Mb) Interrupt:10 Base address:0x9000 eth0:1 Link encap:Ethernet HWaddr 00:A0:CC:60:B7:G4 inet addr:192.168.100.42 Bcast:192.168.100.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:10 Base address:0x9000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:5998 errors:0 dropped:0 overruns:0 frame:0 TX packets:5998 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1627579 (1.5 Mb) TX bytes:1627579 (1.5 Mb)

2.12. Sichern und Wiederherstellen der Netzwerkkonfiguration

Die Befehlszeilen-Version von Netzwerk-Administrationstool kann verwendet werden, um die Netzwerkkonfiguration des Systems in einer Datei zu sichern. Diese Datei kann später verwendet werden, um die Netzwerk-Einstellungen eines Red Hat Enterprise Linux Systems wiederherzustellen.

Dieses Feature kann als Teil eines automatisierten Backup-Skripts verwendet werden, um die Konfiguration vor einem Upgrade oder einer Neuinstallation zu sichern, oder die Konfiguration auf ein anderes Red Hat Enterprise Linux System zu kopieren.

Um die Netzwerkkonfiguration des Systems in die Datei /tmp/network-config zu speichern, oder zu exportieren, führen Sie folgenden Befehl als root aus:

system-config-network-cmd -e > /tmp/network-config

Um die Netzwerkkonfiguration des Systems aus der im vorhergehenden Schritt erzeugten Datei wiederherzustellen, oder zu importieren, führen Sie folgenden Befehl als root aus:

system-config-network-cmd -i -c -f /tmp/network-config

Die Option -i ist für das Importieren von Daten, die Option -c ist für das Löschen der bestehenden Konfiguration vor dem Importieren und die Option -f gibt die zu importierende Datei an.

Kapitel 3. Berkeley Internet Name Domain (BIND)

Die meisten modernen Netzwerke, einschliesslich dem Internet, erlauben dem Benutzer andere Computer über deren Namen zu bestimmen. Dies befreit den Benutzer davon, die numerische Netzwerk-Adresse behalten zu müssen. Der effektivste Weg ein Netzwerk zu konfigurieren, sodass es namensbasierte Verbindungen zulässt, ist durch das Einrichten eines Domain Name Service (DNS) oder Nameserver, welcher Rechnernamen in numerische Adressen auflöst und umgekehrt.

Dieses Kapitel stellt den in Red Hat Enterprise Linux enthaltenen Nameserver vor, den Berkeley Internet Name Domain (BIND) DNS Server, mit dem Fokus auf die Struktur dessen Konfigurationsdateien und der Art und Weise, wie dieser lokal und auch remote verwaltet werden kann.

Anmerkung

BIND ist auch als named-Dienst in Red Hat Enterprise Linux bekannt. Sie können den Dienst via Tool zur Konfiguration von Diensten (system-config-service) verwalten.

3.1. Einführung in den DNS

DNS ordnet Hostnamen den jeweiligen IP-Adressen zu, so dass sich Benutzer beim Verbinden mit anderen Rechnern im Netzwerk auf die Namen beziehen können, ohne sich an die IP-Adressen erinnern zu müssen.

Die Verwendung von DNS und FQDN sind auch für Systemadministratoren vorteilhaft. Dank dieser Namen verfügen Administratoren über die Flexibilität, IP-Adressen für einzelne Rechner zu ändern, ohne namenbasierte Abfragen der Rechner ausführen zu müssen. Umgekehrt können die Administratoren festlegen, welche Rechner eine namenbasierte Abfrage handhaben.

DNS wird im Allgemeinen mit Hilfe zentralisierter Server implementiert, die für einige Domains authorisiert sind und sich auf andere DNS-Server für andere Domains beziehen.

Eine Client-Applikation verbindet üblicherweise über den Port 53 mit dem Nameserver und fragt Informationen über diesen ab. Der Nameserver wird versuchen, mit Hilfe einer Resolver-Bibliothek den FQDN zu aufzulösen. Diese Bibliothek kann die vom Host angeforderten Informationen oder Daten über den Namen aus einer früheren Abfrage enthalten. Wenn der Nameserver die Antwort nicht in seiner Resolver-Bibliothek findet, wird er andere Nameserver, die sogenannten Root-Nameserver verwenden, um festzulegen, welche Nameserver für diesen FQDN autorisiert sind. Mit dieser Information wird anschließend bei den autorisierten Nameservern dieser Name abgefragt, um die IP-Adresse festzustellen. Bei einem Reverse-Lookup wird die gleiche Prozedur durchgeführt, allerdings mit dem Unterschied, dass hier eine unbekannte IP-Adresse und nicht ein Name abgefragt wird.

3.1.1. Nameserver Zonen

Im Internet kann ein FQDN eines Hosts in verschiedene Bereiche eingeteilt werden. Diese Bereiche werden in einer Hierarchie (ähnlich einem Baum) mit Hauptstamm, primären Abzweigungen, sekundären Abzweigungen usw. angeordnet. Betrachten Sie den folgenden FQDN:

bob.sales.example.com

Wenn Sie sehen möchten, wie ein FQDN aufgelöst wurde, um eine IP-Adresse für ein bestimmtes System zu finden, müssen Sie den Namen von rechts nach links lesen. Jede Ebene der Hierarchie ist durch Punkte (.) voneinander getrennt. In diesem Beispiel bestimmt com die Top-Level-Domain für diesen FQDN. Der domain-Name ist eine Subdomain von com mit sales als Subdomain von example. Ganz links im FQDN befindet sich der Hostname, bob, der einen bestimmten Computer identifiziert.

Mit Ausnahme des Hostnamens wird jeder Bereich als Zone bezeichnet, die einen bestimmten Namespace (Namensbereich) festlegt. Ein Namespace kontrolliert die Bezeichnung der Subdomains auf der linken Seite. In diesem Beispiel sind zwar nur zwei Subdomains angegeben, ein FQDN muss aber mindestens eine und kann viel mehr Subdomains enthalten, je nach der Organisation des Namespace.

Die Zonen werden mit Hilfe von Zone-Dateien in authorisierten Nameservern festgelegt. Die Zone-Dateien beschreiben den Namenspace der Zone, den für eine bestimmte Domain oder Subdomain zu verwendenden Mail-Server, uvm. Die Zone-Dateien sind auf primären Nameservern (auch Master-Nameserver genannt) gespeichert, die für Änderungen an Dateien maßgeblich sind, sowie auf sekundären Nameservern (auch Slave-Nameserver genannt), die ihre Zone-Dateien von den primären Nameservern erhalten. Jeder Nameserver kann gleichzeitig für unterschiedliche Zonen sowohl primärer als auch sekundärer Nameserver sein. Zugleich können sie auch für mehrere Zonen maßgeblich sein. Dies hängt alles von der Konfiguration des Nameservers ab.

3.1.2. Nameserver Arten

Primäre Nameserver können auf vier verschiedene Arten konfiguriert sein:

Master

Speichert die ursprünglichen und maßgeblichen Zonen-Datensätze für einen bestimmten Namespace, und beantwortet Fragen von anderen Nameservern, die nach Antworten für diesen Namespace suchen.

Slave

Beantwortet ebenfalls die Anfragen anderer Nameserver bezüglich des Namespace, für den dieser die Autorität darstellt. Die Slave-Nameserver erhalten ihre Informationen über ein Namespace jedoch von Master-Nameservern.

Caching-Only

Bietet Dienste für IP-Auflösungen, hat aber nicht für alle Zonen eine Berechtigung. Antworten für alle Auflösungen werden üblicherweise für eine bestimmte Zeit im Speicher gecachet, welche von dem abgefragten Zone-Record festgelegt wird.

Forwarding

Leitet Anfragen zum Auflösen an eine spezielle Liste von Nameservern weiter. Wenn keiner der angegebenen Nameserver den Auflösungsprozess durchführen kann, wird der Vorgang abgebrochen und die Auflösung schlägt fehl.

Ein Nameserver kann einem oder mehreren dieser Typen zugehören. Zum Beispiel kann ein Nameserver für einige Zonen der Master und für andere Zonen der Slave sein und für andere ausschließlich Auflösungen weiterleiten.

3.1.3. BIND als Nameserver

BIND führt Namensauflösungsdienste mittels /usr/sbin/named Daemon durch. BIND enthält auch ein administratives Utility, /usr/sbin/rndc genannt. Mehr Information zu rndc kann unter Abschnitt 3.4, „Die Verwendung von rndc gefunden werden.

BIND speichert seine Konfigurationsdateien in den folgenden zwei Orten:

/etc/named.conf

Die Konfigurationsdatei des named-Daemons

/var/named/-Verzeichnis

Das named-Arbeitsverzeichnis, welches Zone, Statistiken, und Cache-Dateien enthält

Anmerkung

Falls Sie das Paketbind-chroot installiert haben, führt der BIND-Dienst die Umgebung /var/named/chroot aus. Alle Konfigurationsdateien werden dorthin verschoben. Daher wird named.conf in /var/named/chroot/etc/named.conf platziert, usw.

Tipp

Falls Sie das Paket caching-nameserver installiert haben, ist die Standard-Konfigurationsdatei /etc/named.caching-nameserver.conf. Um diese Standard-Konfiguration außer Kraft zu setzen, können Sie Ihre eigene, angepasste Konfigurationsdatei in /etc/named.conf kreieren. BIND verwendet nach einem Neustart dann die angepasste Datei /etc/named.conf anstelle der Standard-Konfigurationsdatei.

Die nächsten zwei Abschnitte behandeln die BIND Konfigurationsdateien in mehr Detail.

3.2. /etc/named.conf

Die Datei named.conf ist eine Ansammlung von Direktiven, die in verschachtelte, geschweifte Klammern platzierte { }-Optionen verwenden. Administratoren müssen vorsichtig beim Bearbeiten der Datei named.conf sein und jegliche syntaktische Fehler vermeiden, da auch die kleinsten Fehler den Service named vom Starten abhalten können.

Eine typische named.conf-Datei ist ähnlich wie folgt gegliedert:

<statement-1> ["<statement-1-name>"] [<statement-1-class>] { <option-1>; <option-2>; <option-N>; }; <statement-2> ["<statement-2-name>"] [<statement-2-class>] { <option-1>; <option-2>; <option-N>; }; <statement-N> ["<statement-N-name>"] [<statement-N-class>] { <option-1>; <option-2>; <option-N>; };

3.2.1. Häufig verwendete Typen von Statements

Die folgenden Typen von Statements werden häufig in /etc/named.conf verwendet:

3.2.1.1. acl Statement

Das acl Statement (Access Control Statement) definiert eine Gruppe von Hosts, welchen Zugriff zum Nameserver erlaubt oder verboten werden kann.

Ein acl Statement hat folgende Form:

acl <acl-name> { <match-element>; [<match-element>; ...] };

In diesem Statement ersetzen Sie <acl-name> mit dem Namen der Access-Control-Liste (Liste der Zugriffskontrolle) und ersetzen Sie <match-element> mit einer List von IP-Adressen, wobei Adressen durch ein Semikolon getrennt werden. Meistens wird eine individuelle IP-Adresse oder IP-Netzwerk-Notation (wie 10.0.1.0/24) benutzt, um die IP Adresse im acl Statement zu identifizieren.

Die folgenden Access-Control-Listen sind bereits als Schlüsselwörter definiert, um die Konfiguration zu vereinfachen:

  • any — Gleicht jede IP-Adresse ab

  • localhost — Gleicht jede IP-Adresse ab, die auf dem lokalen System verwendet wird

  • localnets — Gleicht jede IP-Adresse auf allen Netzwerken ab, mit denen das lokale System verbunden ist

  • none — Gleicht keine IP-Adressen ab

Wenn mit anderen Statements (wie dem options Statement) verwendet, können acl Statements sehr hilfreich dabei sein, BIND Nameserver vor unbefugtem Zugriff zu schützen.

Das folgende Beispiel gibt zwei Access-Control-Listen an und benutzt ein options Statement, um anzugeben, wie diese vom Nameserver behandelt werden sollen:

acl black-hats {     
        10.0.2.0/24;     192.168.0.0/24;  };  
        acl red-hats {     10.0.1.0/24;  };  
options {     
        blackhole { black-hats; };     
        allow-query { red-hats; };     
        allow-recursion { red-hats; };  
}

Dieses Beispiel enthält zwei Access-Control-Listen, black-hats und red-hats. Hosts in der black-hats Liste ist der Zugriff zum Nameserver verboten, während Hosts in der red-hats Liste normaler Zugriff gewährt ist.

3.2.1.2. include Statement

Das include Statement erlaubt Dateien in named.conf einzuschliessen. Auf diese Weise können empfindliche Konfigurationsdaten (wie Keys) in einer separaten Datei mit eingeschränkten Rechten gehalten werden.

Ein include Statement hat die folgende Form:

include "<file-name>"

In diesem Statement, ersetzen Sie <file-name> mit dem absoluten Pfad zu einer Datei.

3.2.1.3. options Statement

Das options Statement legt Konfigurationsoptionen des globalen Servers fest und setzt Defaults für andere Statements. Es kann verwendet werden, um den Ort des named Arbeitsverzeichnisses anzugeben, den Typ der erlaubten Queries, uvm.

Das options Statement hat die folgende Form:

options { <option>; [<option>; ...] }; 

In diesem Statement, ersetzen Sie die <option> Direktiven mit einer gültigen Option.

Die folgenden sind häufig benutzte Optionen:

allow-query

Legt fest, welche Hosts diesen Nameserver abfragen dürfen. Standardmäßig sind alle Hosts dazu berechtigt. Mit Hilfe einer Access-Controll-Liste, einer Sammlung von IP-Adressen oder Netzwerken kann festgelegt werden, dass nur bestimmte Hosts den Nameserver abfragen dürfen.

allow-recursion

Ähnlich wie allow-query, bezieht sich diese Option auf rekursive Abfragen. Standardmäßig können alle Hosts rekursive Anfragen an den Nameserver durchführen.

blackhole

Gibt an, welchen Hosts es nicht erlaubt ist, Anfragen an den Server zu stellen.

Verzeichnis

Gibt an, dass sich das named-Arbeitsverzeichnis von dem Vorgabewert, /var/named/, unterscheidet.

Forwarder ("Weiterleiter")

Legt eine Liste von gültigen IP-Adressen für Nameserver fest, bei denen Anfragen für Auflösungen weitergeleitet werden.

weiterleiten

Kontrolliert das Verhalten beim Weiterleiten einer forwarders Direktive.

Die folgenden Optionen werden angenommen:

  • first — Gibt an, dass Nameserver, die in der forwarders-Option festgelegt sind, zuerst nach Informationen abgefragt werden. Sollten anschließend keine Informationen vorhanden sein, versucht named die Auflösung selbst durchzuführen.

  • only — Gibt an, dass named nicht versucht, die Auflösung selbst durchzuführen, wenn Anfragen an Nameserver, die in der forwarders-Direktive angegeben sind, nicht erfolgreich ist.

listen-on

Legt die Netzwerk-Schnittstelle fest, die named verwendet, um auf Anfragen zu horchen. Standardmäßig werden alle Schnittstellen verwendet.

Auf diese Weise, sollte der DNS Server auch der Gateway sein, kann BIND dazu konfiguriert werden nur Anfragen, welche von einem dieser Netzwerke gestellt wurden, zu beantworten.

Nachfolgende finden Sie ein Beispiel für eine listen-on Direktive:

options { listen-on { 10.0.1.1; }; };

Auf diese Art und Weise werden nur Anfragen von der Netzwerk-Schnittstelle akzeptiert, die das private Netzwerk (10.0.1.1) verwendet.

notify

Kontrolliert, ob named die Slave-Server informiert, wenn eine Slave-Zone aktualisiert wird. Folgende Optionen werden akzeptiert:

  • yes — Informiert Slave-Server.

  • no — Informiert Slave-Server nicht.

  • explicit — Informiert Slave-Server nur dann, wenn diese in einer also-notify List innerhalb des Zonen Statement angegeben sind.

pid-file

Legt die Lokalität für die Prozess-ID-Datei fest, die von named erstellt wird.

root-delegation-only

Schaltet die Erzwingung von Delegation-Properties in Top-Level-Domänen ein (TLDs) sowie auch Rootzonen mit einer optionalen Exclude-Liste. Delegation ist der Vorgang des Unterteilens einer einzelnen Zone in mehrere Subzonen. Um eine delegierte Zone zu erstellen, werden sogenannte NS recordsbenutzt. NameServer-Records (Delegation-Records) geben die maßgeblichen (autoritativen) Nameserver für eine bestimmte Zone bekannt.

Das folgende root-delegation-only-Beispiel legt eine Exclude-Liste von TLDs fest, deren 'undelegated' Reaktion erwartet und angenommen wird.

options { root-delegation-only exclude { "ad"; "ar"; "biz"; "cr"; "cu"; "de"; "dm"; "id"; "lu"; "lv"; "md"; "ms"; "museum"; "name"; "no"; "pa"; "pf"; "se"; "sr"; "to"; "tw"; "us"; "uy"; }; };
statistics-file

Legt einen alternativen Ort für die Statistik-Dateien fest. Standardmäßig werden named-Statistiken in /var/named/named.stats gespeichert.

Es gibt noch zahlreiche andere Optionen, bei denen einige voneinander abhängig sind, um fehlerfrei zu funktionieren. Weitere Informationen hierzu finden Sie im BIND 9 Administrator Reference Manual, in Abschnitt 3.7.1, „Installierte Dokumentation“, und in den man-Seiten zu bind.conf.

3.2.1.4. zone Statement

Ein zone Statement legt die Eigenschaften einer Zone, wie den Ort der Konfigurationsdatei und Zonen-spezifische Optionen fest. Dieses Statement kann dazu benutzt werden, um globale options Statements zu überschreiben.

Ein zone Statement hat die folgende Form:

zone <zone-name><zone-class> { <zone-options>; [<zone-options>; ...] };

In diesem Statement <zone-name> ist der Name der Zone, <zone-class> ist die optionale Klasse der Zone, und <zone-options> ist eine List von Optionen, welche die Eigenschaften der Zone bestimmen.

Das <zone-name>-Attribut für das Zonen Statement ist besonders wichtig, da es den Standardwert für die $ORIGIN-Anweisung festlegt, welche den Zonen-Dateien im Verzeichnis /var/named/ entspricht. Der Daemon named hängt den Namen der Zone an jeden Nicht-FQDN an, welcher in der Zonen-Datei aufgelistet ist.

Anmerkung

Falls Sie das Paket caching-nameserver installiert haben, befindet sich die Standard-Konfigurationsdatei in /etc/named.rfc1912.zones.

Wenn, zum Beispiel, ein zone Statement den Namespace für example.com angibt, verwende example.com als <zone-name>, damit es an Hostnamen in der example.com Zonen-Datei angehängt wird.

Für mehr Information zu Zonen-Dateien, siehe Abschnitt 3.3, „Zone-Dateien“.

Die am häufigsten verwendeten Optionen von zone Statement sind die Folgenden:

allow-query

Legt fest, welche Clients Informationen über diese Zone anfordern dürfen. Standardmäßig sind alle Anfragen zulässig.

allow-transfer

Bestimmt die Slave-Server, die den Transfer der Informationen über die Zonen anfordern dürfen. Standardmäßig sind alle Transfer-Anfragen zulässig.

allow-update

Bestimmt die Hosts, die Informationen in ihrer Zone dynamisch aktualisieren dürfen. Standardmäßig sind Anfragen für dynamische Updates nicht zulässig.

Seien Sie vorsichtig, wenn Sie Hosts erlauben, Informationen über ihre Zonen aktualisieren. Sie sollten diese Option nur aktivieren, wenn der Host absolut sicher ist. Im Allgemeinen ist es besser, die Updates der Zonen-Records manuell von einem Administrator durchführen zu lassen und den named-Service, soweit möglich, neu zu laden.

file

Bestimmt den Namen der Datei im named-Arbeitsverzeichnis, die die Konfigurationsdateien der Zone enthält.

masters

Gibt die IP-Adressen an, von denen autoritativ Zoneninformationen erfragt werden können. Wird nur verwendet, wenn die Zone als typeslave spezifiziert ist.

notify

Gibt an, ob named den Slave-Servern mitteilt, dass eine Zone geändert wurde. Diese Direktive kennt die folgenden Optionen:

  • yes — Informiert Slave-Server.

  • no — Informiert Slave-Server nicht.

  • explicit — Informiert Slave-Server nur dann, wenn diese in einer also-notify List innerhalb des Zonen Statement angegeben sind.

type

Definiert den Zonen-Typ.

Folgend ist eine Liste der gültigen Optionen:

  • delegation-only — Erzwingt den Delegation-Status von Infrastruktur-Zonen wie z.B. COM, NET oder ORG. Jegliche Antwort ohne explizite oder implizite Delegation wird als NXDOMAIN behandelt. Diese Option ist nur in TLDs oder root-Zone-Dateien anwendbar, die in rekursiven oder Caching Implementationen verwendet werden.

  • forward — Weist den Nameserver an, alle Anfragen zu Informationen über die Zone an andere Nameserver weiterzuleiten.

  • hint — Ein spezieller Zonen-Typ, mit dem auf die Root-Nameserver verwiesen wird, die verwendet werden, um Abfragen zu lösen, wenn eine Zone ansonsten unbekannt ist. Sie brauchen neben der Standarddatei /etc/named.conf keine zusätzliche Hinweisdatei zu konfigurieren.

  • master — Bezeichnet den Nameserver, der für diese Zone maßgeblich ist. Wenn die Konfigurationsdateien für diese Zone auf Ihrem System sind, sollte der master-Typ eingestellt werden.

  • slave — Bezeichnet den Nameserver, der für diese Zone der Slave-Server ist und der named mitteilt, die Zonen-Konfigurationsdateien für diese Zone von der IP-Adresse des Master-Nameservers abzufragen.

zone-statistics

Weist named an, die Statistiken über diese Zone aufzubewahren und diese entweder standardmäßig in (/var/named/named.stats) zu speichern oder in einer Datei abzulegen, die mit der statistics-file-Option im server-Statement, sofern vorhanden, dafür eingerichtet wurde. Sehen Sie Abschnitt 3.2.2, „Andere Statement-Typen“ für weitere Information über das server-Statement.

3.2.1.5. Beispiele von zone-Statements

Die meisten Änderungen in der /etc/named.conf-Datei eines Master- oder Slave-Nameservers betreffen das Hinzufügen, Modifizieren oder Löschen von zone-Direktiven. Obwohl diese zone-Anweisungen mehrere Optionen enthalten können, werden von den meisten Nameservern nur wenige verwendet. Die folgenden zone-Direktiven sind sehr allgemeine Beispiele, die auf Master-Slave-Nameservern verwendet werden können.

Nachfolgend finden Sie ein Beispiel für eine zone- Anweisung für den primären Nameserver, der example.com (192.168.0.1) hostet:

zone "example.com" IN { type master; file "example.com.zone"; allow-update { none; }; };

Diese zone-Direktive benennt die Zone example.com, stellt als Typ master ein und weist den named-Service an, die Datei /var/named/example.com.zone zu lesen und weist named an, Aktualisierungen durch andere Hosts nicht zuzulassen.

Eine zone-Anweisung eines Slave-Servers für example.com unterscheidet sich etwas vom vorherigen Beispiel. Für einen Slave-Server wird der Typ auf slave festgelegt. An die Stelle der Zeile allow-update tritt eine Anweisung, die named die IP-Adresse des Master-Servers mitteilt.

Nachfolgend finden Sie ein Beispiel für eine zone-Anweisung für die example.com Zone:

zone "example.com" { type slave; file "example.com.zone"; masters { 192.168.0.1; }; };

Diese zone-Anweisung weist named auf dem Slave-Server an, bei dem Master-Server mit der IP 192.168.0.1 nach Informationen für die Zone example.com abzufragen. Die Informationen, die der Slave-Server vom Master-Server erhält, werden in der Datei /var/named/example.com.zone gespeichert.

3.2.2. Andere Statement-Typen

Die Folgende ist eine Liste von weniger verwendeten Statement-Typen welche in named.conf verfügbar sind:

controls

Konfiguriert verschiedene Sicherheitsbedingungen, die für den Befehl rndc zum Verwalten des named-Dienstes nötig sind.

Unter Abschnitt 3.4.1, „Konfigurieren von /etc/named.conf sehen Sie, wie die controls-Anweisung aussehen sollte, einschließlich der verfügbaren Optionen.

key "<key-name>"

Legt für einen Namen einen bestimmten Schlüssel fest. Schlüssel werden verwendet, um verschiedene Aktionen zu authentifizieren, wie z.B. sichere Updates oder die Verwendung des rndc-Befehls. Mit key werden zwei Optionen verwendet:

  • algorithm <algorithm-name> — Der verwendete Algorithmus-Typ, z.B. dsa oder hmac-md5.

  • secret "<key-value>" — Der verschlüsselte Schlüssel.

Unter Abschnitt 3.4.2, „Konfigurieren von /etc/rndc.conf finden Sie die Anweisungen zum Schreiben eines key-Statements.

logging

Erlaubt die Verwendung mehrerer Arten von Protokollen mit der Bezeichnung channels. Wird die Option channel in der logging-Anweisung verwendet, wird ein benutzerdefiniertes Protokoll mit eigenem Dateinamen (file), Größenbeschränkung (size), Version (version), und dessen Wichtigkeit (severity) erstellt. Nachdem ein benutzerdefinierter Channel festgelegt wurde, wird dieser mit der Option category klassifiziert und beginnt mit dem Protokollieren, wenn named neu gestartet wird.

Standardmäßig protokolliert named normale Mitteilungen im syslog-Daemon, der diese in /var/log/messages platziert. Dies geschieht, weil sich verschiedene standardmäßige Channel mit unterschiedlicher Wichtigkeit im BIND befinden. Zum Beispiel verarbeitet ein Channel die Protokoll-Mitteilungen (default_syslog) und ein anderer speziell Debugging-Mitteilungen (default_debug). Die standardmäßige Kategorie default, verwendet zum normalen Protokollieren, ohne spezielle Konfigurationen, integrierte Channel.

Den Protokollierungsprozess individuell anzupassen kann sehr aufwendig sein und übersteigt den Umfang dieses Kapitels. Informationen über die Erstellung von benutzerdefinierten BIND-Protokollen finden Sie im BIND 9 Administrator Reference Manual in Abschnitt 3.7.1, „Installierte Dokumentation“.

Server

Definiert bestimmte Optionen, die Auswirkungen darauf haben, wie named sich gegenüber Remote-Name-Servern verhalten soll, insbesondere im Hinblick auf Benachrichtigungen und Zonen-Transfers.

Die Option transfer-format kontrolliert, ob mit jeder Mitteilung ein Resource-Record (one-answer) oder mehrere Ressource-Records mit jeder Meldung gesendet werden (many-answers). Da many-answers leistungsfähiger ist, wird es nur von neueren Name-Servern angenommen.

trusted-keys

Enthält verschiedene öffentliche Schlüssel für die Verwendung mit Secure DNS (DNSSEC). Unter Abschnitt 3.5.3, „Sicherheit“ finden Sie eine Einführung in die BIND-Sicherheit.

view "<view-name>"

Erstellt spezielle Ansichten, die bestimmten Informationen entsprechen, die von dem Host abhängig sind, der den Name-Server kontaktiert. Dadurch erhalten einige Hosts Informationen, die sich vollkommen von denen unterscheiden, die andere Hosts erhalten. Eine andere Möglichkeit ist, nur bestimmte Zonen für bestimmte sichere Hosts zugänglich zu machen, während nicht sichere Hosts nur Abfragen für andere Zonen erstellen können.

Es können auch mehrere Ansichten verwendet werden, solange ihre Namen eindeutig sind. Die match-clients-Option legt die IP-Adressen fest, die für eine bestimmte Ansicht verwendet werden. Alle option-Direktiven können in einer Ansicht verwendet werden. Sie überschreiben dabei die allgemeinen, bereits für named konfigurierten Optionen. Die meisten view-Direktiven enthalten mehrere zone-Anweisungen, die für die match-clients-Liste gelten. Es ist wichtig, in welcher Reihenfolge die view-Anweisungen aufgelistet sind, da die erste view-Direktive, die mit einer bestimmten IP-Adresse des Client übereinstimmt, verwendet wird.

Unter Abschnitt 3.5.2, „Mehrere Ansichten“ finden Sie weitere Informationen zum view-Statement.

3.2.3. Kommentar-Tags

Die Folgende ist eine Liste gültiger, in named.conf verwendeter, Kommentar-Tags:

  • // — Wenn an den Anfang der Zeile gestellt, wird diese Zeile von named ignoriert.

  • # — Wenn an den Anfang der Zeile gestellt, wird diese Zeile von named ignoriert.

  • /* und */ — Hierin eingeschlossener Text wird von named ignoriert.

3.3. Zone-Dateien

Zone-Dateien sind im named-Arbeitsverzeichnis, /var/named/, gespeichert und enthalten Informationen über einen bestimmten Namespace. Jede Zone-Datei ist gemäß der Daten der file-Option in der zone-Direktive benannt. Normalerweise bezieht sich der Name auf die entsprechende Domain und identifiziert die Datei als Datei, die Zone-Daten enthält, wie z.B. example.com.zone.

Anmerkung

Falls Sie das Paketbind-chroot installiert haben, führt der BIND-Dienst die Umgebung /var/named/chroot aus. Alle Konfigurationsdateien werden dorthin verschoben. Daher finden Sie die Zonen-Dateien in /var/named/chroot/var/named.

Jede Zone-Datei kann Direktiven und Resource-Records enthalten. Direktiven weisen den Name-Server an, bestimmte Aktionen auszuführen oder spezielle Einstellungen für die Zone zu verwenden. Resource-Records legen die Parameter der Zone fest. Diese ordnen bestimmten Systemen innerhalb des Namespaces der Zone eine Identität zu. Anweisungen sind optional, aber Resource-Records sind notwendig, um dieser Zone den Name-Service zur Verfügung zu stellen.

Alle Anweisungen und Resource-Records sollten in einer eigenen Zeile stehen.

Kommentare können in Zone-Dateien nach dem Semikolon (;) platziert werden.

3.3.1. Zone-Dateien-Direktiven

Anweisungen werden durch das vorangestellte Dollarzeichen $ identifiziert, das vor dem Namen der Anweisung üblicherweise im oberen Teil der Zone-Datei steht.

Folgende Anweisungen werden am häufigsten verwendet:

$INCLUDE

Weist named an, in diese Zone-Datei an Stelle der Anweisung eine andere Zone-Datei einzufügen. Dadurch können zusätzliche Einstellungen der Zone getrennt von der Haupt-Zone-Datei gespeichert werden.

$ORIGIN

Stellt den Domain-Name so ein, dass er an alle ungeeigneten Records angefügt wird. Wie z.B. die, die ausschließlich den Host festlegen.

Eine Zone-Datei könnte z.B. folgende Zeile enthalten:

$ORIGIN example.com.

An alle Namen, die in Resource-Records verwendet werden und nicht mit einem Punkt (.) enden, wird example.com angehängt.

Anmerkung

Die Verwendung der $ORIGIN-Direktive ist nicht erforderlich, wenn der Name der Zone in /etc/named.conf mit dem Wert übereinstimmt, den Sie $ORIGIN zuweisen würden. Standardmäßig wird der Name der Zone als Wert der $ORIGIN-Anweisung verwendet.

$TTL

Legt den Standard-Time to Live (TTL)-Wert für die Zone fest. Dieser Wert legt für die Name-Server in Sekunden fest, wie lange das Resource-Record für die Zone gültig ist. Ein Resource- Record kann einen eigenen TTL-Wert besitzen, der den Wert dieser Anweisung für die Zone überschreibt.

Wird dieser Wert erhöht, können die Remote-Name-Server die Zone-Informationen länger verarbeiten. Dadurch werden zwar die Abfragen für diese Zone reduziert, es vergrößert sich jedoch der Zeitraum, bis man von den Änderungen der Resource-Records profitieren kann.

3.3.2. Resource-Records der Zone-Datei

Die Hauptkomponente einer Zone-Datei sind deren Resource-Records.

Es gibt viele Typen von Resource-Records. Folgende werden am häufigsten verwendet:

A

Adressen-Record, das einem Namen eine IP-Adresse zuweist. Beispiel:

<host> IN A <IP-address>

Wenn der <host>-Wert nicht angegeben wird, verweist ein A-Record auf eine standardmäßige IP-Adresse für den oberen Teil des Namespaces. Dieses System gilt für alle nicht-FQDN-Anfragen.

Beachten Sie das folgende A-Record-Beispiel für die example.com Zone-Datei:

server1 IN A 10.0.1.3 IN A 10.0.1.5

Anfragen für example.comweisen auf 10.0.1.3 oder 10.0.1.5.

CNAME

So genannter Canonical-Name, welcher Namen untereinander zuordnet. Dieser Typ ist auch als Alias bekannt.

Im nächsten Beispiel wird named angewiesen, dass alle Anfragen, die an den <alias-name> gesendet werden, auf den Host <real-name> zeigen. CNAME-Records werden am häufigsten verwendet, um auf Dienste zu verweisen, die ein allgemeines Namensschema für den korrekten Host, wie www für Web-Server, verwenden.

<alias-name> IN CNAME <real-name>

Betrachten Sie das folgende Beispiel. In dieser Einrichtung bindet der A-Record einen Hostnamen an eine IP-Adresse, während ein CNAME-Record den allgemein verwendeten Hostnamen www zuweist.

server1 IN A 10.0.1.5 www IN CNAME server1
MX

Mail-eXchange-Record, der angibt, welchen Weg eine Mail nimmt, die an ein bestimmtes Namespace gesendet und von dieser Zone kontrolliert wurde.

 IN MX <preference-value><email-server-name>

In diesem Beispiel ermöglicht <preference-value>, die E-Mail-Server der Reihenfolge nach zu nummerieren, auf denen Sie für dieses Namespace bestimmte E-Mails empfangen möchten, indem Sie einigen E-Mail-Systemen den Vorrang vor anderen geben. Der MX-Resource-Record mit dem niedrigsten <preference-value> wird den anderen vorgezogen. Sie können mehreren E-Mail-Servern denselben Wert zuweisen, um den E-Mail-Verkehr zwischen den Servern zu verteilen.

Der <email-server-name> kann ein Hostname oder ein FQDN sein.

 IN MX 10 mail.example.com. IN MX 20 mail2.example.com.

In diesem Beispiel wird der erste mail.example.com-E-Mail-Server vor dem mail2.example.com-E-Mail-Server bevorzugt, wenn eine E-Mail für die Domain example.com ankommt.

NS

Name-Server-Record, der die maßgeblichen Name-Server für eine bestimmte Zone anzeigt.

Nachfolgend wird das Layout eines NS-Record erläutert:

 IN NS <nameserver-name>

Hier sollte der <nameserver-name> ein FQDN sein.

Anschließend werden zwei Nameserver als maßgeblich für die Domain aufgelistet. Es ist nicht so wichtig, ob diese Namenserver Slave- oder Master-Nameserver sind, da beide bereits maßgebend sind.

 IN NS dns1.example.com. IN NS dns2.example.com.
PTR

Dies bezieht sich auf einen PoinTeR-Record, der auf einen anderen Teil des Namespace verweist.

PTR-Records werden primär für eine umgekehrte Namensauflösung verwendet, da diese IP-Adressen zu einem bestimmten Namen verweisen. Unter Abschnitt 3.3.4, „Zone-Dateien für die umgekehrte Auflösung von Namen“ finden Sie weitere Beispiele von PTR -Records in Verwendung.

SOA

Dies bezieht sich auf den Start Of Authority-Ressource-Record, derwichtige maßgebliche Informationen über den Namespace an den Name-Server gibt.

Nach den Direktiven festgelegt ist ein SOA-Resource-Record, der erste Resource-Record in einer Zone-Datei.

Das folgende Beispiel zeigt die Basisstruktur eines SOA-Resource-Record:

@ IN SOA <primary-name-server><hostmaster-email> ( <serial-number><time-to-refresh><time-to-retry><time-to-expire><minimum-TTL> )

Das @-Symbol richtet die $ORIGIN-Anweisung (oder den Namen der Zone, falls die $ORIGIN-Direktive nicht eingestellt ist) als Namespace ein, das von diesem SOA-Resource-Record eingestellt wurde. Als <primary-Nameserver> wird der erste, für diese Domain maßgebliche Name-Server verwendet und die E-Mail der über diesen Namespace zu kontaktierenden Person wird durch die <hostmaster-email> ersetzt.

Die <serial-number> wird bei jeder Änderung der Zone-Datei erhöht, so dass named erkennt, dass diese Zone neu geladen werden kann. Die <time-to-refresh> teilt den Slave-Servern mit, wie lange sie warten müssen, bevor sie beim Master-Nameserver anfragen, ob alle Änderungen für die Zone durchgeführt wurden. Der Wert der <serial-number> wird vom Slave-Server verwendet, um festzustellen, ob veraltete Daten der Zone verwendet werden, die aktualisiert werden sollten.

Die <time-to-retry> gibt den Zeitraum an, nach dem eine neue Anfrage bezüglich der Aktualisierung durchgeführt werden soll, wenn der Master-Nameserver auf die letzte Anfrage nicht reagiert hat. Wenn der Master-Nameserver nicht geantwortet hat, bevor die <time-to-expire> abläuft, reagiert der Slave-Nameserver nicht mehr auf Anfragen bezüglich des Namespaces.

Die <minimum-TTL>-Direktive ist die Zeit, die anderen Nameservern zum Verarbeiten der Zonen-Informationen mindestens zur Verfügung steht.

In BIND werden alle Zeiten in Sekunden angegeben. Sie können jedoch auch Abkürzungen für andere Zeiteinheiten verwenden, wie z.B. Minuten (M), Stunden (H), Tage (D) und Wochen (W). In der Tabelle unter Tabelle 3.1, „Sekunden im Vergleich zu anderen Zeiteinheiten“ finden Sie Zeiträume in Sekunden und die entsprechende Zeit in anderen Formaten.

Sekunden Andere Zeiteinheiten
60 1M
1800 30M
3600 1H
10800 3H
21600 6H
43200 12H
86400 1D
259200 3D
604800 1W
31536000 365D
Tabelle 3.1. Sekunden im Vergleich zu anderen Zeiteinheiten

Das folgende Beispiel zeigt Ihnen, wie ein SOA-Resource-Record aussehen könnte, wenn es mit echten Werten konfiguriert ist.

@ IN SOA dns1.example.com. hostmaster.example.com. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day

3.3.3. Beispiele für Zone-Dateien

Einzeln betrachtet könnten die Anweisungen und Resource-Records schwer zu verstehen sein. Sind beide in einer gemeinsamen Datei plaziert, wird es einfacher.

Im nächsten Beispiel ist eine sehr einfache Zone-Datei abgebildet.

$ORIGIN example.com. $TTL 86400 @ IN SOA dns1.example.com. hostmaster.example.com. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day IN NS dns1.example.com. IN NS dns2.example.com. IN MX 10 mail.example.com. IN MX 20 mail2.example.com. dns1 IN A 10.0.1.1 dns2 IN A 10.0.1.2 server1 IN A 10.0.1.5 server2 IN A 10.0.1.6 ftp IN A 10.0.1.3 IN A 10.0.1.4 mail IN CNAME server1 mail2 IN CNAME server2 www IN CNAME server1

In diesem Beispiel werden Standard-Anweisungen und SOA-Werte verwendet. Die maßgeblichen Name-Server sind dabei als dns1.example.com und dns2.example.com eingestellt, die über A-Records verfügen, wodurch sie mit 10.0.1.1 bzw. 10.0.1.2 verbunden sind.

Die mit MX-Records konfigurierten E-Mail-Server verweisen auf server1 und server2 über CNAME- Records. Da die server1- und server2-Namen nicht mit einem Punkt enden (.), wird die $ORIGIN-Domain nach ihnen abgelegt, wobei sie zu server1.domain.com und server2.domain.com erweitert werden. Mit den dazugehörigen A-Resource-Records können dann ihre IP-Adressen bestimmt werden.

Die beliebten FTP- und Web-Dienste, die unter den standardmäßigen Namen ftp.domain.com und www.domain.com zur Verfügung stehen, verweisen auf Rechner, die entsprechende Dienste für die Namen bieten, die CNAME-Records verwenden.

Diese Zone-Datei würde mit einer zone-Anweisung in der named.conf-Datei in den Dienst übernommen, was dann so ähnlich aussieht wie:

zone "example.com" IN { type master; file "example.com.zone"; allow-update { none; }; };

3.3.4. Zone-Dateien für die umgekehrte Auflösung von Namen

Eine Zone-Datei für die Auflösung von Reverse-Namen wird verwendet, um eine IP-Adresse in ein bestimmtes Namespace in einem FQDN umzusetzen. Sie ähnelt einer standardmäßigen Zone-Datei, mit dem Unterschied, dass die PTR-Resource-Records zur Verknüpfung der IP-Adressen mit gültigen Domain-Namen verwendet werden.

Das folgende Beispiel zeigt das Layout eines PTR-Record:

<last-IP-digit> IN PTR <FQDN-of-system>

Die <last-IP-digit>ist die letzte Nummer in einer IP-Adresse, mit der auf die FQDN eines bestimmtenSystems hingewiesen wird.

Im folgenden Beispiel werden die IP-Adressen 10.0.1.1 bis 10.0.1.6 den korrespondierenden FQDN zugewiesen. Dies kann in /var/named/example.com.rr.zone lokalisiert werden.

$ORIGIN 1.0.10.in-addr.arpa. $TTL 86400 @ IN SOA dns1.example.com. hostmaster.example.com. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day 1 IN PTR dns1.example.com. 2 IN PTR dns2.example.com. 5 IN PTR server1.example.com. 6 IN PTR server2.example.com. 3 IN PTR ftp.example.com. 4 IN PTR ftp.example.com.

Diese Zone-Datei würde mit einer zone-Anweisung in der named.conf-Datei in den Dienst übernommen, was dann so ähnlich aussieht wie:

zone "1.0.10.in-addr.arpa" IN { type master; file "example.com.rr.zone"; allow-update { none; }; };

Es gibt nur einen kleinen Unterschied zwischen diesem Beispiel und einer standardmäßigen zone-Direktive: der Name wird anders angegeben. Bitte beachten Sie, dass bei einer Zone für eine umgekehrte Auflösung die ersten drei Blöcke der IP-Adresse zum Umkehren benötigt werden und .in-addr.arpa danach angegeben ist. Dadurch kann ein einzelner Block von IP-Ziffern, der in der Zone-Datei zum umgekehrten Auflösen von Namen verwendet wird, richtig an diese Zone angefügt werden.

3.4. Die Verwendung von rndc

BIND enthält das Utility rndc, mit dem Sie den named-Daemon über die Befehlszeile vom lokalen und von einem Remote Host verwalten können.

Um zu verhindern, dass nicht authorisierte Benutzer Zugriff zum named-Daemon erlangen, verwendet BIND eine Authentifizierungsmethode, auf einem gemeinsamen geheimen Schlüssel basierend, um Hostsystemen den Zugriff zu gewähren. Das heisst, das ein übereinstimmender Schlüssel in /etc/named.conf und der rndc Konfigurationsdatei /etc/rndc.conf existieren muss.

Anmerkung

Falls Sie das bind-chroot-Paket installiert haben, läuft der BIND-Dienst in der /var/named/chroot Umgebung. Alle Konfigurationsdateien werden dorthin verschoben. Daher befindet sich die Datei rndc.conf in /var/named/chroot/etc/rndc.conf.

Bitte beachten Sie, dass das rndc-Utility nicht in einer chroot-Umgebung läuft, /etc/rndc.conf ist ein symbolischer Link auf /var/named/chroot/etc/rndc.conf.

3.4.1. Konfigurieren von /etc/named.conf

Um die Verbindung von rndczu Ihrem named-Dienst zu ermöglichen, muss eine controls-Anweisung in der /etc/named.conf-Datei des BIND-Servers vorhanden sein.

Das folgende Beispiel einer controls-Anweisung ermöglicht es Ihnen, rndc-Befehle vom lokalen Host auszuführen.

controls { inet 127.0.0.1 allow { localhost; } keys { <key-name>; }; };

Diese Anweisung weist named an, am standardmäßigen TCP-Port 953 nach Loopback-Adressen zu suchen und lässt rndc-Befehle zu, die vom lokalen Host ausgeführt werden, wenn der richtige Schlüssel angegeben wird. Der <key-name> bezieht sich auf die key-Direktive, die sich auch in der /etc/named.conf-Datei befindet. Im nächsten Beispiel wird eine key-Anweisung veranschaulicht.

key "<key-name>" { algorithm hmac-md5; secret "<key-value>"; };

In diesem Beispiel benutzt <key-value> einen HMAC-MD5-Algorithmus. Mit dem nachfolgenden Befehl können Sie Ihre eigenen Schlüssel unter Verwendung eines HMAC-MD5-Algorithmus erstellen:

dnssec-keygen -a hmac-md5 -b <bit-length> -n HOST <key-file-name>

Es empfiehlt sich, einen Schlüssel mit einer Größe von mindestens 256 Bit zu erstellen. Der Schlüssel, der im <key-value>-Bereich gespeichert werden sollte, kann in der Datei <key-file-name>, welche von diesem Befehl erzeugt wurde, gefunden werden.

Warnung

Da /etc/named.conf von jedem gelesen werden kann, ist es angeraten, das key-Statement in eine separate Datei auszulagern, welche nur von root gelesen werden kann und ein include-Statement zu verwenden, um diese Datei einzubinden. Zum Beispiel:

include "/etc/rndc.key";

3.4.2. Konfigurieren von /etc/rndc.conf

Die key-Anweisung ist die wichtigste in der Datei /etc/rndc.conf.

key "<key-name>" { algorithm hmac-md5; secret "<key-value>"; };

<key-name> und <key-value> sollten exakt mit den Einstellungen in /etc/named.conf übereinstimmen.

Um den Schlüsseln, welche in /etc/named.conf auf dem Ziel-Server angegeben sind, zu entsprechen, fügen Sie folgende Zeilen zu /etc/rndc.conf hinzu.

options { default-server localhost; default-key "<key-name>"; };

Diese Anweisung setzt den globalen Default-Schlüssel. Dierndc Konfigurationsdatei kann allerdings auch verschiedene Schlüssel für verschiedene Server verwenden, wie im folgenden Beispiel gezeigt:

server localhost { key "<key-name>"; };

Wichtig

Stellen Sie sicher, dass jeweils nur ein root-Benutzer auf die Datei /etc/rndc.conf zugreifen kann.

Für weitere Informationen zur Datei /etc/rndc.conf, siehe die rndc.conf man-Seiten.

3.4.3. Befehlszeilenoptionen

Ein rndc-Befehl sieht wie folgt aus:

rndc <options><command><command-options>

Wenn rndc auf einem korrekt konfigurierten lokalen Host ausgeführt wird, stehen Ihnen folgende Befehle zur Verfügung:

  • halt — Hält den named-Service sofort an.

  • querylog — Protokolliert alle Abfragen, die von Clients auf diesem Name-Server durchgeführt wurden.

  • refresh — Aktualisiert die Datenbank des Nameservers.

  • reload — Weist den Name-Server an, die Zone-Dateien neu zu laden, aber alle vorher verarbeiteten Antworten zu behalten. Dadurch können Sie Änderungen in den Zone-Dateien durchführen, ohne dass die gespeicherten Auflösungen von Namen verloren gehen.

    Wenn sich Ihre Änderungen nur auf eine bestimmte Zone auswirken, können Sie lediglich diese Zone neu laden. Geben Sie hierzu nach dem reload-Befehl den Namen der Zone ein.

  • stats — Schreibt die aktuellen named-Statistiken in die Datei /var/named/named.stats.

  • stop — Stoppt den Server vorsichtig, und speichert dabei alle dynamischen Updates und die vorhandenen Incremental Zone Transfers (IXFR) Daten, vor dem Beenden.

Gelegentlich werden Sie bestimmt auch die Standardeinstellungen in der /etc/rndc.conf-Datei übergehen wollen. Hierzu stehen Ihnen folgende Optionen zur Verfügung:

  • -c <configuration-file> — Gibt einen alternativen Speicherort der Konfigurationsdatei an.

  • -p <port-number> — Legt für die rndc-Verbindung eine andere als die standardmäßige Portnummer 953 fest.

  • -s <server> — Ermöglicht es Ihnen, einen anderen als den default-server in /etc/rndc.conf anzugeben.

  • -y <key-name> — Ermöglicht es Ihnen, einen anderen als den default-key in der /etc/rndc.conf-Datei einzustellen.

Zusätzliche Informationen zu diesen Optionen finden Sie auf der rndc-man-Seite

3.5. Erweiterte Funktionen von BIND

Die meisten BIND-Implementierungen verwenden für die Dienste zur Auflösung von Namen oder als Autorität für bestimmte Domains oder Sub-Domains nur named. Die Version 9 von BIND verfügt jedoch auch über eine Reihe weiterer Features, die - korrekte Konfigurierung und Verwendung vorausgesetzt - einen sichereren und effizienteren DNS-Dienst gewährleisten.

Achtung

Einige dieser Features, wie z.B. DNSSEC, TSIG und IXFR (welche in den folgenden Abschnitten beschrieben werden), sollten nur in Netzwerkumgebungen mit Nameservern verwendet werden, die diese Features unterstützen. Wenn Ihre Netzwerkumgebung Nicht-BIND- oder ältere BIND-Nameserver enthält, prüfen Sie bitte, ob es dafür verbesserte Features gibt, bevor Sie sie verwenden.

Alle hier vorgestellten Features werden im BIND 9 Administrator Reference Manual detaillierter beschrieben. Unter Abschnitt 3.7.1, „Installierte Dokumentation“ finden Sie mehr Informationen.

3.5.1. DNS-Protokoll-Erweiterungen

BIND unterstützt Incremental Zone Transfers (IXFR), bei denen Slave-Server nur die aktualisierten Teile einer Zone, die auf einem Master-Name-Server modifiziert wurden, herunterladen. Der standardmäßige Transfer-Process erfordert, dass auch bei der kleinsten Änderung die gesamte Zone an alle Slave-Name-Server übermittelt wird. Für sehr populäre Domains mit sehr großzügigen Zone-Dateien und vielen Slave-Name-Servern macht IXFR den Benachrichtigungs- und Update-Prozess weniger ressourcenintensiv.

Beachten Sie bitte, dass IXFR nur zur Verfügung steht, wenn Sie für Änderungen der Master-Zonen-Records dynamisch updaten verwenden. Wenn Sie Zone-Dateien manuell bearbeiten, um Änderungen durchzuführen, verwenden Sie AXFR. Weitere Informationen über das dynamische Updaten finden Sie im BIND 9 Administrator Reference Manual. Unter Abschnitt 3.7.1, „Installierte Dokumentation“ finden Sie mehr Informationen.

3.5.2. Mehrere Ansichten

Durch Verwendung der view-Anweisung in named.conf, kann BIND verschiedene Informationen bereitstellen, abhängig von welchem Netzwerk eine Anforderung gestellt wurde.

Dies ist vor allem dann nützlich, wenn Sie nicht möchten, dass externe Clients einen bestimmten DNS-Dienst ausführen oder bestimmte Informationen sehen können, während Sie dies auf dem lokalen Netzwerk internen Clients ermöglichen.

Die view-Anweisung verwendet die match-clients-Option, um IP-Adressen oder ganze Netzwerke zu vergleichen und diesen spezielle Optionen und Zone-Daten zu geben.

3.5.3. Sicherheit

BIND unterstützt eine Reihe verschiedener Methoden, um das Updaten von Zonen auf Master- oder Slave-Nameservern zu schützen:

DNSSEC

Abkürzung für DNS SECurity. Dieses Feature ist für Zonen, die mit einem Zonenschlüssel kryptographisch signiert werden, bestimmt.

Auf diese Weise kann sichergestellt werden, dass die Informationen über eine spezielle Zone von einem Nameserver stammen, der mit einem bestimmten privaten Schlüssel signiert wurde, und der Empfänger über den öffentlichen Schlüssel dieses Nameservers verfügt.

Version 9 von BIND unterstützt auch die SIG(0) öffentlicher/privater Schlüssel Methode für die Authentifizierung von Nachrichten.

TSIG

Abkürzung für Transaction SIGnatures. Dieses Feature erlaubt die Übertragung von Master zu Slave nur dann, wenn ein gemeinsam verwendeter geheimer Schlüssel auf beiden Name-Servern existiert.

Dieses Feature unterstützt die auf der IP-Adresse basierende Methode der Transfer-Authorisierung. Somit muss ein unerwünschter Benutzer nicht nur Zugriff auf die IP-Adresse haben, um die Zone zu übertragen, sondern auch den geheimen Schlüssel kennen.

Version 9 von BIND unterstützt auch TKEY, eine weitere Methode der Autorisierung von Zone-Übertragungen auf der Basis eines gemeinsam verwendeten geheimen Schlüssels.

3.5.4. IP-Version 6

Die Version 9 von BIND kann mit den A6 Zone-Records Name-Service für die IP-Version 6 (IPv6)-Umgebungen zur Verfügung stellen.

Wenn Ihre Netzwerkumgebung sowohl über Ipv4- als auch IPv6-Hosts verfügt, können Sie den lwresd Lightweight-Resolver-Daemon in Ihren Netzwerk-Clients verwenden. Dieser Daemon ist ein sehr effektiver Caching-Only-Name-Server, der die neuesten A6- und DNAME-Records versteht, die mit Ipv6 verwendet werden. Auf der lwresd-man-Seite finden Sie weitere Informationen hierzu.

3.6. Allgemein zu vermeidende Fehler

Es kommt häufig vor, dass Anfänger bei der Bearbeitung der Konfigurationsdateien von BIND Fehler machen oder bei der Verwendung von named zunächst Schwierigkeiten haben. Viele der nachfolgend beschriebenen Probleme können Sie aber vermeiden, wenn Sie Folgendes beachten:

  • Erhöhen Sie die Seriennummer, wenn Sie eine Zone-Datei bearbeiten.

    Wenn die Seriennummer nicht erhöht wird, hat Ihr Master-Name-Server zwar die korrekten neuen Informationen, Ihr Slave-Name-Server werden jedoch nie über diese Änderungen oder den Versuch informiert, die Daten in der Zone zu aktualisieren.

  • Achten Sie darauf, dass Sie geschweifte Klammern und Strichpunkte in der /etc/named.conf-Datei richtig verwenden.

    Ein ausgelassenes Semikolon oder eine nicht geschlossene geschweifte Klammer kann dazu führen, dass named nicht startet.

  • Denken Sie daran, in den Zone-Dateien nach jedem FQDN Punkte (.) zu setzen und sie beim Hostnamen wegzulassen.

    Der Punkt bedeutet, dass der angegebene Name komplett ist. Wird er weggelassen, platziert named den Namen der Zone oder des $ORIGIN-Werts hinter den Namen, um ihn zu vervollständigen.

  • Wenn Ihre Firewall Verbindungen von Ihrem named zu anderen Nameservern blockiert, müssen Sie möglicherweise die Konfigurationsdatei bearbeiten.

    Standardmäßig verwendet die Version 9 von BIND willkürliche Ports oberhalb von 1024, um andere Name-Server abzufragen. Einige Firewalls gehen jedoch von Name-Servern aus, die für die Kommunikation nur den Port 53 verwenden. Um die Verwendung des Port 53 durch named zu erzwingen, fügen Sie in /etc/named.conf folgende Zeile zur options-Direktive hinzu:

    query-source address * port 53;
    

3.7. Zusätzliche Ressourcen

Folgende Quellen enthalten zusätzliche Hintergrundinformationen zu BIND.

3.7.1. Installierte Dokumentation

BIND bietet eine Vielfalt an Dokumentation, die viele verschiedene Themen (mit jeweils individuellem Verzeichnis) abdeckt. Ersetzen Sie dazu <version-number> mit der auf Ihrem System installierten Version von bind.

/usr/share/doc/bind-<version-number>/

Dieses Verzeichnis listet die aktuellsten Neuerungen auf.

/usr/share/doc/bind-<version-number>/arm/

Dieses Verzeichnis enthält das BIND 9 Administrator Reference Manual im HTML- und SGML-Format, welches Details über die für BIND erforderlichen Ressourcen, Informationen zur Konfigurationsweise der verschiedenen Name-Server-Typen, zur Durchführung des Load-Balancing und anderen spezielleren Themen enthält. Die meisten neuen Benutzer werden sich mit dieser Informationsquelle am besten mit BIND vertraut machen können.

/usr/share/doc/bind-<version-number>/draft/

Dieses Verzeichnis enthält ausgesuchte technische Dokumente, die Probleme in Zusammenhang mit DNS behandeln und einige Methoden zur Problemlösung anbieten.

/usr/share/doc/bind-<version-number>/misc/

Enthält Dokumente über spezielle verbesserte Merkmale. Benutzer der Version 8 von BIND sollten sich das Dokument migration anschauen, das sich mit bestimmten Änderungen befasst, die für eine Verwendung der Version 9 von BIND vorzunehmen sind. In der options-Datei sind alle in BIND 9 implementierten Optionen aufgelistet, die in /etc/named.conf verwendet werden.

/usr/share/doc/bind-<version-number>/rfc/

Dieses Verzeichnis liefert jegliches RFC-Dokument, das mit BIND zu tun hat.

Es gibt auch einige man-Seiten zu den verschiedenen Applikationen und Konfigurationsdateien die im Bezug zu BIND stehen. Einige der wichtigeren man-Seiten sind wie folgt aufgelistet.

Administrative Applikationen
  • man rndc — Erklärt die verschiedenen Optionen, die bei der Verwendung von rndc zur Kontrolle eines BIND Name-Servers zur Verfügung stehen.

Server-Applikationen
  • man named — Untersucht ausgewählte Argumente, die zur Steuerung des BIND-Name-Server-Daemon verwendet werden können.

  • man lwresd — Beschreibt den Lightweight-Resolver-Daemon und dessen verfügbare Optionen.

Konfigurationsdateien
  • man named.conf — Eine vollständige Liste von Optionen, welche in der named-Konfigurationsdatei zur Verfügung stehen.

  • man rndc.conf — Eine vollständige Liste von Optionen, welche in der rndc-Konfigurationsdatei zur Verfügung stehen.

3.7.2. Hilfreiche Webseiten

  • http://www.isc.org/index.pl?/sw/bind/ — Die Homepage des BIND-Projekts. Hier finden Sie Informationen aktuellen Releases und können das BIND 9 Administrator Reference Manual in der PDF-Version herunterladen.

  • http://www.redhat.com/mirrors/LDP/HOWTO/DNS-HOWTO.html — Befasst sich mit BIND als Caching-Nameserver und der Konfiguration der einzelnen Zone-Dateien sowie der Konfiguration verschiedener Zone-Dateien, die als primärer Name-Server für eine Domain benötigt werden.

3.7.3. Bücher zum Thema

  • DNS and BIND von Paul Albitz und Cricket Liu; O'Reilly & Associates — Ein bekanntes Buch, das allgemeine und weiterführende Optionen der Konfiguration von BIND erklärt und Strategien zum Schutz Ihres DNS-Servers vorstellt.

  • The Concise Guide to DNS and BIND von Nicolai Langfeldt; Que — Beschreibt die Verbindungen zwischen mehreren Netzwerkdiensten und BIND mit Schwerpunkt auf aufgabenorientierten technischen Themen.

Kapitel 4. OpenSSH

SSH™ (oder Secure SHell) ist ein Protokoll, das die sichere Kommunikation zwischen zwei Systemen auf der Basis einer Client/Server-Architektur unterstützt und das es Benutzern ermöglicht, sich auf Serversystemen von Remote aus einzuloggen. Im Gegensatz zu anderen Remote-Kommunikationsprotokollen wie FTP oder Telnet, verschlüsselt SSH die Anmeldung. Auf diese Weise können Eindringlinge keine unverschlüsselten Passwörter erkennen.

SSH wurde als Ersatz für ältere, weniger sichere Terminalanwendungen, die zum Anmelden in Remote-Hosts wie telnet oder rsh verwendet werden, entwickelt. Das Programm scp ersetzt ältere Programme wie rcp, die zum Kopieren von Dateien zwischen Hosts verwendet wurden. Da diese älteren Programme Passwörter zwischen dem Client und dem Server nicht verschlüsseln, sollten Sie möglichst vermeiden, sie zu verwenden. Die Verwendung von sicheren Methoden zur Anmeldung verringert das Sicherheitsrisiko des Client- und des Host-Systems.

4.1. Features von SSH

Das SSH-Protokoll liefert folgende Schutzmaßnahmen:

  • Nach einer ersten Verbindung prüft der Client, ob er sich auch in der Folge mit dem gleichen Server verbindet.

  • Der Client überträgt die Authentifizierungsinformationen in verschlüsselter Form an den Server, unter Verwendung von 128-Bit Verschlüsselung.

  • Alle während der Verbindung gesendeten und empfangenen Daten sind mit der 128 Bit-Verschlüsselung so komplex verschlüsselt, dass es äußerst schwierig ist, abgefangene Übertragungen zu entschlüsseln und zu lesen.

  • Der Client kann X11[1]-Anwendungen vom Server weiterleiten. Diese Technik - auch als X11-Forwarding bezeichnet, bietet eine sichere Methode, grafische Anwendungen über ein Netzwerk zu verwenden.

Da das SSH Protokoll alles verschlüsselt, das gesendet oder empfangen wird, können damit auch unsichere Protokolle verschlüsselt werden. Mit port forwarding kann ein SSH Server zum Verschlüsseln unsicherer Protokolle, z.B. POP, verwendet werden und somit die Sicherheit des Systems und der Daten erhöhen.

Der OpenSSH-Server und -Client kann auch so konfiguriert werden, dass ein Tunnel ähnlich dem Virtual-Private-Network für Datenverkehr zwischen Server- und Clientrechnern eingerichtet wird.

Red Hat Enterprise Linux umfasst das allgemeine OpenSSH-Paket (openssh), sowie die Pakete OpenSSH-Server (openssh-server) und -Client (openssh-clients). Beachten Sie bitte, dass die OpenSSH-Pakete das OpenSSL-Paket (openssl) voraussetzen, welches einige wichtige kryptographische Bibliotheken installiert. So kann OpenSSH verschlüsselte Datenübertragung gewährleisten.

4.1.1. Wozu dient SSH?

Skrupellosen Computerbenutzern stehen eine Reihe von Tools zur Verfügung, um die Netzwerkkommunikation zu stören, abzufangen und umzuleiten und um auf diese Weise Zugriff auf Ihr System zu erhalten. Diese Gefahren können generell wie folgt klassifiziert werden:

  • Abfangen von Datenübertragung zwischen zwei Systemen

    Dieser mögliche Angriff kann gemountet werden durch die Verwendung eines Packet-Sniffers — einem gewöhnlichen Netzwerk-Dienstprogramm.

  • Imitation eines bestimmten Hosts — Mit dieser Strategie ist ein drittes System so konfiguriert, dass es vorgibt, der eigentliche Empfänger einer Übertragung zu sein. Ist die Strategie erfolgreich, bemerkt das Benutzersystem nicht, dass es mit dem falschen Host kommuniziert.

    Dieser mögliche Angriff kann anhand von Techniken, die unter dem Namen DNS-Poisoning [2] oder IP-Spoofing [3] bekannt sind, gemounted werden.

Bei beiden Methoden werden möglicherweise wichtige und vertrauliche Informationen abgefangen. Wenn dies aus unlauteren Gründen erfolgt, können die Ergebnisse katastrophal sein.

Wenn SSH für Fernanmeldungen über eine Shell und für das Kopieren von Dateien verwendet wird, können diese Sicherheitsrisiken erheblich gemindert werden. Das ist darauf zurückzuführen, dass der SSH-Client und Server digitale Unterschriften verwenden, um gegenseitig ihre Identität zu prüfen. Außerdem sind alle Mitteilungen zwischen Client und Server verschlüsselt. Dabei nützen auch Versuche, sich als das eine oder andere System auszugeben, nichts, da der Schlüssel hierfür nur dem lokalen und dem entfernten System bekannt ist.

4.2. SSH Protokoll Versionen

Das SSH-Protokoll erlaubt jedem Client- und Server-Programm, welches zu den Spezifikationen des Protokolls gebaut wurde, sicher zu kommunizieren und austauschbar verwendet werden zu können.

Derzeit existieren zwei Varianten von SSH (Version 1 und Version 2). Die OpenSSH-Suite unter Red Hat Enterprise Linux verwendet die SSH Version 2 mit einem verbesserten Algorithmus zum Schlüsselaustausch, der nicht anfällig ist für den Exploit der Version 1. Allerdings unterstützt die OpenSSH-Suite keine auf der Version 1 basierenden Verbindungen.

Wichtig

Es ist empfohlen nur SSH Version 2-kompatible Server und Clients zu verwenden, sofern dies möglich ist.

4.3. Die Abfolge der Vorgänge einer SSH-Verbindung

Die folgende Abfolge von Vorgängen tragen zum Schutz der Integrität einer SSH-Kommunikation zwischen zwei Hosts bei:

  1. Zunächst wird eine sichere Transportschicht geschaffen, die dem Client-System anzeigt, dass es mit dem korrekten Server in Verbindung steht.

  2. Die Transportschicht zwischen dem Client und dem Remote-Host ist mit einer symmetrischen Kodierung verschlüsselt.

  3. Der Client authentifiziert sich gegenüber dem Server.

  4. Der Remote-Client kann nun sicher mit dem Remote-Host über die verschlüsselte Verbindung kommunizieren.

4.3.1. Transportschicht

Die wichtigste Aufgabe der Transportschicht ist es, die sichere und verschlüsselte Kommunikation zwischen zwei Rechnern bei und nach der Authentifizierung zu gewährleisten. Die Transportschicht verwaltet zu diesem Zweck die Verschlüsselung und Entschlüsselung der Daten und sorgt dafür, dass die Datenpakete während des gesamten Übertragungsflusses geschützt sind. Weiterhin kann diese Schicht die Daten komprimieren und damit die Übertragungsgeschwindigkeit erheblich erhöhen.

Sobald ein Client über ein SSH-Protokoll mit einem Server in Verbindung tritt, erfolgen verschiedene wichtige Vorgänge, die dazu dienen, dass die beiden Systeme die Transportschicht korrekt aufbauen:

  • Austausch der Schlüssel

  • Zu verwendenden Algorithmus für den öffentlichen Schlüssel bestimmen

  • Zu verwendenden Algorithmus für die symmetrische Verschlüsselung bestimmen

  • Zu verwendenden Algorithmus für die Authentifizierung der Mitteilungen bestimmen

  • Hash-Algorithmus wird bestimmt

Während des Schlüsselaustauschs identifiziert sich der Server mit einem eindeutigen Host-Key. Falls der Client nie zuvor mit diesem speziellen Server kommuniziert hat, ist der Host-Key des Servers für den Client unbekannt und die Verbindung wird nicht hergestellt. OpenSSH löst dieses Problem, indem der Host-Key des Servers akzeptiert wird. Dies wird durchgeführt, nachdem der Benutzer benachrichtigt wurde und den neuen Host-Key sowohl akzeptiert, als auch verifiziert hat. Bei nachfolgenden Verbindungen wird der Host-Key des Servers anhand der gespeicherten Version auf dem Client überprüft, was das Vertrauen schafft, dass der Client tatsächlich mit dem vorgesehenen Server kommuniziert. Falls der Host-Key in der Zukunft nicht mehr übereinstimmt, muss der Benutzer die gespeicherte Version auf dem Client entfernen, bevor eine Verbindung hergestellt werden kann.

Achtung

Es ist möglich, dass ein Hacker sich zum Beispiel bei der ersten Verbindung als Server ausgeben kann, da der lokale Rechner zu diesem Zeitpunkt den gewünschten Server und einen unerlaubt eingerichteten Server noch nicht unterscheiden kann. Um dies zu vermeiden, sollten Sie die Integrität eines neuen SSH-Servers prüfen, indem Sie sich vor dem ersten Kontakt oder nachdem sich der Host-Schlüssel geändert hat, mit dem Server-Administrator in Verbindung setzen.

Das SSH-Protokoll wurde konzipiert, um mit fast allen Algorithmen oder Formaten für allgemeine Schlüssel verwendet werden zu können. Nachdem ein erster Schlüsselaustausch zwei Werte erstellt hat (einen Hash-Wert für den Austausch und einen gemeinsam genutzten, geheimen Wert), berechnen die beiden Systeme sofort neue Schlüssel und Algorithmen, um die Authentifizierung und die in der Folge über die Verbindung gesendeten Daten zu schützen.

Nachdem eine bestimmte Datenmenge mithilfe eines vorgegebenen Schlüssels und Algorithmus übertragen wurde (die genaue Menge hängt von der SSH-Implementation ab), erfolgt ein weiterer Schlüsselaustausch, der wiederum einen neuen Hash-Wert und einen neuen, gemeinsam genutzten, geheimen Wert generiert. Auch wenn eine unbefugte Person diese beiden Werte ermitteln sollte, müsste sie diese Information bei jedem neuen Schlüsselaustausch ermitteln, um die Verbindung zu überwachen.

4.3.2. Authentifizierung

Nachdem die Transportschicht einen sicheren Kanal geschaffen hat, in dem die Informationen zwischen den beiden Systemen übertragen werden, teilt der Server dem Client die verschiedenen unterstützten Authentifizierungsmethoden mit (beispielsweise eine private, verschlüsselte Signatur oder die Eingabe eines Passworts). Der Client wird anschließend versuchen, sich anhand einer der unterstützten Methoden gegenüber dem Server zu identifizieren.

SSH Server und Clients können konfiguriert werden, um verschiedene Arten der Authentifizierung zu ermöglichen. Diese Methode bietet daher jeder Seite das ideale Maß an Kontrolle. Der Server kann entscheiden, welche Verschlüsselungsmethoden er auf der Grundlage seines Sicherheitsmodells unterstützen möchte, und der Client kann festlegen, in welcher Reihenfolge er die verschiedenen verfügbaren Authentifizierungsmethoden verwendet.

4.3.3. Verbindungskanäle

Nach einer erfolgreichen Authentifzierung via SSH Transportschicht, werden mehrere Kanäle mit Hilfe der Technik Multiplexing[4] geöffnet. Jeder dieser Kanäle verarbeitet die Datenübertragung für verschiedene Terminalsitzungen und für weitergeleitete X11-Sitzungen.

Sowohl Clients als auch Server können einen neuen Kanal erstellen, wobei jedem Kanal an jedem Ende eine unterschiedliche Nummer zugewiesen wird. Wenn eine Seite einen neuen Kanal öffnen möchte, wird die Nummer der entsprechenden Seite des Kanals mit der Anforderung übermittelt. Diese Information wird von der anderen Seite gespeichert und verwendet, um eine bestimmte Mitteilung an diesen Kanal weiterzuleiten. Ziel dabei ist zu vermeiden, dass sich verschiedene Arten von Sessionen beeinflussen und die Kanäle geschlossen werden können, ohne die primäre SSH-Verbindung zwischen den beiden Systemen zu unterbrechen.

Kanäle unterstützen auch die Datenflusskontrolle, was es ihnen ermöglicht, Daten geordnet zu senden und zu empfangen. Auf diese Weise werden Daten erst dann über den Kanal gesendet, wenn der Host-Rechner die Meldung erhält, dass der Kanal empfangsbereit ist.

Der Client und Server übertragen automatisch die Eigenschaften jedes Kanals, je nachdem, welche Art von Dienst der Client abruft und wie der Benutzer mit dem Netzwerk verbunden ist. Dadurch ergibt sich eine größere Flexibilität bei der Handhabung der verschiedenen Arten von Remote-Verbindungen ohne die Basis-Infrastruktur des Protokolls ändern zu müssen.

4.4. Konfigurieren eines OpenSSH-Servers

Um einen OpenSSH-Server auszuführen, müssen Sie zuerst sicherstellen, dass Sie die richtigen RPM-Pakete installiert haben. Das Paket openssh-server ist notwendig und vom Paket openssh abhängig.

Der OpenSSH-Daemon verwendet die Konfigurationsdatei /etc/ssh/sshd_config. Die standardmäßige Konfigurationsdatei ist in der Regel ausreichend. Wenn Sie den Daemon in anderer Weise konfigurieren möchten als in der Standarddatei sshd_config angegeben, lesen Sie die sshd man-Seite, in der Sie eine Liste von Schlüsselwörtern finden, die in der Konfigurationsdatei verwendet werden können.

Wenn Sie ein Red Hat Enterprise Linux System neu installieren und sich vorher Clients mit diesem mit einem der OpenSSH Tools verbunden hatten, so wird den Client-Benutzern nach der Reinstallation folgende Meldung angezeigt:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.

Das neu installierte System legt ein neues Set Identifikationsschlüssel für das System an, daher die Warnung über die Änderung des RSA Host-Schlüssels. Wenn Sie die für das System generierten Host-Schlüssel beibehalten möchten, stellen Sie eine Sicherungskopie der Dateien /etc/ssh/ssh_host*key* her, um diese nach der Neuinstallation zu verwenden. Durch diesen Prozess wird die Identität des Systems beibehalten, und wenn sich Clients nach der Neuinstallation hiermit verbinden, wird keine Warnmeldung ausgegeben.

4.4.1. Anfordern von SSH für Fernverbindungen

Für ein wirklich effektives SSH dürfen Sie keine unsicheren Verbindungsprotokolle wie Telnet und FTP verwenden. Andernfalls wird das Passwort eines Benutzers mit Hilfe von SSH für die eine Sitzung zwar geschützt, um dann später durch eine Anmeldung bei Telnet erfasst zu werden.

Einige Dienste sind zu deaktivieren:

  • telnet

  • rsh

  • rlogin

  • vsftpd

Um unsichere Verbindungsmethoden auf dem System zu deaktivieren, verwenden Sie das Kommandozeilenprogramm chkconfig, das auf Ncurses basierende Programm /usr/sbin/ntsysv, oder die grafische Anwendung Tool zur Konfiguration von Diensten (system-config-services). Jede dieser Anwendungen erfordert Root-Zugriff.

4.5. OpenSSH-Konfigurationsdateien

OpenSSH verfügt über zwei verschiedene Arten von Konfigurationsdateien: eine für Clientprogramme (ssh, scp, sftp) und eine andere für den Server-Daemon (sshd).

Die SSH-Konfigurationsinformationen für das gesamte System sind im Verzeichnis /etc/ssh gespeichert:

  • moduli — Hier sind Diffie-Hellmann Gruppen für den Austausch des Diffie-Hellman Schlüssels enthalten. Wenn der Austausch dieser Schlüssel zu Beginn einer SSH-Sitzung erfolgt, wird ein gemeinsam genutzter, geheimer Wert erstellt, der von keiner Seite allein erstellt werden kann. Dieser Wert wird zur Host-Authentifizierung verwendet.

  • ssh_config — Hierbei handelt es sich um eine Datei für die Konfiguration des SSH-Clients. Wenn einem Benutzer eine eigene Konfigurationsdatei in seinem Home-Verzeichnis (~/.ssh/config) zur Verfügung steht, werden die hier enthaltenen Werte überschrieben.

  • sshd_config — Die Konfigurationsdatei für den sshd Daemon.

  • ssh_host_dsa_key — Der private DSA-Schlüssel, der vom sshd Daemon verwendet wird.

  • ssh_host_dsa_key.pub — Der öffentliche DSA-Schlüssel, der vom sshd Daemon verwendet wird.

  • ssh_host_key — Der private RSA Schlüssel, der vom sshd Daemon für die Version 1 des SSH-Protokolls verwendet wird.

  • ssh_host_key.pub — Der öffentliche RSA Schlüssel, der vom sshd Daemon für die Version 1 des SSH-Protokolls verwendet wird.

  • ssh_host_rsa_key — Der private RSA Schlüssel, der von sshd Daemon für die Version 2 des SSH-Protokolls verwendet wird.

  • ssh_host_rsa_key.pub — Der öffentliche RSA Schlüssel, der von sshd für die Version 2 des SSH-Protokolls verwendet wird.

Die benutzerspezifischen SSH-Konfigurationsinformationen werden im Home-Verzeichnis des Benutzers im Unterverzeichnis ~/.ssh/ gespeichert:

  • authorized_keys — In dieser Datei ist eine Liste der autorisierten öffentlichen Schlüssel für Server enthalten. Stellt ein Client eine Verbindung zu einem Server her, wird er von diesem durch Prüfen seines unterschriebenen öffentlichen Schlüssels, der in dieser Datei gespeichert ist, authentifiziert.

  • id_dsa — Diese Datei enthält den privaten Schlüssel des Benutzers.

  • id_dsa.pub — Der öffentliche DSA-Schlüssel des Benutzers.

  • id_rsa — Der private RSA-Schlüssel, welcher von ssh für Version 2 des SSH-Protokolls verwendet wird.

  • id_rsa.pub — Der öffentliche RSA-Schlüssel, welcher von ssh für Version 2 des SSH-Protokolls verwendet wird.

  • identity — Der private RSA-Schlüssel, welcher von ssh für Version 1 des SSH-Protokolls verwendet wird.

  • identity.pub — Der öffentliche RSA-Schlüssel, welcher von ssh für Version 1 des SSH-Protokolls verwendet wird.

  • known_hosts — In dieser Datei können die DSA-Host-Schlüssel der Server gespeichert werden, mit denen sich der Benutzer über SSH anmeldet. Diese Datei ist sehr wichtig, um festzustellen, ob der SSH-Client mit dem richtigen SSH-Server verbunden ist.

    Wichtig

    Falls sich ein Host-Key eines SSH Servers geändert hat, informiert der Client den Benutzer, dass die Verbindung nicht fortgesetzt werden kann, bis der Host-Key des Servers mit einem Texteditor aus der Datei known_hosts entfernt wurde. Bevor Sie dies jedoch tun, kontaktieren Sie Ihren Systemadministrator des SSH-Servers um sicherzugehen, dass der Server nicht kompromittiert wurde.

Auf den man-Seiten von ssh_config und sshd_config finden Sie weitere Informationen über die verschiedenen, erhältlichen Anleitungen in den SSH-Konfigurationsdateien.

4.6. Konfigurieren eines OpenSSH-Clients

Um sich einem Client-Rechner mit einem OpenSSH-Server zu verbinden, müssen Sie die Pakete openssh-clients und openssh auf dem Client-Rechner installiert haben.

4.6.1. Verwenden des Befehlsssh

Der Befehl ssh ist ein sicherer Ersatz für die Befehle rlogin, rsh und telnet. Mit diesem Befehl können Sie sich sowohl auf einem Remote-Rechner anmelden als auch auf diesem Rechner Befehle ausführen.

Die Verwendung des Befehls ssh für die Anmeldung auf einem Rechner ist vergleichbar mit dem Befehl telnet. Wenn Sie sich auf einem Remote-Rechner mit dem Namen penguin.example.net anmelden möchten, geben Sie am Shell-Prompt den folgenden Befehl ein:

ssh penguin.example.net

Wenn Sie sich das erste Mal mit dem Befehl ssh auf einem Remote-Rechner anmelden, erscheint folgende (oder eine ähnliche) Meldung:

The authenticity of host 'penguin.example.net' can't be established.
DSA key fingerprint is 94:68:3a:3a:bc:f3:9a:9b:01:5d:b3:07:38:e2:11:0c.
Are you sure you want to continue connecting (yes/no)?

Geben Sie yes ein, um fortzufahren. Der Server wird Ihrer Liste von bekannten Hosts (~/.ssh/known_hosts/) wie im Folgenden angegeben hinzugefügt:

Warning: Permanently added 'penguin.example.net' (RSA) to the list of known hosts.

Anschließend werden Sie aufgefordert, Ihr Passwort für den Remote-Rechner einzugeben. Nach der Eingabe des Passworts befinden Sie sich im Shell-Prompt des Remote-Rechners. Wenn Sie keinen Benutzernamen angeben, so wird der Benutzername, mit dem Sie auf dem lokalen Rechner angemeldet sind, an den Remote-Rechner weitergegeben. Mit dem folgenden Befehl können Sie einen anderen Benutzernamen festlegen:

ssh username@penguin.example.net

Sie können auch die Syntax ssh -l username penguin.example.net verwenden.

Mit dem Befehl ssh können Sie Befehle auf einem Remote-Rechner ausführen, ohne am Shell-Prompt angemeldet sein zu müssen. Die entsprechende Syntax ist ssh hostnamecommand. Wenn Sie zum Beispiel den Befehl ls /usr/share/doc auf dem Remote-Rechner penguin.example.net ausführen möchten, geben Sie am Shell-Prompt den folgenden Befehl ein:

ssh penguin.example.net ls /usr/share/doc

Nachdem Sie das korrekte Passwort eingegeben haben, wird der Inhalt des Verzeichnisses /usr/share/doc angezeigt, und Sie kehren zum Shell-Prompt zurück.

4.6.2. Verwenden des Befehls scp

Der Befehl scp kann für die Übertragung von Dateien zwischen Computern über eine sichere, verschlüsselte Verbindung verwendet werden und ist vergleichbar mit dem Befehl rcp.

Die allgemeine Syntax für die Übertragung einer lokalen Datei zu einem Remote-System lautet wie folgt:

scp <localfile>username@tohostname:<remotefile>

Die Datei <localfile> legt den Source inklusive demPfad zur Datei fest, wie z.B. /var/log/maillog. Die Datei <remotefile> legt die Destination fest, was z.B. ein neuer Dateiname sein kann, wie /tmp/hostname-maillog. Für das Remote-System, wenn Sie kein vorangestelltes / haben, so ist der Pfad relativ zum Heimverzeichnis von username; typisch /home/username/.

Um die lokale Datei shadowman zum Heimverzeichnis Ihres Accounts auf penguin. example.net zu übermitteln, geben Sie Folgendes am Shell-Prompt ein (ersetzen Sie dabei username durch Ihren Benutzernamen):

scp shadowman username@penguin.example.net:shadowman

Die Datei shadowman wird somit an die Datei /home/username/shadowman des Rechners penguin.example.net übermittelt.

Die allgemeine Syntax für die Übermittlung von Remote-Dateien zu einem lokalen System lautet:

scp username@tohostname:<remotefile><newlocalfile>

Die Datei <remotefile> legt die Quelle inklusive Pfad fest und newlocalfile den Bestimmungsort und Pfad.

Viele Dateien können als Quelldateien festgelegt sein. Um zum Beispiel den Inhalt des Verzeichnisses /downloads an das Verzeichnis uploads des Remote-Rechners penguin.example.net zu übertragen, geben Sie Folgendes am Shell-Prompt ein:

scp downloads/* username@penguin.example.net:uploads/

4.6.3. Verwenden des Befehls sftp

Das Dienstprogramm sftp kann zum Öffnen einer sicheren, interaktiven FTP-Sitzung verwendet werden. Es gleicht ftp, mit dem Unterschied, dass es eine sichere, verschlüsselte Verbindung verwendet. Die allgemeine Syntax ist sftp username@hostname.com. Nach der Authentifizierung können Sie eine Reihe von Befehlen verwenden (ähnlich wie bei der Verwendung von FTP). In der man-Seite sftp finden Sie eine Liste dieser Befehle. Um die man-Seite lesen zu können, müssen Sie im Shell-Prompt den Befehlman sftp ausführen. Das Dienstprogramm sftp ist nur in den OpenSSH Versionen 2.5.0p1 und höher verfügbar.

4.7. Mehr als eine Secure Shell

Eine sichere Befehlszeilenschnittstelle stellt nur eine der vielen Arten und Weisen dar, wie SSH verwendet werden kann. Mit einer angemessenen Bandbreite können X11-Sitzungen über einen SSH-Kanal verwaltet werden. Mithilfe von TCP/IP-Forwarding können bisher unsichere Port-Verbindungen zwischen Systemen auf spezifische SSH-Kanäle gemappt werden.

4.7.1. X11 Forwarding

Das Öffnen einer X11-Sitzung via einer SSH-Verbindung ist so einfach, wie das Verbinden mit dem SSH-Server selbst mit der Option -Y und das Ausführen eines X-Programms auf einem lokalen Rechner.

ssh -Y <user>@example.com

Wird ein X-Programm an einem Secure Shell Prompt ausgeführt, erstellen der SSH-Client und -Server einen neuen, verschlüsselten Kanal in der aktuellen SSH-Verbindung, und die Daten des X-Programms werden über diesen Kanal auf Ihren Client-Rechner gesendet.

Das Weiterleiten von X11 kann sehr nützlich sein. So kann das Weiterleiten von X11 beispielsweise dazu verwendet werden, eine sichere, interaktive Sitzung für Tool zur Druckerkonfiguration zu erstellen. Um dies durchzuführen, verwenden Sie ssh, um sich mit dem Server zu verbinden und tippen:

system-config-printer &

Nachdem Sie das Root-Passwort für den Server angegeben haben, erscheint das Tool zur Druckerkonfiguration und ermöglicht dem Remote-Benutzer, die Druckereinstellungen auf dem Remote-System sicher zu konfigurieren.

4.7.2. Port Forwarding

Mit SSH können Sie unsichere TCP/IP Protokolle via Port Forwarding sichern. Bei dieser Technik wird der SSH-Server zu einer verschlüsselten Verbindung zum SSH-Client.

Beim Port Forwarding wird ein lokaler Port auf einem Client zu einem remoten Port auf dem Server gemappt. Mit SSH können Sie jeden Port des Servers auf jeden Port des Clients übertragen; die Portnummern müssen hierfür nicht übereinstimmen.

Um einen TCP/IP Port Forwarding Kanal zu erstellen, der nach Verbindungen im lokalen Host sucht, verwenden Sie folgenden Befehl:

ssh -L local-port:remote-hostname:remote-portusername@hostname

Hinweis

Für das Einrichten des Port-Forwarding auf Ports unterhalb 1024 Zylindern müssen Sie als root angemeldet sein.

Wenn Sie zum Beispiel Ihre E-Mails auf einem Server mit dem Namen mail.example.com mithilfe von POP3 über eine verschlüsselte Verbindung abrufen möchten, verwenden Sie folgenden Befehl:

ssh -L 1100:mail.example.com:110 mail.example.com

Nachdem der Port Forwarding Channel zwischen dem Client-Rechner und dem Mailserver eingerichtet wurde, können Sie einen POP3-Mail-Client anweisen, Port 1100 auf localhost für das Abrufen neuer E-Mails zu verwenden. Alle an Port 1100 gesendeten Anfragen werden auf diese Weise sicher an den Server mail.example.com weitergeleitet.

Wenn mail.example.com keinen SSH-Serverdaemon ausführt, Sie sich jedoch an einem anderen Rechner im gleichen Netzwerk anmelden können, können Sie dennoch SSH verwenden, um einen Teil der Verbindung zu sichern. Hierzu ist ein anderer Befehl notwendig:

ssh -L 1100:mail.example.com:110 other.example.com

In diesem Beispiel werden POP3-Anfragen von Port 1100 des Client-Rechners über die SSH-Verbindung auf Port 22 an den SSH-Server other.example.com weitergeleitet. Anschließend verbindet sich other.example.com mit Port 110 auf mail.example.com, so dass Sie neue E-Mails abrufen können. Beachten Sie, dass bei Verwendung dieser Methode lediglich die Verbindung zwischen dem Client-System und dem other.example.com-SSH-Server sicher ist.

Dies kann sehr nützlich sein, wenn Sie Informationen sicher über Netzwerk-Firewalls übertragen möchten. Wenn die Firewall so konfiguriert ist, dass SSH-Kommunikationen über den Standardport (22) erfolgen, die Übertragung über andere Ports jedoch gesperrt ist, ist eine Verbindung zwischen zwei Rechnern mit gesperrten Ports weiterhin möglich, indem die Meldungen über eine festgesetzte SSH-Verbindung zwischen diesen Rechnern übermittelt werden.

Hinweis

Die Verwendung von Port Forwarding für das Weiterleiten von Verbindungen ermöglicht es jedem Benutzer des Client-Servers, sich mit diesem Service zu verbinden. Wird das Client-System kompromittiert, hat ein Angreifer auch Zugang zum Forwarding Service.

Systemadministratoren, die um das Port Forwarding besorgt sind, können diese Funktionalität auf dem Server deaktivieren, indem sie einen No Parameter für die Zeile AllowTcpForwarding in der Datei /etc/ssh/sshd_config angeben und den sshd-Service neu starten.

4.7.3. Erstellen eines Schlüsselpaares

Wenn Sie nicht jedesmal Ihr Passwort eingeben möchten, wenn Sie die Befehle ssh, scp oder sftp verwenden, um sich mit einem Remote-Rechner zu verbinden, können Sie ein Authorisierungsschlüsselpaar erstellen.

Für jeden Benutzer müssen Schlüssel erstellt werden. Wenn Sie als Benutzer mit einem Remote-Rechner verbunden werden möchten, müssen Sie die Schlüssel gemäߟ den folgenden Schritten erstellen. Wenn Sie diese Schritte als root ausführen, können diese Schlü ssel auch nur von root verwendet werden.

Das Starten mit OpenSSH Version 3.0, ~/.ssh/authorized_keys2, ~/.ssh/known_hosts2 und /etc/ssh_known_hosts2 ist veraltet. SSH Protokoll 1 und 2 verwenden die Dateien ~/.ssh/authorized_keys, ~/.ssh/known_hosts und /etc/ssh/ssh_known_hosts.

Red Hat Enterprise Linux 5.2 uses SSH Protocol 2 and RSA keys by default.

Tipp

Wenn Sie Ihr System neu installieren, das erstellte Schlüsselpaar jedoch beibehalten möchten, erstellen Sie eine Sicherungskopie des Verzeichnisses .ssh in Ihrem Home-Verzeichnis. Kopieren Sie dieses Verzeichnis nach der Installation erneut in Ihr Home-Verzeichnis. Dies ist für alle Benutzer Ihres Systems, einschließlich dem root-Benutzer, möglich.

4.7.3.1. Erstellen eines RSA-Schlüsselpaares für die Version 2

Befolgen Sie die nachstehenden Schritte für die Erstellung eines RSA-Schlüsselpaares für die Version 2 des SSH-Protokolls. Dieses ist der Standard seit OpenSSH 2.9.

  1. Um ein RSA-Schlüsselpaar für das Arbeiten mit der Version 2 des Protokolls zu erstellen, geben Sie am Shell-Prompt den folgenden Befehl ein:

    ssh-keygen -t rsa
    

    Übernehmen Sie die standardmäßige Dateispeicherstelle ~/.ssh/id_rsa. Geben Sie ein Passwort ein, das sich von Ihrem Accountpasswort unterscheidet. Bestätigen Sie diesen, indem Sie ihn erneut eingeben.

    Der öffentliche Schlüssel wird in die Datei ~/.ssh/id_rsa.pub und der private Schlüssel in die Datei ~/.ssh/id_rsa geschrieben. Geben Sie Ihren privaten Schlüssel niemals an andere weiter.

  2. Ändern Sie die Berechtigungen Ihres Verzeichnisses .ssh mit folgendem Befehl:

    chmod 755 ~/.ssh
    
  3. Kopieren Sie den Inhalt von ~/.ssh/id_rsa.pub in die Datei ~/.ssh/authorized_keys des Rechners, mit dem Sie verbunden werden möchten. Wenn die Datei ~/.ssh/authorized_keys existiert, können Sie die Datei ~/.ssh/id_rsa.pub in die Datei ~/.ssh/authorized_keys des anderen Computers kopieren.

  4. Ändern Sie die Berechtigungen des Verzeichnisses authorized_keys mit folgendem Befehl:

    chmod 644 ~/.ssh/authorized_keys
    
  5. Wenn Sie GNOME oder einen grafischen Desktop mit installierten GTK2+ Bibliotheken, verwenden, gehen Sie über zu Abschnitt 4.7.3.4, „Konfigurieren von ssh-agent mit einem GUI“. Wenn Sie das X Window System nicht ausführen, rufen Sie Abschnitt 4.7.3.5, „Konfigurieren von ssh-agent auf.

4.7.3.2. Erstellen eines DSA-Schlüsselpaares für die Version 2

Folgen Sie den folgenden Schritten, um ein DSA-Schlüsselpaar für Version 2 des SSH Protokolls zu erstellen.

  1. Um ein DSA Schlüsselpaar für Version 2 des Protokolls zu erstellen, geben Sie am Shell Prompt den folgenden Befehl ein:

    ssh-keygen -t dsa
    

    Übernehmen Sie standardmäßige Dateispeicherstelle ~/.ssh/id_dsa. Geben Sie ein Passwort ein, das sich von Ihrem Accountpasswort unterscheidet. Bestätigen Sie diesen, indem Sie es erneut eingeben.

    Tipp

    Passwort hier meint eine Folge von Wörtern und Zeichen um einen Benutzer zu authentifizieren. Es unterscheidet sich hier von herkömmlichen Passwörtern in der Form, das Sie Leerzeichen oder Tabs verwenden können. Passwörter hier sind für gewöhnlich länger als herkömmliche Passwörter, da sie üblicherweise ganze Sätze statt nur ein einzelnes Wort sind.

    Der öffentliche Schlüssel wird in die Datei ~/.ssh/id_dsa.pub und der private Schlüssel in die Datei ~/.ssh/id_dsa geschrieben. Geben Sie Ihren privaten Schlüssel niemals an andere weiter.

  2. Ändern Sie die Berechtigungen des Verzeichnisses .ssh mit folgendem Befehl:

    chmod 755 ~/.ssh
    
  3. Kopieren Sie den Inhalt von ~/.ssh/id_dsa.pub in die Datei ~/.ssh/authorized_keys des Rechners, mit dem Sie verbunden werden möchten. Wenn die Datei ~/.ssh/authorized_keys existiert, können Sie die Datei ~/.ssh/id_dsa.pub in die Datei ~/.ssh/authorized_keys des anderen Computers kopieren.

  4. Ändern Sie die Berechtigungen des Verzeichnisses authorized_keys mit folgendem Befehl:

    chmod 644 ~/.ssh/authorized_keys
    
  5. Wenn Sie GNOME oder einen grafischen Desktop mit installierten GTK2+ Bibliotheken, verwenden, gehen Sie über zu Abschnitt 4.7.3.4, „Konfigurieren von ssh-agent mit einem GUI“. Wenn Sie das X Window System nicht ausführen, rufen Sie Abschnitt 4.7.3.5, „Konfigurieren von ssh-agent auf.

4.7.3.3. Erstellen eines Schlüsselpaares für Version 1.3 und 1.5

Befolgen Sie die nachstehenden Schritte ür die Erstellung eines RSA-Schlüsselpaares für die Version 1 des SSH- Protokolls. Wenn Sie nur mit DSA-Systemen verbinden, benötigen Sie die RSA Schlüsselpaare der Version 1.3 oder 1.5 nicht.

  1. Um ein RSA-Schlüsselpaar für das Arbeiten mit den Versionen 1.3 und 1.5 des Protokolls zu erstellen, geben Sie am Shell-Prompt folgenden Befehl ein:

    ssh-keygen -t rsa1
    

    Übernehmen Sie standardmäßige Dateispeicherstelle (~/.ssh/identity). Geben Sie ein Passwort ein, das sich von Ihrem Accountpasswort unterscheidet. Bestätigen Sie diesen, indem Sie ihn erneut eingeben.

    Der öffentliche Schlüssel wird in die Datei ~/.ssh/identity.pub. und der private Schlüssel in die Datei ~/.ssh/identity geschrieben. Geben Sie Ihren privaten Schlüssel niemals an andere weiter.

  2. Ändern Sie die Berechtigungen Ihres Verzeichnisses .ssh und Ihrer Schlüssel mit dem Befehlen chmod 755 ~/.ssh und chmod 644 ~/.ssh/identity.pub.

  3. Kopieren Sie den Inhalt von ~/.ssh/identity.pub in die Datei ~/.ssh/authorized_keys des Rechners, mit dem Sie verbunden werden möchten. Wenn die Datei ~/.ssh/authorized_keys nicht existiert, können Sie die Datei ~/.ssh/identity.pub in die Datei ~/.ssh/authorized_keys des anderen Computers kopieren.

  4. Wenn Sie GNOME verwenden, gehen Sie zu Abschnitt 4.7.3.4, „Konfigurieren von ssh-agent mit einem GUI“. Wenn Sie GNOME nicht ausführen, gehen Sie zu Abschnitt 4.7.3.5, „Konfigurieren von ssh-agent.

4.7.3.4. Konfigurieren von ssh-agent mit einem GUI

Das Dienstprogramm ssh-agent kann zum Speichern Ihres Passwortes verwendet werden. Somit müssen Sie das Passwort nicht jedesmal eingeben, wenn Sie eine ssh oder scp-Verbindung starten. Wenn Sie GNOME verwenden, können Sie das gnome-ssh-askpass Dienstprogramm verwenden. Es fordert Sie auf, Ihr Passwort einzugeben, wenn Sie sich in GNOME anmelden, und sichert das Passwort, wenn Sie sich aus GNOME abmelden. Sie müssen Ihr Passwort während einer GNOME-Sitzung nicht jedesmal eingeben, wenn Sie eine ssh oder scp-Verbindung während einer GNOME-Sitzung ausführen. Wenn Sie GNOME nicht verwenden, gehen Sie zu Abschnitt 4.7.3.5, „Konfigurieren von ssh-agent.

Um Ihr Passwort während Ihrer GNOME-Sitzung zu sichern, führen Sie folgende Schritte aus:

  1. Das Paket gnome-ssh-askpass muss installiert sein. Um dies festzustellen, verwenden Sie den Befehl rpm -q openssh-askpass. Installieren Sie das Paket von Ihrem Red Hat Enterprise Linux CD-ROM-Set, von einer Red Hat FTP Mirror-Site oder vom Red Hat Network für den Fall, dass es nicht vorhanden ist.

  2. Wählen Sie den Hauptmenü-Button (auf dem Panel) => Präferenzen => Weitere Präferenzen => Sitzungen, und klicken Sie auf Startup Programme. Klicken Sie auf Hinzufügen und geben Sie /usr/bin/ssh-add in den Textbereich Start-Befehl ein. Die Prioritätzahl für diesen Befehl muss höher sein als für alle anderen Befehle, damit sichergestellt wird, dass dieser Befehl zuletzt ausgeführt wird. Eine gute Prioritätszahl für ssh-add ist 70 oder höher. Je höher diese Zahl ist, umso niedriger ist die Priorität. Sollten noch andere Programme aufgelistet sein, sollte dies die niedrigste Priorität haben. Klicken Sie auf Schließen um das Programm zu beenden.

  3. Melden Sie sich aus GNOME ab und wieder an. Mit anderen Worten, starten Sie X erneut. Nachdem GNOME wieder gestartet wurde, erscheint ein Dialogfeld und Sie werden aufgefordert, Ihr Passwort einzugeben. Wenn Sie DSA und RSA- Schlüsselpaare konfiguriert haben, müssen Sie für beide Schlüsselpaare das Passwort eingeben. Ab diesem Zeitpunkt sollten Sie von ssh, scp, or sftp nicht mehr aufgefordert werden, ein Passwort einzugeben.

4.7.3.5. Konfigurieren von ssh-agent

Der ssh-agent kann zum Speichern Ihres Passwortes verwendet werden. Somit müssen Sie das Passwort nicht jedesmal eingeben, wenn Sie eine ssh oder scp-Verbindung starten. Wenn Sie das X Window System nicht ausführen, führen Sie die folgenden Schritte vom Shell-Prompt aus durch. Wenn Sie GNOME ausführen, aber nicht so konfigurieren möchten, das Sie beim Anmelden aufgefordert werden, das Passwort einzugeben, (siehe Abschnitt 4.7.3.4, „Konfigurieren von ssh-agent mit einem GUI“) wird die Prozedur in einem Terminalfenster wie zum Beispiel einem XTerm ausgeführt. Wenn Sie X, jedoch nicht GNOME ausführen, wird dieses Verfahren in einem Terminalfenster ausgeführt. Ihr Passwort wird dann jedoch nur für dieses Terminalfenster wiedererkannt. Es handelt sich also nicht um eine globale Einstellung.

  1. Geben Sie am Shell-Prompt folgenden Befehl ein:

    exec /usr/bin/ssh-agent $SHELL
    
  2. Und anschließend den Befehl:

    ssh-add
    

    Geben Sie nun Ihr Passwort/Passwörter ein. Wenn Sie mehr als ein Schlüsselpaar konfiguriert haben, müssen Sie die Passwörter entsprechend für jedes Paar eingeben.

  3. Wenn Sie sich abmelden, geht Ihr Passwort verloren. Sie müssen diese beiden Befehle immer wieder ausführen, wenn Sie sich in einer virtuellen Konsole anmelden oder ein Terminalfenster öffnen.

4.8. Zusätzliche Ressourcen

Die Projekte OpenSSh und OpenSSL werden ständig weiterentwickelt. Sie finden daher die aktuellsten Informationen in den entsprechenden Websites. Eine weitere Quelle für detaillierte Informationen sind die man-Seiten von OpenSSH und OpenSSL.

4.8.1. Installierte Dokumentation

  • Die man-Seiten ssh, scp, sftp, sshd und ssh-keygen — Diese man-Seiten enthalten Informationen über die Verwendung dieser Befehle sowie alle Parameter, die für diese Befehle verwendet werden können.

4.8.2. Hilfreiche Websites



[1] X11 bezieht sich auf das X11R7 Fensteranzeige System, traditionell als X-Window-System oder X bezeichnet. Red Hat Enterprise Linux umfasst X11R7, ein Open-Source X-Window-System.

[2] DNS-Poisoning erfolgt, wenn ein Eindringling einen DNS-Server knackt und Client-Systeme auf einen böswillig vervielfältigten Host zu lenken.

[3] IP-Spoofing erfolgt, wenn ein Eindringling Netzwerk-Pakete versendet, die scheinbar von einem vertrauenswürdigen Host auf dem Netzwerk versendet werden.

[4] Eine Multiplex-Verbindung besteht aus mehreren Signalen, die über ein allgemeines, gemeinsam genutztes Medium gesendet werden. Bei SSH werden verschiedene Kanäle über eine allgemeine, sichere Verbindung gesendet.

Kapitel 5. Dynamic Host Configuration Protocol (DHCP)

Das Dynamic Host Configuration Protocol (DHCP) ist ein Netzwerkprotokoll für die automatische Zuordnung von TCP/IP-Daten auf Client-Rechnern. Jeder DHCP-Client steht mit dem zentralen DHCP-Server in Verbindung, der die Netzwerk-Konfiguration des Client zurücksendet, u.a. IP-Adresse, Gateway und DNS-Server.

5.1. Warum sollte man DHCP verwenden?

DHCP eignet sich zur schnellen Konfiguration der Netzwerkschnittstellen von Clients.Bei der Konfiguration des Client-Systems kann der Administrator einfach DHCP wählen und muss weder die IP-Adresse, Netzmaske, Gateway, noch DNS-Server eingeben. Der Client ruft diese Daten vom DHCP-Server ab. DHCP ist auch nützlich, wenn ein Administrator die IP-Adressen einer großen Zahl von Systemen ändern möchte. Anstatt alle Systeme neu zu konfigurieren, braucht er für die Neueinstellung der IP-Adressen nur eine DHCP-Konfigurationsdatei auf dem Server zu bearbeiten. Wenn sich der DNS-Server einer Organisation ändert, werden diese Änderungen auf dem DHCP-Server und nicht auf den DHCP-Clients vorgenommen. Sobald das Netzwerk für die Clients erneut gestartet wird oder (wenn die Clients neu gebootet werden), werden die Änderungen wirksam.

Falls eine Organisation einen funktionierenden DHCP-Server ordnungsgemäß mit einem Netzwerk verbunden hat, können die Benutzer von Laptops und anderen mobilen Computern ihre Geräte von Büro zu Büro umziehen.

5.2. Konfigurieren eines DHCP Servers

Um einen DHCP-Server zu konfigurieren, muss die Konfigurationsdatei dhcpd.conf im Verzeichnis /etc/ angelegt werden. Ein Beispiel für diese Datei finden Sie in /usr/share/doc/dhcp-<version>/dhcpd.conf.sample.

DHCP verwendet auch die Datei /var/lib/dhcp/dhcpd.leases, um die Lease-Datenbank des Clients zu speichern. Nähere Informationen finden Sie im Abschnitt 5.2.2, „Lease-Datenbank“.

5.2.1. Konfigurationsdatei

The first step in configuring a DHCP server is to create the configuration file that stores the network information for the clients. Use this file to declare options and global options for client systems.

Die Konfigurationsdatei kann beliebige Leerzeichen oder Tabs sowie leere Zeilen für eine einfachere Formatierung enthalten. Die Schlüsselwörter beachten keine Groß- und Kleinschreibung und Zeilen, die mit einer Raute beginnen (#), gelten als Kommentare.

Derzeit sind zwei Modi der DNS-Aktualisierungen implementiert — der Ad-Hoc Aktualisierungsmodus und der Interim DHCP-DNS Interaktionsentwurf-Aktualisierungsmodus. Wenn diese beiden Schemata als Teil des IETF Standardprozess angenommen werden, erscheint ein dritter Modus — die standardmäßige DNS-Aktualisierungsmethode. Der DHCP-Server muss für den Gebrauch einer der beiden aktuellen Methoden konfiguriert werden. Version 3.0b2pl11 und ältere Versionen verwendeten den Ad-Hoc Modus, der inzwischen jedoch an Bedeutung verloren hat. Wenn Sie das gleiche Verhalten beibehalten möchten, fügen Sie am Anfang der Konfigurationsdatei die folgende Zeile hinzu:

ddns-update-style ad-hoc;

Um den empfohlenen Modus zu verwenden, fügen Sie am Anfang der Konfigurationsdatei die folgende Zeile hinzu:

ddns-update-style interim;

Auf der man-Seite dhcpd.conf finden Sie Details über die verschiedenen Methoden.

In der Konfigurationsdatei gibt es zwei Kategorien von Angaben:

  • Parameter — geben an, wie eine Funktion ausgeführt wird, ob eine Funktion ausgeführt wird oder welche Optionen der Netzwerkkonfiguration an den Client gesendet werden sollen.

  • Deklarationen — beschreiben die Topologie des Netzwerks, die Clients, bietet den Clients Adressen an oder wendet eine Reihe von Parametern auf eine Gruppe von Deklarationen an.

Einige Parameter müssen mit dem Schlüsselwort Option gestartet werden und werden als Optionen bezeichnet. Mit diesen Optionen konfiguriert man DHCP-Optionen; während man mit Parametern nicht-optionale Werte konfiguriert oder das Verhalten des DHCP-Servers steuert.

Parameter (einschließlich Optionen), die vor einem Segment in geschweiften Klammern angegeben werden ({ }), gelten als globale Parameter. Die allgemeinen Parameter werden auf alle Segmente darunter angewandt.

Wichtig

Wenn Sie die Konfigurationsdatei verändern, kommen die Änderungen erst zum Tragen, wenn Sie den DHCP-Daemon neu starten, und zwar mit dem Befehl service dhcpd restart.

Tipp

Alternativ zur Änderung einer DHCP-Konfigurationsdatei und dem anschließenden Neustart des Dienstes jedes Mal, bietet der Befehl omshell eine interaktive Möglichkeit, um sich mit einem DHCP-Server zu verbinden, diesen anzufragen und dessen Konfiguration zu ändern. Mit dem Befehl omshell können alle Änderungen im laufenden Betrieb des Servers durchgeführt werden. Für weitere Informationen zu omshell werfen Sie einen Blick auf die Handbuchseite von omshell.

Im Beispiel 5.1, „Subnet-Deklaration“ werden die Optionen routers, subnet-mask, domain-name, domain-name-servers und time-offset für alle darauffolgenden host Statement Deklarationen verwendet.

Zusätzlich können Sie ein subnet angeben. Sie müssen eine subnet Angabe für jedes Subnetz Ihres Netzwerks machen. Tun Sie dies nicht, kann der DHCP-Server nicht starten.

In unserem Beispiel gibt es für jeden DHCP-Client im Subnet allgemeine Optionen und einen Range. Die Zuweisung der IP-Adresse an die Clients erfolgt innerhalb des Range.

subnet 192.168.1.0 netmask 255.255.255.0 {
        option routers                  192.168.1.254;
        option subnet-mask              255.255.255.0;

        option domain-name              "example.com";
        option domain-name-servers       192.168.1.1;

        option time-offset              -18000;     # Eastern Standard Time

        range 192.168.1.10 192.168.1.100;
}
Beispiel 5.1. Subnet-Deklaration

Alle Subnetze, die ein gemeinsames physisches Netzwerk verwenden, sollten in der Datei shared-network, wie in Beispiel 5.2, „Gemeinsam genutzte Netzwerk-Deklaration“ gezeigt, angegeben werden. Parameter, die in shared-network angegeben sind, aber nicht in der subnet Deklaration enthalten sind, werden als allgemeine Parameter betrachtet. Die Bezeichnung des shared-network sollte ein aussagekräftiger Titel für das Netzwerk sein, z.B. Test-Labor, wenn alle Subnetze innerhalb eines Test-Labors beschrieben werden sollen.

shared-network name {
    option domain-name              "test.redhat.com";
    option domain-name-servers      ns1.redhat.com, ns2.redhat.com;
    option routers                  192.168.0.254;
    more parameters for EXAMPLE shared-network
    subnet 192.168.1.0 netmask 255.255.252.0 {
        parameters for subnet
        range 192.168.1.1 192.168.1.254;
    }
    subnet 192.168.2.0 netmask 255.255.252.0 {
        parameters for subnet
        range 192.168.2.1 192.168.2.254;
    }
}
Beispiel 5.2. Gemeinsam genutzte Netzwerk-Deklaration

Wie in Beispiel 5.3, „Gruppen-Vereinbarung“ gezeigt, kann die Gruppen-Deklaration verwendet werden, um allgemeine Parameter für eine Gruppe von Vereinbarungen anzuwenden. Sie können gemeinsam genutzte Netzwerke, Subnets, Hosts oder andere Gruppen als Gruppe zusammenfassen.

group {
   option routers                  192.168.1.254;
   option subnet-mask              255.255.255.0;

   option domain-name              "example.com";
   option domain-name-servers       192.168.1.1;

   option time-offset              -18000;     # Eastern Standard Time

   host apex {
      option host-name "apex.example.com";
      hardware ethernet 00:A0:78:8E:9E:AA; 
      fixed-address 192.168.1.4;
   }

   host raleigh {
      option host-name "raleigh.example.com";
      hardware ethernet 00:A1:DD:74:C3:F2;
      fixed-address 192.168.1.6;
   }
}
Beispiel 5.3. Gruppen-Vereinbarung

Um einen DHCP-Server zu konfigurieren, der dynamische IP-Adressen in einem Subnetz an ein System vergibt, ändern Sie Beispiel 5.4, „Range-Parameter“ entsprechend Ihren Werten. Es bezeichnet die Standard-Lease-Dauer, die maximale Lease-Dauer und Netzwerk-Konfigurationswerte für die Clients. In diesem Beispiel wird die IP-Adresse in der range 192.168.1.10 und 192.168.1.100 Client-Systemen zugeordnet.

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "example.com";

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
}
Beispiel 5.4. Range-Parameter

Um einem Client anhand der MAC-Adresse der Netzwerkkarte eine IP-Adresse zuzuordnen, verwenden Sie den Parameter hardware ethernet, der in der host Deklaration enthalten ist. Wie in Beispiel 5.5, „Statische IP-Adresse, die DHCP verwendet“ gezeigt, legt die host apex Deklaration fest, dass die Netzwerkkarte mit der MAC-Adresse 00:A0:78:8E:9E:AA immer die IP-Adresse 192.168.1.4 zugewiesen bekommt.

Beachten Sie, dass Sie auch den optionalen Parameter host-name benutzen können, um einem Client einen Hostnamen zuzuordnen.

host apex {
   option host-name "apex.example.com";
   hardware ethernet 00:A0:78:8E:9E:AA; 
   fixed-address 192.168.1.4;
}
Beispiel 5.5. Statische IP-Adresse, die DHCP verwendet

Tipp

Sie können zunächst die Musterkonfigurationsdatei benutzen und dann Ihre eigenen Anpassungen für die Konfiguration hinzufügen. Kopieren Sie diese an die richtige Stelle mit dem Befehl

cp /usr/share/doc/dhcp-<version-number>/dhcpd.conf.sample /etc/dhcpd.conf

(wobei <version-number> die DHCP-Version ist, die Sie verwenden).

Eine vollständige Liste der Optionen und deren Anwendung finden Sie auf der dhcp-options man-Seite.

5.2.2. Lease-Datenbank

/var/lib/dhcp/dhcpd.leases die Lease-Datenbank des DHCP-Client. Diese Datei sollte nicht manuell geändert werden. In der Lease-Datenbank werden automatisch alle DHCP-Leasedaten aller zuletzt zugeordneten IP-Adressen gespeichert. Die Daten enthalten die Leasedauer, wem die IP-Adresse zugeordnet wurde sowie Anfangs- und Enddaten für die Lease und die MAC-Adresse der Netzwerkkarte, von der die Lease abgerufen wurde.

Alle Zeitangaben in der Lease-Datenbank sind Greenwich Mean Time (GMT) und nicht Ortszeit.

Die Lease-Datenbank wird von Zeit zu Zeit neu generiert, damit sie nicht zu groß wird. Zunächst werden alle bekannten Leases in einer temporären Lease-Datenbank gespeichert. Die Datei dhcpd.leases wird in dhcpd.leases~ umbenannt und die temporäre Lease-Datei wird unter dhcpd.leases gespeichert.

Der DHCP-Daemon könnte beendet werden oder das System abstürzen, nachdem die Lease-Datenbank in eine Backup-Datei umbenannt, die neue Datei jedoch noch nicht gespeichert wurde. In diesem Fall gibt es keine dhcpd.leases-Datei, die zum Starten erforderlich ist. Erstellen Sie keine neue Lease-Datei, wenn dies passiert. Wenn Sie dies tun, gehen alle alten Leases verloren, was zu Problemen führt. Sie sollten stattdessen die dhcpd. leases~ Backup-Datei in dhcpd.leases umbenennen und dann den Daemon starten.

5.2.3. Starten und Stoppen des Servers

Wichtig

Bevor Sie den DHCP-Server zum ersten Mal starten, muss die Datei dhcpd.leases existieren, ansonsten schlägt der Versuch fehl. Sollte die Datei nicht existieren, können Sie diese mit dem Befehl touch /var/lib/dhcp/dhcpd.leases erstellen.

Falls auf demselben Server auch BIND als DNS-Server läuft, ist dieser Schritt nicht notwendig, da beim Start des Dienstes named automatisch nach der Datei dhcpd.leases gesucht wird.

Um den DHCP-Dienst zu starten, geben Sie den Befehl /sbin/service dhcpd start ein. Um den DHCP-Server anzuhalten, geben Sie den Befehl /sbin/service dhcpd stop ein.

Wenn mehrere Netzwerkschnittstellen in Ihrem System vorhanden sind, Sie aber möchten, dass der DHCP-Server nur auf einer Schnittstelle startet, können Sie den DHCP-Server entsprechend konfigurieren. Fügen Sie in der Datei /etc/sysconfig/dhcpd den Namen dieser Schnittstelle zu der Liste von DHCPDARGS hinzu:

# Befehlszeilenoptionen hier 
DHCPDARGS=eth0

Dies ist sinnvoll, wenn Sie einen Rechner mit Firewall und zwei Netzwerk-Karten haben. Eine der Netzwerk-Karten kann als DHCP-Client konfiguriert werden, um eine IP-Adresse aus dem Internet abzurufen. Die andere Netzwerkkarte kann als DHCP-Server für das interne Netzwerk hinter der Firewall benutzt werden, wodurch das System sicherer wird, da Benutzer über das Internet keine Verbindung zu dem Daemon aufnehmen können.

In /etc/sysconfig/dhcpd können noch andere Befehlszeilenoptionen festgelegt werden, wie zum Beispiel:

  • -p <portnum> — Legt die udp Port-Nummer fest, auf die dhcpd warten soll. Der Standard-Port ist 67. Der DHCP-Server überträgt Antworten an DHCP-Clients mit einer Port-Nummer, die um eins größer ist als der festgelegte udp-Port. Wenn Sie z.B. den Standard-Port 67 annehmen, horcht der Server auf Port 67 auf Anfragen und Antworten für den Client auf Port 68. Wenn Sie hier einen Port festlegen und den DHCP-Relay-Agent verwenden, müssen Sie den gleichen Port festlegen, auf dem der DHCP-Relay-Agent horcht. Weitere Informationen finden Sie im Abschnitt 5.2.4, „DHCP Relay Agent“.

  • -f — Führt den Daemon als Vordergrundprozess aus und wird meistens für das Debuggen verwendet.

  • -d — Protokolliert den DCHP Server Daemon im Standard-Fehlerdeskriptor und wird meistens für das Debuggen verwendet. Ist dies nicht festgelegt, wird das Protokoll in der Datei /var/log/messages geschrieben.

  • -cf <filename> — Legt den Speicherplatz für die Konfigurationsdatei fest. Die standardmäßige Speicherstelle ist /etc/dhcpd.conf.

  • -lf <filename> — Legt die Speicherstelle für die Lease-Datenbank-Datei fest. Ist die Lease-Datenbank-Datei bereits vorhanden, ist es sehr wichtig, dass bei jedem Start des DHCP-Servers dieselbe Datei verwendet wird. Es wird empfohlen, diese Option nur für Debugging-Aufgaben in nicht-produktiven Computern zu verwenden. Die Standard-Speicherstelle ist /var/lib/dhcp/dhcpd.leases.

  • -q — Druckt beim Starten des Daemons nicht die gesamte Copyright Info.

5.2.4. DHCP Relay Agent

Mit dem DHCP Relay Agent (dhcrelay) können Sie DHCP- oder BOOTP-Anfragen des Subnets, die keinen DHCP-Server haben, auf einen oder mehrere DHCP-Server anderer Subnets übertragen.

Wenn ein DHCP-Client Daten anfragt, gibt der DHCP Relay Agent die Anfrage an die Liste der DHCP-Server weiter, die angegeben wurden, als der DHCP Relay Agent gestartet wurde. Wenn ein DHCP- Server antwortet, wird die Antwort als Broadcast oder Unicast auf das Netzwerk übertragen, das die ursprüngliche Anfrage gesendet hat.

Der DHCP Relay Agent wartet auf DHCP-Anfragen an allen Schnittstellen, es sei denn, die Schnittstellen werden in /etc/sysconfig/dhcrelay mit der Anweisung INTERFACES angegeben.

Um den DHCP Relay Agent zu starten, geben Sie den Befehl service dhcrelay start ein.

5.3. Konfigurieren eines DHCP-Clients

Um einen DHCP-Client manuell zu konfigurieren, müssen Sie die /etc/sysconfig/network Datei ändern, um die Verbindung mit dem Netzwerk und die Konfigurationsdatei für jedes Netzwerk-Gerät im /etc/sysconfig/network-scripts Verzeichnis zu aktivieren. In diesem Verzeichnis sollte jedes Gerät immer dann eine Konfigurationsdatei mit der Bezeichnung ifcfg-eth0 haben, wenn eth0 die Bezeichnung für das Netzwerk-Gerät ist.

Die Datei /etc/sysconfig/network sollte folgende Zeile enthalten:

NETWORKING=yes

Sie müssen sicherstellen, dass die NETWORKING Variable auf yes eingestellt ist, wenn Sie beim Booten gleichzeitig das Netzwerk starten wollen.

Die Datei /etc/sysconfig/network-scripts/ifcfg-eth0 sollte folgende Zeilen enthalten:

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

Sie benötigen eine Konfigurationsdatei für jedes Gerät, das DHCP benutzen soll.

Andere Optionen für das Netzwerk-Skript umfassen:

  • DHCP_HOSTNAME — Verwenden Sie diese Option nur, wenn der DHCP-Server eine Angabe des Hostnamens vom Client erfordert bevor eine IP-Adresse zugewiesen wird. (Der DHCP-Server-Daemon in Red Hat Enterprise Linux unterstützt dieses Feature nicht.)

  • PEERDNS=<answer>, wobei <answer> eines der folgenden sein kann:

    • yes — Ändern Sie /etc/resolv.conf mit den Informaitonen vom Server. Wird DHCP verwendet, ist yes der Standardwert.

    • no — Ändern Sie /etc/resolv.conf nicht.

  • SRCADDR=<address>, wobei <address> die spezifische Source-IP-Adresse für ausgehende Pakete ist.

  • USERCTL=<answer>, wobei <answer> eines der folgenden sein kann:

    • yes — Nicht-root-Benutzer können dieses Gerät steuern.

    • no — Nicht-root-Benutzer können dieses Gerät nicht steuern.

Wenn Sie für die Konfiguration eines DHCP-Clients eine grafische Benutzeroberfläche vorziehen, finden Sie unter Kapitel 2, Netzwerkkonfiguration nähere Informationen für die Verwendung des Network-Administration-Tools zur Konfiguration einer Netzwerkschnittstelle für DHCP.

Tipp

Für erweiterte Konfigurationen von DHCP-Optionen von Clients, wie zum Beispiel Protokoll-Timing, Lease-Anforderungen und -Anfragen, Unterstützung von dynamischen DNS, Aliases, so wie einer Vielfalt an Werten, die Clientseitige Konfigurationen außer Kraft setzen, diesen vorangestellt oder an diese angefügt werden können, werfen Sie einen Blick auf die Handbuchseiten von dhclient und dhclient.conf.

5.4. Zusätzliche Ressourcen

Für zusätzliche Konfigurationsoptionen, siehe nachstehend aufgeführte Quellen.

5.4.1. Installierte Dokumentation

  • dhcpd Handbuchseite — beschreibt, wie der DHCP-Daemon arbeitet.

  • Die dhcpd.conf Handbuchseite — erklärt, wie die DHCP-Konfigurationsdatei konfiguriert wird und zeigt einige Beispiele.

  • Die dhcpd.leases Handbuchseite — erklärt, wie man die DHCP-Lease-Datei konfiguriert und zeigt einige Beispiele.

  • Die dhcp-options Handbuchseite — erklärt die Syntax zur Bezeichnung von DHCP-Optionen unter dhcpd.conf und gibt hierzu einige Beispiele.

  • dhcrelay Handbuchseite — erklärt den DHCP Relay Agent und dessen Konfigurationsoptionen.

  • /usr/share/doc/dhcp-<version>/ — enthält Beispieldateien, README-Dateien und Release Notes für aktuelle Versionen des DHCP-Dienstes.

Teil II. Systemkonfiguration

Teil der Aufgaben eines System-Administrators ist die Konfiguration des Systems für verschiedene Aufgaben, Typen von Benutzern und Hardware-Konfigurationen. Dieser Abschnitt beschreibt die Konfiguration eines Red Hat Enterprise Linux Systems.

Kapitel 6. Datums- und Zeitkonfiguration

Mit dem Tool zur Einstellung von Datum und Zeit können Benutzer die Systemzeit und das -datum ändern, die vom System verwendete Zeitzone konfigurieren und den Network Time Protocol (NTP) Daemon für die Synchronisierung der Systemuhr mit dem Time Server einstellen.

Sie müssen das X-Window-System gestartet haben und Berechtigung als Root besitzen, um dieses Werkzeug zu nutzen. Es gibt drei Möglichkeiten, die Anwendung zu starten:

  • Gehen Sie vom Desktop aus zu Applications (the main menu on the panel) => Systemeinstellungen => Datum & Uhrzeit

  • Klicken Sie auf dem Desktop mit der rechten Maustaste auf das Zeitelement in der Symbolleiste und wählen Sie Datum und Zeit anpassen.

  • Geben Sie den Befehl system-config-date, system-config-time, oder dateconfig in einem Shell-Prompt ein (zum Beispiel in einem XTerm oder einem GNOME -Terminal).

6.1. Zeit- und Datumseigenschaften

Wie in Abbildung 6.1, „Zeit- und Datumseigenschaften“ gezeigt, ist das erste Reiter-Fenster, das erscheint, das zur Konfiguration des Systemdatums und der -zeit.

Zeit- und Datumseigenschaften

Zeit- und Datumseigenschaften

Abbildung 6.1. Zeit- und Datumseigenschaften

Um das Datum zu ändern, verwenden Sie die Pfeile links und rechts neben dem Monat, um den Monat zu ändern. Mit den Pfeilen links und rechts neben dem Jahr, um das Jahr zu ändern. Klicken Sie auf den Wochentag, um diesen zu ändern.

Um die Zeit zu ändern, verwenden Sie die Pfeile neben der Stunde, Minute und Sekunde im Abschnitt Zeit.

Das Klicken auf OK wendet jegliche Änderungen, die Sie an der Uhrzeit, dem Datum, den NTP-Einstellungen und den Zeitzoneneinstellungen vorgenommen haben, an und beendet das Programm.

6.2. Eigenschaften des Netzwerk-Zeitprotokolls (NTP)

Wie in Abbildung 6.2, „NTP-Eigenschaften“ gezeigt, ist das zweite Reiter-Fenster,das erscheint, das zur Konfiguration des NTP.

NTP-Eigenschaften

NTP-Eigenschaften

Abbildung 6.2. NTP-Eigenschaften

Der Network Time Protocol (NTP) Daemon synchronisiert die Systemuhr über einen Remote Time Server oder eine Zeitquelle (wie zum Beispiel ein Satellit). Mit dieser Applikation können Sie einen NTP-Server konfigurieren, so dass dieser die Systemuhr über einen Remote Server synchronisiert. Um dieses Feature zu aktivieren, klicken Sie auf Netzwerk-Zeitprotokoll aktivieren. Dies aktiviert die Liste NTP-Server und weitere Optionen. Sie können einen der vordefinierten Server auswählen, einen vordefinierten Server mit Hilfe von Bearbeiten editieren oder einen neuen Servernamen mit Hilfe von Hinzufügen eingeben. Das System synchronisiert erst mit dem NTP-Server, wenn Sie OK klicken. Nachdem Sie auf OK geklickt haben, wird die Konfiguration gespeichert und der NTP-Daemon gestartet (oder neu gestartet, wenn dieser bereits läuft).

Das Klicken auf OK wendet jegliche Änderungen, die Sie an der Uhrzeit, dem Datum, den NTP-Einstellungen und den Zeitzoneneinstellungen vorgenommen haben, an und beendet das Programm.

6.3. Konfiguration der Zeitzone

Wie in Abbildung 6.3, „Zeitzonen-Eigenschaften“ gezeigt, ist das dritte Reiter-Fenster, das erscheint, das zur Konfiguration des Zeitzone des Systems.

Um die System-Zeitzone zu konfigurieren, klicken Sie auf den Reiter Zeitzone. Die Zeitzone kann entweder durch die interaktive Landkarte oder durch Auswahl der gewünschten Zeitzone aus der Liste unterhalb der Karte geändert werden. Um die Landkarte zu verwenden, klicken Sie auf die Stadt, die die gewünschte Zeitzone repräsentiert. Es erscheint ein rotes X, und die Zeitzonen-Auswahl ändert sich in der Liste unterhalb der Landkarte.

Alternativ können Sie auch die Liste unterhalb der Karte verwenden. Genau wie bei der Karte können Sie hier erst eine Region und dann eine Stadt auswählen. Hierfür erscheint die Liste der Zeitzonen nun als Baumliste, die Städte und Länder innerhalb ihres spezifischen Kontinents gruppiert. Nicht-geographische Zeitzonen wurden ebenfalls hinzugefügt, um den Anforderungen innerhalb der wissenschaftlichen Gemeinschaft zu entsprechen.

Klicken Sie auf OK, um die Änderungen anzuwenden und das Programm zu beenden.

Zeitzonen-Eigenschaften

Zeitzonen-Eigenschaften

Abbildung 6.3. Zeitzonen-Eigenschaften

Ist Ihre Systemuhr auf UTC eingestellt, wählen Sie die Option Systemuhr verwendet UTC. UTC steht für Universelle Zeitzone, auch als Greenwich Mean Time (GMT) bekannt. Andere Zeitzonen werden durch Addieren oder Subtrahieren von der UTC-Zeit bestimmt.

Kapitel 7. X Window System Konfiguration

Während der Installation werden der Monitor, die Grafikkarte und die Anzeige-Einstellungen des Systems konfiguriert. Um diese Einstellungen zu ändern, verwenden Sie das X-Konfigurationstool.

Um das X-Konfigurationstool zu starten, wählen Sie System (on the panel) => Systemeinstellungen => Anzeige oder geben Sie den Befehl system-config-display in einem Shell-Prompt (z.B. ein XTerm oder GNOME Terminal) ein. Läuft das X Window System nicht, wird eine reduzierte Version von X gestartet, die das Programm ausführt.

Nachdem Sie die Einstellungen geändert haben, melden Sie sich am grafischen Desktop ab und wieder an, damit die Änderungen wirksam werden.

7.1. Anzeige-Einstellungen

Der Reiter Anzeige ermöglicht es Benutzern, die Auflösung und Farbtiefe zu ändern. Die Bildschirmanzeige besteht aus kleinen Punkten, die Pixel genannt werden. Die Anzahl der Pixel, die zur gleichen Zeit angezeigt werden können, wird als Auflösung bezeichnet. So bedeutet eine Auflösung von 1024x768, dass 1024 horizontale Pixel und 768 vertikale Pixel verwendet werden. Je höher die Auflösung, desto mehr Bilder kann der Monitor anzeigen. Je höher z.B. die Auflösung, desto kleiner erscheinen die Desktopsymbole und je mehr Symbole werden benötigt, um den Bildschirm zu füllen.

Die Farbtiefe der Anzeige gibt an, wieviele mögliche Farben angezeigt werden können. Je höher die Farbtiefe, desto besser der Kontrast zwischen den Farben.

Anzeige-Einstellungen

Anzeige-Einstellungen

Abbildung 7.1. Anzeige-Einstellungen

7.2. Anzeige-Hardwareeinstellungen

Wenn die Applikation X-Konfigurationstool gestartet wird, testet diese den Monitor und die Grafikkarte. Wird die Hardware ordnungsgemäß getestet, werden die Informationen hierzu im Reiter Hardware wie unter Abbildung 7.2, „Anzeige-Hardwareeinstellungen“ gezeigt abgebildet.

Anzeige-Hardwareeinstellungen

Anzeige-Hardwareeinstellungen

Abbildung 7.2. Anzeige-Hardwareeinstellungen

Um den Monitortyp oder dessen Einstellungen zu ändern, klicken Sie auf die Schaltfläche Konfigurieren. Um den Grafikkartentyp oder dessen Einstellungen zu ändern, klicken Sie auf die Schaltfläche Konfigurieren neben den Einstellungen.

7.3. Dualmonitor Anzeige-Einstellungen

Wenn mehrere Grafikkarten auf dem System installiert sind, steht die Option Dualmonitor-Unterstützung zur Verfügung und kann via Reiter Dualmonitor wie unter Abbildung 7.3, „Dualmonitor Anzeige-Einstellungen“ gezeigt konfiguriert werden.

Dualmonitor Anzeige-Einstellungen

Dualmonitor Anzeige-Einstellungen

Abbildung 7.3. Dualmonitor Anzeige-Einstellungen

Um den Gebrauch der Option Dualmonitor zu aktivieren, aktivieren Sie das Kontrollkästchen Dualmonitor verwenden.

Um den Monitortyp oder dessen Einstellungen zu ändern, klicken Sie auf die Schaltfläche Konfigurieren. Weiterhin können Sie andere Dualmonitor-Einstellungen konfigurieren, indem Sie die entsprechende Drop-Down-Liste verwenden.

Die Auswahl von Desktops vereinen für die Option Desktop-Layout erlaubt es, über beide Monitore verteilt einen vergrößerten Arbeitsbereich zu nutzen. Bei der Auswahl von Individuelle Desktops werden Maus und Keyboard gemeinsam mit beiden Anzeigen genutzt, die Fenster jedoch auf eine einzelne Anzeige begrenzt.

Teil III. Sicherheit und Authentifizierung

Egal ob Systemadministratoren ihre missionskritischen Systeme, Daten oder Dienste sichern müssen - Red Hat Enterprise Linux liefert eine Reihe an Tools und Methoden zur Versorgung einer umfassenden Sicherheitsstrategie.

Dieses Kapitel bietet eine allgemeine Einführung zu Sicherheit, insbesondere aus der Perspektive von Red Hat Enterprise Linux. Es liefert konzeptionelle Informationen zu den Bereichen Sicherheitseinschätzung, häufige Exploits und Reaktionen auf Einbruch und IT-Incident-Management. Weiterhin stellt es konzeptionelle und spezifische Informationen zur Verwendung von SELinux zur Absicherung von Workstation, Server, VPN, Firewall und anderen Implementationen zur Verfügung.

Dieses Kapitel setzt eine Grundkenntnis an IT-Sicherheit voraus und liefert daher nur einen minimalen Umfang an allgemeinen Sicherheitspraktiken wie die Kontrolle des physikalischen Zugriffs, korrekte Richtlinien und Prozeduren zur Erhaltung von Accounts, Überwachung, etc.. Falls zutreffend werden hierfür Querverweise zu externen Quellen und verwandten Informationen angegeben.

Inhaltsverzeichnis

8. Überblick über Sicherheit
8.1. Schwachstellenanalyse
8.1.1. Denken wie der Feind
8.1.2. Definition von Analyse und Test
8.1.3. Auswerten der Tools
8.2. Häufige Schwachstellen und Attacken
8.3. Sicherheits-Updates
8.3.1. Pakete aktualisieren
9. Sichern Ihres Netzwerkes
9.1. Server-Sicherheit
9.1.1. Sichern von Diensten mit TCP-Wrappern und xinetd
9.1.2. Portmap sichern
9.1.3. Sichern von NIS
9.1.4. Sicherung von NFS
9.1.5. Sicherung des Apache HTTP-Server
9.1.6. Sicherung von FTP
9.1.7. Sicherung von Sendmail
9.1.8. Bestätigen, welche Ports auf Verbindungen abhören
9.2. Pluggable Authentication Modules (PAM)
9.2.1. Vorteile von PAM
9.2.2. PAM-Konfigurationsdateien
9.2.3. Format der PAM Konfigurationsdatei
9.2.4. Beispiele für PAM-Konfigurationsdateien
9.2.5. Module erstellen
9.2.6. PAM und Administrative-Credential-Caching
9.2.7. PAM und Besitzrechte von Geräten
9.2.8. Zusätzliche Ressourcen
9.3. Virtuelle Private Netzwerke (VPNs)
9.3.1. Wie funktioniert ein VPN?
9.3.2. VPNs und Red Hat Enterprise Linux
9.3.3. IPsec
9.3.4. Eine IPsec-Verbindung erstellen
9.3.5. Installation von IPsec
9.3.6. Konfiguration von IPsec Host-zu-Host
9.3.7. IPsec Netzwerk-zu-Netzwerk Konfiguration
9.3.8. Starten und Stoppen einer IPsec-Verbindung
9.4. IPTables
9.4.1. Paket-Filterung
9.4.2. Unterschiede zwischen IPTables und IPChains
9.4.3. Befehlszeilenoptionen für IPTables
9.4.4. IPTables-Regeln speichern
9.4.5. IPTables Kontrollskripte
9.4.6. IPTables und IPv6
9.4.7. Zusätzliche Informationsquellen
10. Sicherheit und SELinux
10.1. Einführung in SELinux
10.1.1. SELinux Überblick
10.1.2. Dateien, die mit SELinux zusammenhängen
10.1.3. Zusätzliche Ressourcen
10.2. Kurzer Hintergrund und Geschichte von SELinux

Kapitel 8. Überblick über Sicherheit

Durch die wachsende Abhängigkeit von leistungsstarken, vernetzten Computern für das Führen von Unternehmen und Aufzeichnen unserer persönlichen Daten haben sich ganze Industriezweige um die Netzwerk- und Computersicherheit herum gebildet. Große Unternehmen haben das Wissen und die Fähigkeiten von Sicherheitsexperten zu Rate gezogen, um Systeme zu prüfen und maßgeschneiderte Lösungen für die Anforderungen des Unternehmens zu erstellen. Dadurch, dass die meisten Unternehmen dynamisch arbeiten, mit Mitarbeitern, die auf IT-Ressourcen der Firma intern und extern zugreifen, wird der Bedarf an sicheren EDV-Umgebungen immer deutlicher.

Leider betrachten viele Unternehmen (sowie auch Einzelbenutzer) die Sicherheit immer erst im Nachhinein, ein Prozess, der zu Gunsten erhöhter Leistung, Produktivität und Kostenfaktoren gerne übersehen wird. Angemessene Sicherheitsimplementierung wird oftmals postmortem durchgeführt — erst nachdem ein unberechtigter Zugriff erfolgte. Sicherheitsexperten sind sich einig, dass das Ergreifen richtiger Maßnahmen vor dem Verbinden mit einem unzuverlässigen Netzwerk wie dem Internet ein sicheres Mittel zum Verhindern von unerlaubten Zugriffen ist.

8.1. Schwachstellenanalyse

Mit genügend Zeit, Ressourcen und Motivation kann ein Cracker in fast jedes System einbrechen. Schlussendlich stellen alle derzeit erhältlichen Technologien und Sicherheitsprozeduren keine Garantie dar, dass irgendein System vor Eindringlingen sicher ist. Router können bei der Sicherung Ihrer Gateways zum Internet helfen. Firewalls helfen bei der Sicherung des Netzwerks. Virtuelle Private Netzwerke können auf sichere Art Daten verschlüsselt übertragen. Intrusion-Detection-Systeme können Sie vor böswilligen Aktivitäten warnen. Der Erfolg jeder dieser Technologien hängt jedoch von einer Reihe von Variablen ab. Diese sind unter anderem:

  • Die Kompetenz der Mitarbeiter, die für die Konfiguration, Überwachung und Wartung dieser Technologien verantwortlich sind.

  • Die Fähigkeit, Services und Kernel schnell und effizient mit Patches versehen und aktualisieren zu können.

  • Die Fähigkeit der Verantwortlichen, konstante Wachsamkeit im Netzwerk auszuüben.

Durch den dynamischen Zustand von Datensystemen und Technologien kann das Sichern Ihrer Ressourcen ziemlich komplex werden. Aufgrund dieser Komplexität kann es sich schwierig gestalten, Experten für Ihre Ressourcen zu finden. Es ist zwar möglich, Mitarbeiter mit reichhaltigem Wissen auf vielen Gebieten der Informationssicherheit zu beschäftigen, aber es ist relativ schwierig, Experten auf nur wenigen Gebieten zu behalten. Dies liegt hauptsächlich daran, dass die Informationssicherheit ständige Aufmerksamkeit und Fokus verlangt. Informationssicherheit ist ein ständig im Wandel begriffener Prozess.

8.1.1. Denken wie der Feind

Angenommen, Sie verwalten ein Firmennetzwerk. Solche Netzwerke bestehen meistens aus Betriebssystemen, Applikationen, Servern, Netzwerküberwachung, Firewalls, Intrusion-Detection-Systemen und vielem mehr. Stellen Sie sich jetzt vor, Sie müssen dahingehend immer auf dem neuesten Stand sein. Durch die Komplexität heutiger Software und Netzwerkumgebungen sind Angriffe auf einen Rechner unter Ausnutzung eines Sicherheitslochs und Bugs eine Gewissheit. Mit allen Patches und Updates für ein gesamtes Netzwerk auf dem Laufenden zu sein, ist eine gewaltige Aufgabe innerhalb eines großen Unternehmens mit heterogenen Systemen.

Wenn Sie nun diese gewaltigen Anforderungen an das Wissen mit der Aufgabe, immer auf dem neuesten Stand zu sein, kombinieren, sind Vorfälle, Systemeinbrüche, Datenkorruption und Serviceunterbrechungen unvermeidbar.

Um den Nutzen dieser Sicherheitstechnologien zu erhöhen und dabei zu helfen, Systeme, Netzwerke und Daten zu schützen, sollten Sie sich in die Lage eines Crackers versetzen und die Sicherheit der Systeme durch das Suchen von Schwachstellen testen. Vorbeugende Schwachstellenanalysen für Ihre eigenen Systeme und Netzwerkressourcen können potentielle Problemstellen aufdecken, bevor ein Cracker diese zu seinem Vorteil ausnutzen kann.

Würden Sie zum Beispiel eine Schwachstellenanalyse für Ihr Haus durchführen, würden Sie wahrscheinlich prüfen, ob jede Tür geschlossen und auch abgeschlossen ist. Sie würden auch jedes Fenster prüfen und sicherstellen, dass diese richtig schließen und abgeschlossen werden können. Das gleiche Konzept gilt auch für Systeme, Netzwerke und elektronische Daten. Benutzer mit böswilligen Absichten sind die Diebe und Vandalen Ihrer Daten. Konzentrieren Sie sich auf deren Tools, Mentalität und Beweggründe, denn so können Sie schnell auf deren Taten reagieren.

8.1.2. Definition von Analyse und Test

Schwachstellenanalysen können in zwei Arten klassifiziert werden: von außen innen herumschnüffeln und innen herumschnüffeln.

Wenn Sie eine Schwachstellenanalyse von außen betrachtet durchführen, so versuchen Sie, Ihr System von außen zu kompromittieren. Wenn Sie Ihre Firma von extern betrachten, versetzen Sie sich in die Sichtweise eines Crackers. Sie sehen, was der Cracker sehen kann — öffentlich-weiterleitbare IP-Adressen, Systeme auf Ihrer DMZ, externe Schnittstellen Ihrer Firewall und vieles mehr. DMZ steht für "Demilitarized Zone", was einem Computer oder einem kleinen Subnetzwerk entspricht und welche sich zwischen einem internen, zuverlässigen Netzwerk befindet, wie z.B. einem gemeinschaftlichen privaten LAN und einem unzuverlässigen, externen Netzwerk, wie z.B. das öffentliche Internet. Üblicherweise beinhaltet die DMZ Geräte, die für den Internetverkehr zugänglich sind, wie z.B. Web(HTTP)-Server, FTP-Server, SMTP(E-Mail)-Server und DNS-Server.

Wenn Sie eine Schwachstellenanalyse von innen betrachtet durchführen, haben Sie den gewissen Vorteil, das Sie bereits intern sind, und Sie einen Status des vertrauens haben. Dies ist der Blickwinkel, den Sie und Ihre Kollegen haben, wenn Sie sich einmal im System angemeldet haben. Sie sehen Druckserver, Dateiserver, Datenbanken und andere Ressourcen.

Es gibt klare Unterscheidungen zwischen diesen beiden Arten der Schwachstellenanalyse. Als interner Mitarbeiter Ihres Unternehmens besitzen Sie höhere Privilegien; weit mehr als jeder Außenstehende. Entsprechend sind die Sicherheitsrichtlinien in den meisten Unternehmen nach wie vor so konfiguriert, externe Eindringlinge fernzuhalten. Es wird nur sehr wenig für die interne Sicherung des Unternehmens getan (z.B. Firewalls für Abteilungen, Zugangskontrollen auf Benutzerebene, Authentifizierungsvorgänge für interne Ressourcen und so weiter. Üblicherweise gibt es wesentlich mehr Ressourcen, wenn man sich intern umschaut, da die meisten Systeme in einem Unternehmen intern sind. Sobald Sie sich einmal außerhalb eines Unternehmens befinden, erhalten Sie sofort den Status vertrauensunwürdig zu sein. Die extern zugänglichen Systeme und Ressourcen sind für gewöhnlich wesentlich stärker eingeschränkt.

Betrachten Sie die Unterschiede zwischen Schwachstellenanalyse und Eindringungstests. Sehen Sie die Schwachstellenanalyse als ersten Schritt zu einem Eindringungstest an. Die Informationen aus der Schwachstellenanalyse werden im Test angewendet. Mit der Analyse wird nach Löchern und möglichen Schwachstellen im System gesucht, während der Eindringungstest die Ergebnisse in die Tat umsetzt.

Die Einschätzung der Netzwerk-Infrastruktur ist ein dynamischer Prozess. Das Durchführen der Analyse gibt einen Überblick über positive sowie negative Aspekte.

Sicherheits-Administratoren sind nur so gut wie die Tools, die diese benutzen, und das Wissen, das diese bewahren. Nehmen Sie eines der aktuell erhältlichen Analysetools und lassen Sie es über Ihr System laufen Dabei ist fast garantiert, dass einige Schwachstellen gefunden werden, die gar nicht existieren. Ob durch einen Programmfehler oder Benutzerfehler hervorgerugen, das Ergebnis ist das gleiche. Das Tool findet Schwachstellen, die gar nicht existieren, oder schlimmer noch, findet wirklich existierende Schwachstellen nicht.

Da wir nun den Unterschied zwischen Schwachstellenanalyse und Eindringungstest definiert haben, ist es ratsam, die Ergebnisse der Analyse sorgfältig zu prüfen, bevor Sie den Eindringungstest tatsächlich durchführen.

Achtung

Der Versuch, Schwachstellen in Produktionsressourcen aufzudecken, kann einen negativen Effekt auf die Produktivität und Effizienz Ihrer Systeme und Netzwerke haben.

In der folgenden Liste werden einige der Vorteile einer Schwachstellenanalyse aufgezeigt.

  • Proaktiver Fokus auf Informationssicherheit

  • Auffinden potentieller Schwachstellen, bevor diese von Crackern gefunden werden

  • Resultiert normalerweise darin, dass Systeme aktuell gehalten und mit Patches versehen werden

  • Fördert Wachstum und hilft bei der Entwicklung von Mitarbeiter-Kompetenz

  • Vermindert finanzielle Verluste und negative Publicity

8.1.2.1. Entwickeln einer Methode

Um die Auswahl der richtigen Tools für die Schwachstellenanalyse zu unterstützen, ist es sinnvoll, zuerst eine Methode für die Schwachstellenanalyse zu entwickeln. Es gibt zur Zeit leider keine vordefinierten oder industrieweit bewährten Methoden, jedoch reichen meistens gesunder Menschenverstand und optimale Verfahren als Leitfaden aus.

Was ist das Ziel? Betrachten wir nur einen Server, oder das gesamte Netzwerk und alles innerhalb des Netzwerks? Betrachten wir die Firma intern oder extern? Die Antworten auf diese Fragen sind wichtig, da diese Ihnen bei der Entscheidung über die richtigen Tools und den Einsatz derer helfen.

Weitere Informationen zur Entwicklung von Methoden finden Sie auf den folgenden Webseiten:

8.1.3. Auswerten der Tools

Eine typische Analyse beginnt mit dem Einsatz eines Tools für das Sammeln von Informationen. Bei der Analyse des gesamten Netzwerks sollten Sie zuerst das Layout festlegen, um aktive Hosts zu identifizieren. Sobald diese gefunden wurden, sollten Sie jeden Host einzeln untersuchen. Das Untersuchen dieser Hosts bedarf weiterer Tools. Das Wissen, welche Tools für was verwendet werden, ist der wohl bedeutendste Schritt beim Aufdecken von Schwachstellen.

Wie bei jedem Aspekt des täglichen Lebens gibt es viele verschiedene Tools, die die gleiche Arbeit verrichten. Dies trifft auch auf Schwachstellenanalysen zu. Es gibt Tools, die speziell für Betriebssysteme, Applikationen oder Netzwerke (basierend auf Protokollen) eingesetzt werden können. Einige Tools sind kostenlos, andere wiederum nicht. Einige Tools sind intuitiv und benutzerfreundlich, andere eher kryptisch und schlecht dokumentiert oder besitzen Features, die andere Tools wiederum nicht haben.

Das Finden der richtigen Tools kann eine Herausforderung darstellen. Schlussendlich zählt die Erfahrung. Wenn möglich, richten Sie ein Testlabor ein und probieren soviele Tools aus wie nur möglich, und beachten Sie dabei die Stärken und Schwächen. Lesen Sie die README-Datei oder man-Seite zum Tool. Suchen Sie zusätzlich dazu im Internet nach weiteren Informationen wie Artikel, Schritt-für-Schritt-Anleitungen und Mailinglisten für ein Tool.

Die untenstehend beschriebenen Tools sind nur ein kleines Beispiel der erhältlichen Tools.

8.1.3.1. Scannen von Hosts mit Nmap

Nmap ist ein beliebtes Tool, das mit Red Hat Enterprise Linux ausgeliefert wird, und zum Feststellen eines Netzwerk-Layouts verwendet werden kann. Nmap ist schon seit vielen Jahren auf dem Markt und ist das wahrscheinlich am häufigsten verwendete Tool für die Sammlung von Informationen. Es enthält eine ausgezeichnete Manual-Seite, die detaillierte Informationen zu Optionen und Verwendung bietet. Administratoren können Nmap in einem Netzwerk verwenden, um Hosts und offene Ports auf diesen Systemen zu finden.

Nmap ist ein kompetenter, erster Schritt bei der Schwachstellenanalyse. Sie können die Hosts in Ihrem Netzwerk aufzeigen und eine Option angeben, die versucht zu bestimmen, welches Betriebssystem auf einem bestimmten Host läuft. Nmap ist eine gute Grundlage für das Einführen sicherer Services und das Abstellen unbenutzter Services.

8.1.3.1.1. Nmap verwenden

Nmap kann von einem Shell-Prompt aus verwendet werden. Geben Sie an einem Shell-Prompt den Befehl nmap gefolgt vom Hostnamen oder der IP-Adresse des zu scannenden Computers ein.

nmap foo.example.com

Die Ergebnisse des Scannens (die einige Minuten brauchen können, abhängig davon, wo sich der Host befindet), sollten wie folgt aussehen:

Starting nmap V. 3.50 ( www.insecure.org/nmap/ ) Interesting ports on localhost.localdomain (127.0.0.1): (The 1591 ports scanned but not shown below are in state: closed) Port State Service 22/tcp open ssh 25/tcp open smtp 111/tcp open sunrpc 443/tcp open https 515/tcp open printer 950/tcp open oftep-rpc 6000/tcp open X11 Nmap run completed -- 1 IP address (1 host up) scanned in 71.825 seconds

Nmap prüft die häufigsten Ports für die Netzwerkkommunikation auf mithörende oder wartende Services. Dieses Wissen ist sinnvoll für Administratoren, die unnötige Services abschalten möchten.

Weitere Informationen zu Nmap finden Sie auf der offiziellen Homepage unter folgender URL:

http://www.insecure.org/

8.1.3.2. Nessus

Nessus ist ein Komplett-Service Sicherheitsscanner. Die Plug-In-Architektur von Nessus ermöglicht Benutzern das Anpassen an deren Systeme und Netzwerke. Wie mit jedem Scanner ist Nessus nur so gut wie die Signatur-Datenbank, die verwendet wird. Glücklicherweise wird Nessus häufig aktualisiert und dessen Features beinhalten vollständige Berichterstattung, Host-Scanning und Echtzeit-Schwachstellensuche. Denken Sie jedoch immer daran, dass fehlerhafte Ergebnisse auch bei einem so leistungsstarken und häufig aktualisiertem Tool wie Nessus auftreten können.

Hinweis

Nessus wird nicht mit Red Hat Enterprise Linux mitgeliefert und wird nicht unterstützt. Die Erwähnung in diesem Handbuch gilt nur als Referenz für Benutzer, die eventuell an dieser beliebten Applikation interessiert sind.

Weitere Informationen zu Nessus finden Sie auf der offiziellen Homepage unter folgender URL:

http://www.nessus.org/

8.1.3.3. Nikto

Nikto ist ein ausgezeichneter CGI-Scanner (Common Gateway Interface). Nikto hat die Fähigkeit, nicht nur CGI-Schwachstellen zu suchen, sondern diese auch so zu prüfen, dass Intrusion-Detection-Systeme umgangen werden. Es wird von ausgezeichneter Dokumentation begleitet, die vor dem Ausführen des Programms sorgfältig gelesen werden sollte. Wenn Sie Webserver mit CGI-Skripten besitzen, ist Nikto eine ausgezeichnete Quelle für das Prüfen der Sicherheit dieser Server.

Hinweis

Nikto wird nicht mit Red Hat Enterprise Linux mitgeliefert und wird nicht unterstützt. Die Erwähnung in diesem Handbuch gilt nur als Referenz für Benutzer, die an dieser beliebten Applikation interessiert sind.

Weitere Informationen zu Nikto finden Sie unter folgender URL:

http://www.cirt.net/code/nikto.shtml

8.1.3.4. VLAD Scanner

VLAD ist ein Schwachstellen-Scanner, der vom RAZOR-Team bei Bindview, Inc. entwickelt wurde und für das Prüfen auf Schwachstellen eingesetzt werden kann. Es prüft laut SANS Top Ten Liste der häufigsten Sicherheitsprobleme (SNMP-Probleme, Datei-Sharing Fragen, etc.). Obwohl er nicht soviele Features wie Nessus besitzt, ist VLAD auf jeden Fall wert, genauer betrachtet zu werden.

Hinweis

VLAD wird nicht mit Red Hat Enterprise Linux mitgeliefert und wird nicht unterstützt. Die Erwähnung in diesem Handbuch gilt nur als Referenz für Benutzer, die an dieser beliebten Applikation interessiert sind.

Weitere Informationen zu VLAD finden Sie auf der Webseite des RAZOR-Teams unter folgender URL:

http://www.bindview.com/Support/Razor/Utilities/

8.1.3.5. Ihre zukünftigen Bedürfnisse vorausplanen

Abhängig von Ihrem Ziel und den Ressourcen gibt es viele Tools auf dem Markt. Es gibt Tools für Wireless Netzwerke, Novell-Netzwerke, Windows Systeme, Linux Systeme und vieles mehr. Einen weiteren, wichtigen Teil der Analysen kann auch die physikalische Sicherheit, Mitarbeiterüberwachung oder Voice/PBX-Netzwerkanalysen sein. Sie können neue Konzepte wie das War Walking — das Scannen der Perimeter der physischen Struktur des Unternehmens auf Schwachstellen im Wireless Netzwerk — erforschen und in Ihre Analysen übernehmen. Fantasie und Erfahrung im Umgang mit der Auffindung und Lösung von Sicherheitsproblemen sind die einzigen Grenzen bei der Planung und Durchführung von Schwachstellenanalysen.

8.2. Häufige Schwachstellen und Attacken

Tabelle 8.1, „Häufige Sicherheitslöcher“ zeigt einige der von Eindringlingen am häufigsten ausgenutzten Schwachstellen und Zugangspunkte, um auf Netzwerkressourcen von Unternehmen zuzugreifen. Der Schlüssel zu diesen häufigen Schwachstellen ist die Erklärung, wie diese ausgenutzt werden, und wie Administratoren ihr Netzwerk ordnungsgemäß gegen solche Angriffe schützen können.

Sicherheitsloch Beschreibung Hinweise
Null- oder Standardpasswort Das Leerlassen von administrativen Passwörtern oder das Verwenden von Standardpasswörtern, die mit einer Applikation mitgeliefert werden. Dies betrifft häufig Hardware wie Routern und Firewalls, jedoch können auch einige Dienste, die unter Linux laufen, standardmäßige Administratoren-Passwörter enthalten (Red Hat Enterprise Linux 5 wird jedoch nicht mit diesen ausgeliefert).
Häufig verbunden mit Netzwerk-Hardware wie Routern, Firewalls, VPNs und Network-Attached-Storage-Geräte (NAS).
Gebräuchlich in vielen älteren Betriebssystemen, besonders Betriebssysteme, die Dienste kombinieren (wie zum Beispiel UNIX und Windows).
Administratoren kreieren gelegentlich privilegierte Benutzerkonten unter Zeitdruck und lassen Passwörter leer, was einen idealen Einstiegspunkt für böswillige Benutzer, die dieses Benutzerkonto entdecken, bietet.
Standard Shared Keys Sichere Dienste werden manchmal mit standardmäßigen Sicherheitsschlüsseln für Entwicklung oder zu Evaluationszwecken ausgeliefert. Werden diese Schlüssel nicht geändert und auf einer Produktionsumgebung im Internet platziert, kann jeder Benutzer mit dem gleichen Standardschlüssel auf diese Ressourcen mit gemeinsam genutzten Schlüsslen und damit auf alle darin empfindlichen Informationen zugreifen.
Sehr verbreitet in Wireless Access Points und vorkonfigurierten sicheren Servergeräten.
IP-Spoofing Eine sich entfernt befindliche Maschine verhält sich wie ein Knoten im lokalen Netzwerk, findet Schwachstellen auf Ihrem Server und installiert ein Backdoor-Programm oder Trojanisches Pferd, um Kontrolle über Ihre Netzwerkressourcen zu erlangen.
Spoofing ist relativ schwierig, da es vom Angreifer erfordert, dass er TCP/IP SYN-ACK-Nummern voraussagt, um eine Verbindung zum Zielsystem zu koordinieren. Es sind jedoch verschiedene Tools erhältlich, die dem Cracker bei diesem Angriff helfen können.
Es ist abhängig von den auf dem System laufenden Dienste (wie rsh, telnet, FTP und andere), die Source-basierte Authentifizierungstechniken verwenden, die im Vergleich zu PKI oder anderen Formen der Verschlüsselung wie ssh oder SSL/TLS nicht empfohlen werden.
Lauschen Das Sammeln von Daten zwischen zwei aktiven Knoten auf einem Netzwerk durch das Abhören der Verbindung dieser beiden Knoten.
Diese Art von Attacke funktioniert meistens bei Protokollen, bei denen Text unverschlüsselt übertragen wird, wie zum Beispiel Telnet-, FTP- und HTTP-Übertragungen.
Angreifer von außerhalb müssen Zugriff auf ein kompromittiertes System in einem LAN haben, um einen derartigen Angriff durchzuführen; üblicherweise hat der Cracker einen aktiven Angriff (wie zum Beispiel IP-Spoofing oder Man-In-The-Middle) benutzt, um ein System im LAN zu kompromittieren.
Präventivmaßnahmen umfassen Dienste mit verschlüsseltem Schlüsselaustausch, einmaligen Passwörtern oder verschlüsselter Authentifizierung, um das Erschnüffeln von Passwörtern zu verhindern; hohe Verschlüsselung während der Übertragung ist ebenfalls ratsam.
Schwachstellen von Diensten Ein Angreifer findet einen Fehler oder ein Schlupfloch in einem Dienst, der über das Internet läuft. Durch diese Anfälligkeit kann der Angreifer das gesamte System und alle Daten darauf sowie weitere Systeme im Netzwerk kompromittieren.
HTTP-basierte Dienste wie CGI sind anfällig für das Ausführen von Befehlen von außen bishin zu interaktivem Shell-Zugang. Auch wenn der HTTP-Dienst als nicht-privilegierter Benutzer wie zum Beispiel "nobody" läuft, können Informationen wie beispielsweise Konfigurationsdateien und Netzwerktabellen gelesen werden, oder der Angreifer kann Denial-of-Service-Attacken starten, die die Ressourcen des Systems beeinträchtigen oder es für weitere Zugriffe durch andere Benutzer unmöglich macht.
Dienste können manchmal Schwachstellen haben, die auch nach Entwicklungs- und Testphasen noch existieren; diese Schwachstellen (wie zum Beispiel Pufferüberläufe, bei denen Angreifer einen Dienst zum Absturz bringen, in dem sie beliebige Werte verwenden, die den Speicherpuffer einer Anwendung füllen und die den Angreifern dann eine interaktive Kommandozeile geben, auf der sie beliebige Befehle ausführen können) können dem Angreifer eine komplette, administrative Kontrolle ermöglichen.
Administratoren sollten sicherstellen, dass Dienste nicht als root-Benutzer laufen und sollten aufmerksam nach Patches und Fehlerupdates für Anwendungen bei Herstellern oder Sicherheitsorganisationen wie CERT und CVE Ausschau halten.
Schwachstellen von Applikationen Angreifer finden Fehler in Desktop- und Workstation-Applikationen wie E-Mail-Clients und können willkürlich Code ausführen, Trojaner für zukünftige Attacken implantieren oder Systeme zum Absturz bringen. Es kann noch größerer Schaden angerichtet werden, wenn die kompromittierte Workstation administrative Berechtigungen für den Rest des Netzwerkes hat.
Workstations und Desktops sind anfälliger für eine Ausbeutung als Server, die von Administratoren verwaltet werden, da die Benutzer keine Erfahrung oder nicht das Wissen zur Verhinderung oder Aufdeckung von Einbrüchen haben. Es ist zwingend notwendig, Einzelpersonen über die Risiken bei der Installation unberechtigter Software oder beim Öffnen vom E-Mail unbekannter Herkunft zu informieren.
Es können Schutzeinrichtungen installiert werden, so dass z.B. E-Mail-Software nicht automatisch Anhänge öffnen oder ausführen kann. Zusätzlich dazu kann das automatische Aktualisieren der Workstation-Software über das Red Hat Network oder andere System-Management-Services die Last einer vielschichtigen Sicherheitsimplementierung ausgleichen.
Denial-of-Service (DoS) Attacken Angreifer oder Gruppen von Angreifern koordinieren eine Attacke auf ein Netzwerk oder Serverressourcen, bei der unbefugte Pakete an den Zielcomputer gesendet werden (entweder Server, Router oder Workstation). Dies zwingt die Ressource für berechtigte Benutzer unverfügbar zu werden.
Der DoS-Fall in den US, über den am meisten berichtet wurde, trat im Jahr 2000 auf. Eine Reihe hoch gehandelter kommerzieller und Regierungs-Web-Sites wurden durch eine koordinierte Ping-Flood Attacke, bei der mehrere, als Zombies agierende, kompromittierte Systeme mit schneller Bandbreitenverbindung benutzt wurden, vorübergehend außer Gefecht gesetzt, bzw. Broadcastknoten weitergeleitet.
Quellpakete werden gewöhnlich gefälscht (und auch versendet), was die Suche zum Beispiel nach dem wahren Ursprung des Angriffs erschwert.
Fortschritte bei Ingress Filtern (IETF rfc2267) durch die Verwendung von iptables und der Netzwerk IDSes wie zum Beispiel snort unterstützen Administratoren beim Aufspüren und Verhindern von verteilten DoS-Attacken.
Tabelle 8.1. Häufige Sicherheitslöcher

8.3. Sicherheits-Updates

Wenn Sicherheitslücken in einer Software entdeckt werden, muss die Software aktualisiert werden, um mögliche Sicherheitsrisiken zu minimieren. Ist das Paket Teil einer Red Hat Enterprise Linux Distribution, die derzeit unterstützt wird, liegt es im Interesse von Red Hat Inc., so schnell wie möglich aktualisierte Pakete herauszugeben, die Sicherheitslöcher stopfen. Häufig wird die Mitteilung eines Sicherheitsrisikos von einem Patch begleitet (oder Code, der den Fehler behebt). Dieser Patch wird dann auf das Red Hat Enterprise Linux Paket angewandt, von unserem Qualitätssicherungsteam getestet und als Errata-Update herausgegeben. Enthält die Ankündigung jedoch keinen Patch, arbeitet ein Red Hat Entwickler mit dem Herausgeber des Pakets zusammen, um das Problem zu lösen. Wurde das Problem behoben, wird das Paket getestet und als Errata-Update herausgegeben.

Wenn Sie ein Paket verwenden, für das ein Sicherheits-Errata-Report herausgegeben wurde, wird strengstens empfohlen, dass Sie Ihre Sicherheits-Errata-Pakete sobald wie möglich aktualisieren, um die Zeit, die Ihr System angreifbar ist, zu minimieren..

8.3.1. Pakete aktualisieren

Wenn Sie Pakete auf Ihrem System aktualisieren, ist es wichtig, das Update von einer vertrauenswürdigen Quelle herunterzuladen. Ein Angreifer kann leicht eine Version eines Paketes nachbauen (mit der gleichen Versionsnummer des Pakets, das theoretisch das Problem lösen sollte), jedoch mit einem anderen Sicherheitsrisiko im Paket, und dieses im Internet veröffentlichen. Falls dies geschieht, kann dieses Risiko durch Sicherheitsmaßnahmen wie das Abgleichen der Pakete gegen die ursprünglichen RPMs nicht aufgedeckt werden. Es ist daher wichtig, dass Sie RPMs nur von Quellen wie Red Hat Inc. herunterladen und die Signatur des Pakets prüfen, um dessen Integrität sicherzustellen.

Red Hat bietet zwei Möglichkeiten, um Informationen über Sicherheitsupdates zu erhalten:

  1. Gelistet und erhältlich zum Download von Red Hat Network

  2. Gelistet und ungelinkt auf der Red Hat Errata-Webseite

Hinweis

Mit der Red Hat Enterprise Produktlinie beginnend, können aktualisierte Pakete nur von Red Hat Network heruntergeladen werden. Obwohl die Red Hat Errata Website aktualisierte Informationen enthält, umfasst sie nicht die eigentlichen Download-Pakete.

8.3.1.1. Verwendung von Red Hat Network

Red Hat Network ermöglicht Ihnen, den größten Teil des Update-Prozesses zu automatisieren. Es stellt fest, welche RPM-Pakete für Ihr System benötigt werden, lädt diese von einer sicheren Quelle herunter, prüft die RPM-Signatur, um zu prüfen, dass diese nicht unbefugt geändert wurden, und aktualisiert diese. Die Paketinstallation kann sofort erfolgen oder auf einen bestimmten Zeitpunkt verlegt werden.

Red Hat Network benötigt von Ihnen ein Systemprofil von jeder Maschine, die aktualisiert werden soll. Dieses Systemprofil enthält Hardware- und Softwareinformationen über das System. Diese Informationen werden vertraulich behandelt und werden an niemanden weitergegeben. Sie werden nur benötigt, um festzustellen, welche Errata-Updates auf jedes Ihrer Systeme angewendet werden können. Ohne diese kann Red Hat Network nicht feststellen, ob Ihr System aktualisiert werden muss. Wenn ein Sicherheits-Errata (oder ein anderes Errata) herausgegeben wird, schickt Red Hat Network Ihnen eine E-Mail mit einer Beschreibung der Errata, sowie eine Liste mit Informationen, welche Teile Ihres Systems betroffen sind. Um das Update anzuwenden, können Sie den Red Hat Update Agent verwenden oder ein Update über die Webseite http://rhn.redhat.com planen.

Tipp

Red Hat Enterprise Linux enthält das Red Hat Network Alert Notification Tool, ein Symbol im Panel, das sichtbare Hinweise zu verfügbaren Updates für ein registriertes Red Hat Enterprise Linux-System anzeigt. Weitere Informationen über das Applet finden Sie unter folgender URL: https://rhn.redhat.com/rhn/help/quickstart.jsp.

Wichtig

Bevor Sie jegliche Sicherheits-Errata installieren, stellen Sie sicher, dass Sie alle Anweisungen im Errata-Report gelesen und diese genau befolgt haben. Allgemeine Anweisungen über das Anwenden von Änderungen durch ein Errata-Update finden Sie unter Abschnitt 8.3.1.5, „Anwenden der Änderungen“.

8.3.1.2. Verwenden der Red Hat Errata-Webseite

Wenn Sicherheits-Errata-Berichte veröffentlicht werden, werden diese auf der Red Hat Errata-Webseite unter http://www.redhat.com/security/ bekanntgegeben. Sie können auf dieser Seite das Produkt und die Version für Ihr System auswählen und dann Security oben auf der Seite auswählen, um nur Red Hat Enterprise Linux Sicherheitshinweise anzuzeigen. Beschreibt die Zusammenfassung in einer dieser Hinweise ein Paket, das auf Ihrem System verwendet wird, klicken Sie auf die Zusammenfassung für weitere Details.

Die Detail-Seite beschreibt das Sicherheitsproblem und gibt alle nötigen Anweisungen, die zusätzlich zur Aktualisierung des Pakets befolgt werden müssen, um das Sicherheitsloch zu stopfen.

Um das/die aktualisierte(n) Paket(e) herunterzuladen, klicken Sie auf den Link, um sich bei Red Hat Network einzuloggen, klicken anschließend auf den/die Paketnamen und speichern Sie diese(s) auf der Festplatte. Es wird dringend empfohlen, dass Sie ein neues Verzeichnis, wie z.B. /tmp/updates erstellen und dort die heruntergeladenen Pakete speichern.

8.3.1.3. Signierte Pakete verifizieren

Alle Red Hat Enterprise Linux Pakete sind signiert mit dem Red Hat Inc. GPG-Schlüssel. GPG steht für GNU Privacy Guard oder GnuPG, einem freien Softwarepaket, welches dazu verwendet wird, die Authentizität von Dateien zu gewährleisten. Zum Beispiel: Ein Private Key (Secret Key) von Red Hat hält das Paket verschlossen, wohingegen der Public Key das Paket verifiziert und freischaltet. Falls der von Red Hat vertriebene Public Key während der RPM-Verifizierung nicht mit dem Private Key übereinstimmt, kann dies bedeuten, dass das Paket in irgendeiner Form verändert wurde und daher nicht vertrauenswürdig ist.

Die RPM-Utility in Red Hat Enterprise Linux versucht automatisch, die GPG Signatur eines RPM-Paketes vor der Installation zu verifizieren. Wurde der Red Hat GPG-Schlüssel nicht installiert, sollten Sie diesen von einer sicheren, statischen Quelle wie einer Red Hat Enterprise Linux Installations-CD-ROM installieren.

Unter der Annahme, das die CD-ROM in /mnt/cdrom gemountet ist, können Sie den folgenden Befehl zum Importieren des Schlüssels in den Keyring oder Schlüsselring verwenden (eine Datenbank bestehend aus zuverlässigen Schlüsseln auf dem System).

rpm --import /mnt/cdrom/RPM-GPG-KEY

Um eine Liste aller installierten Schlüssel für die RPM-Verifikation anzuzeigen, führen Sie folgenden Befehl aus:

rpm -qa gpg-pubkey*

Für den Red Hat Schlüssel enthält die Ausgabe folgendes:

gpg-pubkey-db42a60e-37ea5438

Um Details über einen bestimmten Schlüssel anzuzeigen, verwenden Sie den Befehl rpm -qi, gefolgt vom Output des vorhergehenden Befehls:

rpm -qi gpg-pubkey-db42a60e-37ea5438

Es ist von größter Wichtigkeit, dass Sie die Signatur der RPM-Dateien verifizieren, bevor Sie diese installieren. Dieser Schritt gewährleistet, dass die RPMs der Red Hat Inc. Version der Pakete nicht verändert wurden. Um alle heruntergeladenen Pakete gleichzeitig zu prüfen, geben Sie folgenden Befehl ein:

rpm -K /tmp/updates/*.rpm

Für jedes einzelne Paket erhalten Sie im Falle einer erfolgreichen Verifikation die Ausgabe gpg OK. Falls dies nicht der Fall ist, so überprüfen Sie, ob Sie den richtigen Red Hat Public Key verwenden und verifizieren Sie die Quelle des Inhalts. Pakete, welche die GPG-Verifizierung nicht bestehen, sollten nicht installiert werden, da sie möglicherweise von einem Dritten verändert wurden.

Nachdem der GPG-Schlüssel verifiziert und alle Pakete im Zusammenhang mit dem Errata-Bericht heruntergeladen wurden, können Sie diese als Root angemeldet in einem Shell-Prompt installieren.

8.3.1.4. Signierte Pakete installieren

Die Installation für die meisten Pakete kann sicher durch den folgenden Befehl erfolgen (Kernel-Pakete ausgenommen):

rpm -Uvh /tmp/updates/*.rpm

Für Kernel-Pakete sollten Sie den folgenden Befehl verwenden:

rpm -ivh /tmp/updates/<kernel-package>

Ersetzen Sie <kernel-package> im vorhergehenden Beispiel mit dem Namen der Kernel-RPM.

Nachdem die Maschine mithilfe des neuen Kernels sicher neu gestartet ist, kann der alte Kernel mit dem folgenden Befehl entfernt werden:

rpm -e <old-kernel-package>

Ersetzen Sie <old-kernel-package> im vorhergehenden Beispiel mit dem Namen der älteren Kernel-RPM.

Hinweis

Es ist keine Voraussetzung, dass der alte Kernel entfernt wird. Der standardmäßige Boot Loader, GRUB, erlaubt die Installation mehrerer Kernel, welche dann von einem Menü während des Bootvorganges ausgewählt werden können.

Wichtig

Bevor Sie jegliche Sicherheits-Errata installieren, stellen Sie sicher, dass Sie alle Anweisungen im Errata-Report gelesen und diese genau befolgt haben. Allgemeine Anweisungen über das Anwenden von Änderungen durch ein Errata-Update finden Sie unter Abschnitt 8.3.1.5, „Anwenden der Änderungen“.

8.3.1.5. Anwenden der Änderungen

Nachdem Sie die Sicherheits-Errata über das Red Hat Network oder die Red Hat Errata-Webseite heruntergeladen und installiert haben, ist es wichtig, die ältere Software nicht mehr einzusetzen und die neue Software zu verwenden. Die Vorgehensweise hängt von der Art der Software ab, die aktualisiert wurde. Die folgende Liste stellt die allgemeinen Kategorien der Software dar und gibt Anweisungen für das Verwenden der aktualisierten Versionen nach einem Paket-Upgrade.

Hinweis

Im allgemeinen ist ein Neustart der beste Weg, sicherzustellen, dass die aktuellste Version eines Softwarepakets verwendet wird. Diese Option ist jedoch nicht immer für den Systemadministrator verfügbar.

Applikaitonen

User-Space Applikationen sind alle Programme, die durch einen Systembenutzer eingeführt werden können. Gewöhnlicherweise werden diese Applikationen nur verwendet, wenn ein Benutzer, ein Skript oder ein automatisierter Task diese startet und nicht lange ausführt.

Wird solch eine Applikation aktualisiert, stoppen Sie alle Instanzen dieser Applikation auf dem System und starten Sie das Programm neu, um die aktualisierte Version zu verwenden.

Kernel

Der Kernel ist die Kern-Softwarekomponente für das Red Hat Enterprise Linux Betriebssystem. Er verwaltet den Zugang zum Speicher, zum Prozessor und zu Peripheriegeräten, sowie plant alle Aufgaben.

Durch dessen zentrale Rolle kann der Kernel nur durch ein Herunterfahren des Computers neu gestartet werden. Daher kann eine aktualisierte Version des Kernels nicht verwendet werden, bis das System neu gestartet wird.

Shared-Bibliotheken

Shared-Bibliotheken sind Einheiten von Code, wie z.B. glibc, die von einer Reihe von Applikationen und Softwareprogrammen gemeinsam verwendet werden. Applikationen, die Shared-Bibliotheken verwenden, laden normalerweise den gemeinsamen Code beim Starten der Applikation, so dass alle Applikationen, die die aktualisierte Bibliothek verwenden, neu gestartet werden müssen.

Um festzustellen, welche laufenden Applikationen mit einer bestimmten Bibliothek verknüpft sind, verwenden Sie den Befehl lsof wie im folgenden Beispiel:

lsof /usr/lib/libwrap.so*

Dieser Befehl gibt eine Liste aller laufenden Programme aus, die TCP Wrappers für die Host-Zugangskontrolle verwenden. Alle aufgelisteten Programme müssen angehalten und neu gestartet werden, wenn das tcp_wrappers-Paket aktualisiert wird.

SysV Services

SysV Services sind beständige Server-Programme, die während es Bootens gestartet werden. Beispiele für SysV Services sind sshd, vsftpd und xinetd.

Da sich diese Programme normalerweise solange im Speicher aufhalten, bis die Maschine gebootet wird, muss jeder aktualisierte SysV-Dienst nach dem Upgrade des Pakets angehalten und neu gestartet werden. Dies kann über das Services Configuration Tool oder durch das Einloggen als root via Shell-Prompt und Eingeben des Befehls /sbin/service wie im folgenden Beispiel:

/sbin/service <service-name> restart

Ersetzen Sie im vorhergehenden Beispiel <service-name> mit dem Namen des Services, wie z.B. sshd.

xinetd Services

Services, die vom Super-Service xinetd verwaltet werden, werden nur ausgeführt, wenn eine aktive Verbindung vorliegt. Beispiele von Services, die von xinetd gesteuert werden, sind Telnet, IMAP und POP3.

Da neue Instanzen dieser Services durch xinetd jedesmal gestartet werden, wenn eine neue Anfrage empfangen wird, werden die Verbindungen, die nach einem Upgrade entstehen, durch die aktualisierte Software verwaltet. Bestehen jedoch aktive Verbindungen zur der Zeit, zu der von xinetd verwaltete Services aktualisiert werden, werden diese von der älteren Version der Software verwaltet.

Um ältere Instanzen eines bestimmten xinetd-Services zu stoppen, aktualisieren Sie das Paket für den Service und stoppen Sie dann alle Prozesse, die zur Zeit laufen. Prüfen Sie zuerst welche Prozesse laufen mit dem Befehl ps und geben Sie dann den Befehl kill oder killall ein, um alle aktuellen Instanzen dieses Service zu stoppen.

Wenn zum Beispiel Sicherheits-Errata imap-Pakere herausgegeben werden, aktualisieren Sie die Pakete und geben Sie folgenden Befehl als root ein:

ps -aux | grep imap

Dieser Befehl gibt alle aktiven IMAP-Sitzungen aus. Individuelle Sitzungen können dann durch den folgenden Befehl beendet werden:

kill <PID>

Falls das Beenden der Session fehlschlägt, verwenden Sie stattdessen folgenden Befehl:

kill -9 <PID>

Ersetzen Sie im vorhergehenden Beispiel <PID> durch die Prozess-Identifikationsnummer (zu finden in der zweiten Spalte des ps Befehls) für eine IMAP-Sitzung.

Um alle aktiven IMAP-Sitzungen zu beenden, geben Sie den folgenden Befehl ein:

killall imapd

Kapitel 9. Sichern Ihres Netzwerkes

9.1. Server-Sicherheit

Wenn ein System als Server in einem öffentlichen Netzwerk verwendet wird, stellt es ein Angriffsziel dar. Aus diesem Grund ist das Abhärten des Systems und Sperren von Diensten von erheblicher Bedeutung für den Systemadministrator.

Bevor Sie die Details eines bestimmten Themas erforschen, sehen Sie sich die folgenden allgemeinen Hinweise für das Erhöhen der Server-Sicherheit an:

  • Halten Sie alle Dienste auf dem neuesten Stand, um vor den neuesten Bedrohungen geschützt zu sein.

  • Verwenden Sie sichere Protokolle.

  • Wenn möglich, sollte immer nur eine Maschine einen Netzwerkdienst bereitstellen.

  • Überwachen Sie alle Server sorgfältig auf verdächtige Aktivitäten.

9.1.1. Sichern von Diensten mit TCP-Wrappern und xinetd

TCP-Wrapper bieten Zugriffskontrolle für eine Reihe von Diensten. Die meisten modernen Netzwerkdienste, wie z.B. SSH, Telnet und FTP, verwenden TCP-Wrapper, die als Wachposten zwischen einer eingehenden Anfrage und dem angefragten Dienst stehen.

Die Vorteile von TCP-Wrappern werden noch erweitert, wenn diese zusammen mit xinetd, einem Super-Serverdienst, der zusätzliche Zugriffs-, Log-, Binding-, Umleitungs- und Ressourcenkontrolle bietet, verwendet werden.

In den folgenden Unterkapiteln wird davon ausgegangen, dass Sie ein grundlegendes Wissen über jedes Thema besitzen und sich auf spezielle Sicherheitsoptionen konzentrieren.

9.1.1.1. Erhöhung der Sicherheit mit TCP-Wrappern

TCP-Wrapper können viel mehr als nur Zugriffe auf Dienste verweigern. In diesem Abschnitt wird erläutert, wie TCP-Wrapper zum Versenden von Verbindungs-Bannern, Warnen vor Angriffen von bestimmten Hosts und Erweitern der Log-Funktionalität eingesetzt werden können. Eine ausführliche Liste der Funktionalität und Kontrollsprache der TCP-Wrapper finden Sie auf den Handbuchseiten der hosts_options.

9.1.1.1.1. TCP-Wrapper und Verbindungs-Banner

Benutzern, die sich mit einem Dienst verbinden, ein einschüchterndes Banner anzuzeigen, ist eine gute Methode, um zu verschleiern, welches System der Server verwendet, und im gleichen Zug Angreifer wissen zu lassen, dass sie es mit einem aufmerksamen Systemadministrator zu tun haben. Um ein TCP-Wrapper-Banner für einen Dienst zu implementieren, verwenden Sie die Option banner.

In diesem Beispiel wird ein Banner für vsftpd implementiert. Sie müssen zuerst eine Banner-Datei anlegen. Diese kann sich irgendwo auf dem System befinden, muss aber den gleichen Namen wie der Daemon haben. In diesem Beispiel nennen wir die Datei /etc/banners/vsftpd.

 220-Hello, %c 220-All activity on ftp.example.com is logged. 220-Inappropriate use will result in your access privileges being removed. 

Der %c-Token liefert eine Reihe von Client-Informationen wie den Benutzernamen und Hostnamen, oder den Benutzernamen und die IP-Adresse, um die Verbindung noch abschreckender zu machen.

Damit dieses Banner bei eingehenden Verbindungen präsentiert wird, fügen Sie die folgende Zeile in die Datei /etc/hosts.allow ein:

 vsftpd : ALL : banners /etc/banners/ 
9.1.1.1.2. TCP-Wrapper und Warnung vor Angriffen

Wenn ein bestimmter Host oder ein Netzwerk bei einem Angriff auf den Server ertappt wurde, können TCP-Wrapper mit der spawn-Direktive vor weiteren Angriffen von diesem Host oder Netzwerk warnen.

In diesem Beispiel gehen wir davon aus, dass ein Cracker vom 206.182.68.0/24 Netzwerk bei einem Angriffsversuch auf den Server erwischt wurde. Indem Sie die folgende Zeile in die Datei /etc/hosts.deny einfügen, wird der Verbindungsversuch abgewiesen und in einer besonderen Datei aufgezeichnet:

 ALL : 206.182.68.0 : spawn /bin/ 'date' %c %d >> /var/log/intruder_alert 

Das %d-Token liefert den Namen des Dienstes, auf den der Angreifer zugreifen wollte.

Um die Verbindung zu erlauben und diese aufzuzeichnen, fügen Sie die spawn Direktive in die Datei /etc/hosts.allow ein.

Hinweis

Da die spawn-Direktive jeden beliebigen Shell-Befehl ausführt, können Sie ein spezielles Skript schreiben, das den Administrator im Falle eines Verbindungsversuchs eines bestimmten Clients mit dem Server benachrichtigt oder eine Reihe von Befehlen ausführt.

9.1.1.1.3. TCP-Wrapper und erweitertes Logging

Wenn bestimmte Verbindungstypen von größerer Bedeutung sind, als andere, kann das Log-Level für den jeweiligen Dienst über die Option severity angehoben werden.

In diesem Beispiel gehen wir davon aus, dass jeder, der eine Verbindung zu Port 23 (dem Telnet-Port) auf einem FTP-Server herstellen will, ein Cracker ist. Um dies zu kennzeichnen, fügen Sie eine emerg-Flag anstelle des Standard-Flags info in die Log-Datei ein und verweigern Sie die Verbindung.

Hierfür fügen Sie die folgende Zeile in die Datei /etc/hosts.deny ein:

 in.telnetd : ALL : severity emerg 

Dies verwendet die standardmäßige authpriv Logging-Funktion, jedoch wird die Priorität vom Standardwert info auf emerg hinaufgesetzt, wodurch Log-Nachrichten direkt an die Konsole weitergegeben werden.

9.1.1.2. Erhöhen der Sicherheit mit xinetd

In diesem Abschnitt wird beschrieben, wie xinetd eingesetzt werden kann, um einen so genannten Trap-Service einzurichten und die Anzahl der Ressourcen, die zur Unterbindung von Denial of Service (DoS)-Angriffen in jedem beliebigen xinetd-Dienst zu Verfügung stehen, zu kontrollieren. Eine Liste der verfügbaren Optionen finden Sie auf den Handbuchseiten zu xinetd und xinetd.conf.

9.1.1.2.1. Eine Falle aufstellen

Ein wichtiges Feature von xinetd ist die Fähigkeit, Hosts zu einer globalen no_access-Liste hinzufügen zu können. Den Hosts auf dieser Liste werden Verbindungen zu Diensten, die von xinetd verwaltet werden, für einen bestimmten Zeitraum oder bis xinetd neu gestartet wird, verweigert. Dies wird durch das SENSOR-Attribut erreicht. Durch diese Methode können Sie auf einfache Weise Hosts blockieren, die den Server auf offene Ports absuchen.

Der erste Schritt für das Einrichten des SENSOR ist die Auswahl eines Dienstes, den Sie nicht für eine Nutzung einplanen. In diesem Beispiel wird Telnet verwendet.

Bearbeiten Sie die Datei /etc/xinetd.d/telnet und ändern Sie die Zeile flags in folgendes um:

flags           = SENSOR

Fügen Sie folgende Zeile hinzu:

deny_time       = 30

Hierdurch wird dem Host, der 30 Minuten lang versucht hat, sich mit dem Port zu verbinden, der Zugriff verweigert. Andere Werte für das deny_time-Attribut sind FOREVER, welches solange wirksam ist, bis xinetd neu gestartet wird, und NEVER, welches die Verbindung zulässt und sie dokumentiert.

Die letzte Zeile sollte wie folgt aussehen:

disable         = no

Dies aktiviert die Falle selbst.

Obwohl SENSOR eine gute Methode ist, Verbindungen von böswilligen Hosts zu erkennen und zu stoppen, hat es jedoch zwei Nachteile:

  • Es hilft nicht gegen heimliches Scannen (Stealth Scans).

  • Ein Angreifer, der weiß, dass ein SENSOR aktiviert ist, kann eine DoS-Attacke gegen bestimmte Hosts ausführen, indem er ihre IP-Adressen fälscht und sich mit dem verbotenen Port verbindet.

9.1.1.2.2. Kontrollieren von Server-Ressourcen

Ein weiteres, wichtiges Feature von xinetd ist die Fähigkeit, die Anzahl der Ressourcen, die Dienste zur Verfügung haben, zu kontrollieren.

Dies wird durch die folgenden Direktiven erreicht:

  • cps = <number_of_connections> <wait_period> — Gibt die Verbindungen pro Sekunde zu einem Service vor. Diese Direktive akzeptiert nur ganze Zahlen.

    • <number_of_connections> — Gibt die Anzahl der zu verarbeitenden Verbindungen pro Sekunde an. Falls der Anteil der eingehenden Verbindungen diesen Wert überschreitet, wird der Dienst zeitweise deaktiviert. Der Standardwert ist fünfzig (50).

    • <wait_period> — Gibt die Anzahl der Sekunden an, die gewartet werden soll, bevor der Dienst nach dessen Deaktivierung neu gestartet werden soll. Das Standardintervall beträgt zehn (10) Sekunden.

  • instances = <number_of_connections> — Gibt die Gesamtzahl aller erlaubten Verbindungen zu einem Dienst an. Diese Direktive akzeptiert entweder ganze Zahlen oder UNLIMITED.

  • per_source = <number_of_connections> — Gibt die Verbindungen zu einem Dienst pro Host vor. Diese Direktive akzeptiert entweder einen ganzzahligen Wert oder UNLIMITED.

  • rlimit_as = <number[K|M]> — Gibt die Größe der Speicheradresse in Kilobyte oder Megabyte an, die der Dienst in Anspruch nehmen kann kann. Diese Direktive akzeptiert entweder einen ganzzahligen Wert oder UNLIMITED.

  • rlimit_cpu = <number_of_seconds> — Gibt die Zeit in Sekunden an, die ein Dienst die CPU beanspruchen kann. Diese Direktive akzeptiert entweder einen ganzzahligen Wert oder UNLIMITED.

Mithilfe dieser Direktiven kann verhindert werden, dass ein xinetd-Dienst das gesamte System belegt und Denial-of-Service verursacht.

9.1.2. Portmap sichern

Der portmap-Dienst ist ein dynamischer Port-Zuweisungs-Daemon für RPC-Dienste wie NIS und NFS. Er besitzt schwache Authentifizierungsmechanismen und hat die Fähigkeit, eine große Bandbreite an Ports für die von ihm kontrollierten Dienste zuzuweisen. Aus diesen Gründen ist portmap schwer zu sichern.

Hinweis

Das Sichern von portmap betrifft lediglich NFSv2- und NFSv3-Implementationen, da portmap für NFSv4 nicht mehr länger erforderlich ist. Wenn Sie vorhaben, einen NFSv2- oder NFSv3-Server zu implementieren, dann ist portmap erforderlich und der folgende Abschnitt findet Anwendung.

Wenn Sie RPC-Dienste ausführen, sollten Sie diese Grundregeln beachten.

9.1.2.1. Schützen von portmap mit TCP-Wrappern

Es ist wichtig, TCP Wrapper zur Einschränkung des Zugriffs von Netzwerken und Hosts auf den portmap-Dienst einzusetzen, da letzterer keine integrierte Authentifizierungsmöglichkeit bietet.

Desweiteren sollten Sie nur IP-Adressen verwenden, wenn Sie den Zugriff auf den Dienst einschränken wollen. Vermeiden Sie Hostnamen, da sie durch DNS-Poisoning und andere Methoden gefälscht werden können.

9.1.2.2. Schützen von portmap mit IPTables

Um den Zugriff auf den portmap-Dienst weiter einzuschränken, ist es sinnvoll, IPTables-Regeln zum Server hinzuzufügen, die den Zugriff auf bestimmte Netzwerke einschränken.

Unten finden Sie zwei Beispiele für IPTables-Befehle, die TCP-Verbindungen zum portmap-Dienst (auf Port 111) vom 192.168.0/24 Netzwerk und vom Localhost (der für den sgi_fam-Dienst für Nautilus benötigt wird) ermöglichen. Alle anderen Pakete werden abgelehnt.

iptables -A INPUT -p tcp -s! 192.168.0.0/24 --dport 111 -j DROP
iptables -A INPUT -p tcp -s 127.0.0.1  --dport 111 -j ACCEPT

Um auf gleiche Weise UDP-Traffic einzuschränken, verwenden Sie den folgenden Befehl.

iptables -A INPUT -p udp -s! 192.168.0.0/24  --dport 111 -j DROP

9.1.3. Sichern von NIS

Network Information Service (NIS) ist ein RPC-Dienst mit dem Namen ypserv, der zusammen mit portmap und anderen zugehörigen Diensten verwendet wird, um Informationen zu Benutzernamen, Passwörtern und anderen sensiblen Daten an jeden beliebigen Computer innerhalb dessen Domain weiterzugeben.

Ein NIS-Server besteht aus mehreren Applikationen, unter anderem:

  • /usr/sbin/rpc.yppasswdd — Auch yppasswdd-Dienst genannt. Dieser Daemon ermöglicht Benutzern, ihre NIS-Passwörter zu ändern.

  • /usr/sbin/rpc.ypxfrd — Auch ypxfrd-Dienst genannt. Dieser Daemon ist für den NIS-Map-Transfer über das Netzwerk verantwortlich.

  • /usr/sbin/yppush — Diese Applikation verbreitet geänderte NIS-Datenbanken an mehrere NIS-Server.

  • /usr/sbin/ypserv — Dies ist der NIS-Server-Daemon.

Im Vergleich zu heutigen Standards ist NIS als eher unsicher einzustufen. Es besitzt keine Host-Authentifizierungsmechanismen und überträgt Informationen, einschließlich Passwort-Hashes, unverschlüsselt über das Netzwerk. Aus diesem Grund müssen Sie beim Einrichten eines Netzwerks mit NIS extreme Vorsicht walten lassen. Dadurch, dass die Standard-Konfiguration von NIS von Natur aus unsicher ist, wird die Angelegenheit noch weiter verkompliziert.

Es wird empfohlen, dass Sie, bevor Sie einen NIS-Server implementieren wollen, zuerst den portmap-Dienst wie im Abschnitt 9.1.2, „Portmap sichern“ beschrieben sichern und dann weitere Angelegenheiten wie Netzwerkplanung angehen.

9.1.3.1. Planen Sie das Netzwerk sorgfältig

Da NIS empfindliche Informationen unverschlüsselt über das Netzwerk überträgt, ist es wichtig, dass dieser Dienst hinter eine Firewall und auf einem segmentierten und sicheren Netzwerk ausgeführt wird. Jedes Mal, wenn NIS-Informationen über ein unsicheres Netzwerk übertragen werden, wird das Abfangen von Daten riskiert. Hier kann ein sorgfältiges Design des Netzwerks schwerwiegende Sicherheitsbrüche verhindern.

9.1.3.2. Verwenden Sie passwortähnliche NIS-Domainnamen und Hostnamen

Jede Maschine innerhalb einer NIS-Domain kann über bestimmte Befehle ohne Authentifizierung Informationen von einem Server extrahieren, solange der Benutzer den DNS-Hostnamen und den NIS-Domain-Namen des NIS-Servers kennt.

Wenn sich zum Beispiel jemand mit einem Laptop in das Netzwerk einklinkt oder von außen ins Netzwerk eindringt (und es schafft, eine interne IP-Adresse vorzutäuschen), enthüllt der folgende Befehl die /etc/passwd-Map:

ypcat -d <NIS_domain> -h <DNS_hostname> passwd

Ist der Angreifer ein Root-Benutzer, kann dieser die Datei /etc/shadow durch folgenden Befehl einsehen:

ypcat -d <NIS_domain> -h <DNS_hostname> shadow

Hinweis

Wenn Kerberos verwendet wird, wird die Datei /etc/shadow nicht innerhalb einer NIS-Map gespeichert.

Um den Zugang zu NIS-Maps für einen Angreifer zu erschweren, erstellen Sie einen zufälligen String für den DNS-Hostnamen, wie zum Beispiel o7hfawtgmhwg.domain.com. Erstellen Sie in gleicher Weise einen anderen, zufallsgenerierten NIS-Domain-Namen. Hierdurch wird es einem Angreifer erheblich erschwert, Zugang zum NIS-Server zu erhalten.

9.1.3.3. Bearbeiten Sie die Datei /var/yp/securenets

NIS hört alle Netzwerke ab, wenn die Datei /var/yp/securenets leer ist oder gar nicht existiert (dies ist z.B: nach einer Standard-Installation der Fall). Als erstes sollten Sie ein Netmask/Netzwerkpaar in der Datei hinterlegen, damit ypserv nur auf Anfragen des richtigen Netzwerks reagiert.

Unten finden Sie einen Beispieleintrag einer /var/yp/securenets-Datei:

255.255.255.0     192.168.0.0

Achtung

Sie sollten niemals einen NIS-Server zum ersten Mal starten, ohne vorher die Datei /var/yp/securenets erstellt zu haben.

Diese Methode schützt nicht vor einer IP-Spoofing-Attacke, schränkt jedoch die Netzwerke, die von NIS bedient werden, zumindest ein.

9.1.3.4. Zuweisung von statischen Ports und Verwendung von IPTables -Regeln

Jedem der zu NIS gehörenden Server kann ein bestimmter Port zugewiesen werden, mit Ausnahme von rpc.yppasswdd — dem Daemon, der Benutzern das Ändern ihrer Login-Passwörter erlaubt. Indem Sie den anderen beiden NIS-Server-Daemons, rpc.ypxfrd und ypserv, Ports zuweisen, können Sie Firewall-Regeln erstellen, um die NIS-Server-Daemons noch mehr vor Eindringlingen zu schützen.

Hierzu fügen Sie die folgenden Zeilen zu /etc/sysconfig/network hinzu:

YPSERV_ARGS="-p 834" YPXFRD_ARGS="-p 835"

Die folgenden IPTables-Regeln können dann verwendet werden, um festzulegen, welches Netzwerk der Server für diese Ports abhören soll:

iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 834 -j DROP
iptables -A INPUT -p ALL -s! 192.168.0.0/24  --dport 835 -j DROP

Dies bedeutet, dass der Server nur Verbindungen zu den Ports 834 und 835 zulässt, wenn die Anfrage aus dem 192.168.0.0/24 Netzwerk kommt, unabhängig vom Protokoll.

9.1.3.5. Verwenden Sie Kerberos-Authentifizierung

Einer der größten Mängel beim Verwenden von NIS für Authentifizierung ist, dass wenn sich ein Benutzer an einem Computer anmeldet, ein Passwort-Hash der /etc/shadow-Map über das Netzwerk verschickt wird. Wenn ein Angreifer Zugang zu einer NIS-Domain erhält und Verkehr über das Netzwerk durchschnüffelt, können Benutzernamen und Passwort-Hashes unbemerkt gesammelt werden. Mit genügend Zeit kann dann ein Programm zum Knacken von Passwörtern schwache Passwörter ermitteln und ein Angreifer kann dann auf einen gültigen Account im Netzwerk zugreifen.

9.1.4. Sicherung von NFS

Wichtig

Die Version von NFS, die Bestandteil von Red Hat Enterprise Linux ist, NFSv4, benötigt nicht mehr länger den portmap-Dienst, wie im Abschnitt 9.1.2, „Portmap sichern“ beschrieben. NFS-Verkehr benutzt nunmehr eher TCP in allen Versionen, als UDP und erfordert TCP bei der Verwendung von NFSv4. NFSv4 beinhaltet nunmehr Kerberos Benutzer- und Gruppen-Authentifizierung als Teil des RPCSEC_GSS Kernel-Moduls. Informationen über portmap sind weiterhin einbegriffen, da Red Hat Enterprise Linux ebenso NFSv2 und NFSv3 unterstützt, die portmap einsetzen.

9.1.4.1. Planen Sie das Netzwerk sorgfältig

Da nunmehr sämtliche Informationen von NFSv4 verschlüsselt mittels Kerberos über das Netzwerk übertragen werden können, ist es wichtig, dass dieser Dienst richtig konfiguriert wird, sollte sich dieser hinter einer Firewall oder in einem segmentierten Netzwerk befinden. NFSv2 und NFSv3 übergeben Daten noch immer nicht sicher. Dabei besteht immer ein gewisser Grund zur Besorgnis. Hier kann ein sorgfältiges Design des Netzwerks schwerwiegende Sicherheitsbrüche verhindern.

9.1.4.2. Achtung vor Syntax-Fehlern

Der NFS-Server entscheidet über die Datei /etc/exports, welche Dateisysteme für welche Hosts diese Dateisysteme exportiert werden sollen. Achten Sie darauf, dass Sie keine Extra-Leerstellen beim Bearbeiten dieser Datei einfügen.

Die folgende Zeile in der Datei /etc/exports legt fest, dass der Host bob.example.com Lese- und Schreibberechtigung auf das gemeinsame Verzeichnis /tmp/nfs/ erhält.

/tmp/nfs/     bob.example.com(rw)

Folgende Zeile in der Datei /etc/exports dagegen beschreibt, dass der Host bob.example.com lediglich Leseberechtigung besitzt, allerdings jeder Lese- und Schreibberechtigung hat, wegen eines einzelnen Leerzeichens nach dem Hostnamen.

/tmp/nfs/     bob.example.com (rw)

Es ist sehr sinnvoll, alle konfigurierten NFS-Shares mit dem Befehl showmount zu prüfen:

showmount -e <hostname>

9.1.4.3. Verwenden Sie nicht die Option no_root_squash

Standardmäßig ändern NFS-Shares den Root-Benutzer in den Benutzer nfsnobody, einem unprivilegierten Benutzer-Account, um. Auf diese Art gehören alle von Root erstellten Dateien dem User nfsnobody, wodurch das Hochladen von Programmen mit der Setuid-Bit-Einstellung verhindert wird.

Wenn no_root_squash verwendet wird, können Remote-Root-Benutzer jede Datei in dem gemeinsamen Dateisystem verändern und dabei trojanisierte Anwendungen hinterlassen, die von anderen Benutzern unabsichtlich ausgeführt werden.

9.1.5. Sicherung des Apache HTTP-Server

Der Apache HTTP-Server ist einer der stabilsten und sichersten Dienste, die mit Red Hat Enterprise Linux ausgeliefert werden. Es gibt eine große Anzahl von Optionen und Methoden, um den Apache HTTP-Server zu sichern — zu viele, um sie hier im Detail zu beschreiben.

Systemadministratoren sollten folgende Konfigurationsoptionen mit äußerster Sorgfalt verwenden:

9.1.5.1. FollowSymLinks

Diese Direktive ist standardmäßig aktiviert, seien Sie also vorsichtig, wenn Sie symbolische Links zum Dokument-Root des Webservers erstellen. Es ist zum Beispiel keine gute Idee, einen symbolischen Link zu / zu setzen.

9.1.5.2. Die Indexes-Direktive

Diese Direktive ist standardmäßig aktiviert, ist jedoch unter Umständen nicht wünschenswert. Wenn Sie nicht möchten, dass Benutzer Dateien auf dem Server durchsuchen, ist es sinnvoll, diese Direktive zu entfernen.

9.1.5.3. Die UserDir-Direktive

Die UserDir-Direktive ist standardmäßig deaktiviert, da sie das Bestehen eines Benutzeraccounts im System bestätigen kann. Wenn Sie das Durchsuchen von Verzeichnissen auf dem Server durch Benutzer erlauben möchten, sollten Sie die folgenden Direktiven verwenden:

UserDir enabled
UserDir disabled root

Diese Direktiven aktivieren das Durchsuchen von Verzeichnissen für alle Benutzer-Verzeichnisse außer /root. Wenn Sie Benutzer zu der Liste deaktivierter Accounts hinzufügen möchten, können Sie eine durch Leerstellen getrennte Liste der Benutzer in die Zeile UserDir disabled einfügen.

9.1.5.4. Entfernen Sie nicht die IncludesNoExec-Direktive

Standardmäßig kann das Modul Server-Side Includes (SSI) keine Befehle ausführen. Es wird davon abgeraten, diese Einstellungen zu ändern, außer wenn unbedingt notwendig, da dies einem Angreifer ermöglichen könnte, Befehle auf dem System auszuführen.

9.1.5.5. Schränken Sie Berechtigungen für ausführbare Verzeichnisse ein

Stellen Sie sicher, dass Sie Schreibberechtigungen für Verzeichnisse, die Skripte oder CGIs enthalten, nur für den Root-Benutzer vergeben. Dies erreichen Sie durch die folgenden Befehle:

chown root <directory_name>
chmod 755 <directory_name>

Wichtig

Prüfen Sie außerdem, dass jegliche Skripte, die Sie ausführen, auch wie beabsichtigt funktionieren, bevor sie in Produktion gegeben werden.

9.1.6. Sicherung von FTP

Das File Transport Protocol oder FTP ist ein älteres TCP-Protokoll, das zum Übertragen von Dateien über ein Netzwerk entwickelt wurde. Da alle Transaktionen mit dem Server, einschließlich der Benutzerauthentifizierung, unverschlüsselt ablaufen, wird es als ein unsicheres Protokoll betrachtet und sollte sorgfältig konfiguriert werden.

Red Hat Enterprise Linux bietet drei FTP-Server.

  • gssftpd — Ein für Kerberos aktivierter, xinetd-basierter FTP-Daemon, der keine Authentifizierungsinformationen über das Netzwerk überträgt.

  • Red Hat Content Accelerator (tux) — Ein Kernel-Space Webserver mit FTP Fähigkeiten.

  • vsftpd — Eine selbstständige, sicherheitsorientierte Implementierung des FTP-Dienstes.

Die folgenden Sicherheitsrichtlinien gelten für das Einrichten des vsftpd-FTP-Dienstes.

9.1.6.1. FTP-Grußbanner

Bevor der Benutzername und das Passwort eingereicht werden, erhalten alle Benutzer ein Grußbanner. Standardmäßig enthält dieses Banner Versionsinformationen, die für Cracker nützlich sein können, die Schwachstellen in einem System herausfinden wollen.

Um dieses Grußbanner für vsftpd zu ändern, fügen Sie die folgende Direktive zu /etc/vsftpd/vsftpd.conf hinzu:

ftpd_banner=<insert_greeting_here>

Ersetzen Sie <insert_greeting_here> in der obigen Direktive durch den Text Ihrer Begrüßung.

Für mehrzeilige Banner ist es ratsam, eine Bannerdatei zu verwenden. Um die Verwaltung von mehreren Bannern zu vereinfachen, speichern Sie alle Banner in einem neuen Verzeichnis mit dem Namen /etc/banners/. Die Bannerdatei für FTP-Verbindungen in diesem Beispiel ist /etc/banners/ftp.msg. Das nachfolgende Beispiel zeigt, wie eine derartige Datei aussehen kann:

######### # Hello, all activity on ftp.example.com is logged. #########

Hinweis

Es ist nicht nötig, jede Zeile der Datei mit 220, wie in Abschnitt 9.1.1.1.1, „TCP-Wrapper und Verbindungs-Banner“ beschrieben, zu beginnen.

Um auf diese Grußbannerdatei für vsftpd zu referenzieren, fügen Sie folgende Direktive zu /etc/vsftpd/vsftpd.conf hinzu:

banner_file=/etc/banners/ftp.msg

Es ist auch möglich, zusätzliche Banner für eingehende Verbindungen mittels TCP Wrappern zu senden. Dies wird unter Abschnitt 9.1.1.1.1, „TCP-Wrapper und Verbindungs-Banner“ beschrieben.

9.1.6.2. Anonymer Zugang

Die Existenz des /var/ftp/-Verzeichnisses aktiviert den anonymen Account.

Der einfachste Weg, dieses Verzeichnis zu erstellen, ist durch die Installation des vsftpd-Pakets. Dieses Paket erstellt einen Verzeichnisbaum für anonyme Benutzer und vergibt anonymen Benutzern lediglich Lese-Berechtigungen für Verzeichnisse.

Standardmäßig können anonyme Benutzer nicht in Verzeichnisse schreiben.

Vorsicht

Wenn Sie einen anonymen Zugang zu FTP-Servern zulassen, sollten Sie darauf achten, wo Sie empfindliche Daten speichern.

9.1.6.2.1. Anonymes Hochladen

Wenn Sie anonymen Benutzern erlauben möchten, Dateien hochzuladen, wird empfohlen, ein Verzeichnis nur mit Schreibberechtigung innerhalb von /var/ftp/pub/ anzulegen.

Verwenden Sie dafür folgenden Befehl:

mkdir /var/ftp/pub/upload

Ändern Sie dann wie folgt die Berechtigungen, so dass anonyme Benutzer nicht sehen können, was sich innerhalb des Verzeichnisses befindet:

chmod 730 /var/ftp/pub/upload

Eine detaillierte Auflistung des Verzeichnisses sollte wie folgt aussehen:

drwx-wx---    2 root     ftp          4096 Feb 13 20:05 upload

Achtung

Administratoren, die anonymen Benutzern Lese- und Schreibberechtigungen für Verzeichnisse geben, stellen häufig fest, dass ihr Server dann zu einer Fundgrube gestohlener Software wird.

Fügen Sie zusätzlich unter vsftpd die folgende Zeile in die Datei /etc/vsftpd/vsftpd.conf ein:

anon_upload_enable=YES

9.1.6.3. Benutzeraccounts

Da FTP unverschlüsselt Benutzernamen und Passwörter über unsichere Netzwerke zur Authentifizierung überträgt, ist es ratsam, Systembenutzern den Zugang zum Server von den Benutzeraccounts aus zu verbieten.

Um Benutzeraccounts in vsftpd zu deaktivieren, fügen Sie die folgende Direktive zu /etc/vsftpd/vsftpd.conf hinzu:

local_enable=NO
9.1.6.3.1. Benutzeraccounts einschränken

Es ist auch möglich, Benutzeraccounts innerhalb jeden Dienstes direkt zu deaktivieren.

Um bestimmte Benutzeraccounts in vsftpd zu deaktivieren, fügen Sie den Benutzernamen zu /etc/vsftpd.ftpusers hinzu.

9.1.6.4. TCP Wrapper für die Zugriffskontrolle

Sie können TCP Wrapper für die Zugriffskontrolle zu den FTP-Daemons wie unter Abschnitt 9.1.1.1, „Erhöhung der Sicherheit mit TCP-Wrappern“ beschrieben einsetzen.

9.1.7. Sicherung von Sendmail

Sendmail ist ein Mail Transport Agent (MTA), der das Simple Mail Transport Protocol (SMTP) zur Übertragung elektronischer Nachrichten zwischen anderen MTAs und für das E-Mailen an Clients oder Delivery Agents einsetzt. Obwohl viele MTAs den Verkehr untereinander verschlüsseln können, tun dies viele nicht, so dass das Versenden von E-Mails über ein öffentliches Netzwerk als eine von Natur aus unsichere Form der Kommunikation betrachtet wird.

Es wird empfohlen, dass Sie sich mit den folgenden Angelegenheiten auseinandersetzen, wenn Sie die Implementierung eines Sendmail-Servers planen.

9.1.7.1. Limitierung einer Denial-of-Service-Attacke

Aufgrund der Beschaffenheit von E-Mail kann ein dazu entschlossener Angreifer den Server leicht mit E-Mails überfluten und so ein Denial-of-Service verursachen. Indem Sie in die folgenden Direktiven in /etc/mail/sendmail.mc limitieren, kann die Wirksamkeit solcher Attacken stark abgeschwächt werden.

  • confCONNECTION_RATE_THROTTLE — Die Anzahl der Verbindungen, die der Server pro Sekunde empfangen kann. Standardmäßig begrenzt Sendmail die Zahl der Verbindungen nicht. Wird eine Grenze gesetzt, werden darüber hinaus gehende Verbindungen verzögert.

  • confMAX_DAEMON_CHILDREN — Die maximale Anzahl von unter geordneten Prozessen, die vom Server erzeugt werden können. Standardmäßig begrenzt Sendmail die Anzahl der untergeordneten Prozesse nicht. Wird eine Grenze gesetzt und diese erreicht, werden alle weiteren Verbindungen verzögert.

  • confMIN_FREE_BLOCKS — Die minimale Anzahl freier Blöcke, die für den Server zur Verfügung stehen müssen, um E-Mail empfangen zu können. Der Standard ist 100 Blöcke.

  • confMAX_HEADERS_LENGTH — Die maximal akzeptierte Größe (in Bytes) für einen Nachrichtenkopf.

  • confMAX_MESSAGE_SIZE — Die maximal akzeptierte Größe (in Bytes) pro Nachricht.

9.1.7.2. NFS und Sendmail

Legen Sie niemals das Mail-Spool-Verzeichnis, /var/spool/mail/, auf einem durch NFS gemeinsam genutzten Datenträger ab.

Da NFSv2 und NFSv3 keine Kontrolle über Benutzer- und Gruppen-IDs haben, können zwei oder mehr Benutzer die gleiche UID besitzen und daher jeweils die E-Mail des anderen lesen.

Hinweis

Mit NFSv4 und Kerberos ist dies nicht der Fall, da das SECRPC_GSS-Kernel-Modul keine UID-basierte Authentifizierung anwendet. Allerdings wird es als professionelles Vorgehen angesehen, das Mail-Spool-Verzeichnis nicht auf einem durch NFS gemeinsam genutzten Datenträger abzulegen.

9.1.7.3. Nur-Mail Benutzer

Um Exploits des Sendmail-Servers durch lokale Benutzer zu vermeiden, ist es am besten, wenn Mail-Benutzer auf den Sendmail-Server nur über ein E-Mail-Programm zugreifen. Shell-Accounts auf dem Mail-Server sollten nicht erlaubt sein, und alle Benutzer-Shells in der Datei /etc/passwd sollten auf /sbin/nologin gesetzt sein (evtl. unter Ausnahme des Root-Benutzers).

9.1.8. Bestätigen, welche Ports auf Verbindungen abhören

Nachdem Sie die Netzwerk-Dienste konfiguriert haben, ist es wichtig, zu überprüfen, welche Ports die Netzwerkschnittstellen im System tatsächlich abhören. Alle offenen Ports können Beweis für ein unbefugtes Eindringen sein.

Es gibt zwei grundlegende Herangehensweisen für das Auflisten der Ports, die das Netzwerk abhören. Die weniger zuverlässige Methode ist, den Netzwerkstack durch Befehle wie netstat -an oder lsof -i abzufragen. Diese Methode ist daher unzuverlässiger, da die Programme sich nicht vom Netzwerk aus mit dem Computer verbinden, sondern eher prüfen, was auf dem System ausgeführt wird. Aus diesen Grund sind diese Applikationen häufig Ziel für Ersetzungen durch Angreifer. Durch diese Methode versuchen Cracker ihre Spuren zu verwischen, wenn diese unbefugt Netzwerkports geöffnet haben, in dem sie die Anwendungen netstat und lsof durch ihre eigenen, modifizierten Versionen ersetzen.

Ein etwas zuverlässigerer Weg für das Prüfen, welche Ports das Netzwerk abhören, ist mit einem Port-Scanner wie z.B. nmap.

Der folgende Befehl, von einer Konsole aus eingegeben, stellt fest, welche Ports auf TCP-Verbindungen aus dem Netzwerk mithören.

nmap -sT -O localhost

Die Ausgabe dieses Befehls sieht wie folgt aus:

Starting nmap 3.55 ( http://www.insecure.org/nmap/ ) at 2004-09-24 13:49 EDT
Interesting ports on localhost.localdomain (127.0.0.1):
(The 1653 ports scanned but not shown below are in state: closed)
PORT      STATE SERVICE
22/tcp    open  ssh 
25/tcp    open  smtp
111/tcp   open  rpcbind
113/tcp   open  auth
631/tcp   open  ipp
834/tcp   open  unknown
2601/tcp  open  zebra
32774/tcp open  sometimes-rpc11
Device type: general purpose
Running: Linux 2.4.X|2.5.X|2.6.X OS details: Linux 2.5.25 - 2.6.3 or Gentoo 1.2 Linux 2.4.19 rc1-rc7)
Uptime 12.857 days (since Sat Sep 11 17:16:20 2004)

Nmap run completed -- 1 IP address (1 host up) scanned in 5.190 seconds

Diese Ausgabe zeigt, dass das System portmap ausführt, dadurch, dass der Dienst sunrpc vorhanden ist. Es wird jedoch auch ein unbekannter Dienst auf Port 834 ausgeführt. Um zu prüfen, ob dieser Port zu der offiziellen Liste bekannter Dienste gehört, geben Sie folgendes ein:

cat /etc/services | grep 834

Dieser Befehl erhält keine Ausgabe. Dies bedeutet, dass der Port im reservierten Bereich (0 bis 1023) liegt und Root-Zugang zum Öffnen benötigt, jedoch nicht mit einem bekannten Dienste assoziiert ist.

Als nächstes können Sie Informationen über den Port mittels netstat oder lsof abrufen. Um Port 834 mit Hilfe vonnetstat zu prüfen, geben Sie folgenden Befehl ein:

netstat -anp | grep 834

Dieser Befehl erhält folgende Ausgabe:

tcp   0    0 0.0.0.0:834    0.0.0.0:*   LISTEN   653/ypbind

Die Existenz eines offenen Ports in netstat ist beruhigend, da ein Cracker, der einen Port heimlich auf einem geknackten System öffnet, das Anzeigen des Ports durch diesen Befehl höchstwahrscheinlich nicht zulassen würde. Desweiteren zeigt die Option [p] die Prozess-ID (PID) des Dienstes an, der diesen Port geöffnet hat. In diesem Fall gehört der offene Port zu ypbind (NIS), ein RPC-Dienst, der zusammen mit dem portmap-Dienst abläuft.

Der lsof-Befehl zeigt ähnliche Informationen wie der Befehl netstat an, da es auch offene Ports Diensten zuordnen kann:

lsof -i | grep 834

Nachfolgend finden Sie den betreffenden Teil der Ausgabe für diesen Befehl:

ypbind      653        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      655        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      656        0    7u  IPv4       1319                 TCP *:834 (LISTEN)
ypbind      657        0    7u  IPv4       1319                 TCP *:834 (LISTEN)

Wie Sie sehen, können diese Tools eine Menge Informationen über den Status von Diensten auf einem Computer geben. Diese Tools sind flexibel und liefern eine Vielzahl von Informationen zu den Netzwerkdiensten und zur Konfiguration. Werfen Sie einen Block auf die Handbuchseiten zu lsof, netstat, nmap und services für weitere Informationen.

9.2. Pluggable Authentication Modules (PAM)

Programme, die Benutzern den Zugriff auf ein System gewähren, nutzen Authentifizierung, um sich ihre Identität gegenseitig zu verifizieren (d.h. festzustellen, ob ein Benutzer ist, was er vorgibt zu sein).

Historisch haben alle diese Programme ihren eigenen Weg, die Authentifizierung durchzuführen. Unter Red Hat Enterprise Linux sind viele dieser Programme so konfiguriert, dass sie einen zentralisierten Authentifizierungsprozess benutzen, der Pluggable Authentication Modules (PAM) genannt wird.

PAM benutzt eine auswechselbare, modulare Architektur, welche dem System-Administrator einen hohen Grad an Flexibilität beim Einstellen der Authentifizierungsregeln des Systems bereit stellt.

In den meisten Situationen reicht die Standard PAM Konfigurationsdateien für eine Applikation, welche PAM verwendet, aus. Hin und wieder kann es allerdings notwendig werden, eine PAM Konfigurationsdatei zu ändern. Da eine falsche Einstellung in der PAM Konfigurationsdatei die Systemsicherheit kompromittieren kann, sollten Sie mit der Struktur der Konfigurationsdateien von PAM vertraut sein, bevor Sie eventuelle Änderungen vornehmen (weitere Informationen finden Sie unter Abschnitt 9.2.3, „Format der PAM Konfigurationsdatei“).

9.2.1. Vorteile von PAM

PAM bietet die folgenden Vorteile:

  • ein gemeinsames Authentifikationsschema, das für viele verschiedene Anwendungen verwendet werden kann.

  • große Flexibilität und Kontrolle der Authentifizierung sowohl für Administratoren als auch Entwicklern von Anwendungen.

  • eine einfache, voll dokumentierte Bibliothek, die es Entwicklern erlaubt, Programme zu schreiben, ohne ihre eigenen Authentifikationsschemata entwickeln zu müssen.

9.2.2. PAM-Konfigurationsdateien

Das Verzeichnis /etc/pam.d/ enthält die PAM-Konfigurationsdateien. In früheren Versionen von PAM wurde die Datei /etc/pam.conf verwendet, die aber inzwischen veraltet ist und daher nur verwendet wird, wenn das Verzeichnis /etc/pam.d/ nicht existiert.

9.2.2.1. PAM Servicedateien

Für Applikationen oder Dienste, die PAM verwenden, existiert eine Datei im Verzeichnis /etc/pam.d/. Jede dieser Dateien ist nach dem Dienst benannt, für welchen diese den Zugriff kontrolliert.

Das Programm, das PAM nutzt, ist dafür zuständig, seinen Dienstnamen zu bestimmen und die entsprechende PAM-Konfigurationsdatei im Verzeichnis /etc/pam.d/ abzulegen. Das Programm login, zum Beispiel, definiert seinen Dienstnamen als /etc/pam.d/login.

9.2.3. Format der PAM Konfigurationsdatei

Jede PAM Konfigurationsdatei enthält eine Gruppe von Anweisungen, welche wie folgt formattiert sind:

<module interface><control flag><module name><module arguments>

Jedes dieser Elemente wird in den folgenden Abschnitten erklärt.

9.2.3.1. Modul-Schnittstellen

Es gibt vier Typen von PAM-Modulschnittstellen, welche den unterschiedlichen Aspekten des Authentifizierungsprozesses entsprechen:

  • auth — Diese Modulschnittstelle authentifiziert den User. Zum Beispiel erfragt und überprüft diese das Passwort. Module mit dieser Schnittstelle können ebenso Berechtigungsnachweise festlegen, wie z.B. Mitgliedschaft in einer Gruppe oder Kerberos-Tickets.

  • account — Diese Modulschnittstelle stellt sicher, dass der Zugriff erlaubt ist. Zum Beispiel können sie prüfen, ob der Account abgelaufen ist, oder ob der Benutzer zur Anmeldung um diese Uhrzeit zugelassen ist.

  • password — Diese Modulschnittstelle wird zur Abänderung von Benutzerpasswörtern verwendet.

  • session — Diese Modulschnittstelle konfiguriert und verwaltet Benutzersitzungen. Module dieser Schnittstelle können auch zusätzliche, für den Zugriff benötigte Tasks durchführen, wie beispielsweise das Mounten des Home-Verzeichnisses des Benutzers oder die Aktivierung seiner Mailbox.

Anmerkung

Ein einzelnes Modul kann jedes oder alle der o.g. Modulschnittstellen bereitstellen. Zum Beispiel pam_unix.so liefert alle vier Modulschnittstellen.

In einer PAM Konfigurationsdatei wird als Erstes die Modulschnittstelle bestimmt. Eine typische Zeile in einer Konfiguration könnte wie folgt aussehen:

auth        required        pam_unix.so

Dies weist PAM an, die auth-Schnittstelle des pam_unix.so Moduls zu verwenden.

9.2.3.1.1. Modul-Schnittstellen stapeln

Anweisungen der Modulschnittstellen können gestapelt werden, so dass mehrere Module zu einem Zweck verwendet werden können. Deshalb ist die Reihenfolge in der die Module aufgelistet werden für den Authentifikationsprozess sehr wichtig.

Das Stapeln macht es dem Administrator einfacher, zu erkennen, dass bereits einige Voraussetzungen erfüllt sind, bevor die Benutzerauthentifizierung stattgefunden hat. Zum Beispiel verwendet der Befehl reboot in der Regel mehrere gestapelte Module, wie in der PAM-Konfigurationsdatei zu sehen:

[root@MyServer ~]# cat /etc/pam.d/reboot
#%PAM-1.0
auth        sufficient        pam_rootok.so
auth        required        pam_console.so
#auth        include        system-auth
account        required        pam_permit.so
  • Die erste Zeile ist ein Kommentar und wird nicht abgearbeitet.

  • auth sufficient pam_rootok.so — Diese Zeile verwendet das Modul pam_rootok.so um zu überprüfen, ob der aktuelle Benutzer Root ist, indem es verifiziert, das dessen UID 0 ist. Ist dieser Test erfolgreich, werden keine weiteren Module herangezogen und der Befehl ausgeführt. Falls der Test scheitert, wird das nächste Modul konsultiert.

  • auth required pam_console.so — Diese Zeile verwendet das Modul pam_console.so, um zu versuchen, den Benutzer zu authentifizieren. Falls der Benutzer bereits an der Konsole angemeldet ist, überprüft pam_console.so, ob im Verzeichnis /etc/security/console.apps/ eine Datei mit demselben Namen wie der Systemdienst existiert (Neustart). Wenn eine solche Datei existiert, ist die Authentifizierung erfolgreich und die Kontrolle wird an das nächste Modul übergeben.

  • #auth include system-auth — Diese Zeile ist ein Kommentar und wird nicht abgearbeitet.

  • account required pam_permit.so — Diese Zeile verwendet das Modul pam_permit.so, um dem Root-Benutzer oder jeglichen an der Konsole angemeldeten Benutzern das Neustarten des Systems zu gestatten.

9.2.3.2. Steuerflags

Alle PAM-Module erstellen bei einer Überprüfung Fehler- oder Erfolgsmeldungen. Die Steuerflags geben PAM an, was mit diesen Ergebnissen geschehen soll. Während Module in einer bestimmten Reihenfolge gestapelt werden können, können Sie mit den Steuerflags einstellen, wie wichtig der Erfolg oder das Fehlschlagen des entsprechenden Moduls für die Authentifizierung des gesamten Dienstes ist.

Es gibt vier vordefinierte Steuerflags:

  • required — Solche Module müssen erfolgreich überprüft werden, bevor die Authentifizierung erfolgen kann. Wenn der Test an dieser Stelle scheitert, wird der Benutzer darüber nicht eher informiert, bis auch alle anderen Module, welche die gleiche Schnittstelle referenzieren, überprüft wurden.

  • requisite — Solche Module müssen ebenfalls überprüft werden, bevor die Authentifizierung erfolgreich sein kann. Wenn der Test an dieser Stelle scheitert, wird der Benutzer hierüber sofort informiert. Diese Mitteilung zeigt das erste fehlerhafte required oder requisite Modul an.

  • sufficient — Bei solchen Modulen werden Fehler ignoriert. Wenn ein sufficient Modul jedoch erfolgreich überprüft wurde, und kein required Modul fehlschlägt, werden keine weiteren Überprüfungen dieser Modulschnittstelle benötigt und diese wird erfolgreich authentifiziert.

  • optional — Solche Module sind für die erfolgreiche oder fehlgeschlagene Authentifizierung dieser Modulschnittstelle nicht von Bedeutung. Diese werden nur dann wichtig, wenn kein anderes Modul dieser Modulschnittstelle erfolgreich war oder fehlgeschlagen ist.

Wichtig

Die Reihenfolge, in der required Module aufgerufen werden, spielt keine Rolle. Bei den Steuerflags sufficient und requisite ist die Reihenfolge allerdings wichtig.

Eine neuere Syntax für Steuerflags für eine präzisere Kontrolle ist nun für PAM verfügbar.

Die Handbuch-Seite zu pam.d und die Dokumentationen im Verzeichnis /usr/share/doc/pam-<version-number>/ (wobei <version-number> die Versionsnummer von PAM auf Ihrem System darstellt), beschreiben diese neue Syntax im Detail.

9.2.3.3. Modulname

Der Modulname liefert PAM den Namen des Pluggable Moduls, das die angegebene Modulschnittstelle enthält. Bei älteren Versionen von Red Hat Enterprise Linux wurde der vollständige Pfad zum Modul in der PAM-Konfigurationsdatei angegeben. Seit dem Aufkommen von Multilib-Systemen, die 64-Bit PAM Module im Verzeichnis /lib64/security/ speichern, wird der Verzeichnisname jedoch weggelassen, da die Applikation mit der richtigen Version von libpam verknüpft ist, welche die richtige Version des Moduls feststellen kann.

9.2.3.4. Modul-Argumente

PAM verwendet arguments, um während der Authentifizierung Informationen über eine bestimmte Modulschnittstelle an ein "Pluggable Module" zu übermitteln.

Zum Beispiel verwendet das Modul pam_userdb.so versteckte Dateien aus der Berkeley DB-Datei, um den Benutzer zu authentifizieren. Berkeley DB ist eine in vielen Anwendungen eingebundenes Open-Source Datenbank-System. Das Modul verwendet ein db Argument, welches die von Berkeley DB für den angeforderten Dienst zu verwendende Datenbank angibt.

Nachfolgende pam_userdb.so Zeile ist typisch für eine PAM-Konfiguration. Hier stellt <path-to-file> den absoluten Pfad zur Berkeley DB Datenbankdatei dar:

auth        required        pam_userdb.so db=<path-to-file>

Ungültige Argumente werden üblicherweise ignoriert und wirken sich auch nicht auf den Erfolg oder Misserfolg eines PAM-Moduls aus. Wenn ein ungültiges Argument auftaucht, erscheint jedoch normalerweise eine Fehlermeldung in der Datei /var/log/secure.

9.2.4. Beispiele für PAM-Konfigurationsdateien

Eine Konfigurationsdatei einer PAM-Anwendung sieht z.B. wie folgt aus:

#%PAM-1.0
auth        required  pam_securetty.so
auth        required  pam_unix.so nullok
auth        required  pam_nologin.so
account        required  pam_unix.so
password        required  pam_cracklib.so retry=3
password        required  pam_unix.so shadow nullok use_authtok
session        required  pam_unix.so
  • Die erste Zeile ist ein Kommentar, was durch das Hash-Zeichen (#) am Anfang der Zeile erkenntlich ist.

  • Die Zeilen zwei bis vier stellen drei Module in den Stack für die Authentifizierung bei der Anmeldung.

    auth required pam_securetty.soWenn der Benutzer sich als Root anzumelden versucht, stellt dieses Modul sicher, dass das Terminal, an dem er sich anmeldet, in der Datei /etc/securetty aufgeführt ist, falls eine solche Datei existiert.

    Wenn das tty nicht in der Datei aufgelistet ist, schlägt jeder Anmeldeversuch als Root fehl mit der Meldung Login incorrect.

    auth required pam_unix.so nullok — Dieses Modul fragt den Benutzer nach einem Passwort und überprüft dieses Passwort anhand der Information in /etc/passwd und in /etc/shadow, falls vorhanden.

    • Das Argument nullok weist das Modul pam_unix.so an, ein leeres Passwort zuzulassen.

  • auth required pam_nologin.so — Dies ist der letzte Schritt der Authentifizierung. Es wird geprüft, ob die Datei /etc/nologin existiert. Falls sie vorhanden und der Benutzer nicht als Root angemeldet ist, schlägt die Authentifizierung fehl.

    Anmerkung

    In diesem Beispiel werden alle drei auth Module überprüft, auch wenn schon beim ersten auth Modul Fehler auftreten. Dies hindert einen Benutzer an der Erkenntnis, weshalb seine Authentifizierung abgelehnt wurde. Solch ein Wissen kann in der Hand eines Angreizu weiteren Schlussfolgerungen führen, wie das System geknackt werden kann.

  • account required pam_unix.so — Dieses Modul übernimmt jegliche Prüfung des Benutzeraccounts. Wenn z.B. Shadow-Passwörter aktiviert wurden, überprüft das Modul pam_unix.so, ob der Account abgelaufen ist oder ob der Benutzer keine Passwortänderung vorgenommen hat und die Kulanzperiode für eine Änderung abgelaufen ist.

  • password required pam_cracklib.so retry=3 — Ist ein Passwort abgelaufen, fordert die Passwort-Komponente despam_cracklib.so Moduls zur Eingabe eines neuen Passworts auf. Zusätzlich wird das neue Passwort getestet, um festzustellen, ob es einfach durch ein Wörterbuch-basiertes Programm zum Erkennen von Passwörtern erkannt werden kann.

    • Der Parameter retry=3 gibt an, dass im Falle eines Scheiterns des Tests beim ersten Mal, der Benutzer noch zwei weitere Chancen besitzt, um ein sicheres Passwort zu erstellen.

  • password required pam_unix.so shadow nullok use_authtok — Diese Zeile gibt an, dass im Falle einer Benutzer-Passwortänderung durch das Programm die Schnittstelle password des Moduls pam_unix.so verwendet werden soll.

    • Das Argument shadow teilt dem Modul mit, beim Updaten eines Benutzer-Passworts ein Shadow-Passwort zu erstellen.

    • Das Argument nullok weist das Modul an, dem Benutzer zu erlauben, sein Passwort von einem leeren Passwort zu ändern. Andernfalls wird ein Null-Passwort als Account-Sperre betrachtet.

    • Das letzte Argument dieser Zeile use_authtok ist ein gutes Beispiel für die Wichtigkeit der Reihenfolge beim Stapeln von PAM-Modulen. Dieses Argument weist das Modul an, den Benutzer nicht zur Eingabe eines neuen Passworts aufzufordern. Stattdessen wird jedes Passwort akzeptiert, das von vorherigen Passwort-Modulen verwendet wurde. Auf diese Weise müssen allen neuen Passwörter den pam_cracklib.so-Test für sichere Passwörter durchlaufen, bevor sie akzeptiert werden.

  • session required pam_unix.so — Die letzte Zeile weist die Sitzungsschnittstelle des Moduls pam_unix.soan, die Sitzung zu verwalten. Dieses Modul protokolliert bei jedem Start und Ende einer Sitzung den Benutzernamen und den Dienst-Typ in die Datei /var/log/secure. Wenn Sie weitere Funktionen benötigen, kann es durch das Stapeln mit anderen Sitzungsmodulen ergänzt werden.

9.2.5. Module erstellen

Sie können neue PAM-Module jederzeit erstellen oder hinzufügen, für die Verwendung mit PAM-bewussten Anwendungen.

Ein Entwickler entwickelt z.B. eine Methode zur Erstellung von Einmal-Passwörtern und schreibt ein PAM-Modul für dessen Unterstützung. Programme, die PAM benutzen, können dieses neue Modul und Passwort-Methode umgehend nutzen, ohne neu kompiliert oder anderweitig modifiziert zu werden.

Dies ermöglicht es Entwicklern und Systemadministratoren, Authentifizierungsmethoden für verschiedene Programme einzusetzen und zu testen, ohne sie neu zu kompilieren.

Dokumentation zum Schreiben von Modulen finden Sie im Verzeichnis /usr/share/doc/pam-<version-number>/ (wobei <version-number> die Versionsnummer von PAM auf Ihrem System ist).

9.2.6. PAM und Administrative-Credential-Caching

Eine Reihe grafischer Verwaltungstools unter Red Hat Enterprise Linux geben Benutzern erweiterte Rechte über das Modul pam_timestamp.so für eine Zeitdauer von bis zu 5 Minuten. Es ist wichtig zu verstehen, wie dieser Mechanismus funktioniert, denn wenn ein Benutzer sich vom Terminal entfernt, während pam_timestamp.so ausgeführt wird, ist der Rechner offen für Manipulationen von jedem mit physischem Zugang zur Konsole.

Unter dem PAM Timestamp-Schema fragt die grafische Verwaltungsapplikation den Benutzer beim Start nach dem Root-Passwort. Nach der Authentifizierung, erzeugt das pam_timestamp.so-Modul standardmäßig eine Zeitstempeldatei im Verzeichnis /var/run/sudo/. Sollte diese Datei bereits existieren, werden andere grafische Verwaltungstools nicht nach dem Passwort fragen. Stattdessen aktualisiert das pam_timestamp.so-Modul die Zeitstempeldatei, wodurch dem Benutzer weitere fünf Minuten an unbehelligtem, administrativem Zugriff gewährt werden.

Sie können den gegenwärtigen Status der Zeitstempeldatei mit Hilfe der Datei /var/run/sudo/<user> verifizieren. Für den Desktop ist unknown:root die relevante Datei. Wenn diese aktuell und ihr Zeitstempel weniger als fünf Minuten alt ist, sind die Berechtigungsnachweise gültig.

Wenn eine Zeitstempeldatei existiert, wird dies durch ein Authentifizierungssymbol angezeigt, das im Benachrichtigungsbereich des Bedienungsfelds erscheint.

Das Authentifizierungssymbol

Illustration des Authentifizierungssymbols.

Abbildung 9.1. Das Authentifizierungssymbol

9.2.6.1. Entferne die Zeitstempeldatei

Es wird empfohlen, dass bevor Sie sich von einer Konsole entfernen, an der PAM läuft, die Zeitstempeldatei gelöscht wird. Um dies innerhalb der grafischen Umgebung zu tun, klicken Sie auf das Authentifizierungssymbol im Panel. Wenn das Dialog-Fenster erscheint, klicken Sie den Button Autorisierung vergessen.

Authentifizierungs-Dialog ablehnen

Illustration des Dialogfelds bei der Abweisung der Authentifizierung.

Abbildung 9.2. Authentifizierungs-Dialog ablehnen

Sie sollten Folgendes in Bezug auf die PAM Zeitstempeldatei beachten:

  • Wenn von einem Remote-System aus mit ssh angemeldet, benutzen Sie den Befehl /sbin/pam_timestamp_check -k root, um die Zeitstempeldatei zu löschen.

  • Sie müssen den Befehl /sbin/pam_timestamp_check -k root in demselben Fenster ausführen, in dem Sie die privilegierte Anwendung gestartet haben.

  • Nur der Benutzer, der ursprünglich daspam_timestamp.so-Modul aufgerufen hat, kann den Befehl /sbin/pam_timestamp_check verwenden. Melden Sie sich nicht als Root an, um diesen Befehl auszuführen.

  • Wenn Sie die Berechtigungsnachweise auf dem Desktop eliminieren möchten (ohne die Aktion Autorisation vergessen auf dem Symbol zu verwenden), benützen Sie folgenden Befehl:

    /sbin/pam_timestamp_check -k root </dev/null >/dev/null 2>/dev/null
    

    Wenn die Ausführung dieses Befehls scheitert, werden lediglich die Berechtigungsnachweise (falls vorhanden) des pty, in dem Sie den Befehl ausführen, entfernt.

Für Informationen zum Löschen der Zeitstempeldatei mittels pam_timestamp_check, sehen Sie die Handbuch-Seiten von pam_timestamp_check.

9.2.6.2. Allgemeine pam_timestamp-Direktiven

Das pam_timestamp.so Modul akzeptiert verschiedene Direktiven. Nachfolgend sind die zwei am häufigsten verwendeten aufgeführt:

  • timestamp_timeout — Die Anzahl der Sekunden, die die Timestap-Datei gültig ist. Der Standardwert ist 300 Sekunden (fünf Minuten).

  • timestampdir — Gibt das Verzeichnis an, in dem die Zeitstempeldatei gespeichert ist. Der Standardwert ist /var/run/sudo.

Für weitere Informationen zur Kontrolle des pam_timestamp.so-Moduls, siehe Abschnitt 9.2.8.1, „Installierte Dokumentationen“.

9.2.7. PAM und Besitzrechte von Geräten

Bei Red Hat Enterprise Linux kann der erste Benutzer, der sich an der physikalischen Konsole des Rechners anmeldet, bestimmte Geräte zu manipulieren und bestimmte Tasks, die normalerweise für den Root-Benutzer reserviert sind, auszuführen. Dies wird von einem PAM-Modul namens pam_console.so kontrolliert.

9.2.7.1. Besitzrechte von Geräten

Wenn sich ein Benutzer bei einem Red Hat Enterprise Linux System anmeldet, wird das pam_console.so Modul durch login oder die grafischen Anmeldeprogramme gdm und kdm aufgerufen. Ist dieser Benutzer der erste Benutzer, der sich an der physikalischen Konsole anmeldet — Konsolenbenutzer genannt —, bewilligt das Modul dem Benutzer das Besitzrecht einer ganzen Reihe von Geräten, die normalerweise im Besitz von Root sind. Der Konsolenbenutzer besitzt diese Geräte solange, bis die letzte lokale Sitzung für diesen Benutzer beendet ist. Sobald sich der Benutzer abgemeldet hat, wird das Besitzrecht auf seinen Standardwert zurückgesetzt.

Es sind alle Geräte betroffen, nicht nur Soundkarten, Disketten-Laufwerke und CD-ROM Laufwerke.

Dadurch hat der lokale Benutzer die Möglichkeit, diese Geräte zu bearbeiten, ohne als Root angemeldet zu sein, was allgemeine Tasks für den Konsolen-Benutzer vereinfacht.

Sie können die Liste der Geräte, die von pam_console.so kontrolliert werden, durch Bearbeiten der folgenden Dateien modifizieren:

  • /etc/security/console.perms

  • /etc/security/console.perms.d/50-default.perms

Sie können die Berechtigungen anderer Geräte als diejenigen, die in oben aufgeführten Dateien aufgelistet sind, ändern, oder die angegebenen Standardwerte außer Kraft setzen. Anstatt die Datei 50-default.perms zu modifizieren, sollten Sie eine neue Datei (z.B. xx-name.perms) anlegen und die erforderlichen Änderungen vornehmen. Der Name der neuen Standarddatei muss mit einer Zahl beginnen, die höher als 50 ist (z.B. 51-default.perms). Dies setzt die Standardwerte in der Datei 50-default.perms außer Kraft.

Warnung

Wenn die Konfigurationsdatei des gdm, kdm, oder xdm Display-Managers geändert wurde, um Remote-Benutzern den Zugriff zu gewähren, und der Host für den Start in Runlevel 5 konfiguriert ist, dann wird empfohlen, die <console> und <xconsole>-Anweisungen in der Datei /etc/security/console.perms in folgende Werte zu ändern:

<console>=tty[0-9][0-9]* vc/[0-9][0-9]* :0\.[0-9] :0 
<xconsole>=:0\.[0-9] :0

Dadurch werden Remote-Benutzer davon abhalten, Zugriff auf Geräte und Applikationen mit eingeschränktem Zugang auf dem Rechner zu erhalten.

Wenn die Konfigurationsdatei des gdm, kdm, oder xdm Display-Managers geändert wurde, um Remote-Benutzern den Zugriff zu gewähren, und der Host für den Start in Runlevel 5 konfiguriert ist, dann wird empfohlen, die <xconsole>-Direktive komplett zu entfernen und die <console>-Direktive in der Datei /etc/security/console.perms in folgenden Wert zu ändern:

<console>=tty[0-9][0-9]* vc/[0-9][0-9]*

9.2.7.2. Zugriff zu Applikationen

Der Konsolenbenutzer hat ebenfalls Zugriff auf bestimmte Programme, die zur Verwendung im Verzeichnis /etc/security/console.apps/ konfiguriert sind.

Dieses Verzeichnis enthält Konfigurationsdateien, die es dem Konsolenbenutzer ermöglichen, bestimmte Anwendungen in /sbin und /usr/sbin auszuführen.

Diese Konfigurationsdateien besitzen den gleichen Namen wie die Anwendungen, die diese einrichten.

Eine wichtige Gruppe von Applikationen, zu denen der Konsolenbenutzer Zugriff hat, sind folgende drei Programme zum Abschalten und Neubooten des Systems:

  • /sbin/halt

  • /sbin/reboot

  • /sbin/poweroff

Da diese Programme Applikationen sind, die PAM verwenden, benötigen sie das pam_console.so Modul als Voraussetzung eines Einsatzes.

Für weitere Informationen, siehe Abschnitt 9.2.8.1, „Installierte Dokumentationen“.

9.2.8. Zusätzliche Ressourcen

Folgend finden Sie eine Aufstellung von Informationsquellen zur Verwendung und Konfiguration von PAM. Zusätzlich zu diesen Quellen sollten Sie sich mit den PAM-Konfigurationsdateien in Ihrem System vertraut machen, um deren Aufbau besser zu verstehen.

9.2.8.1. Installierte Dokumentationen

  • PAM-bezogene Handbuch-Seiten — Es gibt eine Reihe von Handbuch-Seiten für die verschiedenen Applikationen und Konfigurationsdateien, die in Bezug zu PAM stehen. Nachfolgend ist eine Liste der wichtigeren Handbuch-Seiten aufgeführt.

    Konfigurationsdateien
    • pam — Gute Einführungsinformationen zu PAM, inklusive der Struktur und des Zwecks der PAM Konfigurationsdateien.

      Beachten Sie bitte, dass diese Handbuch-Seite sowohl /etc/pam.conf, als auch individuelle Konfigurationsdateien im Verzeichnis /etc/pam.d/ behandelt. Standardmäßig verwendet Red Hat Enterprise Linux die individuellen Konfigurationsdateien des Verzeichnisses /etc/pam.d/ und ignoriert /etc/pam.conf, auch wenn diese existiert.

    • pam_console — Beschreibt die Funktion des pam_console.so-Moduls. Beschreibt auch die entsprechende Syntax eines Eintrags in der PAM-Konfigurationsdatei.

    • console.apps — Beschreibt das Format und die verfügbaren Optionen der Konfigurationsdatei /etc/security/console.apps, die festlegt, auf welche Applikationen der durch PAM zugewiesene Konsolenbenutzer zugreifen kann.

    • console.perms — Beschreibt das Format und die verfügbaren Optionen der Konfigurationsdatei /etc/security/console.perms, die die Zugriffsrechte des durch PAM zugewiesenen Konsolenbenutzers festlegt.

    • pam_timestamp — Beschreibt das pam_timestamp.so-Modul.

  • /usr/share/doc/pam-<version-number> — Umfasst ein Systemadministrator-Handbuch, ein Modul-Autorenhandbuch und ein Anwendungsentwickler-Handbuch, sowie eine Kopie des PAM Standards, DCE-RFC 86.0 (<version-number> steht hierbei für die Versionsnummer von PAM).

  • /usr/share/doc/pam-<version-number>/txts/README.pam_timestamp — Enthält Informationen über das pam_timestamp.so PAM-Module (wobei <version-number> die Versionsnummer von PAM ist).

9.2.8.2. Hilfreiche Websites

  • http://www.kernel.org/pub/linux/libs/pam/ — Die wichtigste Website für Linux-PAM. Sie enthält Informationen über die verschiedenen PAM-Module und Anwendungen, die verwendet oder entwickelt werden, sowie FAQ und zusätzliche Dokumentationen über PAM.

    Anmerkung

    Die Dokumentation auf der oben aufgeführten Webseite ist für die zuletzt veröffentlichte Upstream-Version von PAM und ist möglicherweise nicht 100% zutreffend für die in Red Hat Enterprise Linux mitgelieferte PAM-Version.

9.3. Virtuelle Private Netzwerke (VPNs)

Unternehmen mit mehreren Zweigstellen sind häufig über spezielle Leitungen miteinander verbunden, um Effizienz und Schutz empfindlicher Daten zu gewähren. Viele Firmen nutzen zum Beispiel Frame Relay oder Asynchronous Transfer Mode (ATM) Leitungen als End-to-End Netzwerklösung, um Büros miteinander zu verbinden. Dies kann eine teurere Lösung darstellen, insbesondere für kleine bis mittlere Unternehmen (SMBs), die sich vergrößern, jedoch nicht die hohen Kosten für hochrangige Digitalschaltungen in Kauf nehmen wollen.

Virtuelle Private Netzwerke (VPN) stellen eine Lösung für dieses Problem dar. Dem Prinzip besonders zugewiesener Digitalschaltungen folgend, ermöglichen VPNs gesicherte, digitale Kommunikation zwischen zwei Parteien (oder Netzwerken) und erstellen somit ein Wide-Area-Netzwerk (WAN) aus bestehenden Local-Area-Netzwerken (LANs). Der Unterschied zum Frame Relay oder ATM ist das Transportmedium. VPNs übertragen via IP-Datagrammen, und sorgen somit für einen sicheren Transfer durch das Internet zum Bestimmungsort. Die meisten frei verfügbaren VPN-Implementierungen enthalten Open Standard, eine Open Source Verschlüsselung für das Maskieren von Daten während der Übertragung.

Einige Unternehmen setzen VPN-Hardwarelösungen ein, um die Sicherheit zu erhöhen, während andere Software- oder Protokoll-basierte Implementierungen verwenden. Es gibt mehrere Hersteller für Hardware-VPN-Lösungen, wie z.B. Cisco, Nortel, IBM und Checkpoint. Es gibt eine kostenlose, Software-basierte VPN-Lösung für Linux mit dem Namen FreeS/Wan, die eine standardisierte IPSec (Internet Protocol Security) Implementierung verwendet. Diese VPN-Lösungen verhalten sich wie spezielle Router, die sich in der IP-Verbindung von einem Büro zum nächsten befinden.

9.3.1. Wie funktioniert ein VPN?

Wenn ein Paket von einem Client verschickt wird, wird es durch den VPN-Router oder -Gateway gesendet. Dieser fügt ein Authentication Header (AH) für das Routing und zur Authentifizierung hinzu. Die Daten werden dann verschlüsselt und schließlich in Encapsulating Security Payload (ESP) eingeschlossen. Letzteres bildet die Verschlüsselung und Betriebsanweisungen.

Der empfangende VPN-Router holt sich die Header-Information und leitet diese zum Zielort weiter (entweder zu einem Arbeitsplatzrechner oder einem Knoten im Netzwerk). Unter Verwendung einer Netzwerk-zu-Netzwerk Verbindung erhält der empfangende Knoten am lokalen Netzwerk die Pakete unverschlüsselt und bereit zur Verarbeitung. Der Verschlüsselungs-/Entschlüsselungsprozess in einer Netzwerk-zu-Netzwerk VPN-Verbindung, ist für den lokalen Knoten transparent.

Durch solch einen erhöhten Grad an Sicherheit muss ein Cracker nicht nur ein Paket abfangen, sondern dies auch entschlüsseln. Eindringlinge, die eine Man-in-the-Middle-Attacke zwischen einem Server und einem Client durchführen, müssen daher auch Zugang zu mindestens einem der Schlüssel besitzen, die für die Authentifizierung verwendet werden. VPNs sind ein sicheres und effektives Mittel für die Verbindung mehrerer entfernter Knoten, die sich dann als ein vereinheitlichtes Intranet verhalten.

9.3.2. VPNs und Red Hat Enterprise Linux

Red Hat Enterprise Linux Benutzern stehen verschiedene Optionen hinsichtlich der Implementation einer Softwarelösung, um sich sicher mit einem WAN verbinden zu können. Internet Protocol Security (IPsec) ist die unterstützte VPN-Implementation für Red Hat Enterprise Linux, welches ausreichend den Nutzungsanforderungen von Unternehmen mit Zweigstellen oder Remote-Benutzern gerecht wird.

9.3.3. IPsec

Red Hat Enterprise Linux unterstützt IPsec zur gemeinsamen Verbindung von Remote-Hosts und Netzwerken unter Verwendung eines sicheren Tunnels auf einem öffentlichen Netzwerk, wie dem Internet. IPsec kann unter Verwendung einer Host-zu-Host (Verbindung eines Arbeitsplatzrechners mit einem anderen) oder Netzwerk-zu-Netzwerk (Verbindung eines LANs/ WANs mit einem anderen) Konfiguration implementiert werden.

Die IPsec-Implementation in Red Hat Enterprise Linux benutzt Internet Key Exchange (IKE), das ein von der Internet Engineering Task Force (IETF) implementiertes Protokoll darstellt. Es ist für beiderseitige Authentifizierung und sichere Verbindungen zwischen Systemen bestimmt.

9.3.4. Eine IPsec-Verbindung erstellen

Eine IPsec-Verbindung wird in zwei logische Phasen unterteilt. In Phase 1 initialisiert ein IPsec-Knoten die Verbindung mit dem Remote-Knoten oder -Netzwerk. Der Remote-Knoten oder das Remote-Netzwerk überprüft die Berechtigungsnachweise (Credentials) des anfragenden Knotens und beide Parteien entscheiden über die Authentifizierungsmethode für die Verbindung.

Auf Red Hat Enterprise Linux-Systemen verwendet eine IPsec-Verbindung die Pre-Shared Key-Methode (vorab ausgetauschte Schlüssel) der IPsec Knoten-Authentifizierung. Bei einer IPsec-Verbindung mit zuvor ausgetauschten Schlüsseln (pre-shared keys), müssen beide Hosts denselben Schlüssel verwenden, um zu Phase 2, der IPsec-Verbindung zu gelangen.

Phase 2 der IPsec-Verbindung ist diejenige, in der Security Association (SA) zwischen den IPsec-Knoten geschaffen wird. Diese Phase errichtet eine SA-Datenbank mit Konfigurationsinformationen, wie z.B. die Verschlüsselungsmethode, Secret-Session-Key (temporärer Schlüssel, den nur 2 Instanzen kennen), Austauschparameter und vieles mehr. In dieser Phase findet die eigentliche IPsec-Verbindung zwischen den entfernten Knoten und Netzwerken statt.

Die Red Hat Enterprise Linux Implementierung von IPsec verwendet IKE, damit die Schlüssel von den Hosts im ganzen Internet gemeinsam verwendet werden können. Der racoon Schlüssel-Daemon übernimmt die IKE-Schlüsselvergabe und den Austausch. Konsultieren Sie racoon Handbuch-Seite für weitere Informationen zu diesem Daemon.

9.3.5. Installation von IPsec

Die Implementierung von IPsec erfordert, dass das ipsec-tools RPM-Paket auf allen IPsec-Hosts (wenn eine Host-zu-Host-Konfiguration verwendet wird) oder Routern (wenn eine Netzwerk-zu-Netzwerk-Konfiguration verwendet wird) installiert wird. Das RPM-Paket enthält essentielle Bibliotheken, Daemons und Konfigurationsdateien zur Einrichtung der IPsec-Verbindung, inklusive:

  • /sbin/setkey — verändert das Schlüsselmanagement und die Sicherheitsattribute von IPsec im Kernel. Dieser Befehl wird vom racoon Schlüsselmanagement-Daemon kontrolliert. Für weitere Informationen über setkey, siehe setkey(8) Handbuch-Seite.

  • /sbin/racoon — Der IKE Daemon zur Schlüsselverwaltung, der zur Verwaltung und Kontrolle von Sicherheitsverbindungen, sowie dem Schlüsselaustausch zwischen mit IPsec verbundenen Systemen verwendet wird.

  • /etc/racoon/racoon.conf — Die racoon Daemon-Konfigurationsdatei, die verwendet wird, um verschiedene Bereiche der IPsec-Verbindung zu konfigurieren. Enthalten sind auch Methoden der Authentifizierung und Algorithmen zur Verschlüsselung, die bei der Verbindung verwendet werden. Eine komplette Liste der verfügbaren Direktiven finden Sie auf der racoon.conf(5) Handbuch-Seite.

Um IPsec unter Red Hat Enterprise Linux zu konfigurieren, können Sie das Network-Administration-Tool, oder bearbeiten die Netzwerk und IPsec Konfigurationsdateien per Hand.

9.3.6. Konfiguration von IPsec Host-zu-Host

Sie können IPsec so konfigurieren, dass ein Desktop oder ein Arbeitsplatzrechner mit (einem) anderen über eine Host-zu-Host-Verbindung verbunden werden kann. Diese Art der Verbindung verwendet das Netzwerk, mit dem jeder Host verbunden ist, um einen sicheren Tunnel zueinander zu schaffen. Die Erfordernisse für eine Host-zu-Host-Verbindung sind minimal, wie auch die Konfiguration von IPsec bei jedem Host. Die Hosts brauchen lediglich eine bestimmte Verbindung zu einem Träger-Netzwerk (wie das Internet) und Red Hat Enterprise Linux um die IPsec-Verbindung herzustellen.

9.3.6.1. Host-zu-Host-Verbindung

Eine Host-zu-Host IPsec-Verbindung ist eine verschlüsselte Verbindung zwischen zwei Systemen, auf denen jeweils IPsec mit demselben Authentifizierungsschlüssel läuft. Mit einer aktiven IPsec-Verbindung wird jeglicher Netzwerkverkehr zwischen den beiden Hosts verschlüsselt.

Um eine Host-zu-Host IPsec-Verbindung zu konfigurieren, führen Sie folgende Schritte für jeden Host durch:

Hinweis

Sie sollten folgende Schritte auf genau der Maschine ausführen, die sie gerade konfigurieren. Vermeiden Sie das Konfigurieren und Einrichten einer IPsec-Verbindung von der Ferne (remote) aus.

  1. Geben Sie in einer Befehlsshell system-config-network ein, um das Network-Administration-Tool zu starten.

  2. Klicken Sie auf dem IPsec-Reiter auf Neu, um den IPsec-Konfigurationswizard zu starten.

  3. Klicken Sie auf Weiter, um mit der Konfiguration einer Host-zu-Host IPsec-Verbindung zu beginnen.

  4. Geben Sie einen eindeutigen Namen für die Verbindung an, z.B. ipsec0. Falls nötig, wählen Sie das Kontrollkästchen aus, um die Verbindung automatisch bei Systemstart zu aktivieren. Klicken Sie auf Weiter, um fortzufahren.

  5. Wählen Sie Host-zu-Host-Verschlüsselung als Verbindungstyp und klicken dann auf Weiter.

  6. Wählen Sie den zu verwendenden Verschlüsselungstyp: manuell oder automatisch.

    Falls Sie manuelle Verschlüsselung auswählen, muss im weiteren Verlauf ein Verschlüsselungscode angegeben werden. Wenn Sie automatische Verschlüsselung wählen, verwaltet der racoon-Daemon, den Verschlüsselungscode. Das Paket ipsec-tools muss installiert sein, um automatische Verschlüsselung nutzen zu können.

    Klicken Sie auf Weiter, um fortzufahren.

  7. Geben Sie die IP-Adresse des Remote-Host ein.

    Um die IP-Adresse des Remote-Host zu bestimmen, führen Sie folgenden Befehl auf dem Remote-Host aus:

    [root@myServer ~] # /sbin/ifconfig <device>
    

    wobei <device> das Ethernet-Gerät ist, welches Sie für die VPN-Verbindung verwenden möchten.

    Falls nur eine Ethernet-Karte im System vorhanden ist, lautet der Gerätename üblicherweise eth0. Das folgende Beispiel zeigt die relevanten Informationen dieses Befehls (bitte beachten Sie, das es sich hier lediglich um eine exemplarische Ausgabe handelt):

    eth0      Link encap:Ethernet  HWaddr 00:0C:6E:E8:98:1D
              inet addr:172.16.44.192  Bcast:172.16.45.255  Mask:255.255.254.0
    

    Die IP-Adresse ist die Nummer nach der Kennzeichnung inet addr:

    Hinweis

    Bei Host-zu-Host-Verbindungen sollten beide Hosts eine öffentliche, routbare Adresse besitzen. Alternativ können beide Hosts eine private, nicht-routbare Adresse besitzen (zum Beispiel aus den Adressbereichen 10.x.x.x oder 192.168.x.x), solange sie sich im selben LAN befinden.

    Falls sich die Hosts in verschiedenen LANs befinden, oder einer der Hosts eine öffentliche Adresse besitzt, während der andere eine private Adresse hat, werfen Sie einen Blick auf Abschnitt 9.3.7, „IPsec Netzwerk-zu-Netzwerk Konfiguration“.

    Klicken Sie auf Weiter, um fortzufahren.

  8. Falls im Schritt 6 manuelle Verschlüsselung ausgewählt wurde, geben Sie den zu verwendenden Verschlüsselungscode ein, oder klicken auf Erstellen, um einen zu generieren.

    1. Geben Sie einen Authentifizierungsschlüssel an oder klicken Sie auf Erstellen, um einen zu generieren. Dieser kann aus einer Kombination aus Zahlen und Buchstaben bestehen.

    2. Klicken Sie auf Weiter, um fortzufahren.

  9. Überprüfen Sie die Informationen auf der Seite IPsec — Zusammenfassung und klicken dann auf Anwenden.

  10. Klicken Sie auf Datei => Speichern, um die Konfiguration zu speichern.

    Sie müssen möglicherweise das Netzwerk neu starten, damit die Änderungen wirksam werden. Um das Netzwerk neu zu starten, verwenden Sie den folgenden Befehl:

    [root@myServer ~]# service network restart
    
  11. Wählen Sie die IPsec-Verbindung aus der Liste aus und klicken auf die Schaltfläche Aktivieren.

  12. Wiederholen Sie die gesamte Prozedur für den anderen Host. Es ist zwingend notwendig, dass derselbe Schlüssel wie im Schritt 8 auf dem anderen Host verwendet wird. Ansonsten funktioniert IPsec nicht.

Nach der Konfiguration der IPsec-Verbindung, erscheint diese in der IPsec-Liste, wie unter Abbildung 9.3, „IPsec-Verbindung“ aufgeführt.

IPsec-Verbindung

IPsec-Verbindung

Abbildung 9.3. IPsec-Verbindung

Die folgenden Dateien werden bei der Konfiguration der IPsec-Verbindung angelegt:

  • /etc/sysconfig/network-scripts/ifcfg-<nickname>

  • /etc/sysconfig/network-scripts/keys-<nickname>

  • /etc/racoon/<remote-ip>.conf

  • /etc/racoon/psk.txt

Falls automatische Verschlüsselung ausgewählt wurde, wird /etc/racoon/racoon.conf auch erstellt.

Wenn die Schnittstelle aktiviert ist, wird /etc/racoon/racoon.conf so modifiziert, dass <remote-ip>.conf eingebunden wird.

9.3.6.2. Manuelle Konfiguration von Host-zu-Host IPsec

Der erste Schritt bei der Erstellung einer Verbindung ist das Einholen von System- und Netzwerkinformationen von jedem Arbeitsplatzrechner. Für eine Host- zu Host-Verbindung brauchen Sie die folgende Information:

  • Die IP-Adressen von jedem Host

  • Ein eindeutiger Name, z.B. ipsec1. Dieser wird zur Identifizierung der IPsec-Verbindung verwendet, und zur Unterscheidung von anderen Geräten oder Verbindungen.

  • Einen festgelegten Verschlüsselungscode oder einen, der automatisch von racoon geschaffen wurde.

  • Ein bereits vorher gemeinsam verwendeter Schlüssel zu Authentifizierung, der verwendet wird, um die Verbindung zu initialisieren und den Austausch von Verschlüsselungscodes möglich zu machen.

Stellen Sie sich z.B. vor, Arbeitsplatzrechner A und Arbeitsplatzrechner B wollen sich durch einen IPsec-Tunnel miteinander verbinden. Sie wollen sich unter Verwendung eines vorher gemeinsam verwendeten Schlüssels mit dem Wert Key_Value01. Die Benutzer kommen überein, racoon automatisch einen Schlüssel zur Authentifizierung generieren zu lassen, der von beiden Hosts gemeinsam verwendet wird. Beide Hosts entscheiden sich dafür, ihre Verbindungen ipsec1 zu nennen.

Hinweis

Sie sollten einen PSK mit einem Mix aus großen und kleinen Zeichen, Zahlen und Satzzeichen verwenden. Ein leicht zu erratender PSK birgt ein Sicherheitsrisiko.

Es muss nicht notwendigerweise derselbe Verbindungsname für jeden Host verwendet werden. Sie sollten einen Namen wählen, der bequem und aussagekräftig für Ihre Installation ist.

Im Folgenden sehen Sie die IPsec Konfigurationsdatei für Arbeitsplatzrechner A für eine Host-zu-Host IPsec-Verbindung mit Arbeitsplatzrechner B. Der eindeutige Name zur Identifizierung der Verbindung in diesem Beispiel ist ipsec1, der daraus resultierende Dateiname ist daher /etc/sysconfig/network-scripts/ifcfg-ipsec1.

DST=X.X.X.X
TYPE=IPSEC
ONBOOT=no
IKE_METHOD=PSK

Arbeitsplatzrechner A würde X.X.X.X mit der IP Adresse von Arbeitsplatzrechner B ersetzen, während Arbeitsplatzrechner B X.X.X.X mit der IP Adresse von Arbeitsplatzrechner A ersetzen würde. Die Verbindung ist so eingestellt, dass sie beim Hochfahren startet (ONBOOT=no) und verwendet die Authentifizierungsmethode der vorher gemeinsam verwendeten Schlüssel (IKE_METHOD=PSK).

Im Folgenden finden Sie die Datei mit den vorher gemeinsam benützten Schlüsseln (/etc/sysconfig/network-scripts/keys-ipsec0 genannt), die beide Arbeitsplatzrechner verwenden, um sich gegenseitig zu authentifizieren. Der Inhalt dieser Datei sollte auf beiden Arbeitsplatzrechnern identisch sein und nur der Root-Benutzer sollte die Datei lesen oder überschreiben können.

IKE_PSK=Key_Value01

Wichtig

Um die Datei keys-ipsec1 zu verändern, damit sie lediglich vom Root-Benutzer gelesen oder bearbeitet werden kann, führen Sie nach der Erstellung der Datei den folgenden Befehl aus:

[root@myServer ~] # chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1

Sie können den Authentifizierungsschlüssel jederzeit ändern. Bearbeiten Sie die keys-ipsec1 Datei auf beiden Arbeitsplatzrechnern. Für eine ordentliche Verbindung müssen beide Schlüssel identisch sein.

Im folgenden Beispiel sehen Sie die Konfigurationsdatei für die Phase-1-Verbindung zum Remote-Host. Die Datei trägt den Namen X.X.X.X.conf (ersetzen Sie X.X.X.X mit der IP-Adresse des Remote-IPsec-Hosts). Beachten Sie, dass diese Datei automatisch erzeugt wird, wenn der IPsec-Tunnel aktiviert wird, und nicht direkt bearbeitet werden sollte.

remote X.X.X.X
{
         exchange_mode aggressive, main;
         my_identifier address;
         proposal {
                 encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

Die Standardkonfigurationsdatei der Phase 1, die erzeugt wird, wenn eine IPsec-Verbindung initialisiert wird, beinhaltet folgenden Statements, die von der Red Hat Enterprise Linux-Implementierung von IPsec verwendet werden:

remote X.X.X.X

Legt fest, dass die nachfolgenden Stanzen dieser Konfigurationsdatei nur auf den entfernten Knoten zutreffen, der durch die IP-Adresse X.X.X.X identifiziert wird.

exchange_mode aggressive

Die Standardkonfiguration für IPsec auf Red Hat Enterprise Linux benutzt einen sog. aggressiven Authentifizierungsmodus, welcher den Overhead bei der Verbindung senkt, während gleichzeitig die Konfiguration von mehreren IPsec-Verbindungen mit mehreren Hosts ermöglicht wird.

my_identifier address

Legt die Identifikationsmethode fest, die bei der Authentifizierung von Knoten benutzt wird. Red Hat Enterprise Linux benutzt IP-Adressen, um Knoten zu identifizieren.

encryption_algorithm 3des

Legt den Verschlüsselungscode fest, der während der Authentifizierung benutzt wird. Standardmäßig wird Triple Data Encryption Standard (3DES) benutzt.

hash_algorithm sha1;

Legt den Hash-Algorithmus fest, der während der Verhandlung der Phase 1 zwischen den Knoten eingesetzt wird. Secure-Hash-Algorithmus Version 1 ist Standard.

authentication_method pre_shared_key

Legt die Authentifizierungsmethode fest, die während der Knoten-Verhandlung benutzt wird. Red Hat Enterprise Linux benutzt vorab ausgetauschte Schlüssel (pre-shared Keys) zur Authentifizierung.

dh_group 2

Legt die Diffie-Hellman Gruppennummer zur Erstellung dynamisch generierter temporärer Schlüssel (Session Keys). Standardmäßig wird die 1024-Bit Gruppe modp1024 (group 2) benutzt.

9.3.6.2.1. Die Konfigurationsdatei von Racoon

Die /etc/racoon/racoon.conf Datei sollte auf allen IPsec-Knoten identisch sein, bis auf das include "/etc/racoon/X.X.X.X.conf"-Statement. Dieses Statement (und die Datei, auf die es sich bezieht) wird erstellt, wenn der IPsec-Tunnel aktiviert ist. Für Arbeitsplatzrechner A ist X.X.X.X im include-Statement die IP Adresse von Arbeitsplatzrechner B. Das Gegenteil gilt für Arbeitsplatzrechner B. Im Folgenden sehen Sie eine typische racoon.conf-Datei, wenn die IPsec-Verbindung aktiviert ist.

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
        pfs_group 2;
        lifetime time 1 hour ;
        encryption_algorithm 3des, blowfish 448, rijndael ;
        authentication_algorithm hmac_sha1, hmac_md5 ;
        compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf";

Diese standardmäßige racoon.conf-Datei beinhaltet festgelegte Pfade für die IPsec-Konfiguration, Dateien zuvor verteilter Schlüssel und Zertifikate. Die Felder in sainfo anonymous beschreiben die Phase 2 SA (Security Association) zwischen den IPsec-Knoten — die Natur der IPsec-Verbindung (inklusive der unterstützten Verschlüsselungsalgorithmen, die Verwendung finden) und die Methode des Schlüsselaustauschs. Die folgende Liste bestimmt die Felder der Phase 2:

sainfo anonymous

Bedeutet, dass SA mit jedem Peer anonym initialisieren kann, insofern die IPsec-Berechtigungsnachweise (Credentials) übereinstimmen.

pfs_group 2

Legt das Diffie-Hellmann Schlüsselaustauschprotokoll fest, welches die Methode bestimmt, in der die IPsec-Knoten einen gemeinsamen, temporären Sitzungsschlüssel für die Verbindungsfähigkeit von IPsec in der 2. Phase einrichten. Standardmäßig benutzt die Red Hat Enterprise Linux-Implementierung von IPsec Gruppe 2 (oder modp1024) der Diffie-Hellmann kryptographischen Schlüsselaustausch-Gruppen. Gruppe 2 benutzt eine 1024-Bit modulare Potenzierung, welche Eindringlinge davon abhalten soll, bisherige IPsec-Übertragungen zu entschlüsseln, auch wenn ein privater Schlüssel dadurch kompromittiert wird.

lifetime time 1 hour

Dieser Parameter legt den Lebenszyklus einer SA fest und kann entweder durch Zeit oder durch Datenmengen (Bytes) quantitativ bestimmt werden. Die Red Hat Enterprise Linux-Implementierung von IPsec legt eine einstündige Lebensdauer fest.

encryption_algorithm 3des, blowfish 448, rijndael

Legt den unterstützten Verschlüsselungscode für Phase 2 fest. Red Hat Enterprise Linux unterstützt 3DES, 448-Bit Blowfish und Rijndael (verwendet im Advanced Encryption Standard oder AES).

authentication_algorithm hmac_sha1, hmac_md5

Listet die unterstützten Hash-Algorithmen für Authentifizierung. Unterstützte Modi sind sha1 und md5 Hashed Message Authentication Codes (HMAC).

compression_algorithm deflate

Legt den Deflate-Compression-Algorithmus für IP-Payload Compression (IPCOMP) Unterstützung fest, was möglicherweise eine schnellere Übertragung von IP-Datagrammen über langsame Verbindungen ermöglicht.

Um die Verbindung zu starten, führen Sie als Root den folgenden Befehl auf jedem Host aus:

[root@myServer ~]# /sbin/ifup <nickname>

wobei <nickname> der Name ist, den Sie für die IPsec-Verbindung angegeben haben.

Um die IPsec-Verbindung zu testen, führen Sie das tcpdump Dienstprogramm aus. Sie können so die Netzwerk-Pakete sehen, die zwischen den Hosts (oder den Netzwerken) übermittelt werden, und außerdem nachprüfen, dass sie über IPsec verschlüsselt werden. Jedes Paket sollte eine AH-Kopfzeile einhalten und als ESP-Paket angezeigt werden. ESP bedeutet, dass es verschlüsselt ist. Zum Beispiel:

[root@myServer ~]# tcpdump -n -i eth0 host <targetSystem>

IP 172.16.45.107 
> 172.16.44.192: AH(spi=0x0954ccb6,seq=0xbb): ESP(spi=0x0c9f2164,seq=0xbb)

9.3.7. IPsec Netzwerk-zu-Netzwerk Konfiguration

Sie können IPsec auch so konfigurieren, dass ein ganzes Netzwerk (z.B. LAN oder WAN) mit einem Remote-Netzwerk mittels einer Netzwerk-zu-Netzwerk-Verbindung verbunden wird. Dafür müssen auf jeder Seite der zu verbindenden Netzwerke IPsec-Routers erstellt werden, damit Information verarbeitet werden und von einem Netzwerkknoten des LAN zu einem Knoten im Remote-LAN geroutet werden kann. Abbildung 9.4, „Eine Netzwerk-zu-Netzwerk-Verbindung mittels IPsec-Tunnel“ zeigt eine Netzwerk-zu-Netzwerk-Verbindung mittels IPsec-Tunnel.

Eine Netzwerk-zu-Netzwerk-Verbindung mittels IPsec-Tunnel

Eine Netzwerk-zu-Netzwerk-Verbindung mittels IPsec-Tunnel

Abbildung 9.4. Eine Netzwerk-zu-Netzwerk-Verbindung mittels IPsec-Tunnel

Das Diagramm zeigt zwei separate LANs, die durch das Internet getrennt sind. Diese LANs verwenden IPsec-Routers, um eine Verbindung in einem sicheren Tunnel im Internet zu authentifizieren und zu initialisieren. Pakete, die bei der Übertragung abgefangen werden, müssten via brute-force entschlüsselt werden, damit der Code geknackt werden kann, der die Pakete zwischen diesen LANs beschützt. Der Prozess der Kommunikation von einem Netzknoten in der 192.168.1.0/24 IP-Reihe zu einem anderen auf 192.169.2.0/24 ist für die Knoten vollständig transparent, da die Verarbeitung, die Ver- und Entschlüsselung und das Routing der IPsec-Pakete komplett vom IPsec-Router gehandhabt wird.

Die Information, die für eine Netzwerk-zu-Netzwerk-Verbindung gebraucht wird, umfasst:

  • Die IP-Adressen der dedizierten IPsec-Router, auf die extern zugegriffen werden kann

  • Die Netzwerk-Adressen-Reihen des LAN/WAN, die von den IPsec-Routern bedient werden (z.B. 192.168.0.0/24 oder 10.0.1.0/24)

  • Die IP-Adressen der Gateway-Einrichtungen, die die Daten von den Netzwerkknoten zum Internet leiten

  • Ein eindeutiger Name, z.B. ipsec1. Dieser wird zur Identifizierung der IPsec-Verbindung verwendet, und zur Unterscheidung von anderen Geräten oder Verbindungen.

  • Einen festgelegten Verschlüsselungscode oder einen, der automatisch von racoon geschaffen wurde.

  • Ein bereits vorher gemeinsam verwendeter Schlüssel zu Authentifizierung, der verwendet wird, um die Verbindung zu initialisieren und den Austausch von Verschlüsselungscodes möglich zu machen.

9.3.7.1. Netzwerk-zu-Netzwerk (VPN) Verbindung

Eine Netzwerk-zu-Netzwerk IPsec-Verbindung verwendet zwei IPsec-Router, einen für jedes Netzwerk, durch die der Netzwerkverkehr für privaten Subnetze geroutet wird.

Wie beispielsweise in Abbildung 9.5, „Netzwerk-zu-Netzwerk-IPsec“ zu sehen, wenn das private Netzwerk 192.168.1.0/24 Datenverkehr via Netzwerk an das private Netzwerk 192.168.2.0/24 übermittelt, passieren die Pakete gateway0, nach ipsec0, durch das Internet, nach ipsec1, nach gateway1 und in das 192.168.2.0/24 Subnetz.

IPsec-Router benötigen öffentlich adressierbare IP-Adressen und ein zweites Ethernet-Gerät, das mit ihrem jeweiligen privaten Netzwerk verbunden ist. Der Datenverkehr durchläuft den IPsec-Router nur dann, wenn das Ziel ein anderer IPsec-Router ist, mit dem eine verschlüsselte Verbindung besteht.

Netzwerk-zu-Netzwerk-IPsec

Netzwerk-zu-Netzwerk-IPsec

Abbildung 9.5. Netzwerk-zu-Netzwerk-IPsec

Alternative Netzwerkkonfigurationsoptionen umfassen einen Firewall zwischen jedem IP-Router und dem Internet und einen Intranet-Firewall zwischen jedem IPsec-Router und Subnetz-Gateway. Der IPsec-Router und das Gateway für das Subnetz können ein und dasselbe System mit zwei Ethernet-Geräten sein: Eines mit einer öffentlichen IP-Adresse, das als der IPsec-Router fungiert und eines mit einer privaten IP-Adresse, das als Gateway für das private Subnetz agiert. Jeder IPsec-Router kann das Gateway für sein privates Netzwerk oder ein öffentliches Gateway nutzen, um Pakete zum anderen IPsec-Router zu senden.

Gehen Sie wie folgt vor, um eine Netzwerk-zu-Netzwerk IPsec-Verbindung zu konfigurieren:

  1. Geben Sie in einer Befehlsshell system-config-network ein, um das Network-Administration-Tool zu starten.

  2. Klicken Sie auf dem IPsec-Reiter auf Neu, um den IPsec-Konfigurationswizard zu starten.

  3. Klicken Sie auf Weiter, um mit der Konfiguration einer Netzwerk-zu-Netzwerk IPsec-Verbindung zu beginnen.

  4. Geben Sie einen eindeutigen Namen für die Verbindung an, z.B. ipsec0. Falls nötig, wählen Sie das Kontrollkästchen aus, um die Verbindung automatisch bei Systemstart zu aktivieren. Klicken Sie auf Weiter, um fortzufahren.

  5. Wählen Sie Netzwerk-zu-Netzwerk-Verschlüsselung (VPN) als Verbindungstyp und klicken dann auf Weiter.

  6. Wählen Sie den zu verwendenden Verschlüsselungstyp: manuell oder automatisch.

    Falls Sie manuelle Verschlüsselung auswählen, muss im weiteren Verlauf ein Verschlüsselungscode angegeben werden. Wenn Sie automatische Verschlüsselung wählen, verwaltet der racoon-Daemon, den Verschlüsselungscode. Das Paket ipsec-tools muss installiert sein, um automatische Verschlüsselung nutzen zu können.

    Klicken Sie auf Weiter, um fortzufahren.

  7. Geben Sie auf der Seite Lokales Netzwerk folgende Informationen ein:

    • Local Network Address — Die IP-Adresse des Gerätes des IPsec-Routers, das mit dem privaten Netzwerk verbunden ist.

    • Local Subnet Mask — Die Subnetzmaske der IP-Adresse des lokalen Netzwerkes.

    • Local Network Gateway — Das Gateway für das private Subnetz.

    Klicken Sie auf Weiter, um fortzufahren.

    Informationen zum lokalen Netzwerk

    Informationen zum lokalen Netzwerk

    Abbildung 9.6. Informationen zum lokalen Netzwerk

  8. Geben Sie auf der Seite Remote-Netzwerk folgende Informationen ein:

    • Remote IP-Adresse — Die öffentlich adressierbare IP-Adresse des IPsec-Routers für das andere private Netzwerk. Geben Sie in unserem Beispiel für ipsec0 die öffentlich adressierbare IP-Adresse von ipsec1 ein und umgekehrt.

    • Remote-Netzwerkzugriff — Die Netzwerkadresse des privaten Subnetzes hinter dem anderenIPsec-Router. Geben Sie in unserem Beispiel 192.168.1.0 bei der Konfiguration von ipsec1 ein und 192.168.2.0, wenn Sie ipsec0 konfigurieren.

    • Remote Subnetzmaske — Die Subnetzmaske der Remote-IP-Adresse.

    • Remote Netzwerk-Gateway — Die IP-Adresse des Gateways für die Remote-Netzwerkadresse.

    • Falls im Schritt 6 manuelle Verschlüsselung ausgewählt wurde, geben Sie den zu verwendenden Verschlüsselungscode ein, oder klicken auf Erstellen, um einen zu generieren.

      Geben Sie einen Authentifizierungsschlüssel an oder klicken Sie auf Erstellen, um einen zu generieren. Dieser Schlüssel kann aus einer Kombination aus Zahlen und Buchstaben bestehen.

    Klicken Sie auf Weiter, um fortzufahren.

    Informationen zum Remote-Netzwerk

    Informationen zum Remote-Netzwerk

    Abbildung 9.7. Informationen zum Remote-Netzwerk

  9. Überprüfen Sie die Informationen auf der Seite IPsec — Zusammenfassung und klicken dann auf Anwenden.

  10. Wählen Sie Datei => Speichern, um die Konfiguration zu speichern.

  11. Wählen Sie die IPsec-Verbindung aus der Liste aus und klicken Sie anschließend zur Aktivierung der Verbindung auf Aktivieren.

  12. IP-Weiterleitung aktivieren:

    1. Bearbeiten Sie /etc/sysctl.conf und setzen Sie net.ipv4.ip_forward auf 1.

    2. Führen Sie den folgenden Befehl aus, damit die Änderung wirksam wird:

      [root@myServer ~]# /sbin/sysctl -p /etc/sysctl.conf
      

Das Netzwerkskript, das die IPsec-Verbindung aktiviert, legt automatisch Netzwerkrouten an, um Pakete durch den IPsec-Router zu schicken, falls notwendig.

9.3.7.2. Manuelle Konfiguration von IPsec Netzwerk-zu-Netzwerk

Nehmen Sie z.B. an, LAN A (lana.example.com) und LAN B (lanb.example.com) wollen sich miteinender durch einen IPsec-Tunnel verbinden. Die Netzwerk-Adresse für LAN A liegt in der 192.168.1.0/24-Reihe, während LAN B die 192.168.2.254-Reihe verwendet. Die Gateway-IP Adresse ist 192.168.1.254 für LAN A und 192.168.2.254 für LAN B. Die IPsec-Router sind von jedem LAN-Gateway getrennt und verwenden zwei Netzwerk-Geräte: eth0 wird eine extern zugängliche statische IP-Adresse für das Internet zugeteilt, eth1 fungiert als Routing-Punkt für das Bearbeiten und Übertragen von LAN-Paketen von einem Netzwerkknoten zu den Remote-Netzwerkknoten.

Die IPsec-Verbindung zwischen den Netzwerken verwendet einen vorab ausgetauschten Schlüssel (pre-shared key) mit dem Wert r3dh4tl1nux. Die Administratoren von A und B einigen sich, racoon automatisch einen Authentifikationsschlüssel zwischen den beiden IPsec-Routern erstellen zu lassen. Der Administrator von LAN A entscheidet sich dafür, die IPsec-Verbindung ipsec0 zu nennen, während der Administrator von LAN B die IPsec-Verbindung ipsec1 nennt.

Im Folgenden sehen Sie die ifcfg Datei für eine Netzwerk-zu-Netzwerk-Verbindung mit IPsec für LAN A. Der eindeutige Name zur Identifizierung der Verbindung ist in diesem Beispiel ipsec0, die daraus resultierende Datei heißt daher /etc/sysconfig/network-scripts/ifcfg-ipsec0.

TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=192.168.1.254
DSTGW=192.168.2.254
SRCNET=192.168.1.0/24
DSTNET=192.168.2.0/24
DST=X.X.X.X

Die folgende Liste beschreibt den Inhalt dieser Datei:

TYPE=IPSEC

Legt den Typ der Verbindung fest.

ONBOOT=yes

Legt fest, dass die Verbindung beim Systemstart initiiert werden soll.

IKE_METHOD=PSK

Legt die Methode, bei der Schlüssel vorab ausgetauscht werden (pre-shared key), als Authentifizierungsmethode fest.

SRCGW=192.168.1.254

Die IP-Adresse des Quell-Gateways. Für LAN A ist dies das LAN A Gateway und für LAN B das LAN B Gateway.

DSTGW=192.168.2.254

Die IP-Adresse des Ziel-Gateways. Für LAN A ist dies das LAN B Gateway und für LAN B das LAN A Gateway.

SRCNET=192.168.1.0/24

Gibt das Quell-Netzwerk für die IPsec-Verbindung an, die in diesem Beispiel der Netzwerk-Adressbereich für LAN A ist.

DSTNET=192.168.2.0/24

Gibt das Ziel-Netzwerk für die IPsec-Verbindung an, die in diesem Beispiel der Netzwerk-Adressbereich für LAN A ist.

DST=X.X.X.X

Die IP-Adresse von LAN B, auf die extern zugegriffen werden kann.

Im Folgenden finden Sie die Datei mit den vorab ausgetauschten Schlüsseln (pre-shared keys) (/etc/sysconfig/network-scripts/keys-ipsecX genannt, wobei X die 0 für LAN A und die 1 für LAN B ist), die beide Netzwerke verwenden, um sich gegenseitig zu authentifizieren. Der Inhalt dieser Datei sollte identisch sein und nur der Root-Benutzer sollte die Datei lesen oder überschreiben können.

IKE_PSK=r3dh4tl1nux

Wichtig

Um die Datei keys-ipsecX zu verändern, damit sie nur vom Root-Benutzer gelesen oder bearbeitet werden kann, führen Sie nach der Erstellung der Datei den folgenden Befehl aus:

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1

Um den Authentifizierungs-Schlüssel jederzeit zu verändern, bearbeiten Sie die Datei keys-ipsecX auf beiden IPsec-Routern. Für eine ordentliche Verbindung müssen beide Schlüssel gleich sein.

Das ist die /etc/racoon/racoon.conf-Konfigurationsdatei für die IPsec-Verbindung. Beachten Sie, dass die include-Zeile am unteren Ende der Datei automatisch erstellt wird und nur dann erscheint, wenn gerade eine Verbindung mit einem IPsec-Tunnel vorhanden ist.

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.
path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
  
sainfo anonymous
{
        pfs_group 2;
        lifetime time 1 hour ;
        encryption_algorithm 3des, blowfish 448, rijndael ;
        authentication_algorithm hmac_sha1, hmac_md5 ;
        compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

Im Folgenden sehen Sie die Konfigurationsdatei für die Verbindung zum Remote-Netzwerk. Die Datei trägt den Namen X.X.X.X.conf (ersetzen Sie X.X.X.X mit der IP Adresse des Remote-IPsec-Routers). Beachten Sie, dass diese Datei automatisch erzeugt wird, wenn der IPsec-Tunnel aktiviert wird. Sie sollte nicht direkt bearbeitet werden.

remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

Bevor die IPsec-Verbindung gestartet wird, sollte IP-Forwarding im Kernel aktiviert werden. Aktivieren Sie IP-Forwarding wie folgt:

  1. Bearbeiten Sie /etc/sysctl.conf und setzen Sie net.ipv4.ip_forward auf 1.

  2. Führen Sie den folgenden Befehl aus, damit die Änderung wirksam wird:

    [root@myServer ~] # sysctl -p /etc/sysctl.conf
    

Starten Sie die IPsec-Verbindung, indem Sie folgenden Befehl auf jedem Router ausführen:

[root@myServer ~] # /sbin/ifup ipsec0

Die Verbindungen sind nun aktiviert und LAN A und LAN B sind in der Lage, miteinander zu kommunizieren. Die Routen werden automatisch durch das Aufrufen des Initialisierungsskriptes mit ifup bei der IPsec-Verbindung erzeugt. Um eine Liste der Routen für das Netzwerk anzuzeigen, führen Sie folgenden Befehl aus:

[root@myServer ~] # /sbin/ip route list

Um die IPsec-Verbindung zu testen, führen Sie das tcpdump Dienstprogramm auf dem extern routbaren Gerät aus (eth0 in diesem Beispiel). So können Sie die Netzwerk-Pakete sehen, die zwischen den Hosts (oder Netzwerken) übertragen werden, und überprüfen, dass sie via IPsec verschlüsselt werden. Um beispielsweise die IPsec-Konnektivität für LAN A zu prüfen, geben sie folgendes ein:

[root@myServer ~] # tcpdump -n -i eth0 host lana.example.com

Das Paket sollte eine AH-Kopfzeile enthalten und sollte als ESP-Paket angezeigt werden. ESP heißt, dass es verschlüsselt ist. Zum Beispiel (ein inverser Schrägstrich kennzeichnet die Fortsetzung einer Zeile):

12:24:26.155529 lanb.example.com > lana.example.com: AH(spi=0x021c9834,seq=0x358): \
        lanb.example.com > lana.example.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
        (ipip-proto-4)

9.3.8. Starten und Stoppen einer IPsec-Verbindung

Falls die IPsec-Verbindung nicht so konfiguriert wurde, dass sie während des Bootvorgangs gestartet wird, können Sie dies auf Kommandozeilenebene nachholen.

Um die Verbindung zu starten, führen Sie folgenden Befehl auf jedem Host der Host-zu-Host IPsec-Verbindung, oder jedem IPsec-Router der Netzwerk-zu-Netzwerk IPSec-Verbindung aus:

[root@myServer ~] # /sbin/ifup <nickname>

wobei <nickname> der zuvor konfigurierte Platzhalter ist, z.B. ipsec0.

Um die Verbindung zu beenden, verwenden Sie den folgenden Befehl:

[root@myServer ~] # /sbin/ifdown <nickname>

9.4. IPTables

wird Red Hat Enterprise Linuxmit erweiterten Tools für die Paket-Filterung geliefert — den Prozess zur Kontrolle von Netzwerkpaketen, mit Zugang zu, durch und aus dem Netzwerkstack des Kernels. Die Kernelversionen vor 2.4 konnten Pakete mit ipchains manipulieren und verwendeten Regellisten für jedes Paket in jeder Phase des Filterungsprozesses. Die Einführung des 2.4-Kernels hat iptables mit sich gebracht (auch Netfilter genannt), die den ipchains ähnlich sind, hingegen Wirkungsbereich und Kontrollmöglichkeiten bei der Filterung von Netzwerkpaketen stark erweitert sind.

In diesem Kapitel werden die Grundlagen der Paketfilterung beschrieben, wobei die Unterschiede zwischen ipchains und iptables definiert und die verschiedenen, mit den iptables-Befehlen zur Verfügung stehenden Optionen erklärt werden. Es wird außerdem gezeigt, wie Filterungsregeln bei Neustarts des Systems erhalten bleiben.

Wenn Sie Anweisungen für das Erstellen von iptables-Regeln oder das Einrichten einer Firewall auf der Grundlage dieser Regeln benötigen, finden Sie weitere Informationen unter Abschnitt 9.4.7, „Zusätzliche Informationsquellen“.

Warnung

Der standardmäßige Firewall-Mechanismus unter dem 2.4-Kernel und neueren Kernels ist zwar iptables, iptables kann aber nicht benutzt werden, wenn die ipchains bereits laufen. Wenn also zur Bootzeit ipchains vorhanden ist, gibt der Kernel eine Fehlermeldung aus und kann iptables nicht starten.

Diese Fehler haben keinerlei Auswirkung auf die Funktionsfähigkeitder ipchains.

9.4.1. Paket-Filterung

Der Linux-Kernel enthält die Netfilter-Fähigkeit, Pakete zu filtern und ermöglicht das Empfangen oder Weiterleiten einiger der Pakete vom System, während andere Pakete gestoppt werden. Diese Fähigkeit ist im Linux-Kernel integriert und enthält drei eingebaute Tabellen- oder Regellisten. Dabei handelt es sich um Folgende:

  • filter — Die Standardtabelle zum Verwalten von Netzwerkpaketen.

  • nat — Mithilfe dieser Tabelle werden Pakete geändert, die eine neue Verbindung herstellen, wie für Network Address Translation (NAT) verwendet.

  • mangle — Diese Tabelle wird für spezielle Arten der Paketänderung verwendet.

Jede dieser Tabellen verfügt über eine Gruppe integrierter Ketten (Ketten), die den Aktionen entsprechen, die von netfilter für das Paket durchgeführt werden.

Die für die filter-Tabelle integrierten Ketten sind folgende:

  • INPUT — Gilt für über eine Netzwerkschnittstelle empfangene Pakete.

  • OUTPUT — Gilt für Pakete, die über dieselbe Netzwerkschnittstelle versendet werden, die die Pakete empfing.

  • FORWARD — Gilt für Pakete, die auf einer Netzwerkschnittstelle empfangen, aber über eine andere versendet werden.

Die für die nat-Tabelle integrierten Ketten sind folgende:

  • PREROUTING — Ändert über eine Netzwerkschnittstelle empfangene Pakete beim Empfang.

  • OUTPUT — Modifiziert lokal-generierte Netzwerk-Pakete, bevor diese gesendet werden.

  • POSTROUTING — Ändert Pakete vor dem Senden über eine Netzwerkschnittstelle.

Die für die mangle-Tabelle integrierten Ketten sind folgende:

  • INPUT — Ändert für den Host bestimmte Netzwerk-Pakete.

  • OUTPUT — Modifiziert lokal-generierte Netzwerk-Pakete, bevor diese gesendet werden.

  • FORWARD — Ändert über den Host gesendete Netzwerk-Pakete.

  • PREROUTING — Ändert über eine Netzwerkschnittstelle empfangene Pakete vor dem Routen.

  • POSTROUTING — Ändert Pakete vor dem Senden über eine Netzwerkschnittstelle.

Jedes Netzwerk-Paket, das von einem Linux System empfangen oder ausgesendet wird, wird von zumindest einer Tabelle beansprucht. Ein Paket kann allerdings in allen Tabellen auf mehrere Regeln hin überprüft werden, bevor es am Ende des Ablaufs auftritt. Struktur und Zweck dieser Regeln können unterschiedlich sein, sie versuchen jedoch normalerweise ein Paket, das von einer oder an eine IP-Adresse bzw. mehrere IP-Adressen gesendet wurde, zu identifizieren, wenn dieses ein bestimmtes Protokoll und einen bestimmten Netzwerkdienst benutzt.

Anmerkung

Standardmäßig werden Firewall-Regeln in den Dateien /etc/sysconfig/iptables oder /etc/sysconfig/ip6tables gespeichert.

Der iptables-Dienst startet beim Start eines Linux-Systems vor jeglichen mit DNS zusammenhängenden Diensten. Aus diesem Grund können Firewall-Regeln nur auf numerische IP-Adressen (zum Beispiel 192.168.0.1) zugreifen. Domainnamen (zum Beispiel host.example.com) in solchen Regeln produzieren Fehlern.

Sobald Pakete einer bestimmten Regel in einer der Tabellen entsprechen, wird unabhängig von ihrem Ziel ein target (Ziel) bzw. eine Aktion auf sie angewendet. Falls die Regel ein ACCEPT-Ziel für ein entsprechendes Paket spezifiziert, überspringt das Paket die restlichen Regelüberprüfungen und darf somit seinen Weg zum Ziel fortsetzen. Wenn aber eine Regel ein DROP-Ziel spezifiziert, wird dem Paket der Zugriff auf das System verwehrt, und es wird nichts an den Host-Rechner, von dem das Paket stammt, zurückgesendet. Wenn eine Regel ein QUEUE-Ziel spezifiziert, wird das Paket an Userspace weitergeleitet. Wenn eine Regel ein optionales REJECT-Ziel spezifiziert, wird das Paket ausgelassen und als Fehlerpaket wieder zu seinem Ursprungsort zurückgesendet.

Jede Kette (chain) hat eine Standard-Richtlinie zu ACCEPT, DROP, REJECT, oder QUEUE. Wenn das Paket keiner der Regeln in der Kette entspricht, wird auf dieses Paket die standardmäßige Richtlinie angewandt.

Der Befehl iptables konfiguriert diese Tabellen und erstellt neue, falls nötig.

9.4.2. Unterschiede zwischen IPTables und IPChains

Sowohl ipchains, als auch iptables verwenden innerhalb des Linux-Kernels operierende Regelketten zur Filterung von Paketen, abhängig von deren Übereinstimmung mit angegebenen Regeln oder Regelwerken. Jedoch offeriert iptables eine deutlich erweiterbarere Paketfilterung, da sie dem Administrator mehr Kontrolle gibt, ohne das gesamte System hierdurch zu verkomplizieren.

Sie sollten über folgende wesentliche Unterschiede zwischen iptables und ipchains Bescheid wissen:

Bei der Verwendung von iptables wird jedes gefilterte Paket so verarbeitet, dass nur eine Kette anstatt mehrerer Ketten angewendet wird.

Beispiel: Ein FORWARD-Paket, das ein System betritt, würde mit ipchains den INPUT-, FORWARD-, und OUTPUT-Ketten unterliegen, um sein Ziel zu erreichen. iptables hingegen sendet Pakete nur zur INPUT-Kette, wenn diese für das lokale System bestimmt sind, während Pakete nur an die OUTPUT-Kette gesendet werden, wenn das lokale System die Pakete erzeugt hat. Aus diesem Grund müssen Sie sicherstellen, dass sich die Regel für das Abfangen eines bestimmten Pakets in der richtigen Kette befindet, die das Paket auch wirklich behandelt.

Das DENY-Ziel wurde auf DROP geändert.

Mit ipchains können Pakete, die einer Regel in einer Kette entsprachen, an das DENY-Ziel weitergeleitet werden. Dieses Ziel muss für den gleichen Effekt mit iptables auf DROP geändert werden.

Bei der Vergabe von Optionen innerhalb einer Regel spielt die Anordnung eine Rolle.

Bei ipchains spielt die Reihenfolge der Regeloptionen keine Rolle.

Der iptables-Befehl benutzt eine genauere Syntax. In iptables-Befehlen müssen Sie das zu verwendende Protokoll (ICMP, TCP, oder UDP) vor dem Ursprungs- oder Zielport spezifizieren.

Netzwerkschnittstellen müssen mit der korrekten Kette in Firewall-Regeln verknüpft werden.

So können Eingangsschnittstellen (-i Option) beispielsweise nur mit INPUT- oder FORWARD-Ketten und Ausgangsschnittstellen (-o Option) nur mit FORWARD- oder OUTPUT-Ketten verwendet werden.

Mit anderen Worten funktionieren INPUT-Ketten und eingehende Schnittstellen, sowie OUTPUT-Ketten und ausgehende Schnittstellen miteinander. FORWARD-Ketten funktionieren sowohl mit eingehenden, als auch ausgehenden Schnittstellen.

OUTPUT-Ketten werden nicht länger von eingehenden Schnittstellen verwendet und INPUT-Ketten bleiben von Paketen, die sich durch ausgehende Schnittstellen bewegen, unberührt.

Dies stellt keine umfassende Liste von Änderungen dar. Siehe Abschnitt 9.4.7, „Zusätzliche Informationsquellen“ für präzisere Informationen.

9.4.3. Befehlszeilenoptionen für IPTables

Regeln für das Filtern von Paketen werden durch Ausführen des iptables-Befehls erstellt. Die folgenden Aspekte des Pakets werden oft als Kriterien verwendet:

  • Pakettyp — Diese Option legt fest, welche Art von Paketen der Befehl filtert.

  • Paketquelle oder -ziel — Diese Option legt fest, welche Pakete vom Befehl auf Grundlage der Paketquelle oder des Paketziels gefiltert werden.

  • Ziel — Diese Option legt fest, welche Aktion ausgeführt wird, wenn die Pakete die oben genannten Kriterien erfüllen.

Siehe Abschnitt 9.4.3.4, „IPTables Übereinstimmungsoptionen“ und Abschnitt 9.4.3.5, „Zieloptionen“ für weitere Informationen zu speziellen Optionen, die diese Aspekte eines Pakets behandeln.

Die mit speziellen iptables-Regeln verwendeten Optionen müssen logisch gruppiert sein, d.h. auf Grundlage des Zwecks und der Bedingungen der Gesamtregel, damit die Regel gültig ist. Der Rest dieses Abschnitts erklärt häufig verwendete Optionen des Befehls iptables.

9.4.3.1. Struktur der IPTables-Optionen

Viele iptables-Befehle haben folgende Struktur:

 iptables [-t <table-name>] <command><chain-name> \ <parameter-1><option-1> \ <parameter-n><option-n>

<table-name> — Gibt an, für welche Tabelle die Regel zutrifft. Wird dies ausgelassen, wird die filter-Tabelle verwendet.

<command> — Gibt an, welche Aktion ausgeführt werden soll, wie beispielsweise das Anhängen oder Entfernen einer Regel.

<chain-name> — Definiert die Kette, die editiert, erstellt oder gelöscht werden soll.

<parameter>-<option>-Paare — Parameter und zugehörige Optionen, die angeben, wie ein Paket, auf das die Regel passt, verarbeitet werden soll.

Die Länge und Komplexität eines iptables-Befehls kann sich erheblich ändern, je nach dessen Zweck.

So kann beispielsweise der Befehl zum Löschen einer Regel aus einer Kette sehr kurz sein:

iptables -D <chain-name> <line-number>

Dagegen kann ein Befehl, der eine Regel, die Pakete eines bestimmten Subnetzes filtert hinzufügt und dabei eine Vielfalt an speziellen Parametern und Optionen verwendet, ziemlich lang sein. Beim Zusammensetzen des Befehls iptables muss bedacht werden, dass einige Parameter und Optionen weitere Parameter und Optionen benötigen, um eine gültige Regel zu konstruieren. Dies kann einen Kaskadeneffekt hervorrufen, mit weiteren Parametern, die noch mehr Parameter benötigen. Solange nicht alle Parameter und Optionen, die eine Reihe weiterer Optionen benötigen, erfüllt sind, ist die Regel nicht gültig.

Wenn Sie iptables -h eingeben, erhalten Sie eine vollständige Liste der iptables-Befehlsstrukturen.

9.4.3.2. Befehlsoptionen

Mit Befehlsoptionen wird iptables angewiesen, einen bestimmten Vorgang auszuführen. Nur eine einzige Befehlsoption pro iptables-Befehl ist erlaubt. Mit Ausnahme des Hilfebefehls sind alle Befehle in Großbuchstaben geschrieben.

Die iptables-Befehle sind:

  • -A — Hängt die Regel an das Ende der angegebenen Kette an. Im Gegensatz zur weiter unten beschriebenen Option -l wird hierbei kein ganzzahliges Argument verwendet. Die Regel wird immer an das Ende der angegebenen Kette gehängt.

  • -C — Kontrolliert eine bestimmte Regel, bevor sie zur benutzerdefinierten Kette hinzugefügt wird. Dieser Befehl kann Ihnen dabei helfen, komplizierte iptables-Regeln zu erstellen, indem Sie jeweils aufgefordert werden, zusätzliche Parameter und Optionen einzugeben.

  • -D <integer> | <rule> — Entfernt eine Regel in einer bestimmten Kette nach ihrer Ziffer (z.B. 5 für die 5. Regel einer Kette) oder durch Angabe einer Regel-Spezifizierung. Die Regel-Spezifizierung muss exakt mit einer bestehenden Regel übereinstimmen.

  • -E — Benennt eine benutzerdefinierte Kette um. Eine benutzerdefinierte Kette ist jede Kette, die nicht den standardmäßigen, bereits vorhandenen Ketten entspricht. (Werfen Sie einen Blick auf die Option -N weiter unten für Informationen zur Erstellung von benutzerdefinierten Ketten). Dies ist eine Schönheitskorrektur und beeinflusst die Struktur der Tabelle nicht.

    Anmerkung

    Wenn Sie versuchen, eine der Standard-Ketten umzubenennen, gibt das System die Fehlermeldung Treffer nicht gefunden aus. Sie können die Standard-Ketten nicht umbenennen.

  • -F — Löscht die gewählte Kette, woraufhin effektiv jede Regel in der Kette entfernt wird. Wenn keine Kette angegeben wird, löscht dieser Befehl jede Regel jeder Kette.

  • -h — Liefert eine Liste mit Befehlsstrukturen sowie eine kurze Zusammenfassung der Befehlsparameter und -Optionen.

  • -I [<integer>] — Fügt eine Regel an einem bestimmten Punkt mit ganzzahligen, benutzerdefinierten Wert in eine Kette ein. Wird kein Wert angegeben, wird die Regel am Anfang der Regelliste eingefügt.

    Achtung

    Wie bereits oben erwähnt, bestimmt die Reihenfolge der Regeln in einer Kette, welche Regeln für welche Pakete zutreffen. Dies sollte beim Hinzufügen von Regeln entweder mit der Option -A oder -l bedacht werden.

    Dies ist besonders wichtig, wenn Regeln unter Verwendung der Option -l mit einem ganzzahligen Parameter hinzugefügt werden. Wenn Sie beim Hinzufügen einer Regel zu einer Kette eine bereits existierende Nummer angeben, fügt iptables die neue Regel vor (oder über) der existierenden Regel hinzu.

  • -L — Listet alle Regeln in der nach dem Befehl spezifizierten Kette auf. Um alle Regeln in allen Ketten in der Standardtabelle filter aufzulisten, spezifizieren Sie nicht eine Kette oder eine Tabelle. Ansonsten sollte folgende Satzstruktur verwendet werden, um die Regeln in einer spezifischen Kette in einer bestimmten Tabelle aufzulisten:

     iptables -L <chain-name> -t <table-name>
    

    Zusätzliche Optionen für die -L-Befehlsoption, die Regelziffern liefern und ausführlichere Regelbeschreibungen ermöglichen, finden Sie in Abschnitt 9.4.3.6, „Auflistungsoptionen“.

  • -N — Erstellt eine neue Kette mit benutzerdefiniertem Namen. Der Name der Kette muss eindeutig sein, ansonsten wird eine Fehlermeldung angezeigt.

  • -P — Setzt die standardmäßige Richtlinie für eine bestimmte Kette, damit bei der Durchquerung von Paketen durch eine Kette, die Pakete, wie bei ACCEPT oder DROP, ohne Übereinstimmung mit einer Regel an ein bestimmtes Ziel weitergeleitet werden können.

  • -R — Ersetzt eine Regel in einer bestimmten Kette. Sie müssen eine Regelnummer nach dem Namen der Kette verwenden, um die Regel zu ersetzen. Die erste Regel einer Kette bezieht sich auf die Regelziffer eins.

  • -X — Entfernt eine benutzerdefinierte Kette. Eine integrierte Kette kann nicht gelöscht werden.

  • -Z — Stellt Byte- und Paketzähler in allen Ketten für eine bestimmte Tabelle auf Null.

9.4.3.3. IPTables Parameteroptionen

Bestimmte iptables-Befehle, einschließlich derer zum Hinzufügen, Anhängen, Entfernen, Einfügen oder Ersetzen von Regeln innerhalb einer bestimmten Kette, erfordern bestimmte Parameter für die Erstellung einer Paketfilterungsregel.

  • -c — Setzt die Zähler für eine bestimmte Regel zurück. Dieser Parameter akzeptiert die PKTS- und BYTES-Optionen zur Spezifizierung der zurückzusetzenden Zähler.

  • -d — Stellt Ziel-Hostnamen, IP-Adresse oder Netzwerk eines Pakets ein, das mit der Regel übereinstimmt. Wenn das Paket mit einem Netzwerk übereinstimmt, sind die folgenden Formate für IP-Adressen/Netmasks unterstützt:

    • N.N.N.N/M.M.M.M — Wobei N.N.N.N der Bereich der IP-Adresse und M.M.M.M die Netmask ist.

    • N.N.N.N/M — Wobei N.N.N.N der Bereich der IP-Adresse und M die Bitmask ist.

  • -f — Wendet diese Regel nur auf fragmentierte Pakete an.

    Wird die Option Ausrufezeichen (!) nach diesem Parameter verwendet, werden nur unfragmentierte Parameter verglichen.

    Anmerkung

    Die Unterscheidung zwischen fragmentierten und unfragmentierten Paketen ist wünschenswert, obwohl fragmentierte Pakete den standardmäßigen Teil des IP-Protokolls ausmachen.

    Ursprünglich dazu konzipiert, IP-Paketen die Reise durch Netzwerke mit unterschiedlichen Rahmengrößen zu gestatten, wird Fragmentierung heutzutage eher allgemein dazu verwendet, mit Hilfe von missgebildeten Paketen DoS-Attacken zu verursachen. An dieser Stelle sei auch erwähnt, dass IPv6 Fragmentierung komplett verbietet.

  • -i — Legt die Eingangsnetzwerkschnittstelle fest, z.B. eth0 oder ppp0, die für eine bestimmte Regel benutzt werden soll. Mit iptables sollte dieser zusätzliche Parameter nur mit INPUT- und FORWARD-Ketten in Verbindung mit der filter-Tabelle und der PREROUTING-Kette mit den nat- und mangle-Tabellen verwendet werden.

    Dieser Parameter unterstützt auch folgende spezielle Optionen:

    • ! — Macht die Anweisung rückgängig, was bedeutet, dass jegliche spezifizierte Schnittstellen von dieser Regel ausgenommen sind.

    • + — Ein Platzhalterzeichen, das verwendet wird, um alle Schnittstellen zu kontrollieren, die einer bestimmten Zeichenkette entsprechen. Der -i eth+-Parameter würde diese Regel z.B. für alle Ethnernet-Schnittstellen Ihres Systems anwenden, aber alle anderen Schnittstellen, wie z.B. ppp0 auslassen.

    Wenn der -i-Parameter ohne Spezifizierung einer Schnittstelle verwendet wird, ist jede Schnittstelle von dieser Regel betroffen.

  • -j — Springt zum angegebenen Ziel, wenn ein Paket einer bestimmten Regel entspricht.

    Die standardmäßigen Ziele sind ACCEPT, DROP, QUEUE und RETURN.

    Erweiterte Optionen sind ebenfalls über Module verfügbar sind, die standardmäßig mit mit dem Red Hat Enterprise Linux iptablesRPM-Paket geladen werden, wie z.B. unter anderem LOG, MARK und REJECT. Weitere Informationen zu diesen und anderen Zielen sowie Regeln zu deren Verwendung finden Sie auf der iptables-Handbuch-Seite.

    Sie können ein Paket, das dieser Regel entspricht, auch an eine benutzerdefinierte Kette außerhalb der aktuellen Kette weiterleiten. Dadurch können Sie andere Regeln auf dieses Paket anwenden.

    Wenn kein Ziel festgelegt ist, bewegt sich das Paket an der Regel vorbei, ohne dass etwas passieren würde. Der Zähler für diese Regel springt jedoch um eine Stelle weiter.

  • -o — Legt die Ausgangsnetzwerkschnittstelle für eine bestimmte Regel fest, die nur mit OUTPUT- und FORWARD-Ketten in der filter-Tabelle und mit der POSTROUTING-Kette in den nat- und mangle-Tabellen verwendet werden kann. Die Optionen dieses Parameters sind dieselben wie die des Parameters der Eingangsnetzwerkschnittstelle (-i).

  • -p <protocol> — Legt das IP-Protokoll für die Regel, die entweder icmp, tcp, udp oder all sein kann, fest, um allen möglichen Protokollen zu entsprechen. Außerdem können weniger verwendete Protokolle, die in /etc/protocols aufgelistet sind, ebenfalls verwendet werden.

    Die Option "alle" Protokolle bewirkt, dass die Regel für jedes unterstützte Protokoll zutrifft. Falls kein Protokoll in dieser Regel aufgelistet ist, ist der Standardwert "alle".

  • -s — Setzt die Quelle eines bestimmten Pakets mit Hilfe derselben Satzstrukturen, die der Zielparameter (-d) verwendet.

9.4.3.4. IPTables Übereinstimmungsoptionen

Verschiedene Netzwerkprotokolle ermöglichen spezielle Übereinstimmungsoptionen, die auf spezifische Weise gesetzt werden können, um ein bestimmtes Paket mit Hilfe dieses Protokolls zu kontrollieren. Das Protokoll muss jedoch zuerst im iptables-Befehl spezifiziert werden. So aktiviert -p <protocol-name> z.B. Optionen für das angegebene Protokoll. Beachten Sie, dass Sie auch die Protokoll-ID anstelle des Protokoll-Namens verwenden können. Werfen Sie einen Blick auf die folgenden Beispiele, die jeweils denselben Effekt haben:

 iptables -A INPUT -p icmp --icmp-type any -j ACCEPT  iptables -A INPUT -p 5813 --icmp-type any -j ACCEPT 

Die Definition von Diensten steht in der Datei /etc/services zur Verfügung. Im Interesse der Lesbarkeit wird die Verwendung der Namen der Dienste anstelle der Portnummern empfohlen.

Wichtig

Sichern Sie die Datei /ect/services ab, um nicht autorisierte Bearbeitung zu verhindern. Ist diese Datei editierbar, können Cracker sie dazu missbrauchen, Ports auf Ihrem Rechner zu aktivieren, die ansonsten geschlossen sind. Um diese Datei abzusichern, tippen Sie als Root folgenden Befehl:

 [root@myServer ~]# chown root.root /etc/services [root@myServer ~]# chmod 0644 /etc/services [root@myServer ~]# chattr +i /etc/services 

Auf diese Weise wird verhindert, dass die Datei umbenannt oder gelöscht wird, bzw. Links zu ihr erstellt werden.

9.4.3.4.1. TCP-Protokoll

Folgende Übereinstimmungsoptionen stehen für das TCP-Protokoll zur Verfügung (-p tcp):

  • --dport — Definiert den Ziel-Port für das Paket.

    Verwenden Sie den Namen eines Netzwerkdienstes (wie z.B. www oder smtp), eine Portnummer oder eine Reihe von Portnummern, um diese Option zu konfigurieren.

    Um eine Reihe von Portnummern anzugeben, trennen Sie die zwei Ziffern durch einen Doppelpunkt (:), z.B.: -p tcp --dport 3000:3200. Der größtmöglichste Bereich ist 0:65535.

    Sie können auch ein Ausrufezeichen (!) als Flag nach der --dport-Option verwenden, um alle Pakete, die nicht diesen Netzwerkdienst oder diesen Port verwenden, abzugleichen.

    Um die Namen und Aliase von Netzwerkdiensten und den von ihnen verwendeten Portnummern zu durchsuchen, werfen Sie einen Blick auf die Datei /etc/services.

    Die Übereinstimmungsoption --destination-port ist äquivalent zu --dport.

  • --sport — Setzt den Ursprungsport des Pakets unter Verwendung der selben Optionen wie --dport. Sie können auch --source-port verwenden, um diese Übereinstimmungsoption zu spezifizieren.

  • --syn — Kontrolliert alle TCP-Pakete, die eine Kommunikation initialisieren sollen, allgemein SYN-Pakete genannt, auf Übereinstimmung mit dieser Regel. Alle Pakete, die einen Daten-Payload enthalten, werden nicht bearbeitet.

    Wird ein Ausrufezeichen (!) als Flag hinter die --syn-Option gesetzt, werden alle Nicht-SYN-Pakete kontrolliert.

  • --tcp-flags <tested flag> < set flag list> — Ermöglicht die Verwendung von TCP-Paketen mit bestimmten Bits oder Flags, damit sie einer Regel entsprechen.

    Die Übereinstimmungsoption --tcp-flags akzeptiert nachstehend zwei Parameter, die Flags für bestimmte Bits in einer Liste mit Kommatrennung sind. Der erste Parameter ist eine Maske, die die zu untersuchenden Flags des Pakets bestimmt. Der zweite Parameter bezieht sich auf die Flags, die im Paket gesetzt werden müssen, um eine Übereinstimmung zu erhalten.

    Mögliche Flags sind:

    • ACK

    • FIN

    • PSH

    • RST

    • SYN

    • URG

    • ALL

    • NONE

    Eine iptables-Regel, die folgende Spezifizierung enthält, trifft beispielsweise nur auf TCP-Pakete zu, in denen das SYN-Flag aktiviert und die ACK- und FIN-Flags deaktiviert sind:

    --tcp-flags ACK,FIN,SYN SYN

    Verwenden Sie das Ausrufezeichen (!) hinter --tcp-flags, um den Effekt der Überprüfungsoption umzukehren.

  • --tcp-option — Versucht mit Hilfe von TCP-spezifischen Optionen zu überprüfen, die innerhalb eines bestimmten Pakets aktiviert werden können. Diese Übereinstimmungsoption kann ebenfalls mit dem Ausrufezeichen (!) umgekehrt werden.

9.4.3.4.2. UDP-Protokoll

Für das UDP-Protokoll stehen folgende Übereinstimmungsoptionen zur Verfügung(-p udp):

  • --dport — Spezifiziert den Zielport des UDP-Pakets unter Verwendung von Dienstnamen, Portnummer oder einer Reihe von Portnummern. Die --destination-port-Übereinstimmungsoption kann an Stelle von --dport benutzt werden.

  • --sport — Setzt den Ursprungsport des Pakets unter Verwendung der selben Optionen wie --dport. Sie können auch --source-port anstatt --sport verwenden, um diese Übereinstimmungsoption zu spezifizieren.

Um eine spezifische Reihe von Portnummern für die Optionen --dport und --sport anzugeben, trennen Sie die zwei Ziffern durch einen Doppelpunkt (:), z.B.: -p tcp --dport 3000:3200. Der größtmöglichste Bereich ist 0:65535.

9.4.3.4.3. ICMP-Protokoll

Diese folgenden Match-Optionen sind für das Internet Control Message Protocol (ICMP) (-p icmp) verfügbar:

  • --icmp-type — Bestimmt den Namen oder die Nummer des ICMP-Typs, der mit der Regel übereinstimmen soll. Durch Eingabe des Befehls iptables -p icmp -h wird eine Liste aller gültigen ICMP-Namen angezeigt.

9.4.3.4.4. Module mit zusätzlichen Match-Optionen

Zusätzliche Übereinstimmungsoptionen stehen durch Module zur Verfügung, die vom Befehl iptables geladen werden.

Um ein Übereinstimmungsmodul anzuwenden, müssen Sie das Modul mit dessen Namen mit Hilfe der Option -m <module-name> (wobei <module-name> durch den Namen des Moduls ersetzt wird) laden.

Standardmäßig stehen zahlreiche Module zur Verfügung. Sie können auch Ihre eigenen Module erstellen, um die Funktionalität zu erweitern.

Folgend ist eine Teilliste der am häufigsten verwendeten Module:

  • limit-Modul — Schränkt die Anzahl der für eine bestimmte Regel zutreffenden Pakete ein.

    Wenn das limit-Modul in Verbindung mit dem LOG-Ziel verwendet wird, kann es verhindern, dass eine Flut zutreffender Pakete den System-Log mit sich wiederholenden Nachrichten auffüllen, bzw. Systemressourcen verbrauchen.

    Werfen Sie einen Blick auf Abschnitt 9.4.3.5, „Zieloptionen“ für weitere Informationen zum LOG-Ziel.

    Das limit-Modul erlaubt die folgenden Optionen:

    • --limit — Bestimmt die Zahl der Übereinstimmungen innerhalb eines bestimmten Zeitraums, der im Format <value> / <period> angegeben wird. Mit --limit 5/hour, zum Beispiel, kann die Regel nur 5 Mal in einer Stunde übereinstimmen.

      Perioden können in Sekunden, Minuten, Stunden oder Tagen angegeben werden.

      Wenn keine Anzahl- und Zeitarbeiter angegeben sind, wird der Standardwert 3/hour angenommen.

    • --limit-burst — Setzt eine Grenze für die Anzahl von Paketen, die gleichzeitig mit einer Regel übereinstimmen können.

      Diese Option wird als ganzzahliger Wert angegeben und sollte in Zusammenhang mit der Option --limit verwendet werden.

      Wenn kein Wert angegeben wird, wird der Standardwert von fünf (5) angenommen.

  • state-Modul — Dieses Modul, welches die --state-Übereinstimmungsoptionen definiert, kann ein Paket auf die nachfolgenden, bestimmten Verbindungszustände überprüfen:

    Das Modul state erlaubt die folgenden Optionen:

    • --state — Übereinstimmung mit einem Paket, das folgenden Verbindungszustände hat:

      • ESTABLISHED — Das übereinstimmende Paket wird anderen Paketen in einer bestimmten Verbindung zugeordnet. Sie müssen diesen Zustand akzeptieren, wenn Sie eine Verbindung zwischen Client und Server aufrechterhalten möchten.

      • INVALID — Das übereinstimmende Paket kann nicht mit einer bekannten Verbindung verknüpft werden.

      • NEW — Das übereinstimmende Paket stellt entweder eine neue Verbindung her oder ist Teil einer Zwei-Weg-Verbindung, die vorher nicht gesehen wurde. Sie müssen diesen Zustand akzeptieren, wenn Sie neue Verbindungen zu einem Dienst erlauben möchten.

      • RELATED — Ein übereinstimmendes Paket stellt eine neue Verbindung her, die auf irgendeine Weise mit einer bestehenden Verbindung zusammenhängt. Ein Beispiel hierfür ist FTP, das eine Verbindung zur Kontrolle von Datenverkehr (Port 21) und eine separate Verbindung zur Übertragung von Daten (Port 20) verwendet.

      Die Verbindungsstatus können untereinander miteinander verbunden werden, indem sie durch Kommata voneinander getrennt werden, wie z.B. in -m state --state INVALID,NEW.

  • mac-Modul — Dieses Modul ermöglicht die Übereinstimmung einer bestimmten Hardware-MAC-Adresse zu überprüfen.

    Das mac-Modul hat folgende Option:

    • --mac-source — Überprüft die MAC-Adresse der NIC, welche das Paket gesendet hat. Um eine MAC-Adresse von einer Regel auszuschließen, fügen Sie nach der --mac-source-Übereinstimmungsoption ein Ausrufezeichen (!) hinzu.

Werfen Sie einen Blick auf die Handbuch-Seite von iptables für weitere Übereinstimmungsoptionen, die durch Module verfügbar sind.

9.4.3.5. Zieloptionen

Sobald ein Paket mit einer bestimmten Regel übereinstimmt, kann die Regel das Paket an viele verschiedene Ziele senden, an denen dann eventuell weitere Vorgänge erfolgen. Außerdem hat jede Kette ein standardmäßiges Ziel, das verwendet wird, wenn ein Paket keiner Regel entspricht oder wenn in der Regel, mit dem das Paket übereinstimmt, ein Ziel angegeben ist.

Die Folgenden sind die Standardziele:

  • <user-defined-chain> — Eine benutzerdefinierten Kette innerhalb der Tabelle. Benutzerdefinierte Ketten müssen eindeutig sein. Dieses Ziel leitet das Paket an die angegebene Kette weiter.

  • ACCEPT — Das Paket gelangt erfolgreich an sein Ziel oder an eine andere Kette.

  • DROP — Das Paket wird "ausgelassen". Das System, das dieses Paket gesendet hat, wird nicht über das "Ausfallen" des Pakets benachrichtigt.

  • QUEUE — Das Paket wird zur Warteschlange für die Bearbeitung durch eine Benutzerraum-Applikation hinzugefügt.

  • RETURN — Hält die Überprüfung der Übereinstimmung des Pakets mit Regeln in der aktuellen Kette an. Wenn das Paket mit einem RETURN-Ziel mit einer Regel in einer Kette übereinstimmt, die von einer anderen Kette aufgerufen wurde, wird das Paket an die erste Kette zurückgesendet, damit die Überprüfung wieder dort aufgenommen werden kann, wo sie unterbrochen wurde. Wenn die RETURN-Regel in einer integrierten Kette verwendet wird und das Paket nicht zu seiner vorherigen Kette zurückkehren kann, entscheidet das Standardziel für die aktuelle Kette, welche Maßnahme getroffen wird.

Zusätzlich zu diesen Standardzielen können auch noch verschiedene andere Ziele mit Erweiterungen verwendet werden. Diese Erweiterungen werden Zielmodule oder auch Übereinstimmungsoptionsmodulen genannt und die meisten treffen lediglich auf spezielle Tabellen und Situationen zu. Weitere Informationen zu Übereinstimmungsoptionsmodulen finden Sie unter Abschnitt 9.4.3.4.4, „Module mit zusätzlichen Match-Optionen“.

Es gibt viele erweiterte Zielmodule, von denen sich die meisten auf bestimmte Tabellen oder Situationen beziehen. Einige der bekanntesten Zielmodule, die standardmäßig in Red Hat Enterprise Linux enthalten sind, sind:

  • LOG — Protokolliert alle Pakete, die dieser Regel entsprechen. Da die Pakete vom Kernel protokolliert werden, bestimmt die Datei /etc/syslog.conf, wo diese Protokolldateien geschrieben werden. Standardmäßig werden sie in der Datei /var/log/messages abgelegt.

    Nach dem LOG-Ziel können verschiedene Optionen verwendet werden, um die Art des Protokolls zu bestimmen:

    • --log-level — Bestimmt die Prioritätsstufe eines Protokolliervorgangs. Auf den Handbuch-Seiten von syslog.conf finden Sie eine Liste der Prioritätsstufen.

    • --log-ip-options — Alle in den Kopfzeilen eines IP-Pakets enthaltenen Optionen werden protokolliert.

    • --log-prefix — Fügt beim Schreiben einer Protokollzeile eine Zeichenkette von bis zu 29 Zeichen vor der Protokollzeile ein. Dies ist auch beim Schreiben von syslog-Filtern im Zusammenhang mit der Paketprotokollierung sehr nützlich.

      Anmerkung

      Aufgrund eines Problems mit dieser Option sollten sie ein Leerzeichen hinter log-prefix einfügen.

    • --log-tcp-options — Alle in den Kopfzeilen eines TCP-Pakets enthaltenen Optionen werden protokolliert.

    • --log-tcp-sequence — Schreibt die TCP- Sequenznummer für das Paket in der Protokolldatei.

  • REJECT — Sendet ein Fehlerpaket an das System zurück, das das Paket gesendet hat, und lässt dieses dann "aus" (DROP).

    Mit dem REJECT-Ziel kann die --reject-with <type> -Option verwendet werden, um mehrere Details zusammen mit dem Fehlerpaket zu senden. Die Meldung port-unreachable ist die standardmäßige <type>-Fehlermeldung (wobei <type> die Art der Zurückweisung angibt), die angezeigt wird, wenn keine andere Option angewandt wurde. Eine vollständige Liste der verwendbaren <type>-Optionen finden Sie auf der iptables-Handbuch-Seite.

Andere Zielerweiterungen, die für die IP-Masquerading unter Verwendung der nat-Tabelle oder für Paketänderung mithilfe der mangle-Tabelle nützlich sind, finden Sie auf der iptables-Handbuch-Seite.

9.4.3.6. Auflistungsoptionen

Der standardmäßige Auflistungsbefehl iptables -L [<chain-name>] bietet eine sehr allgemeine Übersicht über die standardmäßigen aktuellen Regel-Ketten der Filtertabelle. Es gibt aber auch noch zusätzliche Optionen mit weiteren Informationen:

  • -v — Zeigt eine ausführliche Ausgabe an, wie z.B. die Anzahl der Pakete und Bytes, die jede Kette abgearbeitet hat, die Anzahl der Pakete und Bytes, die von jeder Regel auf Übereinstimmung überprüft wurden und auf deren Schnittstellen eine bestimmte Regel angewandt werden.

  • -x — Erweitert die Zahlen auf ihre exakten Werte. In einem arbeitenden System kann die Anzahl der Pakte und Bytes, die von einer bestimmten Kette oder Regel gesehen werden, unter Verwendung der Abkürzungen Kilobytes (Tausender), Megabytes (Millionen) und Gigabytes (Milliarden) am Ende der Zahl wiedergegeben werden. Mit dieser Option muss zwangsläufig die vollständige Zahl angezeigt werden.

  • -n — Zeigt IP-Adressen und Portnummern im numerischen Format an, und nicht im standardmäßigen Hostnamen- und Netzwerkdienst-Format.

  • --line-numbers — Listet Regeln in jeder Kette in Nähe derer numerischer Reihenfolge in der Kette auf. Diese Option ist nützlich, wenn man versucht, eine bestimmte Regel aus einer Kette zu entfernen oder zu bestimmen, wo eine Regel in einer Kette eingefügt werden soll.

  • -t <table-name> — Gibt einen Tabellennamen an. Falls diese Option ausgelassen wird, wird die Filtertabelle standardmäßig verwendet.

Das folgende Beispiel zeigt die Verwendung einiger dieser Optionen auf. Achten Sie auf den Unterschied in der Darstellung der Bytes, wenn die Option -x verwendet wird.

 [root@myserver ~]# iptables -L OUTPUT -v -n -x Kette OUTPUT (policy ACCEPT 64005 packets, 6445791 bytes) pkts bytes target prot opt in out source destination 1593 133812 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 [root@myserver ~]#iptables -L OUTPUT -v -n Kette OUTPUT (policy ACCEPT 64783 packets, 6492K bytes) pkts bytes target prot opt in out source destination 1819 153K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 [root@myserver ~]# 

9.4.4. IPTables-Regeln speichern

Regeln, die mit dem iptables-Befehl erstellt wurden, werden nur im RAM gespeichert. Wenn das System nach Erstellung der iptables-Regeln (noch bevor diese gespeichert wurden) neu gestartet wird, gehen diese verloren. Wenn Sie möchten, dass Netzfilterregeln bei jedem Booten Ihres Systems erneut wirksam werden, müssen Sie sich als Root anmelden und folgendes eingeben:

 /sbin/service iptables save 

Dadurch wird das iptables-Init-Skript angewiesen, das aktuelle /sbin/iptables-save-Programm auszuführen und die aktuelle iptables-Konfiguration in die /etc/sysconfig/iptables-Datei zu schreiben. Die bestehende Datei /etc/sysconfig/iptables wird unter /etc/sysconfig/iptables.save gespeichert.

Beim nächsten Systemstart wendet das iptables-Init-Skript die in /etc/sysconfig/iptables gespeicherten Regeln durch die Verwendung des /sbin/iptables-restore-Befehls erneut an.

Es ist grundsätzlich empfehlenswert, eine neue iptables-Regel immer erst zu testen, bevor sie in die /etc/sysconfig/iptables-Datei eingefügt wird. Sie können die iptables-Regeln aber auch von der Version dieser Datei eines anderen Systems in diese Datei kopieren, wodurch sie in kurzer Zeit ganze Sätze von iptables-Regeln an verschiedene Rechner verteilen können.

Weiterhin haben Sie die Möglichkeit, die iptables-Regeln in einer separaten Datei zur weiteren Verteilung, zum Backup oder anderen Zwecken zu speichern. Um Ihre iptables-Regeln zu speichern, tippen Sie als Root folgenden Befehl:

 [root@myserver ~]# iptables-save > <filename>
wobei <filename> ein benutzerdefinierter Name für Ihr Regelset ist.

Wichtig

Wenn Sie die Datei /etc/sysconfig/iptables an andere Rechner verteilen, müssen Sie /sbin/service iptables restart eingeben, damit die neuen Regeln wirksam werden.

Anmerkung

Beachten Sie bitte den Unterschied zwischen dem Befehliptables (/sbin/iptables), der dazu verwendet wird, die Tabellen und Ketten zu manipulieren, die die iptables-Funktionalität darstellen, und dem Dienstiptables (/sbin/iptables service), der zum Aktivieren und Deaktivieren des iptables-Dienstes selbst verwendet wird.

9.4.5. IPTables Kontrollskripte

Unter Red Hat Enterprise Linux gibt es zwei grundlegende Methoden, iptables zu kontrollieren:

  • /sbin/service iptables <option> — Wird verwendet, um verschiedene Funktionen von iptables zu manipulieren, unter Verwendung des Iinit-Skripts von iptables. Die folgenden Optionen stehen zur Verfügung:

    • start — Ist eine Firewall konfiguriert (d.h. /etc/sysconfig/iptables ist vorhanden), werden alle laufenden iptables komplett beendet und dann mit dem Befehl /sbin/iptables-restore gestartet. Diese Option funktioniert nur dann, wenn das ipchains Kernel-Modul nicht geladen ist. Um zu überprüfen, ob dieses Modul geladen ist, tippen Sie als Root folgenden Befehl:

       [root@MyServer ~]# lsmod | grep ipchains 
      

      Wenn dieser Befehl keine Ausgabe zurückgibt, ist das Modul nicht geladen. Falls nötig, können Sie das Modul mit dem Befehl /sbin/rmmod entfernen.

    • stop — Wenn eine Firewall aktiviert ist, werden die Firewall-Regeln im Speicher gelöscht und alle iptables-Module und Helfer entladen.

      Wenn die IPTABLES_SAVE_ON_STOP-Direktive in der Konfigurationsdatei /etc/sysconfig/iptables-config vom Standardwert auf yes geändert wird, werden die augenblicklichen Regeln unter /etc/sysconfig/iptables gespeichert und jede bestehende Regel nach /etc/sysconfig/iptables.save verschoben.

      Werfen Sie einen Blick auf Abschnitt 9.4.5.1, „Konfigurationsdatei der IPTables Kontrollskripte“ für weitere Informationen zur Datei iptables-config.

    • restart — Sollte eine Firewall aktiviert sein, werden die Firewall-Regeln im Speicher gelöscht und die Firewall, sollte sie in /etc/sysconfig/iptables konfiguriert sein, neu gestartet. Diese Option funktioniert nur dann, wenn die ipchains Kernel-Module nicht geladen sind.

      Wenn die IPTABLES_SAVE_ON_RESTART-Direktive der Konfigurationsdatei /etc/sysconfig/iptables-config vom Standardwert auf yes geändert wird, werden die aktuellen Regeln unter /etc/sysconfig/iptables gespeichert und jede bestehende Regel nach /etc/sysconfig/iptables.save verschoben.

      Werfen Sie einen Blick auf Abschnitt 9.4.5.1, „Konfigurationsdatei der IPTables Kontrollskripte“ für weitere Informationen zur Datei iptables-config.

    • status — Zeigt den Status einer Firewall an und listet alle aktiven Regeln auf.

      Die standardmäßige Konfiguration für diese Option zeigt die IP-Adressen in jeder Regel an. Um Domain- und Hostname-Informationen anzuzeigen, editieren sie die Datei /etc/sysconfig/iptables-config und setzen den Wert von IPTABLES_STATUS_NUMERIC auf no. Werfen Sie einen Blick auf Abschnitt 9.4.5.1, „Konfigurationsdatei der IPTables Kontrollskripte“ für weitere Informationen zur Datei iptables-config.

    • panic — Löscht alle Firewall-Regeln. Die Richtlinie aller konfigurierten Tabellen wird auf DROP gesetzt.

      Diese Option könnte nützlich sein, wenn ein Server im Verdacht steht, kompromittiert worden zu sein. Anstelle das System physikalisch vom Netzwerk zu trennen oder es herunterzufahren, können Sie mit Hilfe dieser Option jeglichen weiteren Netzwerkverkehr stoppen und gleichzeitig den Rechner in einem Zustand zu belassen, der die Analyse oder andere forensische Untersuchung ermöglicht.

    • save — Speichert Firewall-Regeln mittels iptables-save nach /etc/sysconfig/iptables. Werfen Sie einen Blick auf Abschnitt 9.4.4, „IPTables-Regeln speichern“ für weitere Informationen.

Tipp

Um die gleichen Initskript-Befehle zu verwenden, um den Netfilter für IPv6 zu kontrollieren, ersetzen Sie iptables durch ip6tables in den in diesem Abschnitt angegebenen /sbin/service Befehlen. Für weitere Informationen zu IPv6 und Netfilter, sehen Sie Abschnitt 9.4.6, „IPTables und IPv6“.

9.4.5.1. Konfigurationsdatei der IPTables Kontrollskripte

Das Verhalten des iptables-Init-Skripts wird durch die Konfigurationsdatei /etc/sysconfig/iptables-config kontrolliert. Nachfolgend finden Sie eine Liste der in dieser Datei vorkommenden Direktiven:

  • IPTABLES_MODULES — Gibt eine durch Leerzeichen getrennte Liste von zusätzlichen iptables-Modulen an, die beim Aktivieren einer Firewall geladen wird. Diese kann Verbindungs-Tracker und NAT Helfer enthalten.

  • IPTABLES_MODULES_UNLOAD — Entfernt Module beim Neustarten und Stoppen. Diese Direktive akzeptiert die folgenden Werte:

    • yes — Der Standardwert. Diese Option muss gesetzt sein, um einen richtigen Status für einen Firewall-Neustart oder -Stopp zu erhalten.

    • no — Diese Option sollte nur dann gesetzt sein, wenn es Probleme beim Entladen der Netfilter-Module gibt.

  • IPTABLES_SAVE_ON_STOP — Speichert die aktuellen Firewall-Regeln nach /etc/sysconfig/iptables, wenn die Firewall angehalten wird. Diese Direktive akzeptiert folgende Werte:

    • yes — Speichert vorhandene Regeln nach /etc/sysconfig/iptables, wenn die Firewall angehalten wird. Die vorherige Version wird unter /etc/sysconfig/iptables.save abgelegt.

    • no — Der Standardwert. Bestehende Regeln werden nicht gespeichert, wenn die Firewall angehalten wird.

  • IPTABLES_SAVE_ON_RESTART — Speichert aktuelle Firewall-Regeln wenn die Firewall neu gestartet wird. Diese Direktive akzeptiert die folgenden Werte:

    • yes — Speichert bestehende Regeln nach /etc/sysconfig/iptables, wenn die Firewall neu gestartet wird. Die vorherige Version wird dabei unter /etc/sysconfig/iptables.save abgelegt.

    • no — Der Standardwert. Bestehende Regeln werden nicht gespeichert, wenn die Firewall neu gestartet wird.

  • IPTABLES_SAVE_COUNTER — Speichert und stellt alle Paket- und Byte-Zähler in allen Ketten und Regeln wieder her. Diese Anweisung akzeptiert die folgenden Werte:

    • yes — Speichert die Werte des Zählers.

    • no — Der Standardwert. Speichert die Werte der Zähler nicht.

  • IPTABLES_STATUS_NUMERIC — Gibt die IP-Adressen anstelle der Domain- oder Hostnamen in der Statusanzeige aus. Diese Direktive akzeptiert die folgenden Werte:

    • yes — Der Standardwert. Gibt lediglich IP-Adressen in der Statusanzeige aus.

    • no — Gibt Domain- oder Hostnamen in der Statusanzeige aus.

9.4.6. IPTables und IPv6

Wenn das Paket iptables-ipv6 installiert ist, kann der Netfilter in Red Hat Enterprise Linux das IPv6-Internetprotokoll der nächsten Generation filtern. Der Befehl zur Manipulation des IPv6-Netfilters ist ip6tables.

Die meisten Direktiven für diesen Befehl sind identisch zu denen von iptables, mit der Ausnahme, dass die nat-Tabelle noch nicht unterstützt wird. Mit anderen Worten ist es noch nicht möglich, IPv6 Network-Address-Translation Tasks, wie Masquerading und Port-Forwarding, durchzuführen.

Regeln für ip6tables werden in der Datei /etc/sysconfig/ip6tables gespeichert. Alte, durch die ip6tables-Init-Skripte gespeicherte Regeln, sind in der Datei /etc/sysconfig/ip6tables.save.

Die Konfigurationsoptionen für ip6tables-Init-Skripte werden in /etc/sysconfig/ip6tables-config gespeichert und die Namen der individuellen Direktiven unterscheiden sich leicht von ihren iptables-Gegenstücken.

Zum Beispiel ist das Äquivalent zur iptables-config-Direktive IPTABLES_MODULESIP6TABLES_MODULES in der ip6tables-config-Datei.

9.4.7. Zusätzliche Informationsquellen

Zusätzliche Informationen zur Paketfilterung mit iptables finden Sie in den weiter unten aufgeführten Quellen.

9.4.7.1. Installierte Dokumentation

  • man iptables — Enthält eine Beschreibung von iptables, sowie eine umfangreiche Liste verschiedener Ziele, Optionen und Übereinstimmungserweiterungen.

9.4.7.2. Hilfreiche Websites

  • http://www.netfilter.org/ — Die Homepage des Netfilter/iptables Projektes. Enthält ausgewählte Informationen zu iptables sowie FAQ zu spezifischen Problemen, denen Sie unter Umständen begegnen, verschiedene hilfreiche Handbücher von Rusty Russell, dem Linux-IP-Firewall-Maintainer. In diesen Anleitungen werden Themen, wie z.B. grundlegende Netzwerkkonzepte, Kernel-Paketfilterung und NAT-Konfigurationen besprochen.

  • http://www.linuxnewbie.org/nhf/Security/ IPtables_Basics.html — Ein sehr allgemeiner Überblick darüber, wie sich Pakete durch den Linux-Kernel bewegen, plus eine Einleitung zur Erstellung von einfachen iptables-Befehlen.

Kapitel 10. Sicherheit und SELinux

10.1. Einführung in SELinux

Security-Enhanced Linux (SELinux) ist eine Sicherheitsarchitektur integriert in den 2.6.x Kernel unter Verwendung der Linux Security Modules (LSM). Es handelt sich dabei um ein Produkt der National Security Agency (NSA) der amerikanischen Regierung und der SELinux-Gemeinschaft. Die Integration von SELinux in Red Hat Enterprise Linux ist ein gemeinschaftliches Projekt der NSA und Red Hat.

10.1.1. SELinux Überblick

SELinux bietet ein flexibles Mandatory Access Control (MAC) System (regelbasierte Zugriffskontrolle), welches im Linux Kernel implementiert ist. Unter Standard-Linux Discretionary Access Control (DAC - objektbezogene Zugriffskontrolle), besitzt eine Applikation oder auch ein Prozess, als Benutzer ausgeführt (UID oder SUID), die Benutzer-Berechtigungen zu Objekten wie Dateien, Sockets oder anderen Prozessen. Ein MAC-Kernel schützt das System vor böswilligen oder fehlerhaften Applikationen, die das System beschädigen oder zerstören könnten.

SELinux legt die Zugriffsrechte und transition-Rechte jedes Benutzers, jeder Applikation, jedes Prozesses und jeder Datei auf dem System fest. SELinux regelt somit die Interaktion dieser Einheiten, die eine Sicherheitsrichtlinie (Policy) verwenden, wodurch festlegt wird, wie strikt oder nachsichtig eine vorgegebene Installation von Red Hat Enterprise Linux sein sollte.

Im alltäglichen Gebrauch kommen Systembenutzer kaum mit SELinux in Berührung. Lediglich Systemadministratoren müssen sich überlegen, wie strikt eine Sicherheitsrichtlinie für ihre Server-Umgebungen umgesetzt werden soll. Die Sicherheitsrichtlinie kann so strikt oder so tolerant wie nötig sein, und ist sehr detailliert. Auf dieser Basis erhält der SELinux-Kernel eine komplette, detaillierte Kontrolle über das gesamte System.

Der SELinux-Entscheidungsfindungsprozess

Versucht ein Subjekt (z.B. eine Applikation) auf ein Objekt (z.B. eine Datei) zuzugreifen, überprüft der Server zur Umsetzung der Sicherheitsrichtlinie im Kernel einen Access Vector Cache (AVC), in dem Berechtigungen von Subjekt und Objekt gecacht (zwischengespeichert) werden. Falls keine Entscheidung auf der Basis der Daten im AVC gefällt werden kann, wird die Anfrage an den Sicherheits-Server weitergegeben, der den Sicherheitskontext der Applikation und der Datei in einer Matrix nachschaut. Die Berechtigung wird dann entweder erteilt oder verweigert und eine Meldung avc: denied detailliert in /var/log/messages ausgegeben, wenn die Berechtigung verweigert wird. Der Sicherheitskontext von Subjekten und Objekten wird anhand der installierten Sicherheitsrichtlinie umgesetzt, die außerdem die Informationen liefert, um die Matrix des Sicherheitsservers entsprechend zu füllen.

Werfen Sie einen Blick auf die folgende Darstellung:

SELinux-Entscheidungsprozess

SELinux-Entscheidungsprozess.

Abbildung 10.1. SELinux-Entscheidungsprozess

SELinux Betriebsmodi

Anstelle des enforcing-Modus kann SELinux auch im permissive-Modus laufen, in welchem der AVC überprüft wird und Verweigerungen protokolliert werden. SELinux erzwingt in diesem Fall die Sicherheitsrichtlinie jedoch nicht. Dies kann zur Problembehandlung und zur Entwicklung oder Feinabstimmung einer SELinux-Sicherheitsrichtlinie hilfreich sein.

Weitere Informationen über die Funktionsweise von SELinux finden Sie in Abschnitt 10.1.3, „Zusätzliche Ressourcen“.

10.1.2. Dateien, die mit SELinux zusammenhängen

Die folgenden Abschnitte befassen sich mit den SELinux-Konfigurationsdateien und zugehörigen Dateisystemen.

10.1.2.1. Das SELinux Pseudo-Dateisystem

Das /selinux/-Pseudo-Dateisystem beinhaltet Befehle, welche am häufigsten vom Kernel-Subsystem gebraucht werden. Diese Art von Dateisystem ist ähnlich dem /proc/-Pseudo-Dateisystem.

Administratoren und Benutzer müssen diese Komponente normalerweise nicht handhaben.

Das folgende Beispiel zeigt Musterinhalte im Verzeichnis /selinux/:

-rw-rw-rw-  1 root root 0 Sep 22 13:14 access
dr-xr-xr-x  1 root root 0 Sep 22 13:14 booleans
--w-------  1 root root 0 Sep 22 13:14 commit_pending_bools
-rw-rw-rw-  1 root root 0 Sep 22 13:14 context
-rw-rw-rw-  1 root root 0 Sep 22 13:14 create
--w-------  1 root root 0 Sep 22 13:14 disable
-rw-r--r--  1 root root 0 Sep 22 13:14 enforce
-rw-------  1 root root 0 Sep 22 13:14 load
-r--r--r--  1 root root 0 Sep 22 13:14 mls
-r--r--r--  1 root root 0 Sep 22 13:14 policyvers
-rw-rw-rw-  1 root root 0 Sep 22 13:14 relabel
-rw-rw-rw-  1 root root 0 Sep 22 13:14 user

Das Ausführen des Befehls cat auf der enforce-Datei gibt entweder eine 1 für den enforcing-Modus, oder eine 0 für den permissive-Modus aus.

10.1.2.2. SELinux-Konfigurationsdateien

Die folgenden Abschnitte beschreiben SELinux-Konfigurations- und -Policy-Dateien und verwandte Dateisysteme im Verzeichnis /etc/.

10.1.2.2.1. Die /etc/sysconfig/selinux-Konfigurationsdatei

There are two ways to configure SELinux under Red Hat Enterprise Linux: using the SELinux Administration Tool (system-config-selinux), or manually editing the configuration file (/etc/sysconfig/selinux).

Die Datei /etc/sysconfig/selinux ist die primäre Konfigurationsdatei zur Aktivierung, bzw. Deaktivierung von SELinux, sowie der Einstellung, welche Sicherheitsrichtlinie wie auf dem System implementiert werden soll.

Hinweis

/etc/sysconfig/selinux beinhaltet einen symbolischen Link zur eigentlichen Konfigurationsdatei /etc/selinux/config.

Im Folgenden wird die vollständige Palette an Optionen, die zur Konfiguration erhältlich sind, beschrieben:

  • SELINUX=enforcing|permissive|disabled — Definiert den Top-Level Status von SELinux auf einem System.

    • enforcing — Die SELinux Sicherheitsrichtlinie (Policy) ist "enforced".

    • permissive — Das SELinux-System gibt Warnungen aus, erzwingt jedoch keine Sicherheitsrichtlinie (Policy).

      Dies ist hilfreich bei der Problembehandlung und Fehlerbeseitigung. Im permissive-Modus werden mehr Verweigerungen protokolliert, da Subjekte mit Aktionen fortfahren können, die ansonsten im enforcing-Modus verweigert würden. So führt die Traversierung eines Verzeichnisbaums im permissive-Modus beispielsweise zu der Meldung avc: denied für jede gelesene Verzeichnisebene. Im enforcing-Modus hätte SELinux bereits das erste Traversal abgebrochen und das Anzeigen weiterer Verweigerungsmeldungen verhindert.

    • deaktiviert — SELinux ist komplett deaktiviert. SELinux-Hooks werden aus dem Kernel entfernt und das Pseudo-Dateisystem wird deregistriert.

      Tipp

      Aktionen, die während der Deaktivierung von SELinux ausgeführt werden, führen dazu, dass das Dateisystem keinen Sicherheitskontext mehr besitzt. Das liegt daran, dass der Sicherheitskontext via Sicherheitsrichtlinie definiert wird. Die beste Möglichkeit, das Dateisystem neu zu kennzeichnen besteht darin, die Flag-Datei /.autorelabel zu erstellen und den Rechner neu zu starten. So wird die Neu-Kennzeichnung zu einem sehr frühen Zeitpunkt während des Boot-Prozesses wirksam, bevor irgendwelche Prozesse auf dem System laufen. Mit Hilfe dieser Vorgehensweise wird verhindert, dass Prozesse aus Versehen Dateien mit falschem Kontext anlegen oder mit einem falschen Kontext starten.

      Der Befehl fixfiles relabel kann vor der Aktivierung von SELinux verwendet werden, um das Dateisystem neu zu kennzeichnen. Diese Methode wird jedoch nicht empfohlen, da es nach Abschluss immer noch möglich ist, dass Prozesse möglichweise mit einem falschen Kontext ausgeführt werden. Diese Prozesse können Dateien mit ebenfalls falschem Kontext anlegen.

    Hinweis

    Zusätzlicher Leerraum am Ende einer Konfigurationszeile oder in Form von extra Zeilen am Ende der Datei kann zu unerwartetem Verhalten führen. Entfernen Sie sicherheitshalber jeglichen unnötigen Leerraum.

  • SELINUXTYPE=targeted|strict — Gibt an, welche Sicherheitsrichtlinie SELinux durchsetzten soll.

    • targeted — Lediglich die "targeted"-Netzwerk-Daemons werden geschützt.

      Wichtig

      Die folgenden Daemons werden durch die standardmäßige "targeted"-Sicherheitsrichtlinie geschützt: dhcpd, httpd (apache.te), named, nscd, ntpd, portmap, snmpd, squid und syslogd. Der Rest des Systems läuft in der Domain unconfined_t. Diese Domain gestattet es Subjekten und Objekten mit diesem Sicherheitskontext, im Rahmen der standardmäßigen Linux-Sicherheit zu agieren.

      Die Dateien der Sicherheitsrichtlinie für diese Daemons befinden sich in /etc/selinux/targeted/src/policy/domains/program. Für diese Dateien bleiben Änderungen vorbehalten, sobald neue Versionen von Red Hat Enterprise Linux veröffentlicht werden.

      Policy enforcement for these daemons can be turned on or off, using Boolean values controlled by the SELinux Administration Tool (system-config-selinux).

      Das Setzen eines Booleschen Wertes auf 0 (Null) für einen "targeted"-Daemon deaktiviert die Übertragung der Sicherheitsrichtlinie für den Daemon. Sie können beispielsweise dhcpd_disable_trans auf 0 setzen, um zu verhindern, dass initdhcpd aus der unconfined_t-Domain in die in dhcpd.te angegebene Domain überträgt.

      Mit Hilfe des Befehls getsebool -a können Sie alle SELinux Booleschen Werte auflisten. Nachfolgend finden Sie ein Beispiel für die Verwendung des Befehls setsebool zur Einstellung eines SELinux Booleschen Wertes. Die Option -P ermöglicht eine permanente Speicherung der Änderung. Ohne diese Option wird der Boolesche Wert bei einem Neustart auf 1 zurückgesetzt.

      setsebool -P dhcpd_disable_trans=0
      
    • strict — Kompletter SELinux-Schutz für alle Daemons. Sicherheitskontexte werden für alle Subjekte und Objekte definiert und jede Aktion wird vom Policy Enforcement Server weiterverarbeitet.

  • SETLOCALDEFS=0|1 — Kontrolliert, wie lokale Definitionen (Benutzer und Boolesche Werte) eingestellt werden. Setzen Sie diesen Wert auf 1, damit diese Definitionen durch die load_policy von Dateien in /etc/selinux/<policyname> kontrolliert werden. Oder setzen sie diesen Wert auf 0, damit sie von semanage kontrolliert werden.

    Achtung

    Sie sollten diesen Standardwert (0) nicht ändern, bevor Sie sich nicht voll über die Konsequenzen einer solche Änderung im Klaren sind.

10.1.2.2.2. Das /etc/selinux/-Verzeichnis

Das /etc/selinux/-Verzeichnis ist der primäre Speicherort für alle Policy-Dateien sowie auch der Hauptkonfigurationsdatei.

Das folgende Beispiel zeigt Beispielinhalte des /etc/selinux/-Verzeichnis:

-rw-r--r--  1 root root  448 Sep 22 17:34 config
drwxr-xr-x  5 root root 4096 Sep 22 17:27 strict
drwxr-xr-x  5 root root 4096 Sep 22 17:28 targeted

Die beiden Verzeichnisse strict/ und targeted/ sind die speziellen Verzeichnisse, in denen sich die Dateien der Richtlinie (policy) mit demselben Namen (d.h. strict und targeted) befinden.

10.1.2.3. SELinux-Dienstprogramme

Nachfolgend sind einige der am häufigsten verwendeten SELinux-Dienstprogramme aufgeführt:

  • /usr/sbin/setenforce — Ändert den Modus, in dem SELinux läuft, in Echtzeit.

    Zum Beispiel:

    setenforce 1 — SELinux läuft im Enforcing-Modus

    setenforce 0 — SELinux läuft in Permissive-Modus.

    Um SELinux tatsächlich zu deaktivieren, müssen Sie entweder den entsprechenden setenforce-Parameter in /etc/sysconfig/selinux angeben, oder den Parameter selinux=0 entweder in /etc/grub.conf oder zur Bootzeit an den Kernel übergeben.

  • /usr/sbin/sestatus -v — Zeigt den detaillierten Status eines Systems, auf dem SELinux läuft, an. Das nachfolgende Beispiel demonstriert einen Auszug der Ausgabe von sestatus -v:

    SELinux status:                 enabled
    SELinuxfs mount:                /selinux
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy version:                 21
    Policy from config file:        targeted
    
    Process contexts:
    Current context:                user_u:system_r:unconfined_t:s0
    Init context:                   system_u:system_r:init_t:s0
    /sbin/mingetty                  system_u:system_r:getty_t:s0
    
  • /usr/bin/newrole — Führt eine neue Shell in einem neuen Kontext aus oder Rolle aus. Die Richtlinie (policy) muss die Übertragung auf die neue Rolle gestatten.

    Hinweis

    Dieser Befehl steht nur zur Verfügung, wenn Sie das Paket policycoreutils-newrole installiert haben, welches für die Richtlinien "strict" und "MLS" benötigt wird.

  • /sbin/restorecon — Definiert den Sicherheitskontext von einer oder mehreren Dateien, indem die erweiterten Attribute mit dem entsprechenden Datei- oder Sicherheitskontext markiert werden.

  • /sbin/fixfiles — Überprüft oder korrigiert die Sicherheitskontext-Datenbank auf dem Dateisystem.

Für weitere Informationen verweisen wir auf die Handbuchseiten zu diesen Dienstprogrammen.

Werfen Sie einen Blick auf die Inhalte der Pakete setools oder policycoreutils für weitere Informationen zu allen verfügbaren binären Dienstprogrammen. Um den Inhalt eines Pakets anzusehen, verwenden Sie folgenden Befehl:

rpm -ql <package-name>

10.1.3. Zusätzliche Ressourcen

Detailliertere Informationen zu SELinux finden Sie unter folgenden Quellen.

10.1.3.1. Installierte Dokumentation

  • /usr/share/doc/setools-<version-number>/ Die gesamte Dokumentation für Dienstprogramme, die im Paket setools enthalten sind. Dies umfasst sämtliche Hilfsskripte, Beispiel-Konfigurationsdateien und Dokumentation.

10.1.3.2. Hilfreiche Websites

  • http://www.nsa.gov/selinux/ Offizielle Seiten des NSA SELinux Entwicklungsteams. Viele Quellen sind in den Formaten HTML und PDF erhältlich. Auch wenn viele dieser Links nicht SELinux-spezifisch sind, sind einige Entwürfe möglicherweise zutreffend.

  • http://fedora.redhat.com/docs/ Offizielle Seiten des Fedora-Dokumentationsprojekts, welche Materialien spezifisch zu Fedora Core enthalten, die möglicherweise zeitgemäßer sind, da der Veröffentlichungszyklus viel kürzer ist.

  • http://selinux.sourceforge.net Offizielle Seiten der SELinux-Gemeinschaft.

10.2. Kurzer Hintergrund und Geschichte von SELinux

SELinux war ursprünglich ein Entwicklungsprojekt der National Security Agency (NSA )[5]. Es stellt eine Implementierung der Flask -Sicherheitsarchitektur fürBetriebssysteme dar.[6] Die NSA integrierte SELinux unter Verwendung des Linux Security Modules (LSM )-Frameworks. SELinux regte die Gründung von LSM an, nach einem Vorschlag von Linux Torvalds, der ein modularesVorgehen wollte, anstatt SELinux einfach in den Kernel zu integrieren.

Ursprünglich wurden bei der Implementierung von SELinux Persistent Security IDs (PSIDs) verwendet, die in einem unbenutzten Feld der ext2-Inode gespeichert wurden. Diese numerische Schreibweise (d.h. nicht normal lesbar) wurde von SELinux einem Sicherheitskontext-Label zugeordnet. Leider musste auf diese Weise jeder Dateisystem-Typ so verändert werden, dass PSIDs unterstützt wurden. Dies stellte keine skalierbare Lösung, bzw. keine Lösung, die upstream im Kernel unterstützt wurde, dar.

Die nächste Weiterentwicklung von SELinux bestand in einem ladbaren Kernelmodul für die 2.4.<x>-Serien des Linuxkernels dar. Dieses Modul speicherte PSIDs in einer normalen Datei und SELinux war in der Lage, mehrere Dateisysteme zu unterstützen. Diese Lösung war jedoch in Sachen Leistung nicht optimal und war plattformübergreifend inkonsistent. Schließlich wurde der SELinux-Code upstream in den 2.6.x-Kernel integriert, welcher volle Unterstützung für LSM bietet und darüberhinaus erweiterte Attribute (xattrs ) für das ext3-Dateisystem liefert. SELinux wurde so verändert, dass es xattrs zur Speicherung von Informationen zum Sicherheitskontext verwendet. Der xattr-Namensraum bietet eine nützliche Unterscheidung für mehrere Sicherheitsmodule, die auf demselben System existieren.

Die meiste Arbeit bei der Bereitstellung des Kernels für Upstream, so wie der nachfolgenden Entwicklung von SELinux, wurde unter gemeinsamer Anstrengung von der NSA, Red Hat und der Gemeinschaft der SELinux-Entwickler geleistet.

Für weitere Informationen zur Geschichte von SELinux siehe auch http://www.nsa.gov/selinux/



[5] Die NSA ist die Nationale Sicherheitsbehörde der Regierung der Vereinigten Staaten von Amerika und ist für Information Assurance und nachrichtendienstliche Informationsgewinnung zuständig. Sie erhalten mehr Informationen u.a. auf der Webseite der NSA unter http://www.nsa.gov/about/

[6] Flask entstand aus einem Projekt, das Distributed Trusted Operating System (DTOS ) in das Fluke-Forschungsbetriebssystem integrierte. Flask stand hierbei für den Namen der Architektur und der Implementierung in das Fluke-Betriebssystem.