Schutz eines Linux-Servers. Was man zuerst tun sollte

Schutz eines Linux-Servers. Was man zuerst tun sollte
Habib M’henni / Wikimedia Commons, CC BY-SA

Heutzutage einen Server bei einem Hosting-Anbieter einzurichten, dauert nur wenige Minuten und ein paar Mausklicks. Doch gleich nach dem Start gelangt er in eine feindliche Umgebung, da er für das gesamte Internet sichtbar ist, wie ein unschuldiges Mädchen auf einer Rock-Disco. Scanner werden ihn schnell aufspüren und Tausende von automatisierten Bots entdecken, die im Netz nach Schwachstellen und falschen Konfigurationen suchen. Es gibt einige Dinge, die man sofort nach dem Start tun sollte, um einen grundlegenden Schutz zu gewährleisten.

Inhalt

Nicht-Root-Nutzer

Zuerst sollte man einen Nicht-Root-Nutzer anlegen. Der Grund ist, dass der Benutzer root absolute Privilegien im System hat und, wenn man ihm die entfernte Administration erlaubt, man dem Hacker die halbe Arbeit abnimmt, indem man ihm einen gültigen Benutzernamen überlässt.

Daher sollte ein anderer Nutzer angelegt werden, und für den Root-Nutzer sollte die entfernte Administration über SSH deaktiviert werden.

Ein neuer Benutzer wird mit dem Befehl useradd:

useradd [options]

Dann wird ein Passwort für diesen Benutzer mit dem Befehl passwd:

passwd

Zunächst muss dieser Benutzer einer Gruppe hinzugefügt werden, die berechtigt ist, privilegierte Befehle auszuführen. sudoJe nach Linux-Distribution können dies unterschiedliche Gruppen sein. Beispielsweise wird der Benutzer in CentOS und Red Hat zur Gruppe hinzugefügt. wheel:

usermod -aG wheel <username>

In Ubuntu wird er der Gruppe hinzugefügt. sudo:

usermod -aG sudo <username>

SSH-Schlüssel anstelle von Passwörtern

Brute-Force-Angriffe oder Passwortlecks sind gängige Angriffsvektoren. Daher ist es besser, die Authentifizierung per Passwort in SSH (Secure Shell) zu deaktivieren und stattdessen die Authentifizierung per Schlüssel zu verwenden.

Es gibt verschiedene Programme zur Implementierung des SSH-Protokolls, wie zum Beispiel lsh und Dropbear, aber das beliebteste ist OpenSSH. So installieren Sie den OpenSSH-Client auf Ubuntu:

sudo apt install openssh-client

Installation auf dem Server:

sudo apt install openssh-server

Starten des SSH-Daemons (sshd) auf dem Server unter Ubuntu:

sudo systemctl start sshd

Automatischer Start des Daemons bei jeder Systemstart:

sudo systemctl enable sshd

Es ist zu beachten, dass die Serverkomponente von OpenSSH auch den Client enthält. Das heißt, über openssh-server Sie können sich mit anderen Servern verbinden. Außerdem können Sie von Ihrem Client-PC aus ein SSH-Tunnel zu einem externen Host auf dem entfernten Server starten, wodurch der externe Host den entfernten Server als Quelle für Anfragen betrachtet. Eine sehr nützliche Funktion zur Verschleierung Ihres Systems. Weitere Informationen finden Sie im Artikel. Praktische Tipps, Beispiele und SSH-Tunnel.

Es ist in der Regel nicht sinnvoll, einen vollständigen Server auf dem Client-PC zu installieren, um die Möglichkeit des Remote-Zugriffs auf den Computer (aus Sicherheitsgründen) zu vermeiden.

Für den neuen Benutzer müssen zunächst die SSH-Schlüssel auf dem Computer generiert werden, von dem aus Sie auf den Server zugreifen werden:

ssh-keygen -t rsa

Der öffentliche Schlüssel wird in einer Datei gespeichert .pub und sieht aus wie eine Zeichenfolge zufälliger Symbole, die mit ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Erstellen Sie dann als Root auf dem Server ein SSH-Verzeichnis im Home-Verzeichnis des Benutzers und fügen Sie den öffentlichen SSH-Schlüssel in die Datei ein. authorized_keys, indem Sie einen Texteditor wie Vim verwenden:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Schließlich die richtigen Berechtigungen für die Datei setzen:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

und den Eigentümer auf diesen Benutzer ändern:

chown -R username:username /home/username/.ssh

Auf der Clientseite muss der Speicherort des privaten Schlüssels für die Authentifizierung angegeben werden:

ssh-add DIR_PATH/keylocation

Jetzt können Sie sich als Benutzer mit diesem Schlüssel auf dem Server einloggen:

ssh [username]@hostname

Nach der Authentifizierung können Sie den Befehl scp zum Kopieren von Dateien verwenden, sowie das Dienstprogramm sshfs zum Entfernen von Dateisystemen oder Verzeichnissen.

Es ist ratsam, mehrere Sicherungskopien des privaten Schlüssels zu erstellen, denn wenn Sie die Passwortauthentifizierung deaktivieren und ihn verlieren, haben Sie keine Möglichkeit mehr, auf Ihren eigenen Server zuzugreifen.

Wie oben erwähnt, muss die Authentifizierung für den Root-Benutzer in SSH deaktiviert werden (aus diesem Grund haben wir einen neuen Benutzer erstellt).

Auf CentOS/Red Hat suchen Sie die Zeile PermitRootLogin yes in der Konfigurationsdatei /etc/ssh/sshd_config und ändern Sie sie:

PermitRootLogin no

Auf Ubuntu fügen Sie die Zeile hinzu PermitRootLogin no in die Konfigurationsdatei 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Nachdem überprüft wurde, dass der neue Benutzer sich mit seinem Schlüssel authentifiziert, kann die Passwortauthentifizierung deaktiviert werden, um das Risiko eines Lecks oder Brute-Force-Angriffs auszuschließen. Nun benötigt ein Angreifer, um auf den Server zuzugreifen, den privaten Schlüssel.

Auf CentOS/Red Hat suchen Sie die Zeile PasswordAuthentication yes in der Konfigurationsdatei /etc/ssh/sshd_config und ändern es wie folgt:

PasswordAuthentication no

Auf Ubuntu fügen Sie die Zeile hinzu PasswordAuthentication no in die Datei 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Die Anleitung zur Einrichtung der Zwei-Faktor-Authentifizierung über SSH finden Sie unter: hier.

Firewall

Die Firewall gewährleistet, dass nur der Verkehr zu den Ports auf dem Server gelangt, die Sie direkt erlaubt haben. Dies schützt vor der Ausnutzung von Ports, die unbeabsichtigt mit anderen Diensten aktiviert wurden, und verringert somit die Angriffsfläche erheblich.

Vor der Installation der Firewall sollte sichergestellt werden, dass SSH auf der Ausnahmeliste steht und nicht blockiert wird. Andernfalls können wir nach dem Start der Firewall nicht mehr auf den Server zugreifen.

Mit der Ubuntu-Distribution wird die Unkomplizierte Firewall (ufw), und mit CentOS/Red Hat — firewalld.

SSH in der Firewall auf Ubuntu ermöglichen:

sudo ufw allow ssh

Unter CentOS/Red Hat verwenden wir den Befehl firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Nach diesem Vorgang kann die Firewall gestartet werden.

Auf CentOS/Red Hat starten wir den Dienst systemd für firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Auf Ubuntu verwenden wir den folgenden Befehl:

sudo ufw enable

Fail2Ban

Dienste Fail2Ban analysiert die Protokolle auf dem Server und zählt die Anzahl der Zugriffsversuche von jeder IP-Adresse. In den Einstellungen sind Regeln festgelegt, wie viele Zugriffsversuche in einem bestimmten Zeitraum erlaubt sind – danach wird die betreffende IP-Adresse für einen festgelegten Zeitraum gesperrt. Beispielsweise erlauben wir 5 fehlgeschlagene SSH-Anmeldeversuche innerhalb von 2 Stunden, nach denen die IP-Adresse für 12 Stunden gesperrt wird.

Installation von Fail2Ban auf CentOS und Red Hat:

sudo yum install fail2ban

Installation auf Ubuntu und Debian:

sudo apt install fail2ban

Start:

systemctl start fail2ban
systemctl enable fail2ban

In der Software gibt es zwei Konfigurationsdateien: /etc/fail2ban/fail2ban.conf und /etc/fail2ban/jail.conf. Die Einschränkungen für das Sperren werden in der zweiten Datei angegeben.

Die Jail für SSH ist standardmäßig mit den Default-Einstellungen (5 Versuche, Zeitraum 10 Minuten, Sperre für 10 Minuten) aktiviert.

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5

Neben SSH kann Fail2Ban auch andere Dienste auf dem Webserver nginx oder Apache schützen.

Automatische Sicherheitsupdates

Wie bekannt, weisen alle Programme ständig neue Sicherheitsanfälligkeiten auf. Nach der Veröffentlichung von Informationen werden Exploits in populäre Exploit-Packs aufgenommen, die von Hackern und Jugendlichen beim Scannen aller Server genutzt werden. Daher ist es sehr wichtig, Sicherheitsupdates sofort zu installieren, sobald sie verfügbar sind.

Auf einem standardmäßig konfigurierten Ubuntu-Server sind automatische Sicherheitsupdates aktiviert, sodass keine zusätzlichen Maßnahmen erforderlich sind.

Auf CentOS/Red Hat müssen Sie die Anwendung dnf-automatic installieren und den Timer aktivieren:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Status des Timers überprüfen:

sudo systemctl status dnf-automatic.timer

Ändern der Standard-Ports

SSH wurde 1995 entwickelt, um telnet (Port 23) und ftp (Port 21) zu ersetzen, weshalb der Autor des Programms, Tatu Ylönen, den Standardport 22 wählte,und dieser wurde von der IANA genehmigt.

Natürlich sind alle Angreifer sich bewusst, auf welchem Port SSH läuft – und scannen ihn zusammen mit anderen Standardports, um die Softwareversion zu ermitteln und Standardpasswörter des Root-Benutzers zu überprüfen.

Die Änderung der Standardports — Obfuskation — reduziert erheblich das Aufkommen von Junk-Traffic, die Loggröße und die Serverlast sowie die Angriffsfläche. Während einige diese Methode als "Sicherheit durch Unklarheit" kritisieren, (security through obscurity). Der Grund dafür liegt darin, dass diese Technik im Widerspruch zu grundlegenden architektonischen Schutzmaßnahmen steht.So empfiehlt beispielsweise das National Institute of Standards and Technology der USA in "Server Security Guidelines" die Notwendigkeit einer offenen Serverarchitektur: "Die Sicherheit eines Systems sollte sich nicht auf die Geheimhaltung seiner Komponenten stützen", heißt es in dem Dokument.

Theoretisch steht die Änderung der Standardports im Widerspruch zur Praxis einer offenen Architektur. In der Praxis wird jedoch die Menge an schädlichem Traffic tatsächlich reduziert, sodass dies eine einfache und effektive Maßnahme darstellt.

Die Portnummer kann angepasst werden, indem die Direktive Port 22 in der Konfigurationsdatei geändert wird. /etc/ssh/sshd_configSie kann auch mit dem Parameter -p in sshdangegeben werden. Der SSH-Client und Programme sftp unterstützen ebenfalls den Parameter, -p.

Parameter -p um die Portnummer beim Verbinden über den Befehl ssh in Linux anzugeben. In sftp und scp wird der Parameter verwendet. -P (großes P). Die Angabe in der Befehlszeile überschreibt jeden Wert in den Konfigurationsdateien.

Wenn es viele Server gibt, können fast alle diese Maßnahmen zum Schutz von Linux-Servern in einem Skript automatisiert werden. Bei einem einzelnen Server ist es jedoch besser, den Prozess manuell zu kontrollieren.

Im Auftrag der Werbung

Bestellen Sie und legen Sie sofort los! VDS-Erstellung in jeder Konfiguration und mit jedem Betriebssystem in weniger als einer Minute. Die maximale Konfiguration lässt sich richtig ausreizen – 128 CPU-Kerne, 512 GB RAM, 4000 GB NVMe. Episch 🙂

Schutz eines Linux-Servers. Was man zuerst tun sollte

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster