HOWTO: RAID med krypterat filsystem

Permalänk
Medlem

HOWTO: RAID med krypterat filsystem

Jag har länge vart sugen på en NAS med ett krypterat filsystem. Men när vår NAS gick sönder köpte vi en Synology DS413j då jag inte var helt säker på att dra upp en egen NAS och vi behövde nånting som funkade NU.

Så därför har jag tagit reda på hur man gör och kommit fram till att det faktiskt är riktigt enkelt, men att det finns dåligt till inga guider på hur man gör även om RAID och kryptering är bra dokumenterat var för sig.

Jag antar en viss kunskap om att administrera linuxservrar och jag kör med Ubuntu, men det är snarlikt på andra distar.

Mina krav är:
1. Mjukvaruraid, enklare att administrera, mer portabelt & väl beprövat
2. RAID-volymen (inklusive krypteringsvolymen) ska gå att utöka med mer lagring och mer paritet (jag tänkte börja med RAID 5)
3. Lösenordet ska gå att skriva in vi SSH, alltså får inte systemet vara krypterat utan bara datan.

1. Partionera diskarna. Alla partioner som är med i en RAID 1,5 eller 6 måste vara lika stora.
Om du vill ha / säkrat måste man ha RAID 1 då bootloadern inte har RAID stöd. Men hur man gör det tar inte jag upp.

2. Installera systemet men låt partitionerna för raiden vara.
Jag valde att kryptera hemmappen, inte för att det ska ligga nånting där utan för att Ubuntu automatiskt ska fixa krypterat swap.
Efter installationen monterade jag även /tmp i RAM för att inte den ska läcka nånting

3. Logga in som root då allt vi ska göra kräver det

sudo su

4. Installera mdadm (hanterar Linux mjukvaru RAID)

apt-get install mdadm

5. Skapa RAIDen. Jag valde att börja med RAID 5 på två diskar (alltså i degraded mode, utan paritetsdisken)
Detta är inget jag rekommenderar och är i princip samma som RAID 0 men med skillnaden att det går att lägga på en disk till och få paritet. Det gjorde jag endast eftersom jag bara TESTADE och inte hade mer disk för tillfället, det är inget man bör göra på en riktig maskin.

Tänk på att du bör ha koll på vilken disk som är vilken, annars blir det jobbigt när en har dött och du ska byta ut den.

mdadm --create --level=5 --raid-devices=3 /dev/md0 /dev/sda9 /dev/sdb4 missing

Byt ut enhetrna så att de passar ditt system och använd en enhet istället för missing.

Om du kör en annan dist kan du behöva ändra i konfig-filer för att få arrayen att återskapas vid boot, Ubuntu fixar dock det automatiskt så jag har inte testat det.

6. Kontrollera arrayen samt fyll den med slumpdata.
Annledningen till detta är dels att det är bra att kolla att det inte blir läsfel någonstans samt att en krypterad volym alltid bör skapas på slumpdata för att göra det svårare för en angripare att veta var krypteringen slutar och slumpdatan börjar.

badblocks -c 10240 -s -w -t random -v /dev/md0

Detta kommer ta flera timmar. För mig tog det 4h för en 500GB volym.

På ett riktigt system kan det vara bra att fylla den igen men med bättre (riktig) slumpdata. Det tar lång tid men gör det ännu svårare för en angripare (även om bra kryptering och bra nyckel ska klara sig även fast en angripare vet exakt vart krypteringen börjar och slutar samt algoritmen)

dd if=/dev/urandom of=/dev/sdb

Detta kan enligt uppgift ta flera dagar

7. Vi ska skapa en partition på arrayen och då den kan bli stor använder vi GPT
Först installera gdisk som innehåller motsvarigheter till de klassiska partitionsprogramen men för GPT

apt-get install gdisk

Använd cgdisk för att skapa partitionen. Gränssnittet är ganska självförklarande.

cgdisk /dev/md0

8. Sätt upp kryptering på den nya partitionen.
Vi använder dm-crypt tillsammans med LUKS då det klarar av att förstora krypteringsvolymen.
En nackdel är dock att man kan se att volymen innehåller krypterad data, om man inte vill det
är det "rå" dm-crypt eller truecrypt som gäller men det går jag inte in på.

cryptsetup --verbose --verify-passphrase luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/md0p1

9. Lås upp volymen

cryptsetup luksOpen /dev/md0p1 crypt

10. Skapa ett filsystem på den krypterade volymen. Jag valde att testa btrfs eftersom det är ett testsystem men på ett riktigt system kan ext4 vara ett bättre val

mkfs.ext4 /dev/mapper/crypt

Klart!

Efter en omstart behöver man bara låsa upp volymen med

cryptsetup luksOpen /dev/md0p1 crypt

Samt montera med nånting liknande

mount /dev/mapper/crypt /Volume1

Nu skulle jag även behöva testa att utöka för att se hur det fungerar innan jag säger att detta är en bra lösning.

Ni får gärna dela med er av egna erfarenheter och liknande.