GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So verbessern Sie die SSH-Sicherheit unter Ubuntu 18.04

Der SSH-Dienst ist der Hauptzugangspunkt zu Ihrem Cloud-Server und gleichzeitig einer der Dienste, die Angriffen am stärksten ausgesetzt sind. Dieser Leitfaden hilft Ihnen, die Sicherheit des Dienstes dank verschiedener Tricks und Techniken zu verbessern.

Überwachungsport ändern

Der Standardport zum Abhören der SSH-Verbindung ist 22:Das Ändern dieser Einstellung ermöglicht es, den Dienst zu clouden und die Sicherheit der Verbindung zu erhöhen .

Um Interferenzen mit anderen bestehenden Diensten auf dem Rechner zu vermeiden, empfiehlt es sich, mit dem netstat-Befehl zu überprüfen, welche Ports derzeit verwendet werden:

$ netstat -n -l
    
Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address State
tcp        0 0 127.0.0.1:3306          0.0.0.0:* LISTEN
tcp        0 0 127.0.0.53:53           0.0.0.0:* LISTEN
tcp        0 0 0.0.0.0:22              0.0.0.0:* LISTEN
tcp6       0 0 :::80                   :::* LISTEN
tcp6       0 0 :::22                   :::* LISTEN
udp        0 0 127.0.0.53:53           0.0.0.0:*

Zwingen Sie es durch den an netstat übergebenen -l-Parameter, alle Verbindungen zu drucken, die sich im LISTEN-Zustand befinden. In diesem Beispiel werden die folgenden Ports verwendet:

  • 3306 MySQL-Dienst

  • 22 SSH

  • 80 Apache2 / HTTP

  • 53 DNS

Um Ports zu ändern, bearbeiten Sie einfach die Konfigurationsdatei in / etc / ssh / sshd_config und kommentieren Sie die Port-Direktive aus:

#Port 22

Stellen Sie dann einen neuen Wert ein, möglicherweise hoch, um zu verhindern, dass er von automatischer Port-Scanning-Software abgefangen wird (z. B. 2200, 5574, 1022):

Port 5574

Um die Änderung zu übernehmen, laden Sie den Dienst hoch über:

$ sudo service sshd reload

. Halten Sie die Verbindung aufrecht, indem Sie Reload verwenden, um Fehler zu korrigieren und jeden neuen Zugriff mit einem anderen SSH-Client zu prüfen

Sobald die Änderung übernommen wurde, stellen Sie eine Verbindung zu Ihrem Server her und geben Sie den neuen Port an. Wenn Sie beispielsweise den SSH-Client über die Befehlszeile verwenden:

$ ssh [email protected]<SERVER.IP> -p 5574

Verwendung von Schlüsseln zur Authentifizierung

Der Zugriff über RSA-Schlüssel wird häufig aus Sicherheitsgründen verwendet und ist eine Alternative zur kennwortbasierten Anmeldung. Bei dieser Art der Authentifizierung generiert der Client einen privaten Schlüssel und den zugehörigen öffentlichen Schlüssel, der auf dem Servercomputer installiert wird, um den Client eindeutig zu authentifizieren. .

Um den öffentlichen Schlüssel zu installieren, sollte der Client zuerst das Schlüsselpaar mit dem Befehl ssh-keygen generieren:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file where to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Bevor mit der Generierung fortgefahren wird, fragt ssh-keygen nach einer optionalen Passphrase, die zur Authentifizierung verwendet werden kann. In diesem Beispiel wurde zur Erleichterung des Zugriffs die folgende Datei leer gelassen.

Sobald Sie fertig sind, speichert die Software zwei Dateien im angegebenen :

  • id_rsa:der private Schlüssel des Clients, der nicht mit anderen geteilt werden darf.

  • id_rsa.pub:der gemeinsam nutzbare öffentliche Schlüssel .

Um die Serverumgebung vorzubereiten, erstellen Sie eine Datei mit dem Namen "authorized_keys" im .ssh-Ordner innerhalb des Benutzerordners, den Sie für die Anmeldung verwenden werden:

$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys

Stellen Sie sicher, dass die Datei die oben genannten Berechtigungen hat.

Fahren Sie dann fort, indem Sie den öffentlichen Schlüssel einfügen, der zuvor vom Client-Computer vorbereitet wurde:

$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd [email protected]

Speichern Sie die Datei und laden Sie den SSH-Dienst neu:

$ sudo service sshd reload

An dieser Stelle sollte der Zugriff auf den Server ohne Eingabe eines Passworts möglich sein:

$ ssh [email protected]<SERVER.IP>

Wenn alles richtig funktioniert, deaktivieren Sie den Passwortzugriff von der Servermaschine, indem Sie die Datei /etc/ssh/sshd_config mit den folgenden Parametern ändern:

ChallengeResponseAuthentication no
    PasswordAuthentication no

Denken Sie daran, dass Sie andere öffentliche Schlüssel hinzufügen können, indem Sie sie einfach am Ende der Datei ~ / .ssh /authorized_keys auf dem Server-Rechner speichern.

Einschränkung der Verfügbarkeitszeiten des Dienstes

Eine Strategie zur Reduzierung unerwünschter Zugriffe und Brute-Force-Angriffe besteht darin, die Verfügbarkeitszeiten des SSH-Dienstes zu reduzieren. Wenn Sie sicher sind, dass Sie sich zu bestimmten Zeiten (z. B. von 23:00 Uhr bis 08:00 Uhr des Folgetages) nicht mit dem Server verbinden müssen, stellen Sie einen automatischen Zeitplan ein, um den Verbindungsport zu blockieren.

Verwenden Sie dazu die Standard-Firewall namens iptables, aber bevor Sie mit der Konfiguration fortfahren, denken Sie daran, dass iptables naturgemäß die eingegebene Konfiguration nicht speichert.

Um die Konfiguration schneller zu speichern und zu laden, verwenden Sie das Paket iptables-persistent, das die gespeicherte Konfiguration beim Systemstart neu lädt.

Dann fahren Sie mit der Installation des Pakets fort:

$ sudo apt-get install iptables-persistent

Geben Sie nach Abschluss der Installation eine "Kette" ein, um den SSH-Dienst zu blockieren:

$ sudo iptables -N chain-ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j chain-ssh

Auf diese Weise werden alle für Port 22 bestimmten Verbindungen (wenn Ihr SSH-Dienst einen anderen Port verwendet, ändern Sie diesen Wert) durch die neu erstellte Kette "chain-ssh" geleitet.

Speichern Sie die aktuelle Konfiguration (die von iptables-persistent geladen wird) mit dem Befehl:

$ sudo iptables-save > /etc/iptables/rules.v4

Erstellen Sie dann einen Zeitplan für das Eingeben und Löschen der Regel in der Kette, indem Sie die Crontab wie folgt ändern:

$ sudo crontab -e
    
# m h  dom mon dow   command
0 23   * * *   iptables -A chain-ssh -j DROP
0 8    * * *   iptables -F chain-ssh

Wie Sie sehen können, wird bei der ersten Operation eine DROP-Regel der Verbindungen um 23:00 Uhr hinzugefügt, während die zweite Operation die Kette um 08:00 Uhr leert, um den Dienst wiederherzustellen.

Speichern Sie die Datei, um die Änderungen zu übernehmen.


Linux
  1. So richten Sie die SSH-Anmeldung ohne Passwort ein

  2. So generieren Sie ein SSH-Schlüsselpaar (mit Beispielen)

  3. So richten Sie SSH-Schlüssel ein

  4. So richten Sie SSH-Schlüssel unter Ubuntu 16.04 ein

  5. So richten Sie SSH-Schlüssel unter Ubuntu 18.04 ein

So erstellen Sie eine SSH-Schlüssel-Passphrase unter Linux

So aktivieren Sie den SSH-Server unter Ubuntu 22.04

So ändern Sie den SSH-Port in Ubuntu

So fügen Sie dem Server einen öffentlichen SSH-Schlüssel hinzu

Wie ändere ich den SSH-Port auf Ubuntu?

So installieren Sie Ansible unter Ubuntu 18.04