Copyright © 2008 Red Hat, Inc.
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 Raleigh, NC 27606-2072 USA Phone: +1 919 754 3700 Phone: 888 733 4281 Fax: +1 919 754 3701 PO Box 13588 Research Triangle Park, NC 27709 USA
January 2008
Versionsgeschichte | ||||
---|---|---|---|---|
Version 5.2-11 | Wed May 21 2008 |
Michael Hideo Smith <mhideo@redhat.com>
|
||
|
This Deployment Guide documents relevant information regarding the deployment, configuration and administration of Red Hat Enterprise Linux 5.2.
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.
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.
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
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:
Schnittstellenkonfigurationsdateien
Schnittstellenkontrollskripte
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.
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.
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.
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
, wobei <name>
<name>
sich auf den Namen des Geräts bezieht, das von der Konfigurationsdatei gesteuert wird.
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
Dateien (wobei <X>
<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
(see Abschnitt 1.2.3, „Channel-Bonding-Schnittstellen“). These parameters are identical to those used for bonding devices in <N>
/sys/class/net/
, and the module parameters for the bonding driver as described in <bonding device>
/bondingbonding
Module Directives.
Diese Konfigurationsmethode wird verwendet, damit mehrere Bonding-Geräte unterschiedliche Konfigurationen besitzen können. Falls Sie BONDING_OPTS
in ifcfg-
verwenden, benutzen Sie nicht<name>
/etc/modprobe.conf
, um Optionen für das Bonding-Gerät festzulegen.
BOOTPROTO=<protocol>
, wobei
für eine der folgenden Varianten stehen kann:
< protocol>
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
die Broadcast-Adresse ist. Diese Anweisung wird nicht mehr verwendet, da der Wert automatisch mit dem <address>
ifcalc
Befehl berechnet wird.
DEVICE=<name>
, wobei
der Name des physikalischen Geräts ist (ausgenommen dynamisch-zugewiesene PPP- Geräte, bei denen es der logische Name) ist.
<name>
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
eine Name-Server-Adresse ist, die in <Adresse>
/etc/resolv.conf
gesetzt wird, wenn die Anweisung PEERDNS
auf yes
steht.
ETHTOOL_OPTS=<options>
, wobei
für jede gerätespezifische Option steht, die von <options>
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.
Ä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
die IP-Adresse ist.
<address>
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
das Channel-Bonding-Interface ist, mit dem die Ethernet-Schnittstelle verbunden ist.
<bond-interface>
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
der Wert der Netzmaske ist.
<mask>
NETWORK=<address>
, wobei
die Netzwerkadresse ist. Diese Anweisung wird nicht länger verwendet, da der Wert automatisch mit Hilfe des Befehls <address>
ifcalc
berechnet wird.
ONBOOT=<answer>
, wobei
Folgendes bedeuten kann:
<Antwort>
yes
— Dieses Gerät sollte beim Booten aktiviert werden.
no
— Dieses Gerät sollte nicht beim Booten aktiviert werden.
PEERDNS=<answer>
, wobei
Folgendes bedeuten kann:
<Antwort>
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
Folgendes bedeuten kann:
<bond-interface>
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
die angegebene Quell-IP-Adresse für ausgehende Pakete ist.
<Adresse>
USERCTL=<answer>
, wobei
Folgendes bedeuten kann:
<Antwort>
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.
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-
(ersetze <version-number>
/sysconfig.txt<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.
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
, wobei Sie <N>
<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
gesetzt werden muss, wobei <N>
<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.
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-
Namensgebungsschema verwendet werden.
<if-name>
:<alias-value>
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.
Alias-Schnittstellen unterstützen DHCP nicht.
Bei der Namensgebung einer Clone-Schnittstellen-Konfigurationsdatei sollten folgende Konventionen eingehalten werden: ifcfg-
. 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, <if-name>
-<clone-name>
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.
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
Folgendes bedeuten kann:
<Antwort>
yes
— Stellt diese Schnittstelle als Standardroute ein.
no
— Stellt diese Schnittstelle nicht als Standardroute ein.
DEMAND=<answer>
, wobei
Folgendes bedeuten kann:
<Antwort>
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
die Sekunden ohne Aktivität darstellt, nach denen die Schnittstelle die Verbindung selbst unterbricht.
<Wert>
INITSTRING=<string>
, wobei
die erste Zeichenfolge ist, die an das Modem übergeben wird. Diese Option wird hauptsächlich in Verbindung mit SLIP-Schnittstellen verwendet.
<Zeichenkette>
LINESPEED=<value>
, wobei
die Baudrate des Gerätes angibt. Zu den möglichen Standardwerten gehören <Wert>
57600
, 38400
, 19200
und 9600
.
MODEMPORT=<device>
, wobei
der Name des Serial-Geräts ist, das die Verbindung für die Schnittstelle herstellt.
<Gerät>
MTU=<value>
, wobei
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 <Wert>
576
zur Folge, dass weniger Pakete ausgelassen werden (DROP) und die Durchlässigkeit für Verbindungen leicht erhöht wird.
NAME=<name>
, wobei
sich auf den Oberbegriff der Konfigurationssammlung für Dialup-Verbindungen bezieht.
<Name>
PAPNAME=<name>
, wobei
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.
<Name>
PERSIST=<answer>
, wobei
Folgendes bedeuten kann:
<Antwort>
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
die IP-Adresse des Remote-Systems ist. Wird üblicherweise nicht festgelegt.
<Adresse>
WVDIALSECT=<name>
, wobei
dieser Schnittstelle in <Name>
/etc/wvdial.conf
eine Anwähl-Konfiguration zuweist, die die anzuwählende Telefonnummer und andere wichtige Informationen für die Schnittstelle enthält.
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.
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.
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
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.
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
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-
file. For example, static routes for the eth0 interface would be stored in the interface
/etc/sysconfig/network-scripts/route-eth0
file. The route-
file has two formats: IP command arguments and network/netmask directives.
interface
Define a default gateway on the first line. This is only required if the default gateway is not set via DHCP:
defaultX.X.X.X
devinterface
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
viaX.X.X.X
devinterface
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
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.
You can also use the network/netmask directives format for route-
files. The following is a template for the network/netmask format, with instructions following afterwards:
interface
ADDRESS0=X.X.X.X
NETMASK0=X.X.X.X
GATEWAY0=X.X.X.X
ADDRESS0=
is the network number for the static route.
X.X.X.X
NETMASK0=
is the netmask for the network number defined with X.X.X.X
ADDRESS0=
.
X.X.X.X
GATEWAY0=
is the default gateway, or an IP address that can be used to reach X.X.X.X
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.
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.
Die Folgenden sind Ressourcen, die näher auf Netzwerk-Schnittstellen eingehen.
/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.
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.
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.
Führen Sie folgende Schritte aus, um eine Netzwerkverbindung mit dem Netzwerk-Administrationstool durchzuführen:
Fügen Sie ein dem physischen Hardware-Gerät zugeordnetes Netzwerkgerät hinzu.
Fügen Sie das physikalische Hardware-Gerät zur Hardwareliste hinzu, sofern noch nicht vorhanden.
Konfigurieren Sie den Hostnamen und die DNS-Einstellungen.
Konfigurieren Sie die Hosts, die nicht über DNS gesucht werden können.
In diesem Kapitel werden diese Schritte für alle Netzwerkverbindungstypen erläutert.
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:
Klicken Sie auf das Tab Geräte.
Klicken Sie auf den Button Neu.
Wählen Sie Ethernet-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.
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.
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.
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.
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.
Klicken Sie auf Anwenden auf der Seite Ethernet-Gerät erstellen.
Nach der Konfiguration wird das Ethernet-Gerät in der Geräteliste wie in Abbildung 2.3, „Ethernet-Gerät“ angezeigt.
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“.
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:
Klicken Sie auf das Tab Geräte.
Klicken Sie auf den Button Neu.
Wählen Sie ISDN-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.
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.
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.
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.
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.
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:
Klicken Sie auf das Tab Geräte.
Klicken Sie auf den Button Neu.
Wählen Sie Modemverbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.
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.
Nach der Prüfung wird das Fenster in Abbildung 2.6, „Modem-Einstellungen“ angezeigt.
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.
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.
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.
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.
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.
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:
Klicken Sie auf das Tab Geräte.
Klicken Sie auf den Button Hinzufügen.
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.
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.
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.
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).
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.
Nach der Konfiguration der DSL-Verbindung erscheint diese in der Geräteliste wie in Abbildung 2.10, „xDSL-Gerät“ dargestellt.
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.
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.
Wenn Sie mit der Einrichtung Ihrer xDSL-Verbindung zufrieden sind, wählen Sie Datei => Speichern, um die Änderungen zu speichern.
Wenn Sie einen T-Online-Account einrichten, befolgen Sie diese zusätzlichen Schritte:
Wählen Sie das Gerät aus der Geräteliste und klicken Sie auf Bearbeiten.
Wählen Sie den Reiter Provider aus dem Menü xDSL-Konfiguration, wie in Abbildung 2.12, „xDSL-Konfiguration - Reiter "Provider"“ dargestellt.
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.
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.
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.
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.
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:
Klicken Sie auf das Tab Geräte.
Klicken Sie auf den Button Neu.
Wählen Sie Token Ring-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.
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.
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.
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.
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.
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.
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:
Klicken Sie auf das Tab Geräte.
Klicken Sie auf den Button Neu.
Wählen Sie Wireless-Verbindung aus der Liste Gerätetyp aus und klicken Sie auf Vor.
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.
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.
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.
Auf der Seite Wireless-Verbindungen konfigurieren wie in Abbildung 2.16, „Wireless-Einstellungen“ abgebildet, konfigurieren Sie die Einstellungen für das Wireless-Gerät.
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.
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.
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.
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.
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.
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.
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.
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.
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
.
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.
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.
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=
zu enthalten. Wenn das System, zum Beispiel, GRUB als Bootloader verwendet und <profilename>
/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
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
.
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.
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)
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.
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.
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.
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.
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.
Primäre Nameserver können auf vier verschiedene Arten konfiguriert sein:
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.
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.
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.
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.
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
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.
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.
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>
; };
Die folgenden Typen von Statements werden häufig in /etc/named.conf
verwendet:
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.
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.
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
.
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.
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 type
slave
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.
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.
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
— Der verwendete Algorithmus-Typ, z.B. <algorithm-name>
dsa
oder hmac-md5
.
secret "
— Der verschlüsselte Schlüssel.
<key-value>
"
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.
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.
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
.
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.
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.
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.
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.com
weisen 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
|
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
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; }; };
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.
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.
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
.
Um die Verbindung von rndc
zu 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
, welche von diesem Befehl erzeugt wurde, gefunden werden.
<key-file-name>
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";
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>
"; };
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.
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
— Gibt einen alternativen Speicherort der Konfigurationsdatei an.
<configuration-file>
-p
— Legt für die <port-number>
rndc
-Verbindung eine andere als die standardmäßige Portnummer 953 fest.
-s
— Ermöglicht es Ihnen, einen anderen als den <server>
default-server
in /etc/rndc.conf
anzugeben.
-y
— Ermöglicht es Ihnen, einen anderen als den <key-name>
default-key
in der /etc/rndc.conf
-Datei einzustellen.
Zusätzliche Informationen zu diesen Optionen finden Sie auf der rndc
-man-Seite
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.
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.
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.
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.
BIND unterstützt eine Reihe verschiedener Methoden, um das Updaten von Zonen auf Master- oder Slave-Nameservern zu schützen:
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.
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.
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.
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;
Folgende Quellen enthalten zusätzliche Hintergrundinformationen zu BIND.
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.
man rndc
— Erklärt die verschiedenen Optionen, die bei der Verwendung von rndc
zur Kontrolle eines BIND Name-Servers zur Verfügung stehen.
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.
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.
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.
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.
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.
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.
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.
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.
Es ist empfohlen nur SSH Version 2-kompatible Server und Clients zu verwenden, sofern dies möglich ist.
Die folgende Abfolge von Vorgängen tragen zum Schutz der Integrität einer SSH-Kommunikation zwischen zwei Hosts bei:
Zunächst wird eine sichere Transportschicht geschaffen, die dem Client-System anzeigt, dass es mit dem korrekten Server in Verbindung steht.
Die Transportschicht zwischen dem Client und dem Remote-Host ist mit einer symmetrischen Kodierung verschlüsselt.
Der Client authentifiziert sich gegenüber dem Server.
Der Remote-Client kann nun sicher mit dem Remote-Host über die verschlüsselte Verbindung kommunizieren.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
verwenden.
username
penguin.example.net
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
. Wenn Sie zum Beispiel den Befehl hostname
command
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.
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/
des Rechners penguin.example.net übermittelt.
username
/shadowman
Die allgemeine Syntax für die Übermittlung von Remote-Dateien zu einem lokalen System lautet:
scpusername@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/
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
. Nach der Authentifizierung können Sie eine Reihe von Befehlen verwenden (ähnlich wie bei der Verwendung von FTP). In der man-Seite sftp username@hostname.com
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.
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.
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.
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 -Llocal-port
:remote-hostname
:remote-port
username
@hostname
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.
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.
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.
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.
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.
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.
Ändern Sie die Berechtigungen Ihres Verzeichnisses .ssh
mit folgendem Befehl:
chmod 755 ~/.ssh
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.
Ändern Sie die Berechtigungen des Verzeichnisses authorized_keys
mit folgendem Befehl:
chmod 644 ~/.ssh/authorized_keys
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.
Folgen Sie den folgenden Schritten, um ein DSA-Schlüsselpaar für Version 2 des SSH Protokolls zu erstellen.
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.
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.
Ändern Sie die Berechtigungen des Verzeichnisses .ssh
mit folgendem Befehl:
chmod 755 ~/.ssh
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.
Ändern Sie die Berechtigungen des Verzeichnisses authorized_keys
mit folgendem Befehl:
chmod 644 ~/.ssh/authorized_keys
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.
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.
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.
Ändern Sie die Berechtigungen Ihres Verzeichnisses .ssh
und Ihrer Schlüssel mit dem Befehlen chmod 755 ~/.ssh
und chmod 644 ~/.ssh/identity.pub
.
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.
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
“.
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:
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.
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.
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.
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.
Geben Sie am Shell-Prompt folgenden Befehl ein:
exec /usr/bin/ssh-agent $SHELL
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.
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.
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.
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.
http://www.openssh.com/ — Die OpenSSH FAQ-Seite, Bug-Berichte, Mailinglisten, Projektziele und eine eher technische Beschreibung der Sicherheitsmerkmale.
http://www.openssl.org/ — Die OpenSSL FAQ-Seite, Mailing-Lists und Beschreibungen der Projektziele.
http://www.freessh.org/ — SSH-Client-Software für andere Plattformen.
[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.
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.
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.
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“.
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.
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
.
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; }
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; } }
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; } }
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; }
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; }
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.
/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.
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
— Legt die udp Port-Nummer fest, auf die <portnum>
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
— Legt den Speicherplatz für die Konfigurationsdatei fest. Die standardmäßige Speicherstelle ist <filename>
/etc/dhcpd.conf
.
-lf
— 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 <filename>
/var/lib/dhcp/dhcpd.leases
.
-q
— Druckt beim Starten des Daemons nicht die gesamte Copyright Info.
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.
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=
, wobei <answer>
eines der folgenden sein kann:
<answer>
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=
, wobei <address>
die spezifische Source-IP-Adresse für ausgehende Pakete ist.
<address>
USERCTL=
, wobei <answer>
eines der folgenden sein kann:
<answer>
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.
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
.
Für zusätzliche Konfigurationsoptionen, siehe nachstehend aufgeführte Quellen.
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-<
— enthält Beispieldateien, README-Dateien und Release Notes für aktuelle Versionen des DHCP-Dienstes.
version
>/
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.
Inhaltsverzeichnis
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).
Wie in Abbildung 6.1, „Zeit- und Datumseigenschaften“ gezeigt, ist das erste Reiter-Fenster, das erscheint, das zur Konfiguration des Systemdatums und der -zeit.
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.
Wie in Abbildung 6.2, „NTP-Eigenschaften“ gezeigt, ist das zweite Reiter-Fenster,das erscheint, das zur Konfiguration des NTP.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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:
http://www.isecom.org/projects/osstmm.htmThe Open Source Security Testing Methodology Manual (OSSTMM)
http://www.owasp.org/The Open Web Application Security Project
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.
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.
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:
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.
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:
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.
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:
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.
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:
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.
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). |
|
|||
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. |
|
|||
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. |
|
|||
Lauschen | Das Sammeln von Daten zwischen zwei aktiven Knoten auf einem Netzwerk durch das Abhören der Verbindung dieser beiden Knoten. |
|
|||
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. |
|
|||
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. |
|
|||
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. |
|
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..
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:
Gelistet und erhältlich zum Download von Red Hat Network
Gelistet und ungelinkt auf der Red Hat Errata-Webseite
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.
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.
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.
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“.
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.
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.
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.
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.
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“.
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.
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.
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.
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 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 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
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.
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.
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
.
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/
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.
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.
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.
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
.
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.
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.
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.
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.
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.
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
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.
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.
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
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.
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
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.
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.
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.
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.
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.
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>
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.
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:
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.
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.
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.
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.
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>
Prüfen Sie außerdem, dass jegliche Skripte, die Sie ausführen, auch wie beabsichtigt funktionieren, bevor sie in Produktion gegeben werden.
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.
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. #########
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.
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.
Wenn Sie einen anonymen Zugang zu FTP-Servern zulassen, sollten Sie darauf achten, wo Sie empfindliche Daten speichern.
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
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
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
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.
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.
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.
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.
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.
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).
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.
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“).
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.
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.
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
.
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.
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.
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.
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.
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.
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-
(wobei <version-number>
/<version-number>
die Versionsnummer von PAM auf Ihrem System darstellt), beschreiben diese neue Syntax im Detail.
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.
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
.
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.so
— Wenn 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.
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.
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.so
an, 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.
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-
(wobei <version-number>
/<version-number>
die Versionsnummer von PAM auf Ihrem System ist).
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.
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.
Illustration des Dialogfelds bei der Abweisung der Authentifizierung.
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
.
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“.
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.
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.
) anlegen und die erforderlichen Änderungen vornehmen. Der Name der neuen Standarddatei muss mit einer Zahl beginnen, die höher als 50 ist (z.B. xx
-name.perms51-default.perms
). Dies setzt die Standardwerte in der Datei 50-default.perms
außer Kraft.
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]*
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“.
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.
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.
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-
— Umfasst ein Systemadministrator-Handbuch, ein Modul-Autorenhandbuch und ein Anwendungsentwickler-Handbuch, sowie eine Kopie des PAM Standards, DCE-RFC 86.0 (<version-number>
<version-number>
steht hierbei für die Versionsnummer von PAM).
/usr/share/doc/pam-
— Enthält Informationen über das <version-number>
/txts/README.pam_timestamppam_timestamp.so
PAM-Module (wobei <version-number>
die Versionsnummer von PAM ist).
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.
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.
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.
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.
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.
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.
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.
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.
Wenn Sie zwei via Netzwerk-verbundene Hosts mit IPsec verbinden wollen, siehe Abschnitt 9.3.6, „Konfiguration von IPsec Host-zu-Host“.
Um ein LAN/WAN mit einem anderen via IPsec zu verbinden, siehe Abschnitt 9.3.7, „IPsec Netzwerk-zu-Netzwerk Konfiguration“.
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.
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:
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.
Geben Sie in einer Befehlsshell system-config-network
ein, um das Network-Administration-Tool zu starten.
Klicken Sie auf dem IPsec-Reiter auf Neu, um den IPsec-Konfigurationswizard zu starten.
Klicken Sie auf Weiter, um mit der Konfiguration einer Host-zu-Host IPsec-Verbindung zu beginnen.
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.
Wählen Sie Host-zu-Host-Verschlüsselung als Verbindungstyp und klicken dann auf Weiter.
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.
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:
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.
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 kann aus einer Kombination aus Zahlen und Buchstaben bestehen.
Klicken Sie auf Weiter, um fortzufahren.
Überprüfen Sie die Informationen auf der Seite IPsec — Zusammenfassung und klicken dann auf Anwenden.
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
Wählen Sie die IPsec-Verbindung aus der Liste aus und klicken auf die Schaltfläche Aktivieren.
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.
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
eingebunden wird.
<remote-ip>
.conf
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.
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
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
(ersetzen Sie X.X.X.X
.confX.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:
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.
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.
Legt die Identifikationsmethode fest, die bei der Authentifizierung von Knoten benutzt wird. Red Hat Enterprise Linux benutzt IP-Adressen, um Knoten zu identifizieren.
Legt den Verschlüsselungscode fest, der während der Authentifizierung benutzt wird. Standardmäßig wird Triple Data Encryption Standard (3DES) benutzt.
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.
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.
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.
Die /etc/racoon/racoon.conf
Datei sollte auf allen IPsec-Knoten identisch sein, bis auf das include "/etc/racoon/
-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
.conf"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:
Bedeutet, dass SA mit jedem Peer anonym initialisieren kann, insofern die IPsec-Berechtigungsnachweise (Credentials) übereinstimmen.
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.
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.
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).
Listet die unterstützten Hash-Algorithmen für Authentifizierung. Unterstützte Modi sind sha1 und md5 Hashed Message Authentication Codes (HMAC).
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)
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
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.
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.
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:
Geben Sie in einer Befehlsshell system-config-network
ein, um das Network-Administration-Tool zu starten.
Klicken Sie auf dem IPsec-Reiter auf Neu, um den IPsec-Konfigurationswizard zu starten.
Klicken Sie auf Weiter, um mit der Konfiguration einer Netzwerk-zu-Netzwerk IPsec-Verbindung zu beginnen.
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.
Wählen Sie Netzwerk-zu-Netzwerk-Verschlüsselung (VPN) als Verbindungstyp und klicken dann auf Weiter.
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.
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.
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.
Überprüfen Sie die Informationen auf der Seite IPsec — Zusammenfassung und klicken dann auf Anwenden.
Wählen Sie Datei => Speichern, um die Konfiguration zu speichern.
Wählen Sie die IPsec-Verbindung aus der Liste aus und klicken Sie anschließend zur Aktivierung der Verbindung auf Aktivieren.
IP-Weiterleitung aktivieren:
Bearbeiten Sie /etc/sysctl.conf
und setzen Sie net.ipv4.ip_forward
auf 1
.
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.
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:
Legt den Typ der Verbindung fest.
Legt fest, dass die Verbindung beim Systemstart initiiert werden soll.
Legt die Methode, bei der Schlüssel vorab ausgetauscht werden (pre-shared key), als Authentifizierungsmethode fest.
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.
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.
Gibt das Quell-Netzwerk für die IPsec-Verbindung an, die in diesem Beispiel der Netzwerk-Adressbereich für LAN A ist.
Gibt das Ziel-Netzwerk für die IPsec-Verbindung an, die in diesem Beispiel der Netzwerk-Adressbereich für LAN A ist.
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-ipsec
genannt, wobei X
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
Um die Datei keys-ipsec
X
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-ipsec
auf beiden IPsec-Routern. Für eine ordentliche Verbindung müssen beide Schlüssel gleich sein.
X
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
(ersetzen Sie X.X.X.X
.confX.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:
Bearbeiten Sie /etc/sysctl.conf
und setzen Sie net.ipv4.ip_forward
auf 1
.
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)
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>
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“.
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
.
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.
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.
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:
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.
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 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.
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.
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
.
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.
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.
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.
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.
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:
— Wobei N.N.N.N
/M.M.M.M
N.N.N.N
der Bereich der IP-Adresse und M.M.M.M
die Netmask ist.
— Wobei N.N.N.N
/M
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.
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 iptables
RPM-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 "all
e" Protokolle bewirkt, dass die Regel für jedes unterstützte Protokoll zutrifft. Falls kein Protokoll in dieser Regel aufgelistet ist, ist der Standardwert "all
e".
-s
— Setzt die Quelle eines bestimmten Pakets mit Hilfe derselben Satzstrukturen, die der Zielparameter (-d
) verwendet.
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
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:
<protocol-name>
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.
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.
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.
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.
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.
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
(wobei <module-name>
<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
angegeben wird. Mit <value> / <period>
--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.
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:
— Eine benutzerdefinierten Kette innerhalb der Tabelle. Benutzerdefinierte Ketten müssen eindeutig sein. Dieses Ziel leitet das Paket an die angegebene Kette weiter.
<user-defined-chain>
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.
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
-Option verwendet werden, um mehrere Details zusammen mit dem Fehlerpaket zu senden. Die Meldung <type>
port-unreachable
ist die standardmäßige
-Fehlermeldung (wobei <type>
<type>
die Art der Zurückweisung angibt), die angezeigt wird, wenn keine andere Option angewandt wurde. Eine vollständige Liste der verwendbaren
-Optionen finden Sie auf der <type>
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.
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 ~]#
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 >
wobei<filename>
<filename>
ein benutzerdefinierter Name für Ihr Regelset ist.
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.
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.
Unter Red Hat Enterprise Linux gibt es zwei grundlegende Methoden, iptables
zu kontrollieren:
/sbin/service iptables
— Wird verwendet, um verschiedene Funktionen von <option>
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.
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“.
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.
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_MODULES
IP6TABLES_MODULES
in der ip6tables-config
-Datei.
Zusätzliche Informationen zur Paketfilterung mit iptables
finden Sie in den weiter unten aufgeführten Quellen.
man iptables
— Enthält eine Beschreibung von iptables
, sowie eine umfangreiche Liste verschiedener Ziele, Optionen und Übereinstimmungserweiterungen.
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.
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.
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.
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:
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“.
Die folgenden Abschnitte befassen sich mit den SELinux-Konfigurationsdateien und zugehörigen Dateisystemen.
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.
Die folgenden Abschnitte beschreiben SELinux-Konfigurations- und -Policy-Dateien und verwandte Dateisysteme im Verzeichnis /etc/
.
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.
/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=
— Definiert den Top-Level Status von SELinux auf einem System.
enforcing|permissive|disabled
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.
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.
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=
— Gibt an, welche Sicherheitsrichtlinie SELinux durchsetzten soll.
targeted|strict
targeted
— Lediglich die "targeted"-Netzwerk-Daemons werden geschützt.
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 init
dhcpd
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=
— Kontrolliert, wie lokale Definitionen (Benutzer und Boolesche Werte) eingestellt werden. Setzen Sie diesen Wert auf 1, damit diese Definitionen durch die 0|1
load_policy
von Dateien in /etc/selinux/
kontrolliert werden. Oder setzen sie diesen Wert auf 0, damit sie von <policyname>
semanage
kontrolliert werden.
Sie sollten diesen Standardwert (0) nicht ändern, bevor Sie sich nicht voll über die Konsequenzen einer solche Änderung im Klaren sind.
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.
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.
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>
Detailliertere Informationen zu SELinux finden Sie unter folgenden Quellen.
/usr/share/doc/setools-<
Die gesamte Dokumentation für Dienstprogramme, die im Paket version-number
>/setools
enthalten sind. Dies umfasst sämtliche Hilfsskripte, Beispiel-Konfigurationsdateien und Dokumentation.
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.
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.