Server-Dokumentation
Übersicht
| Hostname | st |
|---|---|
| OS | Debian GNU/Linux 13 (trixie) |
| Kernel | 6.12.41+deb13-amd64 |
| Zeitzone | Europe/Berlin |
| IP | 88.198.50.199 |
Domains
- Produktion: campus.systemische-tools.de
- Entwicklung: dev.campus.systemische-tools.de
- Dateien: files.campus.systemische-tools.de
Sicherheit
- SSH - Port 2022, Key-only
- UFW Firewall - Ports 2022, 80, 443
- Fail2Ban - Intrusion Prevention
- SSL/TLS - Let's Encrypt
System
- Berechtigungen - Automatische Rechtevergabe
- Updates - unattended-upgrades
Verwandte Themen
- Backup - Täglich 03:00, 7 Tage Retention
- Scheduling - Cron-Jobs & Systemd Timer
- Deployment - Dev → Prod Sync
- File Backup Hook - Claude Code Pre-Hook
- tmux - Terminal Multiplexer
SSH
Sicherer Remote-Zugang zum Server. Nur Key-Authentifizierung erlaubt, Passwort-Login ist deaktiviert. Port 2022 statt Standard-Port 22 für zusätzliche Sicherheit.
| Port | 2022 |
|---|---|
| Auth | Nur SSH-Keys |
| Root | Mit Key erlaubt |
Konfiguration
Datei: /etc/ssh/sshd_config.d/99-custom.conf
Port 2022
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin prohibit-password
MaxAuthTries 3
MaxSessions 5
ClientAliveInterval 300
ClientAliveCountMax 2
Verbindung
ssh -p 2022 root@88.198.50.199Hostname-Konfiguration
Der Server-Hostname muss korrekt in /etc/hosts eingetragen sein, damit sudo und andere System-Tools funktionieren.
Aktueller Status
| Hostname | st |
|---|---|
| Hostname-Datei | /etc/hostname |
| Hosts-Datei | /etc/hosts |
Problem: "unable to resolve host"
Wenn der Hostname nicht in /etc/hosts eingetragen ist, erscheint bei sudo-Befehlen:
sudo: unable to resolve host st: No address associated with hostname
Losung
Hostname in /etc/hosts eintragen:
# Pruefen, ob Eintrag fehlt
cat /etc/hosts | grep $(hostname)
# Falls leer, Eintrag hinzufuegen
echo "127.0.0.1 $(hostname)" | sudo tee -a /etc/hosts
Korrekte /etc/hosts
### Hetzner Online GmbH installimage
127.0.0.1 localhost.localdomain localhost
127.0.0.1 st
88.198.50.199 Debian-trixie-latest-amd64-base
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
2a01:4f8:221:4268::2 Debian-trixie-latest-amd64-base
Hostname aendern
# Hostname anzeigen
hostname
# Hostname aendern (persistent)
sudo hostnamectl set-hostname neuer-hostname
# /etc/hosts anpassen
sudo nano /etc/hosts
# Alt: 127.0.0.1 st
# Neu: 127.0.0.1 neuer-hostname
Wichtig bei Hetzner
Bei Hetzner-Servern wird /etc/hosts beim Installimage initial erstellt. Der Hostname ist oft kurz (z.B. "st") und muss manuell in /etc/hosts ergaenzt werden.
Verwandte Themen
UFW Firewall
Einfache Firewall die nur benötigte Ports freigibt. Blockiert standardmäßig alle eingehenden Verbindungen außer SSH, HTTP und HTTPS.
Aktive Regeln
| Port | Dienst |
|---|---|
| 2022/tcp | SSH |
| 80/tcp | HTTP |
| 443/tcp | HTTPS |
Konfiguration
ufw default deny incoming
ufw default allow outgoing
ufw allow 2022/tcp comment 'SSH'
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
ufw --force enable
Befehle
ufw status verbose
ufw allow PORT/tcp
ufw delete allow PORT/tcpFail2Ban
Schützt vor Brute-Force-Angriffen durch automatisches Sperren von IPs nach fehlgeschlagenen Login-Versuchen. Überwacht SSH-Logs und blockt Angreifer für eine Stunde.
| Bantime | 1 Stunde |
|---|---|
| Findtime | 10 Minuten |
| Maxretry | 3 |
Konfiguration
Datei: /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 3
ignoreip = 127.0.0.1/8
[sshd]
enabled = true
port = 2022
filter = sshd
logpath = /var/log/auth.log
Befehle
fail2ban-client status
fail2ban-client status sshd
fail2ban-client unban IPSSL / Let's Encrypt
HTTPS-Verschlüsselung für alle Domains. Kostenlose Let's Encrypt Zertifikate erneuern sich automatisch alle 90 Tage via Certbot-Timer.
| Tool | Certbot 4.0.0 |
|---|---|
| Gültig bis | 19.03.2026 |
| Auto-Renewal | Ja (certbot timer) |
Domains
- campus.systemische-tools.de
- dev.campus.systemische-tools.de
- files.campus.systemische-tools.de
Zertifikat erstellen
certbot --apache -d domain1.de -d domain2.de
Befehle
certbot certificates
certbot renew --dry-runPermissions
Web-Dateien müssen dem Apache-User (www-data) gehören, damit PHP sie lesen kann. Dateien, die von Claude oder root erstellt werden, haben falsche Besitzer. Das Fix-Script korrigiert dies automatisch.
Fix-Script
| Script | /var/www/scripts/fix-permissions.sh |
|---|---|
| Owner | www-data:www-data |
| Mode | 755 |
Betroffene Verzeichnisse
- /var/www/dev.campus.systemische-tools.de
- /var/www/prod.campus.systemische-tools.de
Claude Hook
Das Script wird automatisch nach Write/Edit-Operationen ausgeführt.
| Konfiguration | /root/.claude/settings.json |
|---|---|
| Event | PostToolUse |
| Matcher | Write|Edit |
Manuelle Verwendung
/var/www/scripts/fix-permissions.shAutomatische Updates
Sicherheitsupdates werden automatisch installiert und schützen vor bekannten Schwachstellen. Kein manuelles Eingreifen nötig, System bleibt aktuell.
| Tool | unattended-upgrades |
|---|---|
| Status | aktiv |
Konfiguration
Datei: /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
Manuelle Updates
apt-get update
apt-get upgrade -y