Funktioniert Ihr Netzwerk wie gewünscht? Ist es sicher? Mit den passenden Werkzeugen überprüfen Sie jeden Aspekt des Netzes und sichern es mit einfachen Maßnahmen gegen den Großteil möglicher Angriffe ab.
Netzwerkpraxis
| Teil 1 – Planung und Grundkonfiguration | LinuxUser 12/2007 |
| Teil 2 — Sicherheit und Troubleshooting | LinuxUser 01/2008 |
Nicht immer funktioniert in einem neu eingerichteten Netzwerk alles auf Anhieb. Mal meldet sich etwa ein Host im lokalen Netzwerk nicht, dann hapert es mit dem Internet-Zugriff oder das System kennt plötzlich einen gängigen Domain-Namen nicht mehr. Die Sicherheit darf natürlich ebenfalls nicht zu kurz kommen. Einen einfachen Einstieg in die Thematik samt Hinweise zum Planen und Konfigurieren von Netzwerken lieferte der erste Teil dieses Workshops [1].
Unter der Haube
Einige Befehle helfen bei der Ursachenforschung, wenn etwas nicht richtig funktioniert. Erreichen Sie zum Beispiel einen Host nicht mehr unter seinem Namen, prüfen Sie zunächst mit host Hostname, dig Hostname oder nslookup Hostname, ob das Auflösen des Namens klappt. Meldet sich kein Nameserver (no servers could be reached), überprüfen Sie die Einstellungen in der Datei /etc/resolv.conf. Die Befehle Host, Nslookup und Dig (letzteres mittels dig -x) eignen sich übrigens auch zum Klären der Frage, welcher Rechnername sich hinter einer IP-Adresse wie 212.227.96.14 verbirgt.
Möchten Sie mehr über die Datenbankeinträge der Registrare für Domain-Namen und IP-Adressen erfahren, verwenden Sie den Befehl Whois mit einem Domain-Namen, einer IP-Adresse, einer AS-Nummer oder einem RIPE-Handle. Versuchen Sie zum Beispiel mal whois teamix.de, whois 194.150.191.70, whois AS33988 und whois OKAY1-RIPE als Startpunkt für einen tieferen Einblick.
Mit ping IP-Adresse oder ping Hostname prüfen Sie die Erreichbarkeit eines Hosts. Der Befehl sendet ICMP-Pakete, bis Sie mit [Strg]+[C] abbrechen. Alternativ versenden Sie mit der Option -c Anzahl eine festgelegte Anzahl von Paketen. Funktioniert das Auflösen eines Hostnamens nicht, probieren Sie einen Ping auf IP-Adresse des DNS-Servers. Bei Erfolg liefert Ping die Zeit, die das Paket hin- und her braucht (time).
Der Befehl meldet Destination Host Unreachable, wenn sich der Host selbst oder eine Zwischenstation auf dem Weg zum Host, wie etwa ein Router, nicht erreichen lassen (Abbildung 1). Existiert dagegen keine Route ins Netzwerk des Hosts, etwa weil die Standardroute fehlt oder die Schnittstelle gar nicht konfiguriert ist, meldet Ping dagegen Network is unreachable.

Abbildung 1: Der Router meldet, dass er keinen Nameserver erreicht. Möglicherweise ist einfach ein Kabel nicht richtig angeschlossen.
Bleiben die ICMP-Pakete ohne Antwort, versucht der Befehl bis zum Abbruch oder dem Erreichen der angegeben Anzahl Pakete zu senden und meldet anschließend 100% packet loss. Das passiert zum Beispiel, falls Sie aus Versehen eine im lokalen Netzwerk nicht erreichbare private IP-Adresse verwenden, die ihr Standardgateway kommentarlos verwirft, anstatt sie ins Internet weiterzuleiten – etwa 192.168.2.1 im Netzwerk 192.168.1.1/24. Mit der Option -a schalten Sie bei manchen Ping-Varianten ein akustisches Signal ein. So überprüfen Sie sehr leicht Kabelverbindungen, ohne ständig zum Computer hin- und herzulaufen [2].
Erreichen Sie einen Host im lokalen Netzwerksegment nicht mehr, prüfen Sie je nach Alter des Netzwerktreibers auf Ihrem System mit Ethtool, Mii-tool oder Mii-diag, ob eine Verbindung (Link) besteht. Haben Sie den Daemon Ifplugd installiert, verwenden Sie alternativ den Befehl Ifplugstatus zur Diagnose.
Fehlt der Link, prüfen Sie, ob Sie alle Netzwerkgeräte eingeschaltet und miteinander verkabelt haben. Eine grüne LED beim Netzwerkanschluss zeigt an, dass ein Link anliegt. Mitunter leuchtet eine gelbe oder rote Diode, sobald die Schnittstelle Daten überträgt. Mit ethtool -p Interface testen Sie die LED einer Netzwerkschnittstelle, um den richtigen Anschluss zu finden. Das klappt jedoch nicht mit allen Treibern und Geräten. Weitere Diagnosemöglichkeiten für die Netzwerkhardware finden Sie in der Manpage von Ethtool.
Haben Sie Schwierigkeiten, Hosts aus anderen Netzwerksegmenten zu erreichen, überprüfen Sie, ob eine entsprechende Route steht und der passende Router läuft. Mit ip route get Ziel-IP-Adresse erfahren Sie, wie der TCP/IP-Stack ein Paket weiterleitet. Mit traceroute IP-Adresse, traceroute Hostname, mtr IP-Adresse oder mtr Hostname verfolgen Sie den gesamten Weg eines Pakets bis zum Ziel. Ein Sternchen zeigt dabei an, dass das Tool eine Zwischenstation (einen Hop) nicht erreicht. Bleibt das Paket irgendwo im Internet hängen, liegt der Fehler nicht mehr im direktem Einflussbereich.
Steht die Verbindung und es meldet sich nur ein Dienst nicht, testen Sie die Erreichbarkeit am besten mit dem Befehl telnet HostnamePort oder telnet IP-AdressePort auf der Kommandozeile. Alternativ verwenden Sie statt der Portnummer den Namen des Diensts. Die Datei /etc/services liefert eine Liste der Dienste. Klappt alles, erhalten Sie zum Beispiel die Meldung Connected to www.linux-user.de, und der Dienst wartet auf Befehle.
Beim Webserver (Port 80) erhalten Sie beispielsweise mit GET /index.html oder GET /index.php die Startseite. Mit [Strg]+[AltGr]+[9] beenden Sie die Sitzung. Ein anschließendes [Strg]+[D] schließt das Programm. Weitere Hinweise etwa zum Mitverfolgen des Datenverkehrs mit Hilfe von Tcpdump und Wireshark (dem früheren Ethereal) finden Sie in [3] und [4].
Thema Sicherheit
Oft bringen schon einfache Maßnahmen einen großen Sicherheitsgewinn. Halten Sie die die eingesetzte Software auf Computern und anderen Netzwerkgeräten auf dem tagesaktuellen Stand. Linux-Distributionen machen das Einspielen von Sicherheitsaktualisierungen leicht: Unter Debian informieren Sie sich bei Bedarf mit Cron-apt regelmäßig über neu verfügbare Software-Updates. Tragen Sie in /etc/cron-apt/config bei MAILTO Ihre Mail-Adresse ein, und setzen Sie den Wert der Variable MAILON auf "upgrade". Unter Suse und Ubuntu verwenden Sie das Online-Update.
Die Fehleranfälligkeit steigt mit der Menge und der Komplexität der eingesetzten Software. Bieten Sie daher nur diejenigen Dienste im Netzwerk an, die Sie unbedingt brauchen. Moderne Distributionen bringen in der Regel eine ganz gute Konfiguration mit; nachschauen schadet dennoch nicht.
Einen Überblick über stehende Verbindungen verschaffen Sie sich mit dem Befehl lsof -i, den Sie als root ausführen, damit er alle offenen Verbindungen anzeigt. Alternativ verwenden Sie netstat -tulpn. Das Programm Nmap prüft ein Netzwerkgerät auf offene Ports, indem es versucht, auf jeden Port zu verbinden. Sie setzen den Befehl von einem anderen Rechner aus ein, um zu prüfen, welche Ports tatsächlich nach außen offen stehen.
Schauen Sie sich vor allem solche Ports an, auf denen ein Server lauscht (LISTEN). Ermitteln Sie, auf welche IP-Adresse der Server lauscht. Nimmt ein Server nur vom Loopback-Device 127.0.0.1 oder ::1 (IPv6) Anfragen an, verringert sich die Angriffsfläche beträchtlich. Bei 0.0.0.0 oder ::: (IPv6) nimmt er jedoch von allen IP-Adressen eine Verbindung an. Mitunter horcht ein Server auch ausschließlich auf Anfragen von einer bestimmten IP-Adresse.
Stoppen Sie nicht erforderliche Dienste, und vermeiden Sie deren Start beim Booten. Dazu verwenden Sie zum Beispiel das entsprechende Init-Skript, wie /etc/init.d/apache2, sowie Tools wie YaST unter OpenSuse oder Rcconf unter Debian.
Erforderliche Dienste sollten nur auf die notwendigen IP-Adressen lauschen. Verwenden Sie dazu Optionen wie Listen für Apache und Cups, ListenAddress für SSH, interfaces und bind interfaces only für Samba sowie inet_interfaces und smtp_bind_address für Postfix. Mit Grep finden Sie bereits vorhandene Optionen in den Konfigurationsdateien. Vergessen Sie nach dem Ändern einer Option das Neustarten oder Neueinlesen der Konfiguration nicht. Das Init-Skript für den Dienst bietet in der Regel diese Möglichkeiten. Weitere Hinweise zur Absichern von SSH gibt ein separater Beitrag [5].
Feuerwände
Erst nach diesen grundlegenden Maßnahmen lohnt es sich, über eine Firewall nachzudenken. Eine Personal Firewall bietet zusätzliche Sicherheit, falls Ihr Computer doch einmal nicht nur auf den erforderlichen Ports auf eingehende Verbindungen lauscht. Eine Firewall auf einem Router schützt dagegen die Netze, in die er Pakete weiterleitet. In der Regel reicht es aus, das lokale Netz vor Zugriffen aus dem Internet zu sichern.
Eine Firewall auf einem Linux-System konfigurieren Sie mit dem Tool Iptables, indem Sie Standardrichtlinien und individuelle Regeln festlegen. Listing 1 zeigt ein Beispiel für eine minimale Firewall. Der Echo-Befehl in Zeile 10 schaltet das Weiterleiten von IP-Paketen aus, während Zeile 13 ein Modul des Connection-Trackers lädt, das die Eigenheiten von FTP-Verbindungen handhabt.
#!/bin/sh # iptables-Befehl IPT=/sbin/iptables # Debugging? #set -x # IP-Pakete nicht weiterleiten echo 0 > /proc/sys/net/ipv4/ip_forward # Conntracker-Modul für FTP-Verbindungen modprobe ip_conntrack_ftp # Standard-Richtlinien $IPT -P INPUT DROP $IPT -P FORWARD DROP $IPT -P OUTPUT ACCEPT # Tabellen leeren $IPT -F ## Eingehende Pakete (INPUT), Tabelle Filter # Bestehende Verbindungen akzeptieren $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Eingehende SSH-Verbindungen akzeptieren $IPT -A INPUT -m state --state NEW -p tcp --syn --dport 22 -j ACCEPT # ICMP akzeptieren (unter anderem Pings) $IPT -A INPUT -m state --state NEW -p icmp -j ACCEPT # Alles andere freundlich ablehnen $IPT -A INPUT -j REJECT
Die Befehle in den Zeilen 16 bis 18 versetzen Iptables in den geeigneten Ausgangszustand: So verwirft Iptables alle eingehenden und weiterzuleitenden Pakete, erlaubt jedoch alle ausgehenden Pakete [6]. Der Befehl in Zeile 21 löscht eventuell vorhandene Regeln.
Der Connection Tracker vereinfacht das Regelwerk erheblich. So erlaubt die erste mit der Option -A hinzugefügte Regel in Zeile 25 den Paketen bestehender Verbindungen Zugang zum System. Die Option -m state nutzt das Kernel-Modul, um den Zustand einer Verbindung abfragen.
Der Aufbau einer TCP-Verbindung erfolgt in drei Schritten: Computer 1 sendet ein TCP-Paket mit gesetzten SYN-Bit, Computer 2 antwortet mit SYN und ACK und Computer 1 bestätigt mit ACK (Abbildung 2). Die passenden Zustände heißen NEW, RELATED und ESTABLISHED. Die Option --state dient dazu, Pakete anhand des Zustands für eine Regel auszuwählen. Iptables verwendet standardmäßig die Tabelle filter, die Sie hier also nicht extra mit -t filter angeben müssen.

Abbildung 2: Der Aufbau einer TCP-Verbindung erfolgt in drei Schritten. Daher stammt auch der Fachausdruck Three-Way-Handshake.
Die weiteren Regeln definieren, welche weiteren eingehenden Pakete erlaubt sind. So gestatten die Zeilen 28 und 30 eingehende SSH-Verbindungen sowie ICMP-Pakete. Beide Regeln akzeptieren nur Pakete zum Verbindungsaufbau. Die Option --syn wählt explizit Pakete aus, die ausschließlich das SYN-Bit gesetzt haben.
Die letzte Regel in Zeile 33 lehnt alle weiteren Pakete freundlich mit der ICMP-Meldung Port Unreachable ab, anstatt Sie via Standardrichtlinie einfach ohne Antwort zu verwerfen. REJECT gehört nicht zu den fest eingebauten Zielen und darf nicht als Ziel einer Standard-Richtlinie arbeiten. Das freundliche Ablehnen hilft bei der Fehlerdiagnose und bewahrt Kommunikationspartner davor, in Zeitlimits zu laufen.
Eine Liste aller Regeln erhalten Sie mit iptables -L. Mit der Option --line-numbers zeigt das Tool die Regelnummer an. Mit -v liefert es zusätzliche Informationen, wie zum Beispiel die Anzahl der von einer Regel erfassten Pakete und deren Datenvolumen. Mit -n vermeiden Sie die mitunter zeitaufwändige Namensauflösung (Abbildung 3).

Abbildung 3: Iptables liefert Regeln und Statistik in einem, hier am Beispiel eingehender ICMP-Pakete.
Im laufenden Betrieb ändern Sie das Regelwerk direkt mit dem Befehl Iptables oder indem Sie das Skript ändern und erneut ausführen. So löschen Sie mit iptables -D INPUT 2 die zweite Regel, die den SSH-Zugriff erlaubt, aus der Regelkette INPUT in der Tabelle filter. Mit iptables -I INPUT 2 -m state --state NEW -p tcp --syn --dport 80 -j ACCEPT fügen Sie an deren Stelle eine Regel ein, die HTTP-Verbindungen erlaubt.
Sie starten die Firewall zum Beispiel als Init-Skript oder bei Debian in /etc/network/interfaces durch einen Eintrag wie up /etc/network/firewall.sh bei der Loopback-Schnittstelle (iface lo inet loopback). Als Alternative zum Shellskript, das die Regeln aufsetzt, speichern Sie diese mit Iptables-save und laden Sie sie mit Iptables-restore. Komfortabler konfigurieren die Firewall mithilfe einer grafischen Oberfläche, wie etwa dem Gnome-Programm Firestarter [6] oder dem KDE-Programm KMyFirewall [7].
Setzen Sie einen Linux-Rechner als Router ein, verwenden Sie die Regelkette FORWARD, um das lokale Netzwerk zu schützen. Den Router selbst schützen Sie, wie gezeigt, mit Regeln in der Regelkette INPUT. Ein kommentiertes Beispiel hierfür sowie ein Skript zum Ausschalten der Firewall finden Sie auf der Heft-CD.
Glossar
-
AS-Nummer
-
Autonomous System Number. Nummer eines autonomen Systems, ein als eine Einheit von einer Firma oder Organisation verwaltetes IP-Netz. Autonome Systeme sind untereinander verbunden und bilden so das Internet.
-
RIPE-Handle
-
Eindeutige Kennung zur Identifikation einer Person in der RIPE-Datenbank. Das RIPE Network Coordination Centre kümmert sich um die Vergabe von IP-Adressbereichen und AS-Nummern in Europa.
[1] Workshop, Teil 1: Martin Steigerwald “Gute Verbindungen”, LinuxUser 12/2007, S. 88
[2] Ping: http://linux-net.osdl.org/index.php/Iputils
[3] Netzwerk-Diagnose: Thomas Leichtenstern, “Troubleshooter”, LinuxUser 12/2006, S. 48, http://www.linux-user.de/ausgabe/2006/12/048-diagnose/
[4] Netzwerk-Tools: Nico Lumma, “Der kleine Netzwerker”, LinuxUser 04/2004, S. 36, http://www.linux-user.de/ausgabe/2004/04/036-netztools/
[5] SSHFS: Martin Steigerwald, “Sicher getunnelt”, LinuxUser 03/2007, S. 72
[6] Filtern ausgehender Verbindungen: Marcus Nasarek “Feuerfest”, LinuxUser 01/2007, S. 28
[7] Firestarter: Marcus Nasarek “Brandmelder”, LinuxUser 01/2007, S. 32
[8] KMyFirewall: Erik Bärwaldt “Kein Durchgang”, LinuxUser 01/2007, S. 36





