FreeNAS beim Starten automatisch Entschlüsseln!

GamingTrainer

Enthusiast
Thread Starter
Mitglied seit
18.07.2011
Beiträge
73
Ort
Cloppenburg
Servus,


nachdem ich meinen neuen Backup Server (FreeNas) mit Verschlüsselung in Betrieb genommen habe, zerbreche ich mir momentan den Kopf darüber wie die Kiste automatisch das Volume beim hochfahren entschlüsselt.. :wall:


Folgendes Setup ist hier am Start.

1.) ESXi < mit FreeNAS VM ebendfalls Verschlüsselt läuft aber 24/7 << Dieses System soll gesichert werden.

2.) FreeNAS < Hier soll das Backup hin via. Rsync (läuft nicht 24/7)



Meine Idee war jetzt das 2 System Zeitgesteuert via. WoL aufwachen zu lassen. Dann per Script eine Datei mit dem Passwort vom 1. Rechner auf den 2. in einen Temporären Ordner zu kopieren (Oder es am Anfang vom Script zu Kopieren und am Ende wieder löschen?). Und dann die "Festplatten" automatisch zu entschlüsseln und einzubinden.

Habe ich dort jetzt einen Denkfehler drin ? (Sicherheitslücke) ??

Theoretisch, kommt man dann doch nicht mehr an die Datei mit dem Passwort dran, wenn beide Systeme ausgeschaltet sind ? Erst nachdem man das 1. System wieder Entschlüsselt hat, kommt das 2. System an die Datei mit dem Passwort ?

Da ich jetzt kein Fachmann in sachen Scripten bin frage ich hier mal nach ob jemand eine idee hat wie man es am sinnvollsten lösen kann. (Ohne das Backup System manuell hochzufahren und jedes mal ein Passwort eingeben zu müssen..)

Beim Googlen nach einer Lösung bin ich schon auf einen evtl. Lösungsansatz? gestoßen. :wink:

Code:
#!/bin/sh

echo Mount Geli
read eingabe

echo $eingabe | /sbin/geli attach -j - /dev/ada0
echo $eingabe | /sbin/geli attach -j - /dev/ada1
echo $eingabe | /sbin/geli attach -j - /dev/ada2

sleep 30

# Import zfs pool:
zpool import -R /mnt/Pool1

Nur wie binde ich eine "Datei" die das Passwort zum entschlüsseln enthält, mit in das Script ein ? Und welches Format muss eine solche Datei dann haben ? Einfach eine .txt ?


Freue mich über jeden Lösungsansatz :rolleyes:


Vielen Vielen Dank!

Lg Sven
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Wo ist da der Witz? Wie ist denn überhaupt dein Angriffsszenario, gegen das du dich schützen willst?

Wenn das Passwort im Fall des Scripts nicht eingegeben werden soll, sondern in einer Datei liegt, dann ersetze einfach echo $eingabe durch cat $datei, wobei du natürlich vorher datei=/pfad/zur/datei definieren musst.
 
Zuletzt bearbeitet:
Danke schonmal für deine Antwort TCM.
Gegen was ich mich schützen will ? Gegen Zugriff auf meine Dateien falls die Server in der Firma mal geklaut werden..
Sinn soll es einfach sein das die Backups automatisch erstellt werden.. Die Kiste soll Zeitgesteuert per WoL aufgeweckt, dann wird ein Backup via. Rsync erstellt und dann wieder runterfahren. (Weil ich Strom Sparen will ;) )

Die Datei mit dem Passwort ist ja nicht mehr erreichbar wenn die beiden Server offline sind oder sehe ich das falsch ? Weil ja der Server von dem er sich die Datei beziehen soll erstmal wieder Manuell entschlüsselt werden muss..
Dachte mir dann das ich dem 2. Server eine NFS Freigabe vom 1.Server zuweise in der die Datei liegt ?

Code:
#!/bin/sh

echo Mount Geli

# Hier soll er die NFS Freigabe vom 1. Server mounten. 
mount -t nfs server_IP_addr:/share_name /media/nfsmount

# Verschieben der Datei.  
cp /media/nfsmount/pw.txt /var/tmp/

# Entschlüsseln
datei=/var/tmp/pw.txt cat $datei | /sbin/geli attach -j - /dev/ada1
datei=/var/tmp/pw.txt cat $datei | /sbin/geli attach -j - /dev/ada2
datei=/var/tmp/pw.txt cat $datei | /sbin/geli attach -j - /dev/ada3
datei=/var/tmp/pw.txt cat $datei | /sbin/geli attach -j - /dev/ada4
datei=/var/tmp/pw.txt cat $datei | /sbin/geli attach -j - /dev/ada5

# Kurz warten bis er fertig ist mit dem Entschlüsseln
sleep 30

# Importieren des ZFS Pools
zpool import -R /mnt/Pool1

# Unmount
umount -f -l /media/nfsmount

# Löschen der Datei
rm /var/tmp/pw.txt


Ist das so richtig ?

Danke!

Gruß Sven
 
Wenn du das eh mountest, kannst du die Datei auch direkt verwenden. Sleep ist auch unnötig.

Code:
#!/bin/sh

echo Mount Geli

# Hier soll er die NFS Freigabe vom 1. Server mounten. 
mount -t nfs server_IP_addr:/share_name /media/nfsmount

datei=/media/nfsmount/pw.txt

# Entschlüsseln
for device in ada1 ada2 ada3 ada4 ada5; do
    cat ${datei} | /sbin/geli attach -j - /dev/${device}
done

# Importieren des ZFS Pools
zpool import -R /mnt/Pool1

# Unmount
umount -f -l /media/nfsmount
 
Zuletzt bearbeitet:
Woow. :d
Das ging aber schnell !

Werde ich gleich mal testen. DANKE!

Wenn man beim FreeNAS über die WebGUI das Passwort eingibt werden ja die Dienste (SMB,NFS,AFP etc.) neu gestartet. Muss das auch noch mit ins Script ?


Habs grad mal getestet.

Code:
#!/bin/sh

echo Mount Geli

# Mounten
mount -t nfs 192.168.10.100:/mnt/Pool1/SAFE /mnt/nfsmount

datei=/mnt/nfsmount/pw.txt

# Entschlüsseln
for device in ada0 ada1 ada2 ada3 ada4; do
	cat ${datei} | /sbin/geli attach -j - /dev/${device}
done

# Importieren des ZFS Pools
zpool import -R /mnt/Pool1

# Unmount
umount -f /mnt/nfsmount

Leider kommt dann eine Fehlermedung.
Code:
Mount Geli
geli: Cannot read metadata from /dev/ada0: Invalid argument.
geli: Cannot read metadata from /dev/ada1: Invalid argument.
geli: Cannot read metadata from /dev/ada2: Invalid argument.
geli: Cannot read metadata from /dev/ada3: Invalid argument.
geli: Cannot read metadata from /dev/ada4: Invalid argument.
 
Zuletzt bearbeitet:
Sind ada1 bis ada5 denn überhaupt deine Platten? Dass das Script noch auf deine konkrete Umgebung anzupassen ist, habe ich mal einfach als gegeben vorausgesetzt. Du kannst ja nicht einfach ein Script aus dem Internet nehmen und davon ausgehen, dass das funktioniert.
 
Hallo,

habe das Script ja geändert von ada1 - ada5 auf ada0 - ada4. Aber dort kommt der selbe Fehler ;)
Das NFS Share lässt sich manuell schonmal mounten und unmounten.
Nur halt beim Entschlüsseln meckert er :hmm:

Habe hier auch nochmal ein Screen angehängt.
snipp.jpg
 
Da ad1p1.eli etc. existieren, ist mal anzunehmen, dass die Platten partitioniert wurden. Dann ist natürlich ad1p1 statt ad1 anzugeben. Es wäre wirklich besser, wenn du weißt, was du da machst, deinen Daten zuliebe.
 
Wird ja alles vorher in einer VM mit gleichem Setup getestet ;) Will ja nicht mein Raid oder das Dateisystem mit irgendwielchen Scripten zerschiessen :d
Habs grad mal getestet mit ada1p1 etc. Kommt leider zur selben Fehlermeldung.

Onkel Google hilft mir leider auch nicht weiter.
 
Ist zwar schon ein paar Tage alt das Thema, aber ich stand gerade vor dem gleichen Problem.

Die Anleitung oben ist im Prinzip korrekt. FreeNas erstellt allerdings auf jeder verschlüsselten Platte zwei Partionen. Die zweite Partition ist die mit den Nutzdaten, d.h. die entsprechenden Devices hätten hier ad1p2, ad2p2, ... heißen müssen.

Ich habe folgendes Script decrypt.sh erstellt, dass ich auf meinem zweiten FreeNAS System als Init Script laufen lasse.

Das Passwort wird per SSH aus einer Datei auf server1 ausgelesen und nicht lokal auf server2 gespeichert. Wenn server1 abgeschalten ist, kann server2 nicht automatisch entschlüsseln.

Code:
#!/bin/sh

# Hostname of primary FreeNAS server
HOST=server1

# File with the ELI password on the primary FreeNAS server
PASS_FILE=/mnt/tank/data/eli.pass

# Devices which belong to the encrypted ZFS Volume on secondary server
DEVICE_LIST="da1p2 da2p2 da3p2"

# General GELI key on the secondary server
GELI_KEY=/data/geli/<SOME UUID>.key

DATE=$(date)

ping -c 1 $HOST >> /dev/null
if [ $? -ne 0 ]
then
        echo "$DATE: $HOST is not up (ping RC is NOT 0)" >> /root/decrypt.log
        exit 1
fi

ELI_PASS=$(ssh root@$HOST cat $PASS_FILE)

for DEV in $DEVICE_LIST; do
        echo $ELI_PASS | /sbin/geli attach -j - -k ${GELI_KEY} /dev/${DEV}
done

# Adjust volume name if necessary
zpool import -R /mnt tank
sleep 5

exit 0
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh