Schutz für Linux-Server. Was ist zuerst zu tun?

Schutz für Linux-Server. Was ist zuerst zu tun?
Habib M'henni/Wikimedia Commons, CC BY-SA

Heutzutage ist die Einrichtung eines Servers auf einem Hosting eine Sache von ein paar Minuten und ein paar Mausklicks. Doch gleich nach dem Start findet er sich in einer feindseligen Umgebung wieder, denn er ist dem gesamten Internet gegenüber aufgeschlossen wie ein unschuldiges Mädchen in einer Rocker-Disco. Scanner werden es schnell finden und Tausende von automatisch skriptgesteuerten Bots erkennen, die das Netzwerk nach Schwachstellen und Fehlkonfigurationen durchsuchen. Es gibt einige Dinge, die Sie direkt nach dem Start tun sollten, um einen grundlegenden Schutz zu gewährleisten.

Inhalt

Nicht-Root-Benutzer

Der erste Schritt besteht darin, einen Nicht-Root-Benutzer für sich selbst zu erstellen. Der Punkt ist, dass der Benutzer root absolute Privilegien im System, und wenn Sie ihm die Fernverwaltung erlauben, erledigen Sie die halbe Arbeit für den Hacker und hinterlassen einen gültigen Benutzernamen für ihn.

Daher müssen Sie einen weiteren Benutzer erstellen und die Remoteverwaltung über SSH für Root deaktivieren.

Durch den Befehl wird ein neuer Benutzer gestartet useradd:

useradd [options] <username>

Dann wird mit dem Befehl ein Passwort dafür hinzugefügt passwd:

passwd <username>

Schließlich muss dieser Benutzer einer Gruppe hinzugefügt werden, die das Recht hat, erhöhte Befehle auszuführen sudo. Je nach Linux-Distribution kann es sich hierbei um unterschiedliche Gruppen handeln. In CentOS und Red Hat wird der Benutzer beispielsweise zur Gruppe hinzugefügt wheel:

usermod -aG wheel <username>

In Ubuntu wird es der Gruppe hinzugefügt sudo:

usermod -aG sudo <username>

Schlüssel statt SSH-Passwörter

Brute Force oder Passwortlecks sind ein Standard-Angriffsvektor, daher ist es am besten, die Passwortauthentifizierung in SSH (Secure Shell) zu deaktivieren und stattdessen die Schlüsselauthentifizierung zu verwenden.

Es gibt verschiedene Programme zur Implementierung des SSH-Protokolls, wie z lsch и Fallbär, aber am beliebtesten ist OpenSSH. Installation des OpenSSH-Clients unter Ubuntu:

sudo apt install openssh-client

Serverinstallation:

sudo apt install openssh-server

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

sudo systemctl start sshd

Starten Sie den Daemon automatisch bei jedem Start:

sudo systemctl enable sshd

Es ist zu beachten, dass der Serverteil von OpenSSH den Clientteil umfasst. Das heißt, durch openssh-server Sie können eine Verbindung zu anderen Servern herstellen. Darüber hinaus können Sie von Ihrem Client-Rechner aus einen SSH-Tunnel von einem Remote-Server zu einem Drittanbieter-Host starten, und der Drittanbieter-Host betrachtet dann den Remote-Server als Quelle der Anfragen. Eine sehr praktische Funktion zum Maskieren Ihres Systems. Einzelheiten finden Sie im Artikel „Praxistipps, Beispiele und SSH-Tunnel“.

Auf einem Client-Rechner macht es in der Regel keinen Sinn, einen vollwertigen Server zu installieren, um die Möglichkeit einer Remote-Verbindung zu einem Rechner zu verhindern (aus Sicherheitsgründen).

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

ssh-keygen -t rsa

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

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

Erstellen Sie dann unter Root ein SSH-Verzeichnis auf dem Server im Home-Verzeichnis des Benutzers und fügen Sie der Datei den öffentlichen SSH-Schlüssel hinzu authorized_keys, mit einem Texteditor wie Vim:

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

vim /home/user_name/.ssh/authorized_keys

Legen Sie abschließend die richtigen Berechtigungen für die Datei fest:

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

und ändern Sie den Besitzer auf diesen Benutzer:

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

Auf der Clientseite müssen Sie den Speicherort des geheimen Schlüssels für die Authentifizierung angeben:

ssh-add DIR_PATH/keylocation

Nun können Sie sich mit diesem Schlüssel unter dem Benutzernamen am Server anmelden:

ssh [username]@hostname

Nach der Autorisierung können Sie den Befehl scp zum Kopieren von Dateien verwenden, das Dienstprogramm sshfs um ein Dateisystem oder Verzeichnisse remote bereitzustellen.

Es ist ratsam, mehrere Sicherungskopien des privaten Schlüssels zu erstellen, denn wenn Sie die Passwortauthentifizierung deaktivieren und verlieren, haben Sie überhaupt keine Möglichkeit, sich bei Ihrem eigenen Server anzumelden.

Wie oben erwähnt, müssen Sie in SSH die Authentifizierung für Root deaktivieren (aus diesem Grund haben wir einen neuen Benutzer erstellt).

Auf CentOS/Red Hat finden wir die Zeile PermitRootLogin yes in der Konfigurationsdatei /etc/ssh/sshd_config und ändere es:

PermitRootLogin no

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

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

Nachdem Sie überprüft haben, dass sich der neue Benutzer mit seinem Schlüssel authentifiziert, können Sie die Passwortauthentifizierung deaktivieren, um das Risiko von Passwortlecks oder Brute-Force-Angriffen auszuschließen. Um nun auf den Server zuzugreifen, muss ein Angreifer einen privaten Schlüssel erhalten.

Auf CentOS/Red Hat finden wir die Zeile PasswordAuthentication yes in der Konfigurationsdatei /etc/ssh/sshd_config und ändere es so:

PasswordAuthentication no

Unter Ubuntu fügen Sie die Zeile hinzu PasswordAuthentication no einordnen 10-my-sshd-settings.conf:

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

Anweisungen zum Aktivieren der Zwei-Faktor-Authentifizierung über SSH finden Sie unter hier.

Firewall

Die Firewall stellt sicher, dass nur der Datenverkehr auf den Ports, die Sie direkt zulassen, zum Server geleitet wird. Dies schützt vor der Ausnutzung von Ports, die versehentlich mit anderen Diensten aktiviert wurden, was die Angriffsfläche erheblich verringert.

Bevor Sie eine Firewall installieren, müssen Sie sicherstellen, dass SSH in der Ausschlussliste enthalten ist und nicht blockiert wird. Andernfalls können wir nach dem Starten der Firewall keine Verbindung zum Server herstellen.

Die Ubuntu-Distribution wird mit Uncomplicated Firewall geliefert (ufw) und mit CentOS/Red Hat - Feuerland.

SSH in der Firewall unter Ubuntu zulassen:

sudo ufw allow ssh

Verwenden Sie unter CentOS/Red Hat den Befehl firewall-cmd:

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

Nach diesem Vorgang können Sie die Firewall starten.

Starten Sie unter CentOS/Red Hat den systemd-Dienst für firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Unter Ubuntu verwenden wir den folgenden Befehl:

sudo ufw enable

Fail2Ban

Service Fail2Ban analysiert Protokolle auf dem Server und zählt die Anzahl der Zugriffsversuche von jeder IP-Adresse. Die Einstellungen legen die Regeln fest, wie viele Zugriffsversuche für einen bestimmten Zeitraum erlaubt sind – danach wird diese IP-Adresse für einen bestimmten Zeitraum gesperrt. Lassen Sie uns beispielsweise 5 fehlgeschlagene SSH-Authentifizierungsversuche innerhalb von 2 Stunden zulassen und dann die angegebene IP-Adresse für 12 Stunden blockieren.

Installation von Fail2Ban unter CentOS und Red Hat:

sudo yum install fail2ban

Installation auf Ubuntu und Debian:

sudo apt install fail2ban

Start:

systemctl start fail2ban
systemctl enable fail2ban

Das Programm verfügt über zwei Konfigurationsdateien: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Verbotseinschränkungen werden in der zweiten Datei angegeben.

Jail für SSH ist standardmäßig mit den Standardeinstellungen aktiviert (5 Versuche, Intervall 10 Minuten, Sperre für 10 Minuten).

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

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

Automatische Sicherheitsupdates

Wie Sie wissen, werden in allen Programmen ständig neue Schwachstellen gefunden. Nach der Veröffentlichung der Informationen werden Exploits zu beliebten Exploit-Paketen hinzugefügt, die von Hackern und Teenagern massiv genutzt werden, wenn sie alle Server hintereinander scannen. Daher ist es sehr wichtig, Sicherheitsupdates zu installieren, sobald sie erscheinen.

Auf dem Ubuntu-Server sind automatische Sicherheitsupdates standardmäßig aktiviert, sodass keine weiteren Maßnahmen erforderlich sind.

Unter CentOS/Red Hat müssen Sie die Anwendung installieren dnf-automatisch und schalte den Timer ein:

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

Timer-Überprüfung:

sudo systemctl status dnf-automatic.timer

Ändern der Standardports

SSH wurde 1995 entwickelt, um Telnet (Port 23) und FTP (Port 21) zu ersetzen, so der Autor des Programms, Tatu Iltonen Standardmäßig ist Port 22 ausgewähltund wurde von der IANA genehmigt.

Natürlich wissen alle Angreifer, auf welchem ​​Port SSH läuft – und scannen ihn zusammen mit den übrigen Standard-Ports, um die Softwareversion herauszufinden, Standard-Root-Passwörter zu überprüfen und so weiter.

Das mehrfache Ändern von Standardports – Verschleierung – reduziert die Menge an Müllverkehr, die Größe der Protokolle und die Belastung des Servers und verringert auch die Angriffsfläche. Obwohl einige kritisieren diese Methode des „Schutzes durch Unklarheit“ (Sicherheit durch Dunkelheit). Der Grund dafür ist, dass diese Technik dem Grundlegenden widerspricht architektonischer Schutz. Daher beispielsweise das US-amerikanische National Institute of Standards and Technology in „Leitfaden zur Serversicherheit“ weist auf die Notwendigkeit einer offenen Serverarchitektur hin: „Die Sicherheit eines Systems sollte nicht von der Geheimhaltung der Implementierung seiner Komponenten abhängen“, heißt es in dem Dokument.

Theoretisch verstößt die Änderung der Standardports gegen die Praxis der offenen Architektur. In der Praxis wird die Menge an bösartigem Datenverkehr jedoch tatsächlich reduziert, sodass es sich hierbei um eine einfache und wirksame Maßnahme handelt.

Die Portnummer kann durch Ändern der Direktive konfiguriert werden Port 22 in der Konfigurationsdatei / etc / ssh / sshd_config. Dies wird auch durch den Parameter angezeigt -p <port> в sshd. SSH-Client und -Programme Sftp unterstützen auch die Option -p <port>.

Parameter -p <port> kann verwendet werden, um die Portnummer anzugeben, wenn eine Verbindung mit dem Befehl hergestellt wird ssh unter Linux. IN Sftp и scp Parameter verwendet wird -P <port> (Großbuchstabe P). Befehlszeilenanweisungen überschreiben alle Werte in Konfigurationsdateien.

Bei vielen Servern können fast alle dieser Aktionen zum Schutz des Linux-Servers in einem Skript automatisiert werden. Wenn jedoch nur ein Server vorhanden ist, ist es besser, den Prozess manuell zu steuern.

Über die Rechte der Werbung

Bestellen und gleich loslegen! Erstellung von VDS jede Konfiguration und mit jedem Betriebssystem innerhalb einer Minute. Mit der maximalen Konfiguration können Sie das Beste aus sich herausholen – 128 CPU-Kerne, 512 GB RAM, 4000 GB NVMe. Episch 🙂

Schutz für Linux-Server. Was ist zuerst zu tun?

Source: habr.com