
, 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 и , aber am beliebtesten ist OpenSSH. Installation des OpenSSH-Clients unter Ubuntu:
sudo apt install openssh-clientServerinstallation:
sudo apt install openssh-serverStarten des SSH-Daemons (sshd) auf dem Ubuntu-Server:
sudo systemctl start sshdStarten 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 .
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_keysvim /home/user_name/.ssh/authorized_keysLegen Sie abschließend die richtigen Berechtigungen für die Datei fest:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keysund ändern Sie den Besitzer auf diesen Benutzer:
chown -R username:username /home/username/.sshAuf der Clientseite müssen Sie den Speicherort des geheimen Schlüssels für die Authentifizierung angeben:
ssh-add DIR_PATH/keylocationNun können Sie sich mit diesem Schlüssel unter dem Benutzernamen am Server anmelden:
ssh [username]@hostnameNach der Autorisierung können Sie den Befehl scp zum Kopieren von Dateien verwenden, das Dienstprogramm 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.confNachdem 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.confAnweisungen zum Aktivieren der Zwei-Faktor-Authentifizierung über SSH finden Sie unter .
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 () und mit CentOS/Red Hat - .
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 --permanentNach 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 firewalldUnter Ubuntu verwenden wir den folgenden Befehl:
sudo ufw enable
Fail2Ban
Service 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 fail2banInstallation auf Ubuntu und Debian:
sudo apt install fail2banStart:
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 und schalte den Timer ein:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerTimer-Ü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 und 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 (Sicherheit durch Dunkelheit). Der Grund dafür ist, dass diese Technik dem Grundlegenden widerspricht . Daher beispielsweise das US-amerikanische National Institute of Standards and Technology in 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 . Dies wird auch durch den Parameter angezeigt -p <port> в . SSH-Client und -Programme 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 и 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! 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 🙂
Source: habr.com
