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.
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.
Das wäre doch ein wunderbarer Abschluss für diesen Thread!
Außerdem willst du chmod 600, nicht chmod 700.
Genau - 700 ist für den .ssh folder
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.
SSH Key
Schlüsselpaar erstellen
Vor der Installation lokal ein Schlüsselpaar erstellen:
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:
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:
Automatische Systemupdates
unattended-upgrades installieren:
unattended-upgrades aktivieren:
SSH
Variante 1: SSH Server
Mit nano die sshd_config öffnen:
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
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:
knockd.conf mit nano öffnen und folgendes konfigurieren:
[options]
UseSyslog
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
Display More
knockd aktivieren:
Überprüfen, ob knockd läuft:
[h3]knockd lokal[/h3]
Anklopfen / Entsperren mit:
Sperren mit:
ufw
ufw installieren:
Grundsätzlich alles eingehende abweisen:
Port 2222 (SSH) erlauben:
ufw aktiveren:
Status abrufen, inkl. Port-Nummerierung:
IPv6 löschen:
Status überprüfen:
Beispielausgabe:
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:
Neue Datei mit dem Namen jail.local erstellen und öffnen:
Folgenden Inhalt für jail.local erstellen:
[DEFAULT]
bantime = 24h
findtime = 10m
maxretry = 3
[sshd]
enabled = true
port = 2222
backend = systemd
[recidive]
enabled = true
fail2ban neu starten:
Überprüfen, ob fail2ban läuft:
munin-node
Port 4949 (munin) via ufw erlauben:
munin-node und Perl-Module installieren:
Mit nano die Datei munin-node.conf öffnen:
Die Master-IP zulassen:
munin-node neu starten:
fastfetch
fastfetch installieren:
Hallo Bud,
ich würde die SSHD Konfigurationn in eine Separate Datei im SSH Config Directory ablegen.
hatte das auch erst wie Du aber dann ist es immer blöd wenn vom Maintainer eien neuere ssdh_config kommt.
Grüße Ecki
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 ![]()
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 #################
if echo "### my own rules ###" >> /etc/ssh/sshd_config
echo "Port = $SSHPORT" >> /etc/ssh/sshd_config; then
echo "Port in sshd wurde erfolgreich geaendert" >> $LOG_TEXT
else
echo "Es trat ein Fehler auf beim Aendern vom ssh Port!" >> $LOG_TEXT
fi
if echo "AllowUsers $NEWUSER" >> /etc/ssh/sshd_config;then
echo "Allowed login erfolgreich geaendert" >> $LOG_TEXT
else
echo "Es trat ein Fehler auf beim Eintrag AllowUsers!" >> $LOG_TEXT
fi
if systemctl restart ssh; then
echo "ssh erfolgreich gestartet" >> $LOG_TEXT
else
echo "Es trat ein Fehler auf beim Neustart von ssh!" >> $LOG_TEXT
fi
Display More
$SSH_PORT und $NEWUSER werden weiter oben im script gefüllt, da ich auch direkt einen "normalen" User erstelle
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
.
ich werde das auch automatisieren sobald ich mein "gut genug" setup gefunden habe - vielleicht can ich ja eine make datei dafuer nehmen. makedeploy ![]()
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 ![]()
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.
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 ![]()
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
Danke, wieder was neues kennengelernt.
apt-dater
Whaaaaaat? Man lernt nie aus. Genau sowas hab ich gesucht. ![]()
Whaaaaaat? Man lernt nie aus. Genau sowas hab ich gesucht.
Schau dir auch mal Ansible an. Ist ne wesentlich flexiblere Lösung. Allerdings auch umfangreicher.
Womit wir wieder am Anfang der Schleife angelangt wären. ![]()
Recursion: n. See Recursion.
Ansible ist mir bekannt, aber schien mir für das ich-will-5-server-updaten immer bisschen überdimensioniert.
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?
Was ist, wenn ich eine andere IPv6 möchte? Einfach abändern?
Die /etc/network/interfaces.d/50-cloud-init.cfg lautet wie folgt: