Einen Router bauen
arrow.gif Entwicklungsumgebung
arrow.gif Hardware Plattformen
arrow.gif Slackware Router
arrow.gif Downloads
   
Weiterentwicklung
arrow.gif Tasks pending
arrow.gif Bugs
   
Informationen
arrow.gif Security
arrow.gif FAQ
arrow.gif Links
 
Slackware Linux Router
Prev Next

16. System Backup

16.1 Hintergrund

Es ist sinnvoll, bei der Installation von Linuxrouter einen ersten Backup des betriebsbereiten Systems anzulegen. Allerdings ist davon auszugehen, dass sich die Konfiguration des Routers im Laufe der Zeit verändern wird. Es kann somit notwendig werden, weitere System Backups anzulegen.

Selbstverständlich ist es jederzeit möglich, den Massenspeicher des Systems, die Compact Flash Karte, mit Hilfe der Entwicklungsmaschine zu duplizieren. Da dieses Vorgehen umständlich und damit für den Alltag wenig hilfreich ist, soll nachstehend auf die Möglichkeit von Live Backups ( Backups des laufenden Systems ) eingegangen werden.

16.2 Image oder Tarball?

Backups von Systemen werden häufig als Low Level Backups von ganzen Partitionen realisiert. Dabei wird eine blockweise Kopie der gesamten Partition oder des gesamten Datenträgers erzeugt. Die Palette von Tools, die dafür zur Verfügung steht, reicht vom klassischen dd, das ab einer Live CD wie Knoppix eingesetzt wird, bis zu komplexen Softwarepaketen, die gemäss Herstellerangaben auch Low Level Backups des laufenden Systems zulassen.

Da komplexe Softwarepakete − nicht nur aus Platzgründen − für Linuxrouter nicht in Frage kommen, werden im Folgenden Backups auf dem Level des Filesystems diskutiert.

16.3 Tools

Die hier vorgeschlagene Lösung, bei der ein Filesystem Backup von Linuxrouter auf eine entfernte Maschine kopiert wird, benötigt lediglich tar und netcat auf Linuxrouter, sowie einen Backup Host, der ebenfalls mit netcat ausgerüstet ist.

16.4 Security

netcat (nc) ist nicht nur ein klassischen Linux-, sondern auch ein klassisches Cracker-Tool, das sich beispielsweise hervorragend für das Einrichten von Backdoors eignet.

Der Einwand, dass eine derartige Utility nicht auf einen Router und Firewall gehört, ist ernstzunehmen. Es wird an dieser Stelle jedoch davon ausgegangen, dass netcat und tar nicht in einem Systempfad abgelegt sind, also nicht unter /usr/bin/nc und /usr/bin/tar liegen, dass das Verzeichnis, das die Binaries enthält, nur für root zugänglich ist, und dass der SSH-Zugriff auf den Router nur via Pubkey Authentifizierung möglich ist.

Besonders vorsichtige Linuxrouter Administratoren ( also alle! ) werden nc bei Nichtgebrauch zudem mit Hilfe von chmod 0600 deaktivieren.

Unter diesen Voraussetzungen scheint der Einsatz der Utility vertretbar, denn sie kann von einem Angreifer nur dann gegen den Router verwendet werden, wenn das System längst hoffnungslos komprimittiert ist.

16.5 Sicherung des laufenden Systems

Die Schwierigkeit von Live Sicherungen besteht darin, dass sich Files verändern können, während sie gesichert werden. Kommerzielle Systeme umgehen dieses Problem, indem sie beispielsweise vor und nach der Sicherung eines Files Prüfsummen bilden und so in der Lage sind festzustellen, ob sich eine Datei zum Zeitpunkt der Sicherung verändert hat.

Linuxrouter ist jedoch so konfiguriert, dass das System möglichst keine Schreibzugriffe auf den Massenspeicher durchführt. Die Logfiles liegen auf einem externen Logserver, Änderungen an Firewall- oder an Boot-Scripts werden ausschliesslich vom Administrator vorgenommen.

Falls der DHCP-Server oder Dyndns aktiviert sind, ist es zugegebenermassen möglich, dass die Leases-Files dieser Services genau dann beschrieben werden, wenn eine Sicherung erfolgt.

Das Perfekte sollte jedoch nicht zum Feind des Guten werden!

Die Schwierigkeit des Live Backups bei Linuxrouter reduziert sich realistischerweise darauf zu verhindern, dass das /proc und das /sys Verzeichnis gesichert werden ( der Inhalt dieser Folder wird von Kernel zur Laufzeit generiert ).

16.6 Start der Sicherung

Für die Systemsicherung muss auf dem entfernten System, dem Zielserver, netcat im «listening mode» gestartet werden ( durch root, damit die Ownerships der übermittelten Files erhalten bleiben ):

# nc -l -p3333 > myrouterbackup.tar.gz
 

-l = listening mode
-p3333 = Port, auf dem der Zielserver hört

 

Anschliessend wird das Router System mit Hilfe von tar archiviert und via Pipe an netcat übergeben. nc seinerseits übermittelt das Sicherungsfile von Linuxrouter an den Zielserver.

# /path/to/tar czSpv --numeric-owner --atime-preserve \
--exclude /proc \
--exclude /sys -f - / | /path/to/nc -q1 -w5 <remote_ip> 3333
 

-f - = keinen Filenamen angeben für tar
-q1 = nach EOF eine Sekunde warten, dann quit
-w5 = Timeout für den Verbindungsaufbau

 

Der Backup wird vorzugsweise mit Hilfe eines Shellscripts angestossen:

#!/bin/sh
#
# sysbackup.sh
#
# Description: 
# Script will copy the source machine's operating  
# system to a tarball on the destination machine.
#
# Usage:
# Start netcat on the destination machine:
# nc -l -p3333 > /path/to/myrouterbackup.tar.gz
#
# Make sure netcat traffic is allowed accross your firewall.
#
# Run this script.
#
# To untar the system do: tar -xzpvf myrouterbackup.tar.gz
# NOTE: 
# Add /proc and /sys folders when restoring your system.
#
#
#======================================
# User variables
#======================================
REMOTE_IP="10.10.10.10"
REMOTE_PORT="3333"

SOURCE_DIR="/"

PROC_DIR="/proc"
SYS_DIR="/sys"

#======================================
# System variables
#======================================
NETCAT_DIR="/path/to"
TAR_DIR="/path/to"

#======================================
# Code section
#======================================
${TAR_DIR}/tar czSpv  --numeric-owner --atime-preserve \
--exclude ${PROC_DIR} \
--exclude ${SYS_DIR} -f - ${SOURCE_DIR}  | ${NETCAT_DIR}/nc -q1 -w5 ${REMOTE_IP} ${REMOTE_PORT}
 

Das Firewall Script des Routers muss so angepasst werden, dass netcat Verbindungen ins LAN zugelassen werden. Dafür sind Regeln in der folgenden Art vorzusehen:

# Allow netcat traffic from the router to your LAN
$IPTABLES  -A OUTPUT -d $my_lan -p TCP \
  --sport $p_high --dport $p_netcat \
  -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
		
$IPTABLES  -A INPUT -s $my_lan -p TCP \
  --sport $p_netcat --dport $p_high  \
  -m state --state ESTABLISHED,RELATED -j ACCEPT
 

p_netcat = 3333
p_high = 30000:60000
my_lan = IP address and netmask of own LAN

 


Prev Home Next
Ethernet Bridging Content Linuxrouter v0.50