-
Was ist ein vServer?
-
vServer und Sicherheit
-
vServer - Anwendungsfälle
-
vServer bei dogado
-
vServer und Plesk
-
vServer Betriebssyteme
-
vServer Glossar
VPS von dogado - gehostet in Deutschland
Behalte die Kontrolle über deinen vServer/VPS und steuere deine Online-Präsenz souverän. Profitiere von Hochgeschwindigkeits-NVME-SSDs, die bis zu 6-mal schneller sind als herkömmliche.
CentOS Stream 10 installieren
Geht zuerst auf die Webseite: https://onehome.dogado.de und wählt dort „Meine Produkte“ aus:
Unter dem Bereich „Cloud Servers“ seht ihr nun eure Server. Wählt hier den Server aus, auf dem ihr CentOS 10 installieren wollt. Hier findet ihr nun den Button „Server neu bereitstellen“:
In diesem Dialog wählt ihr CentOS aus. Anschließend könnt ihr noch die Version wählen. Hier wählt ihr die aktuelle 10er Version.
Nun legt ihr einen Hostnamen und einen Anzeigenamen fest. Beide Angaben könnt ihr später jederzeit noch anpassen. Der Anzeigename ist nur für die dogado Oberfläche, der Hostname ist der Name des Systems selbst und wird zum Beispiel bei einem E-Mail-Server wichtig.
Anschließend wählt ihr noch ein sicheres Kennwort. dogado bietet hier auch die Möglichkeit, ein sicheres Kennwort mit einem Klick zu generieren.
Vergewissert euch, dass ihr den richtigen Server ausgewählt habt. Wenn ihr weiter klickt, wird der aktuelle Server komplett gelöscht mit allen darauf enthaltenen Daten. Sichert wichtige Daten daher vorher mit einem Backup.
Die Bereitstellung des vServers dauert nun einen kurzen Moment. Aktualisiert die Webseite mit der Taste „F5“, um den aktuellen Stand einzusehen. Wenn alles erfolgreich ist, solltet ihr den Status „aktiv“ sehen:
Im Bereich „Details“ könnt ihr auch die IPv4- und IPv6-Adresse des Servers einsehen. Diese braucht ihr, damit ihr euch im nächsten Schritt mittels SSH mit dem Server verbinden könnt.
Ebenfalls seht ihr hier den Benutzernamen, welchen ihr für den Login benötigt. In meinem Fall heißt der Benutzer „administrator“.
Per SSH mit dem vServer verbinden
Nachdem der vServer nun mit CentOS 10 bereitgestellt wurde, könnt ihr euch direkt damit verbinden. Ihr könnt beispielsweise das Programm PuTTY (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html) nutzen oder direkt den integrierten SSH-Client von Windows 11. Ich werde es mit dem Windows 11 integrierten Client zeigen.
Dazu öffnet ihr ein Windows Terminal und gebt Folgendes ein:
ssh benutzernamen@eureip
Bei mir sieht es dann so aus:
Bei der ersten Verbindung per SSH fragt der SSH-Client nach, ob ihr dem Server vertrauen wollt. Dies bestätigt ihr mit „yes“. Anschließend gebt ihr euer Kennwort ein, welches ihr bei der Installation festgelegt habt.
Nachdem ihr erfolgreich verbunden seid, wechselt ihr zum Benutzer „root“ für die weitere Einrichtung. Dazu gebt ihr folgenden Befehl ein:
sudo -i
Jetzt sollte sich die Konsole entsprechend verändert haben und den Benutzer „root“ anzeigen:
System aktualisieren
Zuerst führt ihr ein Update aller installierten Programme durch. Dazu gebt ihr Folgendes ein:
dnf upgrade --refresh -y
Nach einem kurzen Moment sollte euer Server „Complete!“ anzeigen:
Werkzeug installieren
Hier installiert ihr euch den Texteditor „nano“. Dieser lässt sich sehr einfach bedienen und hilft uns, im späteren Teil dieser Anleitung die Konfigurationsdateien zu erstellen:
dnf install -y nano
Bei nano speichert ihr Dateien mit STRG+O und ENTER. Beenden könnt ihr nano mit STRG+X.
Neuen Benutzer anlegen
Der Benutzername „administrator“ ist auf vielen Servern vorhanden und wird deshalb häufig bei automatisierten Angriffen genutzt. Daher solltet ihr euch einen eigenen Benutzer anlegen. Der neue Benutzer wird Mitglied der Gruppe „wheel“, damit er mittels „sudo“ zum root Benutzer wechseln kann. Ich wähle hier den Benutzernamen „dogado“.
useradd -m -G wheel dogado
passwd dogado
Öffnet nun ein zweites Terminal in Windows und baut mit dem neuen Benutzer eine Verbindung zu eurem Server auf. Gebt dazu folgendes ein:
ssh neuer-benutzernamen@eureip
Nach dem Login gebt ihr noch „sudo -i“ ein, um zum root Benutzer zu wechseln:
Wenn dies erfolgreich war, könnt ihr den Benutzer „administrator“ löschen, um eine mögliche Angriffsfläche zu verringern. Dazu müsst ihr zuerst noch die offene SSH-Sitzung des Benutzers „administrator“ beenden, indem ihr das Fenster schließt. Wartet danach einen kurzen Moment und gebt Folgendes ein:
userdel -r administrator
Solltet ihr die Meldung erhalten, dass der Benutzer aktuell noch genutzt wird, so wartet noch einen Moment und gebt den Befehl dann erneut ein:
Firewall einrichten
Wir wollen die Firewall „firewalld“ installieren und konfigurieren. Dort könnt ihr festlegen, welche Ports bzw. Dienste von außen erreichbar sind. Installiert und aktiviert zuerst firewalld:
dnf install -y firewalld
systemctl enable --now firewalld
Nach einem kurzen Moment solltet ihr „Complete“ im Terminal sehen. Schaut euch anschließend an, welche Ports und Dienste aktuell freigegeben sind:
firewall-cmd --list-all
So sieht meine Ausgabe aus:
Konkret sind die Dienste „cockpit“, „dhcpv6-client“ und „ssh“ freigegeben. Um unseren SSH-Port gegen automatische Angriffe zu schützen, wollen wir diesen später auf den Port 3333 legen. Ihr könnt grundsätzlich jeden freien Port über 1023 nutzen. Wir geben diesen Port jetzt schon frei:
firewall-cmd --permanent --add-port=3333/tcp
firewall-cmd --reload
SSH-Zugang absichern
Hier wollen wir zwei Maßnahmen anwenden, welche einen großen Effekt bringen. Zum einen verbieten wir die direkte Anmeldung als „root“ und verlegen zusätzlich noch den SSH-Port von 22 auf 3333. Der Portwechsel hilft nichts gegen einen gezielten Angriff, senkt aber die Zahl automatisierter Angriffe deutlich.
Neuen Port für SELinux freigeben
SELinux ist bei CentOS ein zusätzlicher Schutz. Es erlaubt dem SSH-Dienst nur bestimmte Ports. Ohne Freigabe würde SSH auf Port 3333 nicht starten. Gebt folgende Befehle ein, um den Port 3333 freizugeben. Solltet ihr einen anderen Port gewählt haben, so gebt euren Port entsprechend frei.
dnf install -y policycoreutils-python-utils
semanage port -a -t ssh_port_t -p tcp 3333
SSH-Konfiguration anpassen
Nachdem ihr jetzt die Freigabe für den Port 3333 erstellt habt, müssen wir diesen im SSH-Dienst noch umstellen. Damit eure Änderungen nicht bei Updates überschrieben werden, erzeugt ihr eine eigene Datei.
nano /etc/ssh/sshd_config.d/00-haertung.conf
Kopiert folgenden Inhalt in die Datei. Passt entsprechend den Benutzer „dogado“ an euren Benutzernamen an.
Port 3333
PermitRootLogin no
MaxAuthTries 3
LoginGraceTime 30
AllowUsers dogado
| Einstellung | Erklärung |
|---|---|
| Port | Der neue SSH-Port. |
| PermitRootLogin no | Eine Anmeldung als root wird immer abgelehnt. |
| MaxAuthTries 3 | Nach drei Fehlversuchen wird die Verbindung getrennt. |
| LoginGraceTime 30 | Nicht angemeldete Verbindungen werden nach 30 Sekunden geschlossen. |
| AllowUsers | Nur die genannten Benutzer dürfen sich per SSH anmelden. Mehrere Namen trennt ihr mit Leerzeichen. |
Nachdem ihr die Konfiguration gespeichert habt, testet ihr mit folgendem Befehl, ob die Konfiguration fehlerfrei ist:
sshd -t
Hier solltet ihr keine Ausgabe sehen. Solltet ihr eine Ausgabe sehen, so ist ein Fehler in der Datei und ihr solltet den Dienst nicht neu starten. Korrigiert die Datei entsprechend.
Wenn alles fehlerfrei ist, startet ihr den Dienst neu, damit die Änderungen übernommen werden:
systemctl restart sshd
Neuen Zugang testen
Lasst eure aktuelle Sitzung zur Sicherheit offen. Öffnet eine neue Sitzung mit dem neuen Port:
ssh -p 3333 name@EURE-SERVER-IP
Wenn alles korrekt läuft, solltet ihr euch nun anmelden können mit eurem neuen Benutzer über den geänderten Port. Schließt das alte Terminal erst, wenn dies korrekt funktioniert.
SSH Port 22 aus der Firewall entfernen
Nachdem der Login auf Port 3333 korrekt funktioniert hat, entfernt ihr den Port 22 noch aus der Firewall. Dazu gebt ihr Folgendes ein:
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload
Noch sicherer wird der Zugang, wenn ihr statt eines Passworts SSH-Schlüssel nutzt. Wie das geht, zeigen wir euch in unserer Anleitung zur Public-Key-Authentifizierung.
Cockpit
Bei Cockpit handelt es sich um eine Verwaltungsoberfläche, welche ihr per Webbrowser öffnen könnt. Bei jedem SSH-Login solltet ihr folgende Meldung gesehen haben:
Ihr könnt die Webseite öffnen und solltet dann folgendes sehen:
Mit dieser grafischen Oberfläche könnt ihr viele Parameter von CentOS einsehen und verändern. Dieser Dienst ist aber für das gesamte Internet erreichbar und die Einschränkungen aus den vorherigen Kapiteln sowie der Brute-Force-Schutz aus dem nachfolgenden Kapitel gelten nur für den SSH-Dienst. Wenn ihr Cockpit nicht nutzt, solltet ihr den Dienst aus Sicherheitsgründen deaktivieren. Dies könnt ihr mit folgenden Befehlen erledigen:
systemctl disable --now cockpit.socket
firewall-cmd --permanent --remove-service=cockpit
Anschließend ladet ihr die Firewall neu, damit die Einstellung übernommen wird:
firewall-cmd --reload
Brute-Force-Schutz bereitstellen
Fail2Ban erkennt fehlgeschlagene Logins und kann die betreffenden IP-Adressen sperren. Dies ist ein Vorteil gegenüber der SSH-Einstellung „MaxAuthTries“, die zwar die Verbindung nach drei Fehlversuchen trennt, bei der ein Angreifer aber jederzeit eine neue Verbindung aufbauen kann.
Fail2Ban installieren
Um Fail2Ban zu installieren, benötigt ihr das Zusatz-Repository EPEL. Dies richtet ihr nun ein:
dnf config-manager --set-enabled crb
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
Jetzt könnt ihr Fail2Ban installieren:
dnf install -y fail2ban fail2ban-firewalld
SSH-Schutz aktivieren
Nachdem ihr Fail2Ban installiert habt, müsst ihr es noch einrichten. Dazu legt ihr euch eine Konfigurationsdatei an. Dies hat den Vorteil, dass sie bei Updates nicht überschrieben wird:
nano /etc/fail2ban/jail.d/sshd.local
Fügt den folgenden Inhalt ein:
[sshd]
enabled = true
port = 3333
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
Mit diesen Einstellungen wird also eine IP-Adresse für eine Stunde gesperrt, wenn sie sich innerhalb von 10 Minuten fünf Mal falsch angemeldet hat.
| Einstellung | Erklärung |
|---|---|
| port | Euer SSH-Port. |
| backend = systemd | Fail2ban liest die Anmeldeversuche direkt aus dem Systemprotokoll. |
| maxretry | Anzahl der erlaubten Fehlversuche … |
| findtime | … innerhalb dieses Zeitraums. |
| bantime | So lange bleibt eine IP-Adresse danach gesperrt. |
Jetzt könnt ihr Fail2Ban starten:
systemctl enable --now fail2ban
Nun solltet ihr prüfen, ob der SSH-Schutz aktiv ist:
fail2ban-client status sshd
Hier könnt ihr sehen, dass der Schutz für SSH aktiv ist und es bisher noch keine gesperrten IP-Adressen gibt:
Genauere Logs findet ihr hier:
tail -n 50 /var/log/fail2ban.log