OVH Server from Scratch mit Debian und dm-crypt Verschlüsselung

Diese Anleitung entspricht nicht mehr dem maximal möglichen Standard an Sicherheit. Dafür empfehle ich mein Konzept Tauchfahrt mit Linux.

1. Grundsätzliches

Dieses Howto beschreibt die Installationen von Debian Squeeze auf einem OVH Server im Rescue Modus. Der Server ist nach der Installation weder abgesichert noch entspricht er dem ‘Standard’ von OVH.

Das bedeutet:

  • Kein Supportkey von OVH
  • Kein Realtime-Monitoring durch OVH
  • Kein OVH-Kernel
  • Download von Paketen nicht über OVH
  • Direkter SSH-Zugang als Superuser root

Darum empfehle ich dringend die Authentifikation per SSH Publickey. Einen Artikel darüber gibt es hier.

Das Ergebnis ist ein Minimalsystem für einen Fileserver, der folgende Eigenschaften hat.

  • Möglichst unabhängig von OVH-Infrastruktur
  • Minimalsystem
  • Großer verschlüsselter Datenbereich in /home

Das HowTo basiert auf dem Squeeze from Scratch HowTo von Sven Richter.

2. Sicherung der Netzwerkdaten

Diese Daten sind zwingend erforderlich für die Fortführung der Installation. Am besten ist es, Ihr sichert die Daten in einer Textdatei (zum Beispiel mit Notepad).

2.1 Grundsicherung der Daten

Die Inhalte folgender Dateien werden benötigt.

cat /etc/resolv.conf
hostname
cat /etc/network/interfaces

3. Rescuesystem

Kundenmenü aufrufen und rescue-pro auswählen unter dem Menüeintrag Netboot. Anschließend in der Konsole ‘reboot’ eintippen.
Es dauert ein paar Minuten bis das Passwort per E-Mail eintrifft und danach meldet ihr euch per Putty mit dem Passwort auf dem Server an.
Sollte der Neustart nicht funktionieren, muss über das Kundenmenü, Menüeintrag Reboot ein Neustart initiiert werden.

3.1 Festplatte partitionieren

Partionsmanager aufrufen

cfdisk -z

Gelöscht wird automatisch das komplette Partitionsschema der vorherigen Installation!

Angelegt werden nun drei Partitionen.
sda1

  • Größe 20GB
  • Typ 83 (Linux)
  • Bootbar

sda2

  • Größe 512MB
  • Typ 82 (Linux Swap)

sda3

  • Größe Rest (wird von cfdisk automatisch vorgeschlagen)
  • Typ 83 (Linux)

Das Ergebnis sieht für das Beispiel wie folgt aus.

Wir formatieren die neuen Partitionen und mounten diese sofort.

mkfs.ext4 /dev/sda1
mkswap /dev/sda2
swapon /dev/sda2
mount /dev/sda1 /mnt

4. Squeeze from scratch installieren und einrichten

Wir installieren nun Squeeze per debootstrap und anschließend per chroot in das frisch installierte System

4.1 Debootstrap herunterladen und anpassen

cd /tmp
wget http://ftp.de.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.42_all.deb
ar -xf debootstrap_1.0.42_all.deb
tar xzf data.tar.gz
tar xzf control.tar.gz

Sollte die debootstrap Quelle nicht mehr aktuell sein (ich schaue da nicht jeden Tag nach) hier findet ihr die aktuelle Quelle. Ich freue mich natürlich über eine kurze Mail um dann das Howto entsprechend anzupassen: http://ftp.de.debian.org/debian/pool/main/d/debootstrap/

Um jetzt per debootstrap installieren zu können, muss die Source von debootstrap etwas verändert werden

nano usr/sbin/debootstrap

Die folgenden Zeilen entsprechend editieren

Suche:

DEBOOTSTRAP_DIR=/usr/share/debootstrap

und ersetze mit:

DEBOOTSTRAP_DIR=/tmp/usr/share/debootstrap

4.2 Installation durchführen

usr/sbin/debootstrap --arch amd64 squeeze /mnt/ http://ftp2.de.debian.org/debian

 

mount -t proc none /mnt/proc
mount -o bind /dev /mnt/dev
mount -t tmpfs none /mnt/tmp
mount -o bind /sys /mnt/sys
LANG=C chroot /mnt /bin/bash

Läuft alles ohne Fehlermeldung durch, befinden wir uns im frischen Debian Squeeze.

4.3 Rootpasswort und User erstellen

Neben dem Setzen des Passworts erstellen wir noch das Verzeichnis GRUB für den Bootmanager.

mkdir -p /boot/grub
passwd

5. System und Netzwerk konfigurieren

Jetzt kommen die gesicherten Daten zum Zug, dafür öffnet ihr die Textdatei, in der alle Daten gesichert wurden.
Diese werden jetzt sinngemäß eingetragen:

cat > /etc/hostname << "EOF"  $euerServername EOF 

 

 cat > /etc/hosts  << "EOF"  127.0.0.1        localhost  localhost.localdomain 123.123.123.123  $servername EOF 
 cat > /etc/resolv.conf << "EOF"
nameserver 127.0.0.1
nameserver 123.123.123.123
nameserver 213.186.33.99
EOF

Auch hier muss 123.123.123.123 entsprechend eurer Textdatei angepasst werden. Wer statt den Nameservern von OVH lieber unabhängige anonyme Nameserver einsetzen möchte, findet hier eine Liste.

5.1 Netzwerk

Anhand dieses Beispiels kannst du dein Netzwerk konfigurieren. Nicht vergessen, deine eigene IP einzusetzen und nicht blind zu kopieren.

cat > /etc/network/interfaces << "EOF"  auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 123.123.123.123 netmask 255.255.255.0 broadcast 123.123.123.255 network 123.123.123.0 gateway 123.123.123.254 EOF 
 echo 'BOOTLOGD_ENABLE=Yes' > /etc/default/bootlogd

5.2 Einrichtung /etc/fstab, Paketquellen und lokale Einstellungen

cat > /etc/fstab << "EOF" /dev/sda1 / ext4 errors=remount-ro 0 1 /dev/sda2 swap swap defaults 0 0 proc /proc proc defaults 0 0 EOF 
 cat >/etc/apt/sources.list << "EOF
deb http://ftp.de.debian.org/debian/ squeeze main non-free contrib
deb-src http://ftp.de.debian.org/debian/ squeeze main non-free contrib
deb http://security.debian.org/ squeeze/updates main non-free contrib
deb-src http://security.debian.org/ squeeze/updates main non-free contrib
deb http://ftp.de.debian.org/debian/ squeeze-updates main non-free contrib
deb-src http://ftp.de.debian.org/debian/ squeeze-updates main non-free contrib
deb http://backports.debian.org/debian-backports squeeze-backports main
EOF

 

aptitude update && aptitude upgrade

Jetzt bringen wir Squeeze die deutsche Sprache bei.

aptitude install locales && dpkg-reconfigure locales

Mit de_DE@euro ISO-8859-15 bist du auf der sicheren Seite. Die entsprechende Zeitzone muss auch gesetzt werden, in der Regel auf Europa/Berlin.

dpkg-reconfigure tzdata

6. Bootmanager, Kernel und Basis-Software installieren

Wir installieren den Kernel wie folgt.

aptitude -t squeeze-backports install linux-image-amd64

Bei der Installation werden zwei Fragen gestellt, die wie folgt zu beantworten sind:
Create a symbolic link to the current kernel image? YES.
Abort initrd kernel image installation? Hier zwingend mit NO antworten.

6.1 Grundlegende Software installieren

aptitude install -y ssh grub pciutils psmisc cryptsetup pwgen xfsprogs xfsdump

Während der Installation erscheint eine Nachfrage von grub-pc. Dort einfach bestätigen. Wird nach dem Ort, an dem GRUB installiert werden soll gefragt, gebt ihr /dev/sda an. Weicht eure Festplattenbenennung ab, ist es wichtig zu wissen, dass GRUB nicht in einer Partition (wie /dev/sda1), sondern auf der Festplatten (wie /dev/sda) installiert werden muss.

7. Reboot des Systems

Wir gehen wieder zurück zum Kundenmenü, stellen unter Netboot HD ein und startet den Serve wie folgt neu.

exit
reboot

Jetzt wird der Server mit dem eigenen Kernel hochgefahren und sollte nach maximal drei Minuten wieder verfügbar sein.

8. Verschlüsselte Partition einrichten

In diesem Beispiel wurde die Partition sda3 angelegt, aber noch nicht formatiert. Diese Partition soll jezt verschlüsselt werden. Dafür wird zuerst in Putty mit dem Befehl pwgen 200 1 ein 200 stelliges Kennwort erzeugt. Das Kennwort speichert ihr auf eurem lokalen Computer sicher ab.

8.1 Partition verschlüsseln und formatieren

Jetzt wird die Partition sda3 verschlüsselt. Dabei muss in Großbuchstaben YES gefolgt vom Kennwort eingegeben werden.

modprobe dm_mod
cryptsetup luksFormat /dev/sda3

Jetzt wird die Partition geöffnet, formatiert und als Verzeichnis /home eingebunden.

cryptsetup luksOpen /dev/sda3 sda3_crypt
mkfs.xfs -l size=128m -d agcount=4 -i attr=2,maxpct=5 -L storage /dev/mapper/sda3_crypt
mount /dev/mapper/sda3_crypt /home

8.2 Startskript anlegen

Um bei zukünftigen Systemstarts das Öffnen der verschlüsselten Partition zu automatisieren legen wir ein Skript an. Der Partitionsname ist entsprechend zu ersetzen, falls ihr ein anderes Partitionsschema gewählt habt.

nano /root/startServer.bash

 

#!/bin/bash
echo dm-crypt Passworteingabe
cryptsetup luksOpen /dev/sda3 sda3_crypt && mount -onoatime,delaylog,logbufs=8,logbsize=256k /dev/mapper/sda3_crypt /home/

 

chmod 700 /root/startServer.bash

8.3 Neustart

Jetzt ist auch die Einrichtung des verschlüsselten Datenbereichs abgeschlossen und der Server kann getestet werden. Dafür wird er neugestartet.

reboot

Nachdem der Server wieder verfügbar ist, wird als erstes die verschlüsselte Partition mit unserem Skript eingebunden.

/root/startServer.bash

9. Abschluss

Wenn der Server nach dem letzten Neustart erfolgreich neugestartet ist und die verschlüsselte Partition eingebunden, habt ihr alles richtig gemacht. Die Installation ist abgeschlossen.

9 comments

  1. In Zeiten von Plattengroessen > 2 TB ist cfdisk leider
    ein Auslaufmodell… Ich empfehle gdisk oder parted (beides im rescue
    vorhanden)

    Ein paar Benutzungsbeispiele:
    # parted -s /dev/sda mklabel gpt
    # parted -s /dev/sda –align optimal unit GiB mkpart mkpart primary ext3 0 20
    # parted -s /dev/sda set 1 boot on # bootbar markieren
    # parted -s /dev/sda set 1 raid on # partitionstyp auf mdraid setzen
    # parted -s /dev/sda –align optimal unit GiB mkpart mkpart primary ext3 20 4000
    # parted /dev/sda unit GiB print

  2. hm,
    mir gelingt die anpassung von debootstrap nicht. das rescuedingens ist wohl nur ro gemountet:

    root@rescue:/tmp# mount
    tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
    proc on /proc type proc (rw,noexec,nosuid,nodev)
    sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
    udev on /dev type tmpfs (rw,mode=0755)
    tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
    devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
    rootfs on / type rootfs (rw)
    [meine ip]:/home/pub/rescue.v6/ on /nfs type nfs (ro,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,nolock,proto=tcp,port=65535,timeo=600,retrans=2,sec=sys,local_lock=all,addr=[meine ip])
    [meine ip]:/home/pub/pro-power/ on /power type nfs (ro,nodev,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,nolock,proto=tcp,port=65535,timeo=600,retrans=2,sec=sys,local_lock=all,addr=[meine ip])
    fusectl on /sys/fs/fuse/connections type fusectl (rw)
    /dev/sda1 on /mnt type ext3 (rw)

    grüße
    manes

      1. Hallo Manes,

        wenn du dich an meine Anleitung gehalten hättest und wie angegeben debootstrap in das Verzeichnis /tmp heruntergeladen hättest, könntest du auch die nötigen Änderungen vornehmen. Das beschreibe ich im Listing unter Punkt 4.1 in Zeilen 1-5.

        Das hier ist kein Supportblog. Wenn du weitere ernstgemeinte Antworten möchtest, wirf bitte hier einen Blick hinein.

        Grüße

  3. Hallo!

    Schönes HowTo.
    In deinem Setup bleibt aber eine u.U. zweite vorhandene Festplatte ungenutzt.
    Hast Du mal über LVM + Crypt nachgedacht?

    Viele Grüße
    Seb

    1. Hallo Sebastian,

      meine Anleitungen sind keine Copy & Paste Listen, auch wenn man sie natürlich so verwenden kann. Wenn du LVM einsetzen möchtest, kannst du es an der entsprechenden Stelle tun.

      Wenn dir der Teil sehr fehlt, melde dich doch per E-Mail bei mir, oder im Freenode (#debian.de zum Beispiel) und wir sprechen mal über den fehlenden Teil.

      Grüße

      1. Um Copy&Paste ging es mir ehrlich gesagt nicht.
        Dachte Anleitung die Anleitung ist für OVH Server gedacht und ein großteil der Server dort (alle?) haben 2 Platten drin.
        Sollte nur eine Anregung sein :-)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>