
, 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 und , aber das beliebteste ist OpenSSH. So installieren Sie den OpenSSH-Client auf Ubuntu:
sudo apt install openssh-clientInstallation auf dem Server:
sudo apt install openssh-serverStarten des SSH-Daemons (sshd) auf dem Server unter Ubuntu:
sudo systemctl start sshdAutomatischer 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. .
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_keysvim /home/user_name/.ssh/authorized_keysSchließlich die richtigen Berechtigungen für die Datei setzen:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keysund den Eigentümer auf diesen Benutzer ändern:
chown -R username:username /home/username/.sshAuf der Clientseite muss der Speicherort des privaten Schlüssels für die Authentifizierung angegeben werden:
ssh-add DIR_PATH/keylocationJetzt können Sie sich als Benutzer mit diesem Schlüssel auf dem Server einloggen:
ssh [username]@hostnameNach der Authentifizierung können Sie den Befehl scp zum Kopieren von Dateien verwenden, sowie das Dienstprogramm 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.confNachdem ü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.confDie Anleitung zur Einrichtung der Zwei-Faktor-Authentifizierung über SSH finden Sie unter: .
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 (), und mit CentOS/Red Hat — .
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 --permanentNach 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 firewalldAuf Ubuntu verwenden wir den folgenden Befehl:
sudo ufw enable
Fail2Ban
Dienste 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 fail2banInstallation auf Ubuntu und Debian:
sudo apt install fail2banStart:
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 installieren und den Timer aktivieren:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerStatus 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, 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 (security through obscurity). Der Grund dafür liegt darin, dass diese Technik im Widerspruch zu grundlegenden So empfiehlt beispielsweise das National Institute of Standards and Technology der USA in 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. Sie kann auch mit dem Parameter -p in angegeben werden. Der SSH-Client und Programme unterstützen ebenfalls den Parameter, -p.
Parameter -p um die Portnummer beim Verbinden über den Befehl ssh in Linux anzugeben. In 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! 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 🙂
Quelle: habr.com
