Konfigurieren Sie OpenSSH Server unter Linux mit maximaler Sicherheit

SSH oder auch bekannt als Secure Shell , ist ein Protokoll und der Name des Programms, das es implementiert. SSH ist weithin bekannt als sicheres Protokoll für die Fernverwaltung von Servern, Routern, Switches und einer langen Liste von Computern. Mit dem SSH-Protokoll können Sie den Server oder das Netzwerkgerät vollständig über einen Befehlsinterpreter verwalten. Darüber hinaus können wir den X-Verkehr auch umleiten, um Grafikprogramme über die SSH-Sitzung selbst auszuführen.

Andere grundlegende Eigenschaften von SSH sind, dass es uns ermöglicht, Sicheres Kopieren von Daten, sowohl Dateien als auch Ordner, über das SFTP-Protokoll (SSH FTP), ein von Grund auf neu erstelltes Protokoll, das nichts mit FTPS oder FTPES (FTP über SSL / TLS) zu tun hat. Das SSH-Protokoll ist im Bereich von Netzwerken und Systemen unabdingbar, darüber hinaus können wir es detailliert konfigurieren, um unserem System die höchstmögliche Sicherheit zu geben.

Konfigurieren Sie OpenSSH Server unter Linux mit maximaler Sicherheit

Das SSH-Protokoll bietet Vertraulichkeit (die Daten werden Punkt zu Punkt verschlüsselt), Beglaubigung (wir können uns vor dem SSH-Server auf verschiedene Weise authentifizieren, mit Benutzer / Schlüssel, Kryptografie mit öffentlichem Schlüssel und wir können sogar einen zweiten Authentifizierungsfaktor konfigurieren), Integrität (Ja, die Daten, die von einem böswilligen Benutzer geändert oder geändert werden, können erkannt werden, da HMAC verwendet wird, um die Integrität aller Daten zu überprüfen).

Es gibt zwei Versionen von SSH, Version 1 wird heute nicht empfohlen, tatsächlich wird standardmäßig immer die SSHv2-Version verwendet. Standardmäßig verwendet SSH das TCP-Protokoll der Transportschicht und die Portnummer ist 22, wir können die Portnummer jedoch ändern, um mögliche Bot-Scans an den SSH-Dienst abzuschwächen.

In diesem Handbuch, das wir Ihnen heute vorstellen, zeigen wir Ihnen, wie Sie den OpenSSH-SSH-Server konfigurieren, ein Programm, das für Betriebssysteme auf Basis von Unix und Linux, wie FreeBSD, OpenBSD, Debian, Red Hat Enterprise Linux und viele andere Distributionen. In dieser Anleitung lernen wir nicht nur, die Konfigurationsdatei sshd_config richtig zu konfigurieren, sondern verwenden auch zusätzliche Programme, um dem System die größtmögliche Sicherheit zu geben. In diesem Handbuch werden alle Konfigurationen mit Debian vorgenommen, jedoch können alle Sicherheitsmaßnahmen in jedem Betriebssystem auf Basis von Linux und Unix implementiert werden.

OpenSSH-Installation und -Start

OpenSSH ist das SSH-Server-/Client-Programm, das am häufigsten von Routern, Switches, Servern und vielen anderen Geräten verwendet wird. Dieses Programm ist völlig kostenlos und Open Source. Das Installation dieses SSH-Servers (wenn Sie es nicht bereits standardmäßig installiert haben) ist sehr einfach, wir müssen nur den folgenden Befehl in ein Terminal eingeben:

sudo apt install openssh-server

Nach der Installation müssen wir bestimmte Verzeichnisse und Befehle berücksichtigen, um den SSH-Dienst zu starten, zu stoppen und neu zu starten.

Um das zu bearbeiten Konfiguration des SSH-Servers Wir müssen in der Konsole tun:

sudo nano /etc/ssh/sshd_config

Ein weiteres Verzeichnis, das wir berücksichtigen müssen, ist das der bekannten Hosts, da wir hier auch die kryptografischen RSA / DSA-Schlüssel konfigurieren. Das Verzeichnis, in dem sich die bekannten Hosts und öffentlichen Schlüssel befinden ist wie folgt:

/home/usuario/.ssh/

Dieses Verzeichnis ist standardmäßig versteckt (.ssh) und es gibt ein Verzeichnis für jeden Benutzer, der sich im Betriebssystem befindet und eine Verbindung zu einem Remote-Server herstellt.

So starten Sie den Server:

sudo /etc/init.d/ssh start

So stoppen Sie den Server:

sudo /etc/init.d/ssh stop

So starten Sie den Server neu:

sudo /etc/init.d/ssh restart

Sobald wir den SSH-Server installiert haben, wissen wir, wo sich die Server-Konfigurationsdateien befinden und in welchem ​​Verzeichnis die öffentlichen Schlüssel gespeichert sind, gehen wir mit der Konfiguration von sshd_config über, da es sich um die grundlegende Konfigurationsdatei von OpenSSH handelt.

Sshd_config-Konfiguration für maximale Sicherheit

Ändern Sie den Standardport des SSH-Servers

Standardmäßig verwenden SSH-Server Port 22 für Verbindungen. Es ist ratsam, diese Portnummer zu ändern, um zu verhindern, dass sich Bots oder Cyberkriminelle einloggen, obwohl dies allein keine Sicherheit bietet, können wir von massiven Scans aus dem Internet unbemerkt bleiben. Wenn wir beispielsweise den Port 22445 verwenden möchten, müssen wir Folgendes in die Konfigurationsdatei einfügen:

  • Port 22445

Root-Zugriff auf Remote-Verbindungen blockieren

Standardmäßig kann sich jeder Benutzer des Betriebssystems mit Shell-Berechtigungen beim Server anmelden. Darüber hinaus müssen wir bedenken, dass, wenn wir den Root-Benutzer aktiviert haben, er sich auch lokal oder aus der Ferne mit dem Server verbinden kann, sodass der Angreifer den Benutzernamen nicht „erraten“ muss. Standardmäßig versuchen Bots immer, Port 22 und den Benutzer „root“ anzugreifen.

Indem wir den Root-Benutzer selbst deaktivieren und "sudo" verwenden, um Superuser-Berechtigungen zu erhalten, werden wir dies vermeiden. Darüber hinaus ermöglicht uns OpenSSH auch, die Anmeldung des Root-Benutzers zu deaktivieren, um dem System mehr Sicherheit zu bieten:

  • PermitRootLogin-Nr

Auf diese Weise werden Root-Verbindungen blockiert und verhindert, dass unbefugte Benutzer Brute-Force-Angriffe auf unseren SSH-Server ausführen, um die Anmeldeinformationen des Root-Benutzers zu erraten. Wir haben auch andere Optionen in diesem Abschnitt, wie z. PermitRootLogin ohne Passwort ” wobei die Authentifizierung erlaubt ist, jedoch nicht mit Benutzername und Passwort, sondern mit kryptografischen RSA-Schlüsseln.

Zusätzliche Sicherheitseinstellungen

Es gibt andere empfohlene Konfigurationen, um unerwünschte Verbindungen zu unserem SSH-Server zu vermeiden. Diese Verbindungen sind:

  • AnmeldenGraceTime : Wir legen die Zeit fest, die für die Eingabe des Passworts erforderlich ist, damit der Angreifer nicht „viel nachdenken“ muss.
  • MaxAuthTries : Anzahl der zulässigen Versuche bei der Eingabe des Passworts, bevor die Verbindung getrennt wird.
  • MaxStartups : Anzahl gleichzeitiger Anmeldungen von einer IP, um zu vermeiden, dass Brute Force bei mehreren Sitzungen gleichzeitig verwendet wird.
  • Benutzer zulassen : Es ist eine Benutzer-Whitelist zu erstellen. Mit diesem Parameter können wir die Benutzer konfigurieren, die eine Verbindung herstellen können. Eine sehr restriktive Maßnahme, aber gleichzeitig sehr sicher, da alle Verbindungen der Benutzer blockiert werden, die nicht in der Liste enthalten sind. Die Benutzer, die wir hier haben, können sich verbinden, der Rest nicht.
  • Benutzer verweigern : Ähnlich wie beim vorherigen, aber jetzt erstellen wir eine schwarze Liste. Die Benutzer, die wir hier haben, können keine Verbindung herstellen, und der Rest wird es tun.
  • AllowGroups/DenyUsers : Genau wie oben, aber anstatt eine Black/Whitelist von Benutzern zu erstellen, handelt es sich um Benutzergruppen.

Eine Konfigurationsdatei für sshd_config wäre beispielsweise die folgende:

Port 22445
PermitRootLogin no
LoginGraceTime 30
MaxAuthTries 3
MaxStartups 3
AllowUsers sergio sergio2
DenyUsers adrian adrian2

Eine zusätzliche Sicherheitsmaßnahme ist die Konfiguration der Schlüsselaustauschalgorithmen, der symmetrischen Verschlüsselung und auch der HMAC-Konfiguration für die Integritätsprüfung. Derzeit wird empfohlen, die folgende Konfiguration anzuwenden, um eine sehr hohe Sicherheit zu haben:

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com

Mit dieser Konfiguration haben wir die besten kryptografischen Suiten für den Server, jedoch können alte Clients möglicherweise keine Verbindung herstellen, da sie diese Algorithmen nicht unterstützen. Wir müssen dieses Detail berücksichtigen und testen, welche Algorithmen kompatibel sind und welche nicht.

Wenn wir neue RSA- oder DSA-Schlüssel für Schlüssel mit größerer Bitlänge erstellt haben, müssen wir sie in die Konfigurationsdatei einfügen (oder die vorherigen ersetzen, und müssen somit die Konfigurationsdatei nicht berühren), auf diese Weise erhalten wir zusätzliche Sicherheit, wenn wir beispielsweise RSA-Schlüssel von 4096 Bit oder höher verwenden.

HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

Um neue 4096-Bit-RSA-Schlüssel zu generieren, müssen wir lediglich den folgenden Befehl ausführen:

ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -b 4096

Wenn wir neue ECDSA-Schlüssel (mit einer maximalen Länge von 512 Bit) oder ED25519 generieren möchten, müssen wir die folgenden Befehle eingeben:

ssh-keygen -f /etc/ssh/ssh_host_ecdsa_key -t ecdsa -b 521
ssh-keygen -f /etc/ssh/ssh_host_ed25519_key -t ed25519

Authentifizierung in SSH: Alle Modi im Detail erklärt

In diesem Abschnitt zeigen wir Ihnen die verschiedenen Authentifizierungsmethoden, die wir auf dem Server zur Verfügung haben. Normalerweise haben wir hauptsächlich zwei Methoden: Benutzername und Passwort (etwas, das wir kennen) und auch mit kryptografischen Schlüsseln (etwas, das wir haben). Wir können dem System jedoch zusätzliche Sicherheit bieten, indem wir diese Authentifizierungen beispielsweise mit einem Einmalpasswort kombinieren, das von einer Anwendung wie Google Authenticator oder Latch OTP generiert wird. Darüber hinaus können wir auch das Latch-System bereitstellen, um zu verhindern, dass sich ein Benutzer einloggt, wenn wir den „Latch“ nicht geöffnet haben.

Benutzer und Passwort

Wenn wir die Anmeldung beim Dienst über den Systembenutzernamen und das Kennwort aktivieren möchten, muss die Konfigurationsdatei diese Anweisung enthalten:

  • PasswortAuthentifizierung ja

Andernfalls, wenn wir die Authentifizierung über Benutzername / Passwort verhindern und nur Verbindungen über kryptografische Schlüssel zulassen möchten, müssen wir nein angeben:

  • PasswordAuthentication No.

Dieser Satz betrifft alle Benutzer des Systems. Um nicht ohne Zugriff auf den Server zu bleiben, sollten wir sicherstellen, dass die PubkeyAuthentifizierung -Anweisung wird auf „yes“ gesetzt, um die Anmeldung mit kryptografischen Schlüsseln zu ermöglichen.

Es gibt einen anderen Satz, der sich darauf bezieht, genannt HerausforderungAntwortAuthentifizierung , wenn wir die Konfiguration auf „nein“ setzen, werden keine Verbindungen zugelassen, mit denen die Tastatur interagiert. Wenn wir also beispielsweise ein Einmalpasswort konfiguriert haben, können wir uns nicht beim System anmelden. Wenn wir nur kryptografische Schlüssel verwenden, können Sie es problemlos auf „nein“ setzen.

Öffentlicher SSH-Schlüssel

Um den öffentlichen Schlüsselzugriff auf den Server zu konfigurieren, müssen wir die folgende Anweisung auf „ja“ setzen:

  • PubkeyAuthentication ja

Auf diese Weise aktivieren wir die Konfiguration mit dem öffentlichen SSH-Schlüssel im System, es sind jedoch noch einige Schritte erforderlich, damit wir uns mit diesem Server verbinden können, und zwar den öffentlichen Schlüssel an den Computer selbst weiterzugeben. Dazu müssen wir (vorerst) die Authentifizierung mit Benutzername / Passwort zulassen, sobald wir alle Schritte abgeschlossen haben, können wir die Authentifizierung mit Benutzername und Passwort problemlos verweigern.

Von dem Computer, auf dem wir uns mit kryptografischen Schlüsseln mit dem Server verbinden möchten, müssen wir diese Schlüssel erstellen und an den Server weitergeben. Um RSA-Schlüssel mit 4096 Bit zu erstellen, müssen wir den folgenden Befehl in den SSH-Client einfügen:

ssh-keygen -t rsa -b 4096

Im Assistenten zum Generieren dieser Schlüssel wird uns mitgeteilt, ob wir sie in /home/usuario/.ssh/id_rsa speichern möchten, wir sagen ja. Anschließend können wir dem privaten Schlüssel ein Pass-Through-Passwort hinzufügen. Wenn wir den privaten Schlüssel verlieren, passiert nichts, da keine Verbindung hergestellt werden kann, da immer ein Pass eingegeben werden muss -word, um die Verbindung korrekt herstellen zu können.

Sobald wir den öffentlichen und den privaten Schlüssel auf unserem Computer erstellt haben, müssen wir den öffentlichen Schlüssel an den SSH-Server senden Wo wir eine Verbindung herstellen möchten, seien Sie vorsichtig: der öffentliche Schlüssel.

ssh-copy-id usuario@IP_servidor

Der öffentliche Schlüssel wird automatisch auf diesen Server kopiert, und wir können die Authentifizierung nur mit dem öffentlichen Schlüssel aktivieren und haben uns automatisch registriert. Die von diesem Befehl angebotene Ausgabe sollte in etwa so aussehen:

The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established.
RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '12.34.56.78' (RSA) to the list of known hosts.
user@12.34.56.78's password:
Now try logging into the machine, with "ssh 'user@12.34.56.78'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

In dieser Ausgabe muss der Benutzer bestätigen, dass er die Identität hinzufügen möchte, und die Anmeldeinformationen für das Konto eingeben, das er in diesem Dienst verwenden möchte. Aus diesem Grund ist es wichtig, dass wir weiterhin die Möglichkeit der Authentifizierung mit Benutzername/Passwort auf dem Server beibehalten. Sobald dieser Vorgang abgeschlossen ist, sollten wir uns bei diesem Computer anmelden können, ohne das Passwort einzugeben:

ssh usuario@IP

Denken Sie daran, die Anweisung „PasswordAuthentication no“ so einzustellen, dass der Zugriff über Benutzername und Passwort nicht zulässig ist.

Benutzername und Passwort mit Einmalpasswort (Google Authenticator oder Latch OTP)

In diesem Teil des Handbuchs werden wir uns mit dem üblichen Benutzernamen / Passwort authentifizieren, aber wir müssen auch ein OTP mit Google Authenticator oder Latch OTP verwenden, um in die Sitzung einzutreten. Das heißt, wir stellen dem SSH-Server eine zweistufige Verifizierung zur Verfügung.

Als erstes müssen wir eine Reihe von Abhängigkeiten installieren, die erforderlich sind, um die doppelte Authentifizierung auf unserem SSH-Server zu konfigurieren. Dazu öffnen wir ein Terminal und geben Folgendes ein:

sudo apt install libpam0g-dev make gcc wget ssh

Sobald die Abhängigkeiten in unserem System installiert sind, können wir die Software für die doppelte Authentifizierung herunterladen.

sudo apt install libpam-google-authenticator

Wir haben Google Authenticator bereits in unserem Betriebssystem installiert. Die nächsten Schritte sind die Konfiguration des Tools, um es in unserem SSH verwenden zu können.

Um mit der Konfiguration von Google Authenticator zu beginnen, müssen wir nur das Terminal eingeben:

google-authenticator

HINWEIS: Führen Sie es ohne Root-Berechtigungen (sudo) aus, dh führen Sie es als „normaler“ Benutzer aus. Wenn Sie es als root ausführen, ist Google Auth nur in root selbst verfügbar, und das Deaktivieren in SSH selbst hat keine Auswirkung.

Als nächstes sehen wir einen einfachen Assistenten vom Terminal aus. Als erstes werden wir gefragt, ob unsere Zugriffstoken zeitbasiert sein sollen. Als nächstes sehen wir den privaten Schlüssel, den Verifizierungsschlüssel und die Notfallcodes, wenn wir unser Handy nicht zur Hand haben. Wir müssen alle diese Daten sicher aufbewahren, damit wir bei Verlust des Authentifizierungsschlüssels wieder Zugriff haben.

Dann weisen wir es an, die Änderungen an der Datei in unserem / home-Ordner zu speichern, und es fragt uns, ob jeder Token nur einmal verwendet werden soll, auch wenn dies eine Anmeldung alle 30 Sekunden einschränkt. Um uns vor möglichen MITM-Angriffen zu schützen, wählen wir ja. Schließlich werden wir gefragt, ob wir die Gültigkeitsdauer jedes Codes anstelle von nur 1 Minute und 30 Sekunden verlängern möchten (um Probleme mit der Zeitsynchronisierung zu vermeiden). Um Brute-Force-Angriffe zu vermeiden, können wir die Verbindungen auch alle 3 Sekunden auf 30 beschränken.

Das Scannen des QR-Codes oder die manuelle Eingabe des Codes kann in Programmen wie Google Authenticator, Authy, Latch und einer langen usw. erfolgen. Wir empfehlen die Verwendung von Google Authenticator oder Latch.

Der nächste Schritt, den wir tun müssen, ist die Konfigurationsdatei „sshd“ zu öffnen, um sie anzuweisen, dieses Modul für die Anmeldung zu verwenden. Dazu können wir ein "clear" machen, um das Terminal zu löschen und es einzugeben:

sudo nano /etc/pam.d/sshd

Und wir werden die folgende Zeile am Ende der Datei hinzufügen:

auth required pam_google_authenticator.so

Wir speichern die Änderungen und öffnen die Datei sshd_config mit folgendem Befehl:

sudo nano /etc/ssh/sshd_config

Und wir ändern die Zeile „ChallengeResponseAuthentication no“ in „ChallengeResponseAuthentication yes“.

Wir starten den Server mit „sudo /etc/init.d/ssh restart“ neu und sobald er wieder startet, wird die zweistufige Authentifizierung aktiviert.

Sobald die Anmeldung abgeschlossen ist, werden wir auch nach einem Einmalpasswort gefragt, dem Code, der von unserer mobilen Anwendung generiert wird.

Öffentlicher SSH-Schlüssel mit Einmalpasswort (Google Authenticator oder Latch OTP)

Die Konfiguration auf der Ebene des öffentlichen Schlüssels muss genauso sein wie zuvor, ebenso wie auf der Installations- und Konfigurationsebene des Google Authenticators. Der einzige Unterschied besteht darin, dass in der sshd_config Datei müssen wir so etwas haben:

PasswordAuthentication no
ChallengeResponseAuthentication yes
PubKeyAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive

Und in der Datei /etc/pam.d/sshd müssen wir so etwas haben:

#@include common-auth
auth required pam_google_authenticator.so

Es ist sehr wichtig, ein Rautezeichen (#) zu setzen, um das @include zu kommentieren. Auf diese Weise authentifizieren wir uns korrekt mit dem öffentlichen Schlüssel und dem vom Mobiltelefon generierten OTP-Code. Auf diese Weise weisen wir den Server an, nur die Authentifizierung mit öffentlichen Schlüsseln zu akzeptieren.

Latch-Konfiguration in OpenSSH und später Authentifizierungsmethode auswählen

Latch für OpenSSH hat derzeit die Einschränkung, dass wir es nur für einen Benutzer verwenden können, dh wenn wir versuchen, uns mit mehreren Benutzern am SSH-Server anzumelden, können wir unser Team nicht mit Latch schützen, weil es so ist auf nur einen beschränkt. Wir empfehlen Sie Greifen Sie auf die offizielle Website des Latch-Plugins für Unix auf GitHub zu , dort finden Sie bei Interesse die Schritt-für-Schritt-Anleitung zur korrekten Konfiguration mit dem SSH-Dienst. Wir müssen daran denken, dass nur ein Benutzer gekoppelt werden kann.

Zusätzliche Sicherheitsmaßnahmen: Firewall, Port-Knocking, fail2ban und DenyHosts

In diesem Abschnitt werden wir zusätzliche Software zum Schutz des SSH-Servers verwenden, da zusätzliche Sicherheit unerlässlich ist. Wir werden beide verwenden Firewall basierend auf iptables, als Port-Knocking, um den Dienst immer hinter der Firewall zu verstecken, sowie fail2bat und DenyHost, um mögliche Brute-Force-Angriffe zu erkennen und mit der Firewall zu stoppen.

Iptables Firewall-Konfiguration zum Schutz von SSH

Die in den meisten Linux-basierten Systemen integrierte iptables-Firewall ermöglicht es uns, die Anzahl der gleichzeitigen Verbindungen zu unserem Server zu begrenzen, und wir können auch ein spezielles Modul namens "recent" verwenden, um alle Verbindungen in einer Datenbank zu speichern. Verbindungsversuche, ideal um Brute-Force-Angriffe zu vermeiden.

Begrenzen Sie die Anzahl gleichzeitiger Verbindungen in iptables

Wenn ein Angreifer mehrmals von derselben IP aus versucht, eine Verbindung herzustellen, können wir diese Anzahl von Verbindungen begrenzen, um seinen Angriff abzuschwächen. Dadurch wird ein möglicher Angriff nicht im Keim erstickt, sondern mit zwei Zielen abgemildert: kein großes Gedächtnis zu haben und CPU Verbrauch auf dem Computer durch Öffnen mehrerer SSH-Verbindungen, Verzögern eines möglichen Brute-Force-Angriffs durch Öffnen mehrerer Verbindungen.

Diese Anweisung AKZEPTIERT bis zu 5 Verbindungen, die von derselben öffentlichen IP kommen, ab der sechsten Verbindung blockieren wir sie. Wenn wir mehrere Netzwerkschnittstellen haben, müssen wir das «-i» verwenden, um die Schnittstelle festzulegen, für die wir diese Regel anwenden, wenn wir nichts eingeben, gilt sie für alle.

iptables -A INPUT -p tcp --dport 22445 -m connlimit --connlimit-upto 5 --connlimit-mask 32 -j ACCEPT

iptables -A EINGABE -j DROP

Konfigurieren Sie das aktuelle Modul, um Brute-Force-Angriffe auf den SSH-Dienst abzuwehren

Das aktuelle Modul dient dazu, die Anzahl der Verbindungen pro Sekunde auf IP-Ebene zu begrenzen, dies ist ideal, um uns vor Angriffen auf den SSH-Port zu schützen, da ein Angreifer mehrere Passwörter ausprobieren wird. Im folgenden Beispiel registrieren wir alle Verbindungen zum Ziel-TCP-Port 22445 in einer Datenbank und registrieren den Ursprung dieser Verbindungen (die öffentliche IP eines möglichen Angreifers).

Anschließend prüfen wir, ob in den letzten 4 Sekunden nicht mehr als 60 Spiele in der Tabelle vorhanden sind. Wenn es mehr als 4 Übereinstimmungen gibt, werden alle Verbindungen von dort blockiert.

iptables -A INPUT -p tcp --dport 22445 -m conntrack --ctstate NEW -m recent --set --name ssh --rsource

iptables -A INPUT -p tcp –dport 22445 -m conntrack –ctstate NEU -m aktuell –rcheck –seconds 60 –hitcount 4 –name ssh –rsource -j DROP

Dieses Modul unterscheidet sich vom vorherigen dadurch, dass es diese Verbindungen nach Zeit überprüft. Normalerweise ist es zum Schutz des SSH-Dienstes besser, dieses aktuelle Modul als das vorherige zu verwenden.

Port-Knocking zum „Verstecken“ des SSH-Dienstes

Port Knocking ist eine diskrete Methode zum Öffnen von Ports, die die Firewall standardmäßig geschlossen hält. Es funktioniert, indem es Versuche erfordert, eine Verbindung zu einer Reihe geschlossener vordefinierter Ports herzustellen. Wenn die richtige Reihenfolge der Port-„Berührungen“ (Verbindungsversuche) empfangen wird, öffnet die Firewall dann einen oder mehrere bestimmte Ports. Der Vorteil besteht darin, dass es bei einem normalen Port-Scan so aussieht, als wäre der Port-Dienst einfach nicht verfügbar.

Port Knocking ist eine Anwendung, die standardmäßig nicht in Betriebssystemen installiert ist. Sie können sie über die offiziellen Repositorys installieren. In unserem Fall würde die Installation bei Verwendung von Debian 9 so aussehen:

sudo apt-get install knockd

Nach der Installation müssen wir es aktivieren, indem wir Folgendes bearbeiten:

sudo nano /etc/default/knockd

Und setzen: START_KNOCKD = 1

Als nächstes starten wir den Dienst:

sudo service knockd start

Die geklopfte Konfigurationsdatei ist in /etc/knockd.conf

Wir müssen es mit einem beliebigen Dateieditor und den erforderlichen Root-Berechtigungen bearbeiten. Die Datei wird so aussehen:

[options] UseSyslog

[openSSH]-Sequenz = 7000,8000,9000
seq_timeout = 5
Befehl = / sbin / iptables -A INPUT -s% IP% -p tcp –dport 22445 -j ACCEPT
tcpflags = syn

[closeSSH] Sequenz = 9000,8000,7000
seq_timeout = 5
Befehl = / sbin / iptables -D INPUT -s% IP% -p tcp –dport 22445 -j ACCEPT
tcpflags = syn

Und um den Port des SSH-Dienstes zu „öffnen“, müssen wir in der Konsole „knock IP_address 7000 8000 9000“ eingeben. Sobald wir den Dienst genutzt haben, können wir ihn mit der Anweisung schließen, die wir zuvor in die Konfigurationsdatei geschrieben haben, es muss nicht umgekehrt sein (es hängt davon ab, wie Sie die Datei oben konfiguriert haben).

Eine weitere Option, die wir in Port Knocking haben, ist die vorübergehende Entsperrung des Servers. Auf diese Weise öffnen wir den Port für 10 Sekunden (oder was auch immer Sie wollen), und dann müssen wir uns beim Dienst anmelden. Später wird der Port geschlossen und wenn wir eingeloggt sind, werden wir nicht von diesem Server geworfen.

[options] UseSyslog

[SSH]-Sequenz = 5438,3428,3280,4479
tcpflags = syn
seq_timeout = 15
start_command = / sbin / iptables -A INPUT -s% IP% -p tcp –dport 22445 -j ACCEPT
cmd_timeout = 10
stop_command = / sbin / iptables -D INPUT -s% IP% -p tcp –dport 22445 -j ACCEPT

Auf diese Weise müssen wir beim Verlassen des Servers die Tür nicht wie im vorherigen Fall „schließen“, da sie nur 10 Sekunden geöffnet war.

Fail2ban zur Abwehr von Brute-Force-Angriffen auf SSH

Wir können auch das Programm fail2ban installieren, um IPs zu sperren, die viele erfolglose Verbindungsversuche machen (die das Passwort falsch erhalten). Dieses Programm ist bekannt und wird verwendet, da es sehr einfach zu konfigurieren und zu starten ist. Wir können es installieren, indem wir setzen

sudo apt install fail2ban

Jetzt kopieren wir die .conf-Datei in dieselbe .local-Datei, damit diese Konfiguration angewendet wird:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Jetzt können wir mit fail2ban eine benutzerdefinierte Regel für SSH erstellen, wir erstellen eine neue Konfigurationsdatei, die dafür verantwortlich ist, die vorherige Hauptdatei jail.local zu überschreiben.

sudo nano /etc/fail2ban/jail.d/sshjail.local

Und wir fügen das ein:

[sshd] enabled = true
port = 22445
bantime = 3600
findtime = 600
filter = sshd
maxretry = 3

Und wir starten es, stoppen und starten es neu, als ob es SSH wäre, in diesem Fall start = start:

sudo /etc/init.d/fail2ban restart

Um die Verbindungs-LOGS zu sehen, müssen Sie sich den Pfad /var/log/auth.log ansehen, und um die fail2ban-Protokolle zu sehen, müssen Sie sie hier ansehen: /var/log/fail2ban.log

DenyHosts: Wie fail2ban, aber speziell auf SSH ausgerichtet

Wir haben auch ein anderes Programm, das ausschließlich SSH gewidmet ist, es heißt DenyHost und verfügt über eine große Datenbank mit IPs, die als Angreifer bekannt sind. Es ist eine weitere Lösung für mögliche Angriffe, wenn unser SSH-Server immer dem Internet ausgesetzt ist. DenyHosts funktioniert genauso wie fail2ban, es überwacht die Verbindungsprotokolle, um zu erkennen, ob wir einem Brute-Force-Angriff ausgesetzt sind, und überprüft auch IP-Datenbanken, um festzustellen, ob es sich um Botnetze handelt.

Um dieses Programm zu installieren, müssen wir es aus den offiziellen Repositorys tun, wir gehen davon aus, dass in /etc/apt/source.list:

sudo apt install denyhosts

Der erste Teil der Konfiguration erfolgt im Pfad /etc/hosts.allow, hier müssen wir die Whitelist mit unseren Computern ablegen, damit sie uns nie blockiert, dies ist wichtig, um uns nicht durch die Firewall zu blockieren. Besonders wenn Sie einen Remote-Server verwenden, ist dieser Schritt wirklich wichtig.

sudo nano /etc/hosts.allow

Die Syntax, die Sie verwenden sollten, ist die folgende:

sshd: DIRECCION_IP

Damit würden Sie beispielsweise drei Quell-IP-Adressen zulassen:

sshd: 192.168.1.2

SSHD: 192.168.1.3

SSHD: 192.168.1.4

Wir speichern, um die Änderungen zu übernehmen, und müssen nun die globale Konfigurationsdatei von DenyHosts bearbeiten:

sudo nano /etc/denyhosts.conf

In dieser Konfigurationsdatei werden wir die verschiedenen verfügbaren Konfigurationsoptionen kommentiert sehen, die Syntax ist der von Fail2ban sehr ähnlich, sodass Sie keine Probleme bei der Konfiguration haben werden.

Pam_tally2: eine weitere sehr empfehlenswerte Alternative

Dieses Tool ist auch den vorherigen sehr ähnlich, es führt genau die gleiche Funktion aus: fehlgeschlagene Versuche auf dem SSH-Server verwalten. Dieses Programm ermöglicht es uns, die Zugriffsversuche verschiedener Benutzer mit ihren entsprechenden Quell-IP-Adressen zu zählen. Bei zu vielen fehlgeschlagenen Anmeldeversuchen wird ihnen automatisch der Zugriff durch die Firewall verweigert. Dieses Tool besteht aus zwei Teilen, pam_tally2.so, dem PAM-Modul, das wir in unserem Linux-Betriebssystem konfigurieren können, und wir werden auch pam_tally2 haben, das das Programm selbst ist.

Schließlich wird der SSH-Wache Programm wird auch dringend empfohlen, um unseren SSH-Server angemessen vor Eindringversuchen zu schützen.

So überprüfen Sie die Sicherheit meines SSH-Servers

Heute verfügen wir über mehrere Tools, um die Sicherheit unseres gerade konfigurierten OpenSSH-Servers zu überprüfen. Diese Programme sind dafür verantwortlich, die Serverkonfiguration zu analysieren, indem sie Verbindungen zum Server herstellen, um eine Art falscher oder unsicherer Konfiguration zu erkennen. Einige der am meisten empfohlenen Programme sind Rebex SSH-Check das ist ein sehr empfehlenswerter Online-Scanner, zusätzlich haben wir auch ssh-Audit Dabei handelt es sich um ein Tool, das lokal dort installiert wird, wo der SSH-Server die Sicherheit des Servers überprüfen soll.

Bisher sind wir mit diesem Handbuch dazu gekommen, wie Sie den SSH-Dienst auf unserem Server im Detail konfigurieren. Wenn Sie Fragen haben, können Sie einen Kommentar hinterlassen und wir werden Ihnen gerne antworten.