Cloud Computing hat das Server-Szenario drastisch verändert. Viele Plattformen bieten kostenlose Linux-Cloud-Server und Sie können Ihre Linux-Server innerhalb von Minuten über diese Cloud-Plattformen bereitstellen.
Wenn Sie einen neuen Server hochfahren, insbesondere wenn er im Internet sichtbar ist, steht er sofort Kriminellen zur Verfügung, die exponierte Server mit ihren automatisierten Bot-Skripten nach Fehlkonfigurationen und Schwachstellen durchsuchen.
Es gibt ein paar Dinge, die Sie nach der Installation des Linux-Servers tun müssen, um sicherzustellen, dass Ihr Server nicht kompromittiert wird.
Hier ist ein Screenshot dessen, was Fail2ban kürzlich auf einem meiner Server gesehen hat.
212 fehlerhafte Anmeldeversuche und 6 blockierte IP-Adressen. Jeglicher Datenverkehr von nicht autorisierten Personen oder Skripten, die versuchen, sich bei meinem Server anzumelden.
Ein paar wichtige erste Schritte helfen Ihnen dabei, Ihre neuen Server-Builds vor Kompromittierung zu schützen.
Empfohlene Maßnahmen nach der Installation eines Linux-Servers zur Verbesserung der Sicherheit
Ich habe hier zwei der beliebtesten Linux-Server-Distributionen betrachtet:Ubuntu und CentOS/Red Hat. Bitte überprüfen Sie, welches Linux Sie verwenden.
Die meisten Ratschläge sind hier generisch und sollten auf andere Linux anwendbar sein, sofern nicht ausdrücklich erwähnt.
Hier sind die Dinge, die Sie überprüfen sollten, um die Sicherheit Ihres Linux-Servers zu gewährleisten. Ich habe einzelne Schritte bereitgestellt, aber wenn Sie es schnell machen möchten, habe ich auch ein Skript erstellt, das Sie schnell auf jedem neu bereitgestellten Server ausführen können .
1. Stellen Sie sicher, dass ein Nicht-Root-Benutzer eingerichtet ist
Root ist allmächtig und Sie benötigen nicht immer die Root-Berechtigungen.
root ist auch ein gültiger Benutzername auf fast jedem Linux-System. Das heißt, wenn es für die Remote-Authentifizierung aktiviert ist, ist die Hälfte der Arbeit des Angreifers, das Erhalten eines gültigen Benutzernamens, erledigt.
Auch wenn ein Angreifer als Root zugreifen kann, sind keine weiteren Berechtigungen erforderlich, um irgendetwas auf dem System zu tun.
Aus diesen Gründen ist es am besten, sich als Nicht-Root-Benutzer anzumelden und die Root-Anmeldung für den Fernzugriff über SSH zu deaktivieren (wird später erklärt).
Wie geht das?
Ich gehe davon aus, dass Sie als root auf Ihrem System angemeldet sind.
Fügen Sie mit dem Befehl useradd einen neuen Benutzer hinzu. Ersetzen Sie
useradd <username>
Richten Sie ein Passwort mit dem passwd-Befehl für den neu hinzugefügten Benutzer ein:
passwd <username>
2. Stellen Sie sicher, dass der Nicht-Root-Benutzer über die Sudo-Berechtigung verfügt
Da Sie sich mit Secure Shell (SSH) aus der Ferne bei diesem Konto anmelden, sollten Sie in der Lage sein, privilegierte Aktivitäten auszuführen, die Root-Zugriff erfordern. Das bedeutet, dass das Konto über sudo-Berechtigungen verfügen muss.
Wie geht das?
Der Vorgang zum Erstellen eines sudo-Benutzers unter Ubuntu und CentOS ist ähnlich, aber die Gruppe, zu der Sie den Benutzer hinzufügen, ist anders.
Sie sollten als root angemeldet sein, um diesen Schritt auszuführen.
Auf CentOS und Red Hat , das wheel
group ist die Standardgruppe, die verwendet wird, um Benutzern sudo-Berechtigungen zu erteilen. Fügen Sie den Benutzer mit dem usermod-Befehl zu dieser Gruppe hinzu:
usermod -aG wheel <username>
Ubuntu verwendet das sudo
Gruppe zum Verwalten von sudo-Benutzern.
usermod -aG sudo <username>
3. Schlüsselbasierte SSH-Authentifizierung aktivieren
Es ist wichtig, dass die schlüsselbasierte Authentifizierung für SSH aktiviert ist, damit sie funktioniert, wenn wir die passwortbasierte Authentifizierung deaktivieren.
Geknackte, brutal erzwungene oder kompromittierte Passwörter sind eine sehr häufige Methode für Angreifer, sich Zugang zu Systemen zu verschaffen. Spear-Phishing, äußerst zielgerichtete Spam-E-Mails, die einen ahnungslosen Benutzer dazu verleiten, Anmeldeinformationen anzugeben, ist nur eine gängige Methode, um Anmeldeinformationen zu erhalten.
Wenn jemand Ihren Benutzernamen und Ihr Passwort auf einem System erhält, auf dem die schlüsselbasierte Authentifizierung aktiviert ist und Die kennwortbasierte Authentifizierung ist für den Fernzugriff über SSH deaktiviert, das gestohlene Kennwort verschafft ihnen keinen Zugriff mehr auf diesen Server.
Indem Sie die schlüsselbasierte Authentifizierung aktivieren und in einem späteren Schritt die passwortbasierte Authentifizierung deaktivieren, haben Sie Ihre Chancen, dass SSH gegen Sie verwendet wird, erheblich verringert. Dies ist eine der elementarsten Möglichkeiten, SSH-Server zu sichern.
Wie geht das?
Sie haben SSH bereits auf Ihrem Server aktiviert, nehme ich an. Was Sie tun müssen, ist, SSH-Schlüssel auf Ihrem PC zu generieren (von wo aus Sie sich beim Server anmelden).
Sobald Sie die SSH-Schlüssel haben, sollten Sie den öffentlichen Schlüssel zu den authorisierten_Schlüsseln auf unserem Server für den Nicht-Root-Benutzer hinzufügen.
Achtung ! Verlieren Sie nicht die ssh-Schlüssel von Ihrem PC. Erstellen Sie eine Sicherungskopie dieser Schlüssel. Wenn Sie später die passwortbasierte Authentifizierung deaktivieren und die SSH-Schlüssel verlieren, werden Sie von Ihrem eigenen Server ausgeschlossen.
4. Stellen Sie sicher, dass SSH durch die ufw-Firewall erlaubt ist
Bevor Sie die Firewall auf Ihrem System aktivieren, sollten Sie sicherstellen, dass SSH erlaubt ist. Andernfalls werden Sie möglicherweise von Ihrem System ausgeschlossen, wenn Sie remote darauf zugreifen.
Wie geht das?
Ubuntu verwendet Uncomplicated Firewall (ufw) und CentOS/Red Hat verwendet firewalld.
Auf CentOS/Red Hat verwenden Sie den Firewall-cmd-Befehl:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
Verwenden Sie unter Ubuntu den ufw-Befehl wie folgt:
sudo ufw allow ssh
5. Firewall aktivieren (erst nachdem SSH zugelassen wurde)
Eine Firewall stellt sicher, dass nur Datenverkehr, den Sie ausdrücklich zulassen, auf Ihren Server fließen kann. Wenn ein Angreifer Malware auf Ihren Server bringt und versucht, sie über einen nicht zugelassenen Port kommunizieren zu lassen, oder wenn ein Dienst versehentlich aktiviert wird, kann er nicht dazu verwendet werden, Ihren Server zu kompromittieren oder weiter zu kompromittieren.
Wie geht das?
Aktivieren Sie auf CentOS/Red Hat-Systemen den Dienst firewalld systemd:
sudo systemctl start firewalld
sudo systemctl enable firewalld
Verwenden Sie unter Ubuntu diesen Befehl:
sudo ufw enable
6. Stellen Sie SSH so ein, dass kein Banner angezeigt wird
Ein Angreifer kann Ihren Server unter anderem durch Fehler in der Software kompromittieren, die Ihre Dienste ausführt. Ein Banner kann Informationen darüber anzeigen, welche Version von OpenSSH oder welches Betriebssystem Sie verwenden. Es hat keinen Sinn, den bösen Jungs Informationen zu geben. Lass sie dafür arbeiten!
Wie geht das?
Dies ist das Standardverhalten in CentOS/Red Hat nicht um ein Banner anzuzeigen, sodass keine Aktion erforderlich ist.
Unter Ubuntu können Sie Folgendes verwenden:
sudo echo "DebianBanner no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
7. Alle SSH-Weiterleitungen deaktivieren
Es ist zwar nicht ungewöhnlich, dass Administratoren die SSH-Weiterleitung verwenden, um Datenverkehr zu verschlüsseln, der ansonsten Klartext passieren könnte, aber wenn Sie es nicht verwenden, sollten Sie es deaktivieren. Die Weiterleitung könnte von einem Angreifer verwendet werden, um den Datenverkehr zu verschlüsseln, damit er für Sie schwerer zu sehen ist, oder um Datenverkehr zu erhalten, der andernfalls blockiert würde, um einen autorisierten Port und Dienst zu verwenden.
Wie geht das?
Unter CentOS/Red Hat, ein Fügen Sie Folgendes zu /etc/ssh/sshd_config
hinzu :
DisableForwarding yes
Unter Ubuntu fügen Sie DisableForwarding yes
hinzu in die 10-my-sshd-settings.conf
Datei:
sudo echo "DisableForwarding yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
8. Root-Anmeldung über SSH deaktivieren
Auf fast jedem Linux-System gibt es einen Root-Benutzer. Wenn Sie diesem Konto die Verwendung von SSH erlauben, bestehen zwei Risiken.
- Der Benutzername ist bekannt und wird häufig von Bösewichten ausprobiert.
- Wenn ein Angreifer als root einsteigt, hat er vollen Systemzugriff.
Durch das Deaktivieren der Verwendung des Root-Kontos für SSH-Verbindungen werden beide Risiken aufgehoben.
Wie geht das?
Auf CentOS/Red Hat , suchen Sie die Zeile PermitRootLogin yes
in /etc/ssh/sshd_config
und ändern Sie es in:
PermitRootLogin no
Fügen Sie unter Ubuntu PermitRootLogin no
hinzu in die 10-my-sshd-settings.conf
Datei:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
9. Deaktivieren Sie die passwortbasierte SSH-Authentifizierung
Bevor Sie die Passwortauthentifizierung in SSH deaktivieren, vergewissern Sie sich, dass Sie die schlüsselbasierte Authentifizierung wie in Schritt 3 beschrieben konfiguriert und getestet haben.
Durch das Deaktivieren der passwortbasierten Authentifizierung werden böswillige Akteure, die versuchen, Ihr Passwort zu erraten, oder die Sie durch Social Engineering dazu gebracht haben, Ihre Anmeldeinformationen einzugeben oder sie auf irgendeine Weise gestohlen haben, daran gehindert, über SSH auf Ihren Server zuzugreifen.
Ein Angreifer muss über Ihre öffentlichen und privaten Schlüssel verfügen, um auf Ihren Server zugreifen zu können.
Wie geht das?
Auf CentOS/Red Hat , suchen Sie die Zeile PasswordAuthentication yes
in /etc/ssh/sshd_config
und ändern Sie es in:
PasswordAuthentication no
Auf Ubuntu , fügen Sie PasswordAuthentication no
hinzu in die 10-my-sshd-settings.conf
Datei:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
10. Ignoriere Rhosts
rhosts
ist mit rsh verbunden, einem Legacy-Protokoll, das von Secure Shell abgelöst wurde. Wenn ein Benutzer versucht, einen schädlichen rhosts
zu erstellen Datei, diese Einstellung ignoriert sie explizit.
Wie geht das?
Auf CentOS/Red Hat , suchen Sie die Zeile #IgnoreRhosts yes
in /etc/ssh/sshd_config
und ändern Sie es in:
IgnoreRhosts yes
Auf Ubuntu , fügen Sie IgnoreRhosts yes
hinzu in die 10-my-sshd-settings.conf
Datei:
sudo echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
11. Installieren Sie fail2ban und konfigurieren Sie es, um SSH zu schützen
Fail2ban behält die Protokolldateien für konfigurierte Dienste wie SSH im Auge und blockiert die IP-Adressen böswilliger Benutzer nach einer festgelegten Anzahl von Versuchen für einen festgelegten Zeitraum daran, sich mit Ihrem Server zu verbinden.
Wenn ein Angreifer mehr als 5 fehlgeschlagene Versuche innerhalb von drei Stunden unternimmt, wird seine IP-Adresse beispielsweise für 12 Stunden gesperrt.
Fail2ban kann so konfiguriert werden, dass es auch andere Dienste schützt, z. B. Websites, die vom Nginx-Webserver oder Apache-Webserver betrieben werden.
Wie geht das?
Sie können unserer detaillierten Anleitung zur Verwendung von Fail2Ban folgen.
12. Konfigurieren Sie automatische Sicherheitsupdates (für Red Hat und CentOS)
Wie bereits erwähnt, kann ein veralteter Dienst mit einem Exploit einem Angreifer Zugang zu Ihrem Server verschaffen, ohne sich überhaupt anmelden zu müssen, wenn die Schwachstelle schwerwiegend genug ist! Es ist wichtig, dass Sicherheitsupdates schnell angewendet werden, um dieses Risiko zu verringern.
Wie geht das?
Bei einer standardmäßigen Ubuntu-Serverinstallation sind automatische Sicherheitsupdates aktiviert, sodass bezüglich Updates keine Maßnahmen erforderlich sind.
Um automatische Updates auf CentOS/Red Hat zu konfigurieren, installieren Sie eine Anwendung namens dnf-automatic und aktivieren mit den folgenden Befehlen einen Timer dafür:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
Sie können den Timer überprüfen, indem Sie Folgendes ausführen:
sudo systemctl status dnf-automatic.timer
Suchen Sie unter der Zeile „Loaded:“ nach „loaded“ und unter der Zeile „Active:“ nach „active“.
Abhängig von Ihrem persönlichen Geschmack und den üblichen Einstellungen Ihrer Server können mehr oder weniger Schritte erforderlich sein.
Bonusskript:Die ersten 10 Sekunden auf einem Linux-Server
Wie versprochen, hier ist das Skript, das ich geschrieben habe, das alle oben genannten Schritte ausführt, nachdem Sie einen Nicht-Root-Benutzer eingerichtet und für die schlüsselbasierte Authentifizierung konfiguriert haben.
Das Skript kann sowohl auf Ubuntu 20.04 als auch auf CentOS/Red Hat 8 ausgeführt werden.
Bitte beachten Sie, dass Sie zufällig aus dem Internet heruntergeladene Shell-Skripte nicht blind ausführen sollten, egal wie sehr Sie der Quelle des Skripts vertrauen. Sie müssen das Skript lesen und versuchen zu verstehen, was es tut.
Das gesamte Skript ist Open Source und für jedermann verfügbar und kann hier eingesehen werden. Sie können das Bash-Skript herunterladen, lesen und dann ausführen.
Hier ist ein Screenshot nach einem Lauf auf dem Ubuntu 20.04-Server.
Sehen Sie, wie einfach Sie einige grundlegende Schritte ausführen können, um Ihre neuen Server-Builds in CentOS, Red Hat oder Ubuntu zu sichern, indem Sie nur ein Skript ausführen!
Sie können auch gerne Feedback zum Skript geben oder Funktionen anfordern.
Schlussfolgerung
Dies sind nur einige der sehr grundlegenden Sicherheitsprüfungen, die Sie jedoch nach der Installation Ihres Linux-Servers durchführen müssen.
Diese Dinge manuell auf mehreren Servern zu erledigen, kann schmerzhaft und unnötig zeitaufwändig sein. Hier können Sie Skripting nutzen und mein Skript „Die ersten 10 Sekunden auf einem Linux-Server“ verwenden oder Ihr eigenes erstellen.
Dies sind einige meiner Empfehlungen. Und du? Haben Sie etwas zu dieser Liste hinzuzufügen? Geben Sie Ihren Vorschlag im Kommentarbereich an.
Autor Ted LeRoy ist ein Enterprise Security Architect, der Unternehmen eine Vielzahl von Informationen und Anleitungen zur physischen Sicherheit bereitstellt.