Das Problem bei Netcup (Debian 12/13)
Netcup nutzt für das Routing eine Link-Local-Adresse des Gateways (fe80::1). Da Debian 13 standardmäßig systemd-networkd oder die klassische /etc/network/interfaces nutzt, verweigert das System oft die Übernahme, wenn die IP nicht explizit konfiguriert ist.
Wir weisen deinem Server die erste echte IP aus deinem Netz zu (...::1).
Konfiguration anpassen
Öffne deine Netzwerkkonfiguration (Netcup nutzt meist die klassische Datei: /etc/network/interfaces.d# cat 50-cloud-init.cfg
micro /etc/network/interfaces.d/60-custom-ipv6.cfg
Ergänze den IPv6-Block (ersetze das bestehende falls nötig, lass IPv4 unangetastet):
iface eth0 inet6 static
address 2a03:4000:23:b22::1
netmask 64
Hinweis: Falls dein Interface nicht eth0 heißt (prüfbar mit ip a), passe den Namen an.
Aktivieren ohne Reboot:
systemctl restart networking
Rebooten und erneut testen:
systemctl reboot
ip a
2. Das Automatisierungs-Skript (setup.sh)
Dieses Skript erledigt alles in einem Rutsch: Es validiert den Hostnamen, installiert deine Tools (inklusive vollautomatischer OhMyZsh & Plugin-Installation ohne interaktive Blockaden) und startet am Ende die ISPConfig-Installation mit deinem exakten Minimal-Webstack.
- Micro öffnen
micro setup.sh
- füge den Code:
#!/usr/bin/env bash
# Target FQDN required by Netcup
TARGET_HOSTNAME="server.EXAMPLE.TLD"
echo "===================================================="
echo " Starting System Validation & Tool-Installation"
echo "===================================================="
# 1. Verify hostname
CURRENT_HOSTNAME=$(hostname -f 2>/dev/null)
if [ "$CURRENT_HOSTNAME" != "$TARGET_HOSTNAME" ]; then
echo "[-] ERROR: Hostname mismatch!"
echo " Current FQDN: $CURRENT_HOSTNAME"
echo " Expected: $TARGET_HOSTNAME"
echo " Please run: 'hostnamectl set-hostname $TARGET_HOSTNAME'"
exit 1
fi
echo "[+] Hostname verification successful: $CURRENT_HOSTNAME"
# 2. System updates
echo "[*] Updating package repositories..."
export DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get upgrade -y
# 3. Install core utilities
echo "[*] Installing standard tools..."
apt-get install -y sudo curl wget git zsh tmux htop btop fastfetch micro python3
# 4. Install OhMyZsh (Non-Interactive)
if [ ! -d "$HOME/.oh-my-zsh" ]; then
echo "[*] Installing OhMyZsh..."
RUNZSH=no CHSH=no sh -c "$(wget https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)" "" --keep-zsh-rc
fi
# 5. Clone Zsh plugins
ZSH_CUSTOM_PLUGINS="$HOME/.oh-my-zsh/custom/plugins"
mkdir -p "$ZSH_CUSTOM_PLUGINS"
echo "[*] Cloning Zsh plugins..."
declare -A plugins=(
["zsh-autosuggestions"]="https://github.com/zsh-users/zsh-autosuggestions"
["zsh-syntax-highlighting"]="https://github.com/zsh-users/zsh-syntax-highlighting.git"
["zsh-autocomplete"]="https://github.com/marlonrichert/zsh-autocomplete.git"
)
for plugin in "${!plugins[@]}"; do
if [ ! -d "$ZSH_CUSTOM_PLUGINS/$plugin" ]; then
git clone "${plugins[$plugin]}" "$ZSH_CUSTOM_PLUGINS/$plugin"
fi
done
# 6. Write .zshrc configuration
echo "[*] Writing configuration to ~/.zshrc..."
cat << 'EOF' > ~/.zshrc
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="agnoster"
zstyle ':omz:update' mode auto
HIST_STAMPS="yyyy-mm-dd"
plugins=(
alias-finder
aliases
colored-man-pages
colorize
dirhistory
debian
git
history
ssh-agent
sudo
systemd
tailscale
zsh-autosuggestions
zsh-autocomplete
zsh-syntax-highlighting
)
source $ZSH/oh-my-zsh.sh
fastfetch
# --- CUSTOM ALIASES ---
alias hst='/usr/local/hestia/bin/'
alias v-list-users='/usr/local/hestia/bin/v-list-users'
alias ..='cd ..'
alias ll='ls -lah'
alias update='sudo apt update && sudo apt upgrade -y && needrestart'
alias cls='clear'
alias f2b='uv run ~/scripts/f2b_stats.py'
alias banstatus="sudo fail2ban-client status | awk -F':\t' '/Jail list/ {print \$2}' | sed 's/,//g' | xargs -n1 sudo fail2ban-client status"
alias ports='sudo ss -tulpn | grep LISTEN'
alias myip='curl -4 icanhazip.com'
alias h-logs='sudo tail -f /var/log/hestia/system.log'
alias h-restart='sudo systemctl restart hestia'
alias ta='tmux attach || tmux new-session'
alias tls='tmux ls'
alias del-mail='echo "d 1-1000" | mail -N > /dev/null'
alias logs='sudo ~/scripts/check_logs.sh'
alias mqtt='sudo tail -f /var/log/mosquitto/mosquitto.log'
alias mqtt_logger='sudo journalctl -u mqtt-logger.service -f'
alias venv='source .venv/bin/activate'
alias health='sudo ~/scripts/health-check.sh'
alias sudo='sudo env PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin'
# Exports
export EDITOR=micro
export VISUAL=micro
EOF
# 7. Set default shell to Zsh
if [ "$SHELL" != "/bin/zsh" ]; then
echo "[*] Changing default shell to Zsh..."
chsh -s $(which zsh) root
fi
# 8. Launch ISPConfig Auto-Installer
echo "===================================================="
echo " Launching ISPConfig Auto-Installer"
echo "===================================================="
wget -O - https://get.ispconfig.org | sh -s -- \
--use-nginx \
--no-mail \
--no-dns \
--no-local-dns \
--no-pma \
--no-ftp \
--no-mailman \
--no-roundcube \
--use-php=8.2,8.3,8.4,8.5 \
--ssh-permit-root=without-password \
--unattended-upgrades \
--i-know-what-i-am-doing
echo "===================================================="
echo " Installation complete!"
echo "===================================================="
# 9. Seamlessly transition to the new Zsh environment
echo "[+] Spawning interactive Zsh login shell..."
exec zsh -l
- Ausführbar machen
BASH
chmod +x setup.sh - Starte setup.sh
BASH
./setup.sh
## 3. ClamAV Services deaktivieren
```bash
# 1. Dienste sofort stoppen
sudo systemctl stop clamav-daemon
sudo systemctl stop clamav-freshclam
# 2. Autostart beim Booten deaktivieren
sudo systemctl disable clamav-daemon
sudo systemctl disable clamav-freshclam
# 3. Dienste maskieren (verhindert das Starten durch andere Abhängigkeiten)
sudo systemctl mask clamav-daemon
sudo systemctl mask clamav-freshclam
RAM-Verbrauch überprüfen
Du wirst sofort merken, wie dein System aufatmet. Du kannst den gewonnenen Speicher direkt auf der Konsole kontrollieren:
free -h
Oder wirf einen Blick in dein neu installiertes btop oder htop, um zu sehen, wie flüssig der VPS jetzt mit dem schlanken Nginx-Stack läuft!
4. Post-Installation: IPv6 in ISPConfig aktivieren
Sobald das Skript durchgelaufen ist, zieht sich ISPConfig automatisch deine konfigurierte IPv6 (2a03:4000:23:b22::1). Du musst sie nur noch im Interface freigeben, damit du sie für Webseiten zuteilen kannst:
-
Logge dich im ISPConfig Panel ein (
https://server.EXAMPLE.TLD:8080). -
Navigiere zu System -> Server IP addresses.
-
Klicke auf deine IP (oder "Add new IP address", falls sie wider Erwarten nicht gelistet ist).
-
Trage bei IPv6 Address ein:
2a03:4000:23:b22::1. -
Setze den Haken bei HTTP Server (Nginx), damit sie für vHosts generiert wird.
5. Postfix (System-Mail-Relay zu mailbox.org)
Da kein eigener Mailserver betrieben wird, leiten wir alle System-Mails (Cron, Fail2ban) verschlüsselt an mail@EXAMPLE.TLD weiter.
# 1. Postfix als Satelliten-System konfigurieren
sudo dpkg-reconfigure postfix
Einstellungen im interaktiven Menü:
-
General type of mail configuration:
Satellite system -
System mail name:
server.EXAMPLE.TLD -
SMTP relay host:
[smtp.mailbox.org]:587(Die eckigen Klammern verhindern fehlerhafte MX-Lookups) -
E-Mails für postmaster, root und andere Systemkonten müssen zu dem eigentlichen Benutzerkonto des Systemadministrators umgeleitet werden.
mail@domain.com -
Listen Sie bitte durch Kommas getrennt die Domainnamen auf, für die sich dieser Rechner als Ziel betrachten soll. Ist er für eine gesamte E-Mail-Domain zuständig (»gateway«), sollte wahrscheinlich die Top-Level-Domain (TLD) dabei sein.
server.EXAMPLE.TLD, localhost.EXAMPLE.TLD, localhost -
Bitte geben Sie an, für welche Netzwerkblöcke dieser Rechner E-Mails weiterleiten soll. Standardmäßig ist dies nur der lokale Host, was für einige E-Mail-Programme erforderlich ist. Er ist standardmäßig sowohl für IPv4 als auch für IPv6 enthalten. Falls die Verbindung nur über eine IP-Version hergestellt wird, können einer oder mehrere unbenutzte Werte entfernt werden.
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 -
Bitte geben eine maximale Größe für Postfach-Dateien an:
0 -
Bitte geben Sie ein Zeichen an, das in Empfängeradressen eine lokale Adress-Erweiterung auslösen soll.
+ -
Standardmäßig werden alle Internet-Protokolle verwendet, die bei der Installation auf dem System aktiviert sind. Sie können dies mit einer der folgenden Einstellungen außer Kraft setzen:
alleAuthentifizierung für mailbox.org hinterlegen
Da der Mailbox.org-Server Anmeldungen erzwingt, erstellen wir eine Password-Datenbank für Postfix:
# 2. Authentifizierungs-Datei erstellen
sudo micro /etc/postfix/sasl_passwd
Füge dort deine genauen Mailbox-Zugangsdaten ein:
[smtp.mailbox.org]:587 mail@EXAMPLE.TLD:DEIN_MAILBOX_ORG_PASSWORT
# 3. Rechte einschränken und Postfix-Datenbank generieren
sudo chmod 600 /etc/postfix/sasl_passwd
sudo postmap /etc/postfix/sasl_passwd
# 4. Verschlüsselung (TLS) und Authentifizierung in Postfix erzwingen
sudo postconf -e "smtp_sasl_auth_enable = yes"
sudo postconf -e "smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd"
sudo postconf -e "smtp_sasl_security_options = noanonymous"
sudo postconf -e "smtp_tls_security_level = encrypt"
sudo postconf -e "smtp_tls_loglevel = 1"
Root-Mails direkt an dein Postfach weiterleiten
Damit Mails, die an root adressiert sind, automatisch an dein Mailbox-Postfach gesendet werden, passen wir die Aliase an:
sudo micro /etc/aliases
Stelle sicher, dass die Zeile für root wie folgt aussieht:
root: mail@EXAMPLE.TLD
Aktivieren und Postfix neu starten:
sudo newaliases
sudo systemctl restart postfix
Generic-Mapping-Datei erstellen
Erstelle eine neue Tabelle für die Adress-Umschreibung:
micro /etc/postfix/generic
Füge dort folgende Zeilen ein, um alle lokalen Mails (von root oder dem Server-Host) mit deiner gültigen Absenderadresse zu maskieren:
# Joomla/System-Mails von diesen Domains auf einen gültigen Alias umschreiben
@blog.EXAMPLE.TLD mail@EXAMPLE.TLD
@server.EXAMPLE.TLD mail@EXAMPLE.TLD
@EXAMPLE.TLD mail@EXAMPLE.TLD
root@localhost mail@EXAMPLE.TLD
# Lokale Systembenutzer auf spezifische Aliasse mappen
root@server.EXAMPLE.TLD mail@EXAMPLE.TLD
www-data@server.EXAMPLE.TLD webmaster@EXAMPLE.TLD
root@EXAMPLE.TLD mail@EXAMPLE.TLD
root@EXAMPLE.TLD mail@EXAMPLE.TLD
Postmap ausführen und Postfix konfigurieren
Generiere die Postfix-Datenbank aus der Datei und trage die Map in deine main.cf ein:
postmap /etc/postfix/generic
postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"
Postfix neu starten
Lade die Konfiguration neu, damit die Änderungen greifen:
systemctl restart postfix
Test-Mail senden
Du kannst sofort überprüfen, ob die Weiterleitung klappt:
echo "Test-Inhalt vom Netcup VPS" | mail -s "Test-Betreff vom Server" root