Netzwerk allgemein

Einleitung

Die hier gelisteten Kurztipps betreffen allgemeine Fragen rund um Netzwerke mit Linux.

« zurück (Gesammelte Anleitungen)

Inhalt

hosts_access - Netzwerkzugriff beschränken mit dem tcpwrapper

Mit UNIX im Internet zu sein, ist ein Heimspiel, dasselbe gilt somit auch für Linux. Die angebotenen Dienste basieren alle auf dem gängigen Internet Protokoll Version 4 (IPv4) und sind teilweise auch schon fit für die nächste Generation IP Version 6 (IPv6). Im Gegensatz zu anderen, weit verbreiteten Betriebssystemen werden eine Menge an Netzwerkdiensten zur Verfügung gestellt, aus denen man einerseits nur die benötigten Dienste aktivieren und dann den Zugriff auf die verbliebenen entsprechend einschränken sollte. Eine Möglichkeit der Beschränkung stellt das Filtern nach der IP-Adresse des Absenders dar.

Für diese Art der Filterung wird bereits eine Möglichkeit von Haus aus angeboten, nämlich die Dateien hosts.allow und hosts.deny im Verzeichnis /etc. Wie man aus den Namen schon ableiten kann, wird über die Datei hosts.allow der Zugriff auf einen Dienst gewährt und mit Einträgen in hosts.deny der Zugriff verweigert. Hierbei haben die Zusagen Vorrang gegenüber der Sperren, d. h. es wird zunächst geprüft, ob ein anfragender Rechner in der Datei hosts.allow für den gewünschten Dienst freigegeben ist. Ist das nicht der Fall, wird geprüft, ob die Adresse des Rechners für diesen Dienst gesperrt ist. Sollte auch das nicht der Fall sein, wird der Zugriff gewährt.

Die beiden Dateien hosts.allow und hosts.deny haben den gleichen Aufbau. Mit # beginnende Zeilen sind Kommentare und werden ignoriert. Danach folgt eine Reihe von Einträgen, die das folgende Format haben:

daemon_list : client_list [ : shell_command ]

Mit daemon_list ist der Name des Dienstes gemeint, genauer der Dateiname des Daemons, auf den zugegriffen werden soll. Für Secure SHell (SSH) wäre das z. B. sshd. Möchte man nun den Rechner mit der IP-Adresse 192.168.1.76 aus seinem Heimnetzwerk 192.168.1.0/24 ausschließen, muss der Eintrag in hosts.deny folgendermaßen lauten:

sshd: 192.168.1.76

Wenn man die Sache aber sicherer gestalten will, sollte man seine Regeln möglichst restriktiv wählen und grundätzlich erstmal alle eingehenden Anfragen ablehnen. Da man die Regeln in hosts.deny mit denen aus der Datei hosts.allow überschreiben kann, reicht für die komplette Sperrung folgender Inhalt für hosts.deny:

# /etc/hosts.deny: list of hosts that are _not_ allowed to access the system.

ALL: ALL

Das Schlüsselwort ALL steht als Wildcard für alle Dienste und alle Rechnernamen oder IP-Adressen. Jetzt möchte man aber den Zugriff auf den SSH-Daemon für das interne Netz erlauben, der Rechner 192.168.1.76 soll aber weiterhin ausgesperrt bleiben. Das erreicht man dann wie folgt:

# /etc/hosts.allow: list of hosts that are allowed to access the system.

sshd: 192.168.1.0/24 EXCEPT 192.168.1.76

Das verwendete Schlüsselwort EXCEPT schließt also einzelne Rechner aus einer vorher genannten Gruppe aus. Somit ist es möglich, seine Dienste nur für diejenigen anzubieten, die sie wirklich nutzen (und nicht ausnutzen).

« nach oben

Automatische Netzwerkkonfiguration mit map-schemes

Unter debian gibt es die Möglichkeit, die Konfiguration einer Netzwerkkarte an Bedingungen zu knüpfen. Eine Möglichkeit ist z. B. die Unterscheidung zwischen Heim- (statisch) und Firmennetz (dynamisch).

Das unten stehende Skript weist zuerst der Netzwerkkarte eine IP-Adresse statisch zu und versucht dann, mein Gateway (die FRITZ!Box) anzupingen. Schlägt dies fehl, befinde ich mich nicht zu Hause und das Skript gibt eth0-work aus. Ist der Ping erfolgreich oder wird das Skript mit STRG-C abgebrochen, wird eth0-home ausgegeben.

#!/bin/sh
#
# file: /usr/local/sbin/map-scheme
#
# description:
#
# Check whether I am at home or at work for network configuration.
# When my FRITZ!Box (GATEWAY) is reachable, I'm at home.
#

function home()
{
    echo "eth0-home"
    exit 0
}

# fallback
trap home SIGINT

DEV="eth0"
ADDR="192.168.100.3/24"
GATEWAY="192.168.100.254"

# only run as root
if [ `id -u` -ne 0 ]; then exit 1; fi

if [ -x /usr/bin/fping ]; then
    PING="/usr/bin/fping"
else
    PING="/bin/ping -c 2"
fi

ip addr add ${ADDR} dev ${DEV} >/dev/null 2>&1
ip link set ${DEV} up >/dev/null 2>&1

if ${PING} ${GATEWAY} >/dev/null 2>&1; then
    IFACE="eth0-home"
else
    IFACE="eth0-work"
fi

ip link set ${DEV} down >/dev/null 2>&1
ip addr del ${ADDR} dev ${DEV} >/dev/null 2>&1

echo ${IFACE}

Jetzt muss man zuerst das Skript in die Datei /etc/network/interfaces einbinden:

mapping eth0
        script /usr/local/sbin/map-scheme
        map HOME eth0-home
        map FHTE eth0-work

Anschließend werden die beiden Netzwerkkarten eth0-home (inkl. T-Com Nameserver) und eth0-work (DHCP) definiert:

# statische Angabe der IP-Adresse, Nameserver, etc.
iface eth0-home inet static
        address 192.168.100.3
        netmask 255.255.255.0
        network 192.168.100.0
        broadcast 192.168.100.255
        gateway 192.168.100.254
        dns-nameservers 217.237.151.161 217.237.151.33

# dynamische Zuweisung von IP-Adresse, Nameserver, etc.
iface eth0-work inet dhcp

Wenn man nun mit dem Befehl ifup eth0 als root die Netzwerkkarte einbindet, wird zuerst das Skript map-scheme abgearbeitet und aufgrund der Ausgabe die IP-Adresse entweder festgelegt oder die DHCP-Anfrage gestartet. Die blauen Daten müssen natürlich an das eigene Netzwerk angepasst werden!

« nach oben

« zurück (Gesammelte Anleitungen)