Server administrieren - wo fange ich an?

  • ich sehe das auch als Vorteil,

    denn damit hilfst du anderen und machst deine Server nicht unbedingt angreifbar

    und es können andere nochmal drüberschauen und vielleicht doch nioch 1 oder 2

    Rädchen verbessern.

    It's me, only me, pure michi 🦆

    RS: ja:thumbup: VPS: yep:thumbup: ARM: sicher:thumbup: WH: klar :thumbup:

    Domains: auch:thumbup:

  • Leider habe ich viel zu oft an dieser Doku gearbeitet, aber eigentlich sollte sie jetzt so passen. Gerne Kritik / Verbesserungsvorschläge, ich möchte nächste Woche fast alle meine Server neu aufsetzten, und dann soll das zum Einsatz kommen.

    Hinweis: Der Inhalt des Spoilers wurde mittels KI von Markdown auf BBCode konvertiert.

    Spoiler anzeigen

    SSH Key

    Schlüsselpaar erstellen

    Vor der Installation lokal ein Schlüsselpaar erstellen:

    Bash
    ssh-keygen -o -a 256 -t ed25519 -C "kommentar" -f ~/.ssh/dateiname

    kommentar und dateiname dienen der Zuordnung und sind in der Regel gleich dem hostname.

    Schlüsselpaar installieren

    Im Server Control Panel (SCP) den öffentlichen Teil des Schlüssels (dateiname.pub) unter:

    Optionen --> SSH-Keys

    anlegen.

    ggf. known_hosts

    CAVE: Bei erneuter Installation lokal die IP-Adresse des Servers aus known_hosts entfernen:

    Bash
    ssh-keygen -f ~/.ssh/known_hosts -R '192.0.2.0'

    Debian 13

    netcup SCP

    Die Server von netcup werden bei der Installation über das SCP vorab mit einem hostname, SSH-Key sowie einem sudo-User ausgestattet.

    Debian 12 aktualisieren

    Paketlisten neu einlesen und Linux aktualisieren:

    Bash
    sudo apt update && sudo apt upgrade -y && sudo apt full-upgrade -y && sudo apt autoremove -y

    Automatische Systemupdates

    unattended-upgrades installieren:

    Bash
    sudo apt install unattended-upgrades -y

    unattended-upgrades aktivieren:

    Bash
    sudo dpkg-reconfigure -plow unattended-upgrades

    SSH

    Variante 1: SSH Server

    Mit nano die sshd_config öffnen:

    Bash
    sudo nano /etc/ssh/sshd_config

    Standard-SSH-Port 22 auf 2222 ändern (Port 2222) und den Login via root verbieten (PermitRootLogin no).

    Des Weiteren den generellen Login via Passwort verbieten (PasswordAuthentication no) und nur mit einem Key erlauben (PubkeyAuthentication yes).

    Außerdem den SSH-Zugriff nur durch den Sudo-User via VPN erlauben: AllowUsers bud@198.51.100.100

    Bash
    Port 2222
    PermitRootLogin no
    PasswordAuthentication no
    PubkeyAuthentication yes
    AllowUsers bud@198.51.100.100

    CAVE: Für den VPN-Server (198.51.100.100) wird die Zeile AllowUsers vollständig durch knockd ersetzt.

    Variante 2: SSH VPN (knockd)

    knockd installieren:

    Bash
    sudo apt install knockd

    knockd.conf mit nano öffnen und folgendes konfigurieren:

    knockd aktivieren:

    Bash
    sudo systemctl enable knockd
    sudo systemctl start knockd

    Überprüfen, ob knockd läuft:

    Bash
    sudo systemctl status knockd

    [h3]knockd lokal[/h3]

    Anklopfen / Entsperren mit:

    Bash
    knock 198.51.100.100 7000 8000 9000

    Sperren mit:

    Bash
    knock 198.51.100.100 9000 8000 7000

    ufw

    ufw installieren:

    Bash
    sudo apt install ufw -y

    Grundsätzlich alles eingehende abweisen:

    Bash
    sudo ufw default deny incoming

    Port 2222 (SSH) erlauben:

    Bash
    sudo ufw allow 2222/tcp

    ufw aktiveren:

    Bash
    sudo ufw enable

    Status abrufen, inkl. Port-Nummerierung:

    Bash
    sudo ufw status numbered

    IPv6 löschen:

    Bash
    sudo ufw delete 2

    Status überprüfen:

    Bash
    sudo ufw status verbose

    Beispielausgabe:

    Code
    Status: active
    Logging: on (low)
    Default: deny (incoming), allow (outgoing), disabled (routed)
    New profiles: skip
    To Action From
    2222/tcp ALLOW IN Anywhere

    fail2ban

    fail2ban installieren:

    Bash
    sudo apt install fail2ban -y

    Neue Datei mit dem Namen jail.local erstellen und öffnen:

    Bash
    sudo nano /etc/fail2ban/jail.local

    Folgenden Inhalt für jail.local erstellen:

    Ini
    [DEFAULT]
    bantime = 24h
    findtime = 10m
    maxretry = 3
    [sshd]
    enabled = true
    port = 2222
    backend = systemd
    [recidive]
    enabled = true

    fail2ban neu starten:

    Bash
    sudo systemctl restart fail2ban

    Überprüfen, ob fail2ban läuft:

    Bash
    sudo systemctl status fail2ban.service

    munin-node

    Port 4949 (munin) via ufw erlauben:

    Bash
    sudo ufw allow 4949/tcp

    munin-node und Perl-Module installieren:

    Bash
    sudo apt install libwww-perl munin-node -y

    Mit nano die Datei munin-node.conf öffnen:

    Bash
    sudo nano /etc/munin/munin-node.conf

    Die Master-IP zulassen:

    Code
    #nuernberg
    allow ^198.51.100.255$
    #berlin
    allow ^192.0.2.222$
    #logrono
    allow ^203.0.113.233$

    munin-node neu starten:

    Bash
    sudo systemctl restart munin-node.service

    fastfetch

    fastfetch installieren:

    Bash
    sudo apt install fastfetch -y

    [RS] 2000 G11 | 3x 1000 G12 Pro | 2x Vincent van Bot | Piccolo | Piccolo ARMore
    [VPS] 1000 G9 | 500 G11s | mikro G11s | 4x nano G11s | 4x piko G11s
    [WH] 8000 SE | 4000 SE | 2000 SE | 2x Spezial

  • Hast du dir schon mal ansible angeguckt um deine ganzen Tools zu installieren?

    Bzw. überlegt ob du dir deine Config Files via ansible/git o.ä. auf deine Systeme pusht/pullst? (Das habe ich noch als vorhaben offen)

    Ich finde es aber gut das du deinen Ablauf dokumentiert hast. Einen Laufzettel/Checklist habe ich auch. Und es ist das beste was man machen kann. So vergisst man nichts und kann eine menge einfach immer wieder kopieren :D

    Einmal editiert, zuletzt von fvbor (21. Oktober 2025 um 15:26)

  • Als Forenbeitrag oder Blog ist deine Liste ok aber um damit zu arbeiten,

    besonders wenn du es auf allen Servern nach der Installation benutzt,

    würde ich das auch automatisieren. Ich habe keine Ahnung von ansible aber

    für mich habe ich da ein shellscript erstellt , das alles automatisch installiert.

    Das ist garnicht so schwer wie es klingt.

    Der ssh-Teil sieht z.B. so aus:

    $SSH_PORT und $NEWUSER werden weiter oben im script gefüllt, da ich auch direkt einen "normalen" User erstelle

    It's me, only me, pure michi 🦆

    RS: ja:thumbup: VPS: yep:thumbup: ARM: sicher:thumbup: WH: klar :thumbup:

    Domains: auch:thumbup:

  • Ich arbeite auch mit eigenen Shell-Skripten.

    (In der Zeit, die ich bräuchte, um mich in Ansible einzuarbeiten und dann immer spezielle Konfigurationsdateien zu erstellen, habe ich auch leicht ein paar Dutzend bash/sed/awk-Skripte geschrieben.;))

  • Die Einstiegshürde bei Ansible ist auch etwas höher. Daher ist das sicher nicht für jedermann etwas. Und man muss es auch nicht unbedingt nutzen. Wenn man es aber einmal erfolgreich eingesetzt hat, möchte man nichts mehr anderes. Ich nutze das jetzt seit über 10 Jahren produktiv. Man ist halt sehr flexibel, vor allem wenn sich die Rollen selbst schreibt und dann einfach immer wieder verwenden kann. Entsprechende Konfigurationen finden dann einfach über wenige Variablen statt. Ich setze damit quasi alles auf, von meinem Mailserver über über Datenbanken bis hin zu DC übergreifenden Kubernetes Clustern. Gerade wenn man viele Server administrieren muss, kommt man mit Shell Skripten doch schnell mal an die Grenze des Sinnvollen. Daher ist der Einsatz davon auch immer etwas abhängig davon wie groß man denn mit seiner Serverlandschaft wachsen möchte :).

  • Gerade wenn man viele Server administrieren

    *darf

    Eben das ist der Grund wieso ich auch mit Ansible angefangen hatte. Ich war genervt von den Linux Updates hab deswegen Ansible erst einmal so weit gebracht, dass ich damit alle Server Update.

    Danach kam das er Pakete via apt installiert für die Basic Installation.

    So viel weiter bin ich jetzt auch noch nicht, aber das muss/will ich auch noch weiter angehen.

    Ansible ist halt IaC - Infrastructure as Code.

    Das bedeutet: Ansible wird immer dem im Code vorgegeben Status erzeugen.

    Bild: Mein Monitoring sagte mir das mehrere Server Updates wollen, also hab ich einmal Ansbile losgetreten.

    Das einzige "nervige" ist an der Stelle nur: Ansible meldet sich einmal bei jedem Server an, was eine Notification bei mir via ntfy triggert und dann eskaliert mein Handy immer. Pro Server eine Benachrichtigung und das in kurzer Zeit :D

    pasted-from-clipboard.png

  • Die Einstiegshürde bei Ansible ist auch etwas höher. Daher ist das sicher nicht für jedermann etwas. Und man muss es auch nicht unbedingt nutzen. Wenn man es aber einmal erfolgreich eingesetzt hat, möchte man nichts mehr anderes.

    für die bash-fraktion gäbe es noch cdist, mit wesentlich geringerer einstiegshürde und auf den targets keine python-abhängigkeit (wobei mittlerweile ebenfalls der ansible-tweak https://github.com/TortugaLabs/ansible-nopython existiert).

    wer aber über das grundsätzliche setup hinaus möchte, ist IMHO bei ansible mit z.b. der ansible galaxy und weiteren öffentlich verfügbaren »playbooks«, »roles«, »collections« etc. durch die wesentlich größere nutzerbasis besser aufgehoben.

    »Hauptsache BogoMIPS!«
    Volksfront DLT #64Ksplit
    Sag' NEIN zu Wordpress

    6 Mal editiert, zuletzt von Olivetti (22. Oktober 2025 um 13:12)

  • Ich war genervt von den Linux Updates hab deswegen Ansible erst einmal so weit gebracht, dass ich damit alle Server Update.

    Nur der Vollständigkeit halber: Falls irgendwer nur diese eine Sache besser managen möchte und in der APT/DPKG Welt (Debian/Ubuntu/usw.) zuhause ist, gibt es apt-dater. Ist ein nettes kleines Tool mit einer sehr geringen Einstiegshürde :)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    Einmal editiert, zuletzt von KB19 (30. Oktober 2025 um 15:14)

  • Ich bin ein wenig verwirrt. Ich bin gerade darüber einen neuen Server (inkl. IPv6) einzurichten, aber er hat bereits eine IPv6 vorkonfiguriert... Ist das neu unter Debian 13? Kann ich diese IPv6 problemlos verwenden oder ist sie für einen bestimmten Dienst in Benutzung?

    Spoiler anzeigen

    Was ist, wenn ich eine andere IPv6 möchte? Einfach abändern?

    Die /etc/network/interfaces.d/50-cloud-init.cfg lautet wie folgt:

    [RS] 2000 G11 | 3x 1000 G12 Pro | 2x Vincent van Bot | Piccolo | Piccolo ARMore
    [VPS] 1000 G9 | 500 G11s | mikro G11s | 4x nano G11s | 4x piko G11s
    [WH] 8000 SE | 4000 SE | 2000 SE | 2x Spezial