Nextcloud on Arch Linux (Encrypted System) [Part 01 - Preparation]
In this series of posts I'm going to outline the process I used to create my own Nextcloud server.
First step is to prepare my network. I'm planning to host this at home. Due to obvious security concerns I don't want to host this on my home network. I used pfSense to achieve what I want. The pfSense setup is outside the scope of this post. If you do need help or is curious about setting up pfSense let me know. Given below is an overview diagram of my network,
The basic firewall rules in this network are
- Server can't talk to the switch.
- Server can't talk to the pfSense router interface
- Server interface has Suricata IDS/IPS running.
Drive Preparation and Encryption
Secure erase the drive.
- Use `lsblk` to identify the drive
- Create a temporary container across the whole drive using `cryptsetup open --type plain -d /dev/random /dev/sda wipe`
- Wipe the container with zeroes using `dd if=/dev/zero of=/dev/mapper/wipe status=progress bs=1M`. According to the dm-crypt documentation use of if=/dev/urandom is not required as the encryption cipher is used for randomness.
- Close the temporary container using `cryptsetup close wipe`
- Reboot and confirm that the drive is now empty and all the previous partitions are gone.
Create efi boot and LUKS encrypted root partition
Now that the partition table of the drive is empty, I first created 2 partitions for the efi boot (512MB) and root(50GB). The efi boot partitions type was set to "ef". (step by step shown in the video). The boot partition is the only partition that won't be encrypted in this system. USB and other boot options will be disabled in bios, and password protected. This will prevent bootable media attacks.
- Since the efi boot partition won't be encrypted it can be directly formatted by using `mkfs.fat -F32 /dev/sda1`
- Then I created the LUKS encrypted partition inside the previously created root partition using `cryptsetup -y -v luksFormat /dev/sda2`.
- The newly created encrypted root needs to be opened and formatted. The paraphrase is needed for this operation. Afterwords it can be mounted.
- Open: `cryptsetup open /dev/sda2 cryptroot`
- Format: `mkfs.ext4 /dev/mapper/cryptroot`
- Mount: `mount /dev/mapper/cryptroot /mnt`
- Now I"m going to unmount and close the encrypted root and use it during the OS install.
- Unmount: `umount /mnt`
- Close: `cryptsetup close cryptroot`
- Installing the OS
- Setting up Dropbear so the encrypted root can be unlocked headless
- Setting up encrypted data partitions
- Configuring Nextcloud