dienste:bytecluster0002

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dienste:bytecluster0002 [26.07.2020 18:16] – nowiki-tags mape2kdienste:bytecluster0002 [02.12.2023 22:36] (aktuell) mape2k
Zeile 3: Zeile 3:
 bytecluster0002 ist ein Virtualisierungsserver, der Kommunikationsdienste für den Verein bereitstellt. bytecluster0002 ist ein Virtualisierungsserver, der Kommunikationsdienste für den Verein bereitstellt.
 Er löst [[bytecluster0001]] ab. Er löst [[bytecluster0001]] ab.
 +
 +====== Virtuelle Hardware ======
 +
 +  * 4 Kerne
 +  * 16 GB RAM
 +  * Volumes
 +    * 160 GB / //(inkludiert)//
 +    * 100 GB /mnt/data //(zusätzlich)//
 +
 +====== Migration ======
 +
 +  * mehr zur Migration unter [[dienste:bytecluster0002:migration]]
 +
 +====== Festlegungen (Diskussionsgrundlage) ======
 +
 +  * Kein produktiver Container ohne Dokumentation.
 +  * Der erste Schritt beim Installieren und Testen ist immer einer leere Dokumentation.
 +  * Container ohne Dokumentation werden ohne Rückfrage heruntergefahren und bei Kapazitätsengpässen entfernt.
 +  * Spiel- und Testcontainer sind eindeutig im Namen gekennzeichnet.
 +  * Mit Resourcen (Disk/RAM) wird verantwortungsvoll umgegangen - Upscaling geht später immer.
 +
 +====== Container ======
 +
 +  * siehe [[dienste:bytecluster0002:host-netzwerke|host-netzwerke]]
  
 ====== Administratoren ====== ====== Administratoren ======
Zeile 10: Zeile 34:
   * [[user:suicider]]   * [[user:suicider]]
   * [[user:chaos]]   * [[user:chaos]]
- 
-====== ToDo ====== 
- 
-  * Container-Image vorbereiten (Anpassungen Betriebssystem) und ggf. SSH-Logins? 
-  * Traefik-Container 
    
 ====== IPs /DNS ====== ====== IPs /DNS ======
Zeile 23: Zeile 42:
  
 ===== intern ===== ===== intern =====
 +
 +  * Vergabe siehe [[dienste:bytecluster0002:host-netzwerke]]
  
   * Netzwerk für Internetzugang und Traefik   * Netzwerk für Internetzugang und Traefik
     * 10.2.0.254/24     * 10.2.0.254/24
     * fd00:10:2:0::0/64     * fd00:10:2:0::0/64
 +
 +  * Netzwerk für Datenbankserver und -clients
 +    * 10.3.0.0/24
 +    * fd00:10:3:0::0/64
 +    * IPs liegen am Host nicht an
  
 ====== Betrieb ====== ====== Betrieb ======
Zeile 62: Zeile 88:
 ===== Betriebssystem =====  ===== Betriebssystem ===== 
  
-  * Debian 10 minimal (vorinstalliert)+  * Debian 12 minimal (vorinstalliert)
  
 ==== Vorkonfiguration ===== ==== Vorkonfiguration =====
Zeile 71: Zeile 97:
  
 ==== Grundeinrichtung ==== ==== Grundeinrichtung ====
 +====== Migration ======
  
   - System aktualisieren   - System aktualisieren
Zeile 79: Zeile 106:
     * mc (Dateimanager)     * mc (Dateimanager)
     * debian-goodies (Debian-Systemtools)     * debian-goodies (Debian-Systemtools)
 +    * needrestart (Prüfung von Diensteneustarts nach Update)
     * net-tools (Netzwerktools)     * net-tools (Netzwerktools)
-    * **apt-get install vim mc debian-goodies net-tools**+    * **apt-get install vim mc debian-goodies needrestart net-tools**
   - Suche in der Konsole mit Bild-ab/Bild-auf aktivieren<file|/etc/inputrc>   - Suche in der Konsole mit Bild-ab/Bild-auf aktivieren<file|/etc/inputrc>
 ... ...
Zeile 91: Zeile 119:
 ==== Absicherung ==== ==== Absicherung ====
  
-  - NFS / rpcbind deaktivieren (wird nicht benötigt, offene Ports schließen) +  - NFS / rpcbind deaktivieren und beenden (wird nicht benötigt, offene Ports schließen) 
-    * **systemctl stop rpcbind.socket** +    * **<nowiki>systemctl disable --now rpcbind.service rpcbind.socket</nowiki>**
-    * **systemctl disable rpcbind.socket**+
   - sudo installieren und konfigurieren   - sudo installieren und konfigurieren
     * **apt-get install sudo**     * **apt-get install sudo**
Zeile 102: Zeile 129:
   - SSH - Login als root und mit Passwort deaktivieren   - SSH - Login als root und mit Passwort deaktivieren
     * Vorher mindestens einen Benutzer einrichten, der einen SSH-Schlüssel hinterlegt hat!     * Vorher mindestens einen Benutzer einrichten, der einen SSH-Schlüssel hinterlegt hat!
-    - Konfiguration anpassen<file|/etc/ssh/sshd_config+    - Konfiguration anpassen<file|/etc/ssh/sshd_config.d/01_custom.conf>
-...+
 PermitRootLogin no PermitRootLogin no
-... 
 PasswordAuthentication no PasswordAuthentication no
-... +KbdInteractiveAuthentication no
-ChallengeResponseAuthentication no +
-...+
 </file> </file>
     - SSH-Daemon neustarten     - SSH-Daemon neustarten
Zeile 152: Zeile 175:
     * Aktuelle Regeln nicht speichern     * Aktuelle Regeln nicht speichern
   - NAT (portbasiert) für IPv4   - NAT (portbasiert) für IPv4
-    * **iptables -t nat -A POSTROUTING -o eth0 -s '10.2.0.0/24-j MASQUERADE** +    * **iptables -t nat -A POSTROUTING -o eth0 -s 10.2.0.0/24 -j MASQUERADE**  
 +  - NAT-Reflection für IPv4 (Zugriff von intern auf externe IP-Adresse für Ports 80/443) 
 +    * **<nowiki>iptables -t nat -A PREROUTING -i vmbr0 -s 10.2.0.0/24 -d 138.201.246.25/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.2.0.1:80</nowiki>** 
 +    * **<nowiki>iptables -t nat -A PREROUTING -i vmbr0 -s 10.2.0.0/24 -d 138.201.246.25/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.2.0.1:443</nowiki>** 
 +    * **<nowiki>iptables -t nat -A POSTROUTING -o vmbr0 -s 10.2.0.0/24 -j SNAT --to-source 138.201.246.25</nowiki>**
   - NAT (prefixbasiert) für IPv6   - NAT (prefixbasiert) für IPv6
     * **<nowiki>ip6tables -t nat -A POSTROUTING -o eth0 --to 2a01:4f8:c17:cf64:ffff::/80 -s fd00:10:2:0::/64 -j NETMAP</nowiki>**     * **<nowiki>ip6tables -t nat -A POSTROUTING -o eth0 --to 2a01:4f8:c17:cf64:ffff::/80 -s fd00:10:2:0::/64 -j NETMAP</nowiki>**
     * **<nowiki>ip6tables -t nat -A PREROUTING -i eth0 -d 2a01:4f8:c17:cf64:ffff::/80 --to fd00:10:2:0::/64 -j NETMAP</nowiki>**     * **<nowiki>ip6tables -t nat -A PREROUTING -i eth0 -d 2a01:4f8:c17:cf64:ffff::/80 --to fd00:10:2:0::/64 -j NETMAP</nowiki>**
 +  - NAT-Reflection für IPv6 (Zugriff von intern auf externe IP-Adresse)
 +    * **<nowiki>ip6tables -t nat -A POSTROUTING -o vmbr0 -s fd00:10:2::/64 -j SNAT --to-source 2a01:4f8:c17:cf64::1</nowiki>**
   - Regeln speichern   - Regeln speichern
     * **netfilter-persistent save**     * **netfilter-persistent save**
Zeile 170: Zeile 199:
     * **<nowiki>sysctl --system -a</nowiki>**     * **<nowiki>sysctl --system -a</nowiki>**
    
 +==== Eingerichtete Forwards ====
 +
 +  * Port 80/443 für Container [[dienste:bytecluster0002:traefik|traefik]]
 +    * **iptables -t nat -A PREROUTING -d 138.201.246.25/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.2.0.1:80**
 +    * **iptables -t nat -A PREROUTING -d 138.201.246.25/32 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.2.0.1:443**
 +
 +  * NGINX default im web-container<code>
 +iptables -t nat -A PREROUTING -d 138.201.246.25/32 -p tcp --dport 8089 -j DNAT --to 10.2.0.10:8089
 +</code>
 +  * Dokuwiki im web-container<code>
 +iptables -t nat -A PREROUTING -d 138.201.246.25/32 -p tcp --dport 8088 -j DNAT --to 10.2.0.10:8088
 +</code>
 +  * Nextcloud im nextcloud.test container<code>
 +iptables -t nat -A PREROUTING -d 138.201.246.25/32 -p tcp --dport 8087 -j DNAT --to 10.2.0.20:8087
 +</code>
 +  * Wordpress im wordpress.test container<code>
 +iptables -t nat -A PREROUTING -d 138.201.246.25/32 -p tcp --dport 8086 -j DNAT --to 10.2.0.30:8086
 +</code>
 +
 ===== Proxmox ===== ===== Proxmox =====
  
Zeile 267: Zeile 315:
 Task OK Task OK
 </file>  </file> 
 +
 +==== SSH-Forward-Hook einrichten ====
 +
 +  - Skript hinterlegen<file|/var/lib/vz/snippets/ssh_forward.sh>
 +#!/usr/bin/sh
 +# Hook script to automatically forward SSH-Port to Container
 +
 +VMID=$1
 +PHASE=$2
 +
 +
 +NETWORK_INTERFACE_EXTERNAL=eth0
 +NETWORK_INTERFACE_INTERNAL=vmbr0
 +SSH_DESTINATION_PORT=22
 +SSH_FORWARD_BASE_PORT=22000
 +
 +# Determine container details
 +IP_ADDRESS_INTERNAL=$(pct config $VMID | grep "bridge=$NETWORK_INTERFACE_INTERNAL" | sed --regexp-extended 's/.*ip=([0-9\.]*)\/.*/\1/')
 +# IP_LAST_OCTET=$(pct config $VMID | grep "bridge=$NETWORK_INTERFACE_INTERNAL" | sed --regexp-extended 's/.*ip=[0-9]+\.[0-9]+\.[0-9]+\.([0-9]+)\/.*/\1/')
 +SSH_FORWARD_PORT=$(expr $SSH_FORWARD_BASE_PORT + $VMID)
 +
 +echo "GUEST HOOK on VMID $VMID for phase $PHASE"
 +
 +echo "Internal IP address: $IP_ADDRESS_INTERNAL"
 +echo "SSH-Port on host: $SSH_FORWARD_PORT"
 +
 +case "$PHASE" in
 +
 +  # First phase 'pre-start' will be executed before the guest
 +  # ist started. Exiting with a code != 0 will abort the start
 +  pre-start) echo "$VMID is starting, doing preparations.\n"
 +             iptables -t nat -A PREROUTING -i $NETWORK_INTERFACE_EXTERNAL -p tcp --dport $SSH_FORWARD_PORT -j DNAT --to $IP_ADDRESS_INTERNAL:$SSH_DESTINATION_PORT
 +             ;;
 +
 +  # Second phase 'post-start' will be executed after the guest
 +  # successfully started.
 +  post-start) echo "$VMID started successfully.\n"
 +              ;;
 +
 +  # Third phase 'pre-stop' will be executed before stopping the guest
 +  # via the API. Will not be executed if the guest is stopped from
 +  # within e.g., with a 'poweroff'
 +  pre-stop) echo "$VMID will be stopped.\n"
 +            ;;
 +
 +  # Last phase 'post-stop' will be executed after the guest stopped.
 +  # This should even be executed in case the guest crashes or stopped
 +  # unexpectedly.
 +  post-stop) echo "$VMID stopped. Doing cleanup.\n"
 +             iptables -t nat -D PREROUTING -i $NETWORK_INTERFACE_EXTERNAL -p tcp --dport $SSH_FORWARD_PORT -j DNAT --to $IP_ADDRESS_INTERNAL:$SSH_DESTINATION_PORT
 +             ;;
 +
 +  *) echo "Got unknown phase '$PHASE'\n"
 +     exit 1
 +     ;;
 +esac
 +</file>
 +  - Skript ausführbar machen
 +    * **chmod +x /var/lib/vz/snippets/ssh_forward.sh**
 +
 +==== Zusätzliches Volume einrichten ====
 +
 +  - Volume vorbereiten als /mnt/data
 +  - Volume in Proxmox einbinden
 +    * **pvesm add dir data -content rootdir,images,backup -path /mnt/data/**
  
 ==== Anpassung des Standard-Templates auf Debian-Basis ==== ==== Anpassung des Standard-Templates auf Debian-Basis ====
Zeile 275: Zeile 388:
     * **pveam update**     * **pveam update**
   - Verfügbare Images anzeigen   - Verfügbare Images anzeigen
-    * **<nowiki>pveam available --section system | grep debian</nowiki>**<code>system          debian-10.0-standard_10.0-1_amd64.tar.gz +    * **<nowiki>pveam available --section system | grep debian</nowiki>**<code>system          debian-11-standard_11.7-1_amd64.tar.zst 
-system          debian-8.0-standard_8.11-1_amd64.tar.gz +system          debian-12-standard_12.2-1_amd64.tar.zst</code> 
-system          debian-9.0-standard_9.7-1_amd64.tar.gz</code> +  - Debian 12 Image herunterladen 
-  - Debian 10 Image herunterladen +    * **pveam download local debian-12-standard_12.2-1_amd64.tar.zst** 
-    * **pveam download local debian-10.0-standard_10.0-1_amd64.tar.gz** +
   - Template in neuen Ordner entpacken   - Template in neuen Ordner entpacken
     * **mkdir /tmp/template**     * **mkdir /tmp/template**
     * **cd /tmp/template**     * **cd /tmp/template**
-    * **<nowiki>tar --numeric-owner --extract --verbose --file=/var/lib/vz/template/cache/debian-10.0-standard_10.0-1_amd64.tar.gz --directory=/tmp/template</nowiki>**+    * **<nowiki>tar --numeric-owner --extract --verbose --file=/var/lib/vz/template/cache/debian-12-standard_12.2-1_amd64.tar.zst --directory=/tmp/template</nowiki>**
   - In das Template-System wechseln   - In das Template-System wechseln
     * **systemd-nspawn -D /tmp/template**<code|Ausgabe>     * **systemd-nspawn -D /tmp/template**<code|Ausgabe>
Zeile 292: Zeile 404:
   - Template: Konfiguration und Software anpassen   - Template: Konfiguration und Software anpassen
     - APT-Quellen auf Hetzner festlegen     - APT-Quellen auf Hetzner festlegen
-      * **echo "deb http://mirror.hetzner.de/debian/security buster/updates main contrib non-free" > /etc/apt/sources.list.d/hetzner-security-updates.list** +      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/security bookworm-security main contrib" > /etc/apt/sources.list.d/hetzner-security-updates.list</nowiki>** 
-      * **echo "deb http://mirror.hetzner.de/debian/packages buster main contrib non-free" > /etc/apt/sources.list.d/hetzner-mirror.list** +      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/packages bookworm main contrib" > /etc/apt/sources.list.d/hetzner-mirror.list</nowiki>** 
-      * **echo "deb http://mirror.hetzner.de/debian/packages buster-updates main contrib non-free" >> /etc/apt/sources.list.d/hetzner-mirror.list** +      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/packages bookworm-updates main contrib" >> /etc/apt/sources.list.d/hetzner-mirror.list</nowiki>** 
-      * **echo "deb http://mirror.hetzner.de/debian/packages buster-backports main contrib non-free" >> /etc/apt/sources.list.d/hetzner-mirror.list**+      * **<nowiki>echo "deb http://mirror.hetzner.de/debian/packages bookworm-backports main contrib" >> /etc/apt/sources.list.d/hetzner-mirror.list</nowiki>**
     - Alle Änderungen aus Betriebssystem von bytecluster0002 vornehmen     - Alle Änderungen aus Betriebssystem von bytecluster0002 vornehmen
       * Ausnahmen: NFS deaktivieren und SSH neustarten        * Ausnahmen: NFS deaktivieren und SSH neustarten 
Zeile 304: Zeile 416:
       * **logout**       * **logout**
   - Template packen und temporären Ordner entfernen   - Template packen und temporären Ordner entfernen
-    * **<nowiki>tar --numeric-owner --create --gzip --verbose --file=/var/lib/vz/template/cache/debian-10-$(hostname).tar.gz .</nowiki>**+    * **<nowiki>tar --numeric-owner --create --zstd --verbose --file=/var/lib/vz/template/cache/debian-12-$(hostname).tar.zst .</nowiki>**
     * **cd**     * **cd**
     * **<nowiki>rm --recursive /tmp/template</nowiki>**     * **<nowiki>rm --recursive /tmp/template</nowiki>**
 +
 +==== Neuen Container anlegen ====
 +=== Anmelden bei Proxmox Web-Gui ===
 +  - Vorbedingung: 2FA aktivieren
 +      * Auf Console einloggen (via hinterlegtem Public Key)
 +      * **pve_generate_oath** ausführen (als normaler Nutzer)
 +      * Angezeigten QR-Code mit Smartphone scannen und an beliebiges 2FA tool (z.B. Google Auhenticator) weiterleiten
 +      * Wichtig: QR-Code-Anzeige in der Konsole mit **Enter** schliessen
 +  - https://bytecluster0002.bytespeicher.org:8006 aufrufen
 +    * Username + Passwort wie im Linux
 +    * 2FA-Token aus der Smartphone-App
 +
 +=== Container anlegen und konfigurieren ===
 +  - **Create CT** Button oben rechts
 +  - **hostname** frei wählen (z.B. 'web'), **CT ID** zählt automatisch hoch, **SSH public key** vom eigenen Rechner hochladen (derselbe, der für den Login zum host-server benutzt wird), **Next** klicken
 +  - **template** //debian-10-bytecluster0002-with-users// wählen, **Next** klicken
 +  - Plattengröße, Cores und RAM wählen
 +  - Unter **network** statische IPs vergeben: IPv4: 10.2.0.x/24 Gateway 10.2.0.0 IPv6: fd00:10:2:0::x/64 Gateway fd00:10:2:0::0 mit freiem x (0 = host, 10 = web, ...); 
 +  - Im letzten Tab bestätigen und ggfs. Container sofort starten.
 +
 +=== Automatischen SSH-Forward für Container konfigurieren ===
 +
 +  - Per SSH auf dem Host einloggen
 +  - Hook-Skript an Container binden
 +    * **sudo pct set <CT ID> -hookscript local:snippets/ssh_forward.sh**
 +  - Container ist nach dem (Neu)Start per SSH auf Port 22000 + <CT ID> (z.B. 22149 für Container mit ID 149) direkt erreichbar
 +
 +=== In Container einloggen ===
 +
 +  * Vor weiteren Konfigurationen ist der Container nicht von aussen erreichbar, sondern nur über den Host
 +  * Die Benutzer-Accounts des Hosts sind auch im Container angelegt, das Passwort liegt in einer passwort.txt im Home des Benutzers im Container
 +  * Ein Login ist über mittels SSH-Key möglich, die Keys sind in den Containern vorab hinterlegt
 +    * Es empfiehlt sich, SSH Agent forwarding zu nutzen, statt seinen private key auf den Host zu kopieren
 +<code|Disclaimer>Wird SSH Agent Forwarding genutzt, kann potentiell jeder mit root/sudo-Rechten solange ihr eingeloggt seid euren Key benutzen, um sich in eurem Namen lokal oder auf weiteren (auch externen) Servern einzuloggen, auf denen der selbe Key benutzt wird!</code>
 +    * Dazu am eigenen Rechner einmal **ssh-add** (je nach system einmalig oder nach jedem Login), dann **ssh -A bytecluster0002.bytespeicher.org**; von dort dann **ssh 10.2.0.x** zum Container
 +  * Zum Passwort ändern kann man sich zur Konsole des Containers verbinden
 +    * Von der Konsole des Hosts aus mit **sudo pct console <CT ID>**
 +    * Über das Web-Frontend kann man die "Console" nutzen
 +    * In der Konsole kann man sich als root mit dem festgelegten Passwort einloggen und mit **passwd <nutzername>** das Benutzer-Passwort ändern
 +  * Alle bekannten Nutzer sind sudo-fähig
  • dienste/bytecluster0002.1595780170.txt.gz
  • Zuletzt geändert: 26.07.2020 18:16
  • von mape2k