310 lines
No EOL
10 KiB
Markdown
310 lines
No EOL
10 KiB
Markdown
# Proxmox-Basissetup
|
|
|
|
## Proxmox installieren
|
|
Mittels Installationsassistent die Installation durchführen. Wichtig ist es lediglich, die Netzwerkkonfiguration für die Managementschnittstelle korrekt zu konfigurieren und das korrekte RAID-Level (In der Regel Mirroring) für die Systemplatten auszuwählen. Alle weiteren Netzwerke und Speichermedien werden nach der Installation konfiguriert.
|
|
|
|
## Netzwerkkonfiguration vornehmen
|
|
1. Alle Schnittstellen auf MTU 9000 einstellen (unter Advanced), dies ist für die volle Bandbreite bei 10G notwendig!
|
|
2. Mindestens ein eigenes Netz für den Cluster und Ceph erstellen (vorzugsweise 10G)
|
|
3. Bridge anlegen für VLANs für die VMs anlegen (vmbr1, vorzugsweise 10G)
|
|
4. IPs passend festlegen
|
|
5. Konnektivität prüfen
|
|
|
|
## Laufwerke mit ZFS einrichten
|
|
1. Einzelne ZFS-Volumes korrekt einrichten
|
|
2. Jeweils geeignete RAID-Level auswählen
|
|
|
|
!!! tip
|
|
Optional: Falls eine Verschlüsselung gewünscht wird, ist es sinnvoll, zunächst das Standard-Datenset zu verschlüsseln und danach weitere Volumes direkt verschlüsselt anzulegen. In diesem Fall diesen Schritt auslassen. Er wird [später](#datenpartitionen-verschlusseln) nachgeholt.
|
|
|
|
## Systemupdates
|
|
### Paketquellen anpassen
|
|
Üblicherweise wird man im heimischen Umfeld keine Lizenz für Proxmox besitzen. Daher stehen die Enterprise-Repos nicht zur Verfügung. Diese sollte entfernt und die Standard-Repos hinzugefügt werden.
|
|
|
|
``` bash
|
|
# No-Subscription Repo anlegen
|
|
echo "deb http://download.proxmox.com/debian/pve $(hostnamectl |\
|
|
awk -F: '/Operating System:/ {print $2}' | awk\
|
|
'{gsub(/[()]/, "", $NF); print $NF}') pve-no-subscription" >\
|
|
/etc/apt/sources.list.d/pve-no-subscription.list
|
|
|
|
# Enterprise-Repo löschen
|
|
rm /etc/apt/sources.list.d/pve-enterprise.list
|
|
```
|
|
|
|
### Nagscreen entfernen
|
|
Der aus der fehlenden Lizenz resultierende Nagscreen lässt sich mittels eines Hooks für DPKG dauerhaft entfernen. (Siehe auch [^2])
|
|
|
|
``` bash
|
|
# Nagscreen mittels Post-Invoke-Hook dauerhaft entfernen.
|
|
echo "DPkg::Post-Invoke { \"dpkg -V proxmox-widget-toolkit | \
|
|
grep -q '/proxmoxlib\.js$'; if [ \$? -eq 1 ]; then { \
|
|
echo 'Removing subscription nag from UI...'; \
|
|
sed -i '/.*data\.status.*{/{s/\!//;s/active/NoMoreNagging/}' \
|
|
/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js; \
|
|
}; fi\"; };" > /etc/apt/apt.conf.d/no-nag-script
|
|
|
|
# Widget Toolkit neuinstallieren, um Nagscreen anzuwenden.
|
|
apt --reinstall install proxmox-widget-toolkit
|
|
```
|
|
### System updaten
|
|
``` bash
|
|
apt update
|
|
apt full-upgrade
|
|
```
|
|
|
|
## SSH einrichten
|
|
1. SSH-Keys hinterlegen (```/root/.ssh/authorized_keys```)
|
|
2. SSHD-Konfiguration anpassen (```/etc/ssh/sshd_config```)
|
|
``` bash
|
|
# Port 22 wird immer für die Clusterkommunikation benötigt,
|
|
# kann aber natürlich später mit Firewallregeln auf die
|
|
# betroffenen Hosts beschränkt werden. Auf jeden Fall muss Port
|
|
# 22 hier zusätzlich angegeben werden.
|
|
# Port 2222
|
|
Port 22
|
|
|
|
# Root-Login nur mit Key
|
|
PermitRootLogin prohibit-password
|
|
|
|
# Passwort-Login verbieten
|
|
PasswordAuthentication no
|
|
|
|
# TCP-Forwarding (Tunnel) erlauben
|
|
AllowTcpForwarding yes
|
|
|
|
# X11-Weiterleitung verbieten
|
|
X11Forwarding no
|
|
|
|
```
|
|
|
|
## Mail einrichten
|
|
### Postfix mit Relay
|
|
1. In ```/etc/postfix/main.cf``` folgende Ergänzungen vornehmen:
|
|
|
|
``` cf
|
|
relayhost = [smtp.example.com]:587
|
|
smtp_use_tls = yes
|
|
smtp_sasl_auth_enable = yes
|
|
smtp_sasl_security_options = noanonymous
|
|
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
|
|
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
|
|
|
|
sender_canonical_classes = envelope_sender, header_sender
|
|
sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps
|
|
smtp_header_checks = regexp:/etc/postfix/header_check
|
|
```
|
|
|
|
2. ```/etc/postfix/sasl_passwd``` mit Zugangsdaten erstellen:
|
|
```
|
|
[smtp.example.com]:587 ich@example.com:mein1234passwort
|
|
```
|
|
|
|
3. Abhängigkeiten installieren
|
|
``` bash
|
|
apt install libsasl2-modules
|
|
```
|
|
|
|
4. Absender erzwingen
|
|
|
|
- In ```/etc/postfix/sender_canonical_maps```:
|
|
|
|
```
|
|
/.+/ ich@example.com
|
|
```
|
|
|
|
- In ```/etc/postfix/smtp_header_checks```:
|
|
|
|
```
|
|
/From:.*/ REPLACE From: SERVERNAME <ich@example.com>
|
|
```
|
|
|
|
5. Berechtigungen anpassen und Konfigurationsdateien mappen
|
|
``` bash
|
|
chmod 600 /etc/postfix/sasl_passwd
|
|
postmap /etc/postfix/sasl_passwd
|
|
postmap /etc/postfix/sender_canonical_maps
|
|
postmap /etc/postfix/smtp_header_checks
|
|
```
|
|
|
|
6. Dienst neustarten und testen
|
|
``` bash
|
|
systemctl restart postfix.service
|
|
echo "Testmail von postfix" | mail -s "Postfixtest" test@example.com
|
|
```
|
|
|
|
|
|
## Verschlüsselung einrichten
|
|
|
|
### Proxmox-Root verschlüsseln
|
|
(Siehe auch [^1])
|
|
|
|
!!! danger
|
|
Der Verlust der verwendeten Passphrase führt unweigerlich zum Datenverlust! Das Starten des Servers und der Zugriff auf die enthaltenen Daten ist nur mit dieser Passphrase möglich!
|
|
|
|
1. System von einem externen Medium mit ZFS-Support starten (z.B. im Proxmox-Installer ++ctrl+alt+f3++ drücken).
|
|
2. In der Shell folgende Schritte ausführen:
|
|
|
|
``` bash
|
|
# Aktuellen Root-Pool importieren
|
|
zpool import -f rpool
|
|
|
|
# Einen Snapshot erstellen
|
|
zfs snapshot -r rpool/ROOT@copy
|
|
|
|
# Ein temporäres Dateisystem aus dem Snapshot erzeugen
|
|
zfs send -R rpool/ROOT@copy | zfs receive rpool/copyroot
|
|
|
|
# Das alte Dateisystem löschen
|
|
zfs destroy -r rpool/ROOT
|
|
|
|
# Ein neues Dateisystem mit aktivierter Verschlüsselung erstellen
|
|
zfs create -o encryption=on -o keyformat=passphrase rpool/ROOT
|
|
|
|
# Die Dateien vom temporären in das neue Dateisystem kopieren
|
|
zfs send -R rpool/copyroot/pve-1@copy | zfs receive\
|
|
-o encryption=on rpool/ROOT/pve-1
|
|
|
|
# Den Mountpoint des neuen Dateisystems setzen
|
|
|
|
# Falls dies hängt, das System booten, im initramfs den Pool
|
|
# importieren und dort den Mountpoint setzen. Danach weiter
|
|
# wie beschrieben.
|
|
|
|
zfs set mountpoint=/ rpool/ROOT/pve-1
|
|
|
|
# Prüfen, dass alles verschlüsselt ist
|
|
zfs get encryption
|
|
|
|
# Das temporäre Dateisystem löschen
|
|
zfs destroy -r rpool/copyroot/pve-1@copy
|
|
zfs destroy -r rpool/copyroot
|
|
|
|
# Den Pool wieder exportieren
|
|
zpool export rpool
|
|
```
|
|
3. System neustarten
|
|
|
|
|
|
|
|
### Remote-Unlock aktivieren
|
|
Damit man den Server auch über das Netzwerk mittels SSH entschlüsseln und somit starten kann, muss man Dropbear SSH einrichten.
|
|
|
|
1. dropbear-initramfs installieren (```apt install dropbear-initramfs```)
|
|
2. initramfs mit fester IP ausstatten (```/etc/initramfs-tools/initramfs.conf```)
|
|
``` bash
|
|
IP=192.168.1.100::192.168.1.1:255.255.255.0::enp2s0:off
|
|
```
|
|
|
|
3. dropbear konfigurieren (```/etc/dropbear/initramfs```)
|
|
``` bash
|
|
# z.B. -p2222 für Port 2222
|
|
DROPBEAR_OPTIONS=
|
|
```
|
|
|
|
4. Keys für dropbear hinterlegen
|
|
``` bash
|
|
# Autorisierte Schlüssel hinterlegen
|
|
cp /root/.ssh/authorized_keys /etc/dropbear/initramfs
|
|
|
|
# Hostkeys konvertieren
|
|
rm /etc/dropbear/initramfs/*_key
|
|
cd /etc/ssh
|
|
for file in ssh_host_*_key; do
|
|
echo Konvertiere $file
|
|
cp $file /tmp/$file
|
|
ssh-keygen -m PEM -p -f /tmp/$file
|
|
newfile=${file/ssh_host/dropbear}
|
|
newfile=${newfile/key/host_key}
|
|
dropbearconvert openssh dropbear /tmp/$file /tmp/$newfile
|
|
mv /tmp/$newfile /etc/dropbear/initramfs/
|
|
rm /tmp/$file
|
|
done
|
|
|
|
# Ramdisk updaten
|
|
update-initramfs -u
|
|
```
|
|
|
|
### Datenpartitionen verschlüsseln
|
|
!!! info
|
|
Die Datenpartitionen werden mit einem Key verschlüsselt, der im Dateisystem des Servers liegt. Dieser ist durch die Verschlüsselung des Root-Sets geschützt, wenn der Server ausgeschaltet ist, ist jedoch prinzipiell lesbar, wenn der Server läuft.
|
|
|
|
Die Rechte des Keyfiles sind konservativ gesetzt (Zugriff nur für root) dennoch bleibt dies eine Abwägung zwischen Komfort und Sicherheit.
|
|
|
|
Besser wäre eine spezifische Key-Partition, die nach dem Booten wieder gesperrt würde. Dies ist bei Nutzung von Ceph jedoch ohnehin nicht möglich, da die Keys für Ceph im Root-Dateisystem der Monitore liegen und verfügbar sein müssen.
|
|
|
|
!!! tip
|
|
Optional: Insbesondere bei Clustereinrichtung sollte in Proxmox der Storage (local-zfs) gelöscht und nach der Verschlüsselung ein passender neuer angelegt werden, der der Storage-ID im Cluster entspricht.
|
|
|
|
|
|
!!! danger
|
|
Der Verlust der verwendeten Schlüsseldatei (```/root/local.key```) führt unweigerlich zum Datenverlust! Das Starten des Servers und der Zugriff auf die enthaltenen Daten ist nur mit dieser Schlüsseldatei möglich!
|
|
|
|
``` bash
|
|
# Key generieren
|
|
dd if=/dev/urandom of=/root/local.key bs=32 count=1
|
|
chmod 600 /root/local.key
|
|
|
|
# Datensets löschen, evtl. weitere
|
|
zfs destroy -r rpool/data
|
|
zfs destroy -r rpool/var-lib-vz
|
|
|
|
# Neue, verschlüsselte Datensets anlegen
|
|
zfs create -o encryption=on -o keyformat=raw \
|
|
-o keylocation=file:///root/local.key rpool/data
|
|
zfs create -o encryption=on -o keyformat=raw \
|
|
-o keylocation=file:///root/local.key rpool/var-lib-vz
|
|
|
|
# Abweichende Mountpoints setzen
|
|
zfs set mountpoint=/var/lib/vz rpool/var-lib-vz
|
|
|
|
```
|
|
#### Optional: Weitere Pools anlegen (z.B. HDD)
|
|
``` bash
|
|
# Pool erstellen (statt mirror nach Bedaf auch raidz1, raidz2 usw.)
|
|
# Alternativ über die UI von Proxmox erstellen, dort aber das Häkchen
|
|
# bei "Add Storage" entfernen.
|
|
zpool create -m /HDD HDD mirror /dev/sdb /dev/sdc
|
|
|
|
# Neues, verschlüsseltes Datenset anlegen
|
|
zfs create -o encryption=on -o keyformat=raw \
|
|
-o keylocation=file:///root/local.key HDD/data
|
|
|
|
# Als Storage zu Proxmox hinzufügen
|
|
pvesm add zfspool HDD -pool HDD/data
|
|
```
|
|
|
|
### Unlock beim Systemstart
|
|
Standardmäßig wird beim Systemstart nur die Root-Partition entschlüsselt, um den Vorgang komfortabel zu halten, werden die weiteren Datensets hier mit Keymaterial aus dieser Partition entschlüsselt (Siehe [Hinweis](#datenpartitionen-verschlusseln)). Dazu wird ein entsprechender Dienst angelegt.
|
|
|
|
Passiert dies nicht, wird Proxmox viele Fehler produzieren, da es versucht, die VMS und Container zu starten, jedoch nicht auf deren Images zugreifen kann.
|
|
|
|
``` bash
|
|
# Dienst zum Unlock beim Systemstart anlegen
|
|
cat > /etc/systemd/system/zfs-load-key.service <<EOF
|
|
[Unit]
|
|
Description=Load encryption keys
|
|
DefaultDependencies=false
|
|
Before=zfs-mount.service
|
|
After=zfs-import.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
RemainAfterExit=yes
|
|
ExecStart=/usr/sbin/zfs load-key -a
|
|
|
|
[Install]
|
|
WantedBy=zfs-mount.service
|
|
EOF
|
|
|
|
# Dienst aktivieren
|
|
systemctl enable zfs-load-key.service
|
|
```
|
|
|
|
!!! warning
|
|
Anschließend den Key (```/root/local.key```) sichern!
|
|
|
|
|
|
## Fußnoten
|
|
[^1]: Native ZFS-Verschlüsselung mit Proxmox: [Quelle](https://gist.github.com/yvesh/ae77a68414484c8c79da03c4a4f6fd55)
|
|
[^2]: Nagscreen mit DPKG-Post-Invoke-Hook dauerhaft entfernen: [Quelle](https://github.com/tteck/Proxmox/blob/main/misc/post-pve-install.sh) |