Welche Maßnahmen kann / sollte ich ergreifen, um sicherzustellen, dass die Sicherheit rund um meinen SSH-Server absolut undurchlässig ist?
Dies wird von Anfang an ein Community-Wiki sein. Lassen Sie uns also sehen, was die Leute tun, um ihre Server zu sichern.
Antworten:
Verwenden Sie zur Authentifizierung öffentliche / private Schlüsselpaare anstelle von Kennwörtern.
Generieren Sie einen passphrasengeschützten SSH-Schlüssel für jeden Computer, der auf den Server zugreifen muss:
ssh-keygen
Zulassen des SSH-Zugriffs mit öffentlichem Schlüssel von den zulässigen Computern aus:
Kopieren Sie den Inhalt
~/.ssh/id_rsa.pub
von jedem Computer in einzelne Zeilen des~/.ssh/authorized_keys
Servers oder führen Sie ihnssh-copy-id [server IP address]
auf jedem Computer aus, auf den Sie Zugriff gewähren (Sie müssen das Serverkennwort an der Eingabeaufforderung eingeben).Passwort-SSH-Zugang deaktivieren:
Öffnen
/etc/ssh/sshd_config
Sie die Zeile mit der Aufschrift#PasswordAuthentication yes
und ändern Sie sie inPasswordAuthentication no
. Starten Sie den SSH-Serverdämon neu, um die Änderung zu übernehmen (sudo service ssh restart
).Die einzige Möglichkeit, SSH in den Server einzubinden, besteht darin, einen Schlüssel zu verwenden, der mit einem Line-In übereinstimmt
~/.ssh/authorized_keys
. Bei dieser Methode interessieren mich Brute-Force-Angriffe nicht, da mein Passwort auch dann abgelehnt wird, wenn es erraten wird. Mit der heutigen Technologie ist es unmöglich, ein öffentliches / privates Schlüsselpaar zu erzwingen .quelle
Ich würde vorschlagen:
Verwendung von fail2ban , um Brute-Force-Anmeldeversuche zu verhindern.
Deaktivieren der Anmeldung als Root über SSH. Dies bedeutet, dass ein Angreifer sowohl den Benutzernamen als auch das Kennwort ermitteln musste, um einen Angriff zu erschweren.
Fügen Sie
PermitRootLogin no
Ihrem/etc/ssh/sshd_config
.Einschränkung der Benutzer, die SSH auf den Server ausführen können. Entweder nach Gruppe oder nur nach bestimmten Benutzern.
Fügen Sie hinzu,
AllowGroups group1 group2
oderAllowUsers user1 user2
begrenzen Sie, wer SSH auf dem Server ausführen kann.quelle
sshd
Sie immer, ob Ihre Konfiguration korrekt ist, bevor Sie sshd neu starten, um zu vermeiden, dass Sie sich selbst vom Computer fernhalten. Weitere Informationen finden Sie in diesem Blog. Führen Sie dassshd -T
Programm nach einer Konfigurationsänderung aus, bevor Sie den main neu startensshd
. Lassen Sie auch eine SSH-Sitzung auf dem Computer geöffnet , wenn Sie die Konfigurationsänderung vornehmen, und schließen Sie diese nicht, bis Sie die Konfiguration wie erwähnt validiert und möglicherweise eine SSH-Testanmeldung durchgeführt haben.Andere Antworten bieten Sicherheit, aber eines können Sie tun, um Ihre Protokolle leiser zu machen und die Wahrscheinlichkeit zu verringern, dass Sie von Ihrem Konto ausgeschlossen werden:
Verschieben Sie den Server von Port 22 auf einen anderen. Entweder an Ihrem Gateway oder auf dem Server.
Dies erhöht nicht die Sicherheit, bedeutet jedoch, dass alle zufälligen Internet-Scanner Ihre Protokolldateien nicht überladen.
quelle
Aktivieren Sie die Zwei-Faktor-Authentifizierung mit HOTP oder TOTP . Dies ist ab 13.10 Uhr möglich.
Dies schließt die Verwendung der Authentifizierung mit öffentlichem Schlüssel anstelle der Kennwortauthentifizierung wie in einer anderen Antwort hier ein, erfordert jedoch auch den Nachweis, dass der Benutzer sein Zweitfaktorgerät zusätzlich zu seinem privaten Schlüssel besitzt.
Zusammenfassung:
sudo apt-get install libpam-google-authenticator
Lassen Sie jeden Benutzer den
google-authenticator
Befehl ausführen , mit dem er~/.google-authenticator
seine Zweifaktorgeräte (z. B. die Google Authenticator-Android-App) generiert und konfiguriert.Bearbeiten
/etc/ssh/sshd_config
und einstellen:Führen Sie aus
sudo service ssh reload
, um Ihre Änderungen an zu übernehmen/etc/ssh/sshd_config
.Bearbeiten
/etc/pam.d/sshd
und ersetzen Sie die Zeile:mit:
Weitere Details zu verschiedenen Konfigurationsoptionen finden Sie in meinem Blogbeitrag vom letzten Jahr: Bessere Zwei-Faktor-SSH-Authentifizierung unter Ubuntu .
quelle
Stellen Sie sicher, dass die sshd-Block-Client-IPs, die keine korrekten Anmeldeinformationen bereitstellen, " DenyHØsts " diesen Job recht effektiv ausführen können. Ich habe dies auf allen meinen Linux-Boxen installiert, die irgendwie von außen erreichbar sind.
Dies stellt sicher, dass erzwungene Angriffe auf die SSHD nicht effektiv sind. Denken Sie jedoch daran, dass Sie sich auf diese Weise selbst aussperren können, wenn Sie Ihr Passwort vergessen. Dies kann ein Problem auf einem Remoteserver sein, auf den Sie keinen Zugriff haben.
quelle
Hier ist eine einfache Möglichkeit : Installieren Sie ufw (die "unkomplizierte Firewall") und verwenden Sie sie, um eingehende Verbindungen einzuschränken .
Geben Sie an einer Eingabeaufforderung Folgendes ein:
Wenn ufw nicht installiert ist, führen Sie dies aus und versuchen Sie es erneut:
Viele Angreifer versuchen, mithilfe Ihres SSH-Servers Passwörter zu erzwingen. Dies erlaubt nur 6 Verbindungen alle 30 Sekunden von derselben IP-Adresse.
quelle
Wenn ich zusätzliche Sicherheit haben oder tief in einem Unternehmensnetzwerk auf SSH-Server zugreifen möchte, richte ich mithilfe der Anonymisierungssoftware Tor einen versteckten Dienst ein .
localhost
./etc/tor/torrc
. Stellen SieHiddenServiceDir /var/lib/tor/ssh
und einHiddenServicePort 22 127.0.0.1:22
.var/lib/tor/ssh/hostname
. Es gibt einen Namen wied6frsudqtx123vxf.onion
. Dies ist die Adresse des versteckten Dienstes.Öffne
$HOME/.ssh/config
und füge einige Zeilen hinzu:Außerdem brauche ich Tor auf meinem lokalen Host. Wenn es installiert ist, kann ich eingeben
ssh myhost
und SSH öffnet eine Verbindung über Tor. Der SSH-Server auf der anderen Seite öffnet seinen Port nur auf localhost. Somit kann es niemand über "normales Internet" verbinden.quelle
Es gibt einen Debian-Administrationsartikel zu diesem Thema. Es behandelt die grundlegende SSH-Serverkonfiguration sowie Firewall-Regeln. Dies könnte auch für gehärtete SSH-Server von Interesse sein.
Siehe dort Artikel: Sicherer SSH-Zugriff .
quelle
Mein Ansatz zur SSH-Härtung ist ... komplex. Die folgenden Punkte beziehen sich darauf, wie ich es mache, vom äußersten Rand meines Netzwerks (meiner Netzwerke) bis zu den Servern selbst.
Grenzüberschreitendes Filtern des Datenverkehrs über IDS / IPS mit bekannten Dienstscannern und Signaturen in der Sperrliste. Ich erreiche dies mit Snort über meine Border-Firewall (dies ist mein Ansatz, eine pfSense-Appliance). Manchmal kann ich das jedoch nicht, wie bei meinen VPS.
Firewall / Netzwerkfilterung der SSH-Ports. Ich erlaube ausdrücklich nur bestimmten Systemen, auf meine SSH-Server zuzugreifen. Dies geschieht entweder über eine pfSense-Firewall an der Grenze meines Netzwerks oder über die explizit konfigurierten Firewalls auf jedem Server. Es gibt Fälle, in denen dies nicht möglich ist (was fast nie der Fall ist, außer in privaten Test- oder Sicherheitstestlabors, in denen Firewalls nicht helfen, Dinge zu testen).
In Verbindung mit meinem pfSense oder einer Border-Firewall, die das interne Netzwerk nutzt und vom Internet und den Systemen trennt, VPN-Only-Zugriff auf Server . Ich muss ein VPN in mein Netzwerk, um zu den Servern zu gelangen, da es keine mit dem Internet verbundenen Ports als solche gibt. Dies funktioniert definitiv nicht für alle meine VPS, aber in Verbindung mit # 2 kann ein VPS das "Gateway" sein, indem es in diesen Server ein VPN sendet und dann seine IPs für die anderen Boxen zulässt. Auf diese Weise weiß ich genau, was SSH kann oder nicht - meine einzige Box ist das VPN. (Oder in meinem Heimnetzwerk hinter pfSense meine VPN-Verbindung, und ich bin der einzige mit VPN-Zugang).
Wo # 3 nicht machbar ist, ist fail2ban, das so konfiguriert ist, dass es nach 4 fehlgeschlagenen Versuchen blockiert und die IPs für eine Stunde oder länger blockiert, ein angemessener Schutz gegen Menschen, die ständig mit Bruteforcing angreifen - blockieren Sie sie an der Firewall automatisch mit fail2ban und meh. Die Konfiguration von fail2ban ist allerdings ein Problem ...
Portverschleierung durch Ändern des SSH-Ports. Dies ist jedoch KEINE gute Idee, auch auf zusätzliche Sicherheitsmaßnahmen zu verzichten - das Mantra "Sicherheit durch Dunkelheit" wurde bereits in vielen Fällen widerlegt und umstritten. Ich habe dies in Verbindung mit IDS / IPS und Netzwerkfilterung getan, aber es ist immer noch eine SEHR schlechte Sache für sich.
OBLIGATORISCHE Zwei-Faktor-Authentifizierung über die Zwei-Faktor-Authentifizierungslösungen von Duo Security . Auf jedem meiner SSH-Server ist Duo so konfiguriert, dass, um überhaupt einzusteigen, 2FA-Eingabeaufforderungen angezeigt werden und ich jeden Zugriff bestätigen muss. (Dies ist die ultimative hilfreiche Funktion. Selbst wenn jemand meine Passphrase hat oder einbricht, kommt er nicht an den Duo PAM-Plugins vorbei.) Dies ist einer der größten Schutzmechanismen auf meinen SSH-Servern vor unbefugtem Zugriff. Jede Benutzeranmeldung MUSS an einen konfigurierten Benutzer in Duo gebunden werden. Da ich einen restriktiven Satz habe, können keine neuen Benutzer im System registriert werden.
Meine zwei Cent für die Sicherung von SSH. Oder zumindest meine Gedanken zur Annäherung.
quelle
Möglicherweise möchten Sie die FreeOTP-App von RedHat auschecken, anstatt Google Authenticator zu verwenden. Manchmal werden Sie beim Aktualisieren der App gesperrt! ;-)
Wenn Sie andere Hardware-Token wie einen Yubikey oder ein eToken PASS oder NG verwenden möchten oder wenn Sie viele Benutzer oder viele Server haben, möchten Sie möglicherweise ein OpenSource-Backend für die Zwei-Faktor-Authentifizierung verwenden.
In letzter Zeit habe ich ein Howto dazu geschrieben .
quelle
Ich habe kürzlich ein kleines Tutorial dazu geschrieben. Grundsätzlich müssen Sie PKI verwenden, und mein Tutorial zeigt auch, wie Sie die Zwei-Faktor-Authentifizierung für noch mehr Sicherheit verwenden. Selbst wenn Sie keines dieser Dinge verwenden, gibt es auch einige Kleinigkeiten zum Sichern des Servers durch Entfernen schwacher Chiffresuiten und anderer Grundlagen. https://joscor.com/blog/hardening-openssh-server-ubuntu-14-04/
quelle
Berücksichtigen Sie bei einer großen Anzahl von Benutzern / Zertifikaten die LDAP-Integration. Große Organisationen verwenden LDAP als Repository für Benutzeranmeldeinformationen und Zertifikate, die auf Ausweisen oder Anhängern gespeichert sind, unabhängig davon, ob die Zertifikate zur Authentifizierung oder zum Signieren von E-Mails verwendet werden. Beispiele hierfür sind openLDAP, openDJ, Active Directory, Oracle Universal Directory, IBM Directory Server, snareWorks ...
Computer und Gruppen können auch in LDAP verwaltet werden, was eine zentrale Verwaltung der Anmeldeinformationen ermöglicht. Auf diese Weise erhalten Helpdesks eine zentrale Anlaufstelle für die Bewältigung großer Bevölkerungsgruppen.
Hier ist ein Link zur centOS-Integration: http://itdavid.blogspot.com/2013/11/howto-configure-openssh-to-fetch-public.html
quelle
Sie können mit der geoIP-Datenbank auch nach Herkunftsland sperren.
Wenn Sie in den USA leben, gibt es für jemanden in Russland keinen Grund, sich mit Ihrem SSH zu verbinden, sodass er automatisch gesperrt wird.
Das Skript finden Sie hier: https://www.axllent.org/docs/view/ssh-geoip/
Sie können ihm auch iptables-Befehle hinzufügen (ich habe das für meine Droplets getan), um den gesamten Datenverkehr von / zu diesen IPs automatisch zu löschen.
quelle