Sichern des SSH-Servers gegen Bruteforcing

14

Ich habe einen kleinen SVN-Server, auf dem Debian läuft. Ich habe nicht so hohe Anforderungen an meinen Server, weil es nur ein kleiner SVN-Server ist ... aber ich möchte, dass er sicher ist.

Ich habe gerade meinen Server auf einen neueren und besseren Optiplex umgestellt und mich ein wenig mit dem alten Server befasst. Ich habe es abgenommen, nachdem ich Probleme hatte. Wenn ich die Protokolle überprüfe, ist es voller Brute-Force-Versuche und irgendwie ist es jemandem gelungen, meinen Computer zu betreten. Diese Person hat ein zusätzliches Volume namens "knarkgosse" mit den zwei Verzeichnissen "root" und "swap1" erstellt. Ich weiß nicht genau warum und was sie tun, aber ich möchte sicher verhindern, dass dies erneut geschieht. Ich finde das allerdings etwas seltsam, weil ich mein Passwort alle paar Monate ändere und die Passwörter immer zufällige Buchstaben und Zahlen sind ... nicht einfach zu brachialisieren.

Ich weiß, dass ich Root daran hindern kann, sich anzumelden, Sudoer zu verwenden und den SSH-Port zu ändern. Aber was kann ich noch tun?

Ich habe also ein paar Fragen:

  1. Wie kann ich verhindern, dass ich mich nach x Fehlversuchen 5 Minuten lang anmelde? Oder langsame Versuche nach jedem falschen Versuch?

  2. Gibt es eine Art zentrale Blacklist, mit der sich ein Server verbinden kann? Eine schwarze Liste, die nach IP-Adressen sucht, die "unsicher" sind und auf die niemals Zugriff gewährt werden sollte?

  3. Was kann ich noch tun, um die Sicherheit meines Servers zu gewährleisten?

Wie ich bereits sagte, verwende ich Debian 5 mit Apache (WWW-Daten-Benutzerproblem?), Svn, mysql, php, phpmyadmin, hudson. Es befindet sich in einem Heimnetzwerk mit Portweiterleitung unter 80, 443, 8080, 8180, 23 und 22.

Paul Peelen
quelle
Siehe auch Brute-Force-Angriffe gegen ssh verhindern?
Cristian Ciupitu

Antworten:

17

Fail2ban und Port Knocking sollten die meisten Ihrer Anforderungen erfüllen.

Es wird auch empfohlen, den SSH-Port zu ändern und nur die schlüsselbasierte Authentifizierung zuzulassen.

Es kann argumentiert werden, dass Sie möglicherweise einen Punkt erreichen, an dem die Rendite durch Hinzufügen zusätzlicher Sicherheitsmaßnahmen sinkt, aber es liegt an Ihnen, zu entscheiden, wann Sie "sicher genug" sind.

Es ist auch eine gute Idee, die Root-Anmeldung zu deaktivieren.

gWaldo
quelle
2
Ich benutze Denyhosts, aber es ist so ziemlich das gleiche wie fail2ban afaik.
Pfyon
Fail2Ban kommt mir bekannt vor ... das werde ich mir mal ansehen.
Paul Peelen
1
+1 Fail2Ban, 5 fehlgeschlagene Versuche = 5 Minuten IP-Block. Wenn Sie kein lächerlich einfaches Passwort haben, wird es niemals mit 1 Passwort pro Minute brachialisiert.
Chris S
@ Chris S Ja, das ist einer meiner Favoriten. Script Kiddies wissen normalerweise nicht, wie sie mit Timeouts umgehen sollen ...
gWaldo
1
@gWaldo, Bestätigungsvoreingenommenheit trägt wesentlich dazu bei, Dinge, die Sie gelesen haben, neu zu schreiben, um zu sagen, was Sie bereits für wahr halten.
Chris S
7

Es gibt keinen Ersatz für sichere Passwörter UND Schlüsselauthentifizierung. That being said, Fail2Ban ist ein großes Werkzeug für die IP - Adressen der Nutzer zu verbieten , die zu oft zu authentifizieren versuchen. Es ist auch als vorgefertigtes Paket für die meisten Distributionen erhältlich. Seien Sie gewarnt, Sie können sich versehentlich verbannen lassen. Vergewissern Sie sich also, dass Sie auch über eine IP-Adresse verfügen, die für die Wiederherstellung auf der weißen Liste steht, oder über einen einfachen Konsolenzugriff ...

Fail2Ban bietet einige gute Beispiele für die Konfiguration aller von Ihnen gestellten Fragen. Es verfügt jedoch nicht über ein universelles Repository für ungültige Adressen. Ich glaube nicht, dass es so ein Repository irgendwo gibt, weil es einfach ist, eine andere IP zu bekommen (dhcp renew / bot-net attacks / etc ...). Ich würde auch die Anmeldung über ssh unter Verwendung von Benutzernamen vom Typ "Administrator" (root / admin / administrator / sysop / etc ..) deaktivieren, da diese am häufigsten verwendet werden.

TheCompWiz
quelle
Gute Antwort. Ich stimme Ihnen voll und ganz zu. Die Schlüsselauthentifizierung ist für diesen Server etwas zu viel ... aber eine gute Idee. Ich habe jetzt Fail2ban installiert und muss es anscheinend nicht neu konfigurieren. Da sich dieser kleine SVN-Server zu Hause befindet, kann ich leicht darauf zugreifen für deinen Rat!
Paul Peelen
1
Spamhaus veröffentlicht eine Liste bekannter Spammer-Netzwerke. Es werden keine Botnets behandelt, sondern nur "professionelle" Spammer: spamhaus.org/drop
Chris S
4

Es gibt eine Reihe von guten Vorschlägen, die hier angeboten werden. Ich schlage respektvoll vor, dass drei Dinge dies relativ sicher machen sollten:

  1. Führen Sie den Befehl sshd an einem zufällig hohen Port aus. Die Bots folgen normalerweise nur Port 22 und Variationen von Port 22 wie 2222.
  2. Deaktivieren Sie die kennwortbasierte Authentifizierung in der sshd-Konfiguration:

UsePAM-Nr

  1. Authentifizieren Sie sich bei dieser Site nur über vorinstallierte SSH-Schlüsselpaare. Mann auf ssh-keygen, um mit der PKI-basierten Authentifizierung zu beginnen.

Hoffe das hilft.

Patrick Heckenlively
quelle
2
Für eine Lösung mit sehr geringem Stress habe ich definitiv ssh auf einem nicht standardmäßigen Port ausgeführt. Nach allem, was ich gesehen habe, werden dadurch Versuche, Brute-Force-Verbindungen zu Ihrem SSH-Server herzustellen, um eine Größenordnung abgebrochen. Innerhalb einer Woche hat einer meiner Server (auf dem ssh auf einem Standard-Port ausgeführt wird) 134 ungültige Verbindungsversuche erhalten. Im selben Zeitraum hatte eine virtuelle Instanz auf demselben Server (auf dem ssh auf einem nicht standardmäßigen Port ausgeführt wird) den Wert 0.
DF
1

Ich war schon immer ein großer Fan von CSF / LFD, das IP-Adressen von Personen blockieren kann, die versuchen, Bruteforce, Portscan und einige andere Optionen zu nutzen. Es ist im Grunde ein riesiger Perl-Wrapper für IP-Tabellen, aber die Konfigurationsdatei ist nicht schwer zu lesen und die Dokumentation ist nicht schlecht.

Süss
quelle
Wissen Sie, ob es eine Möglichkeit gibt, über die Sie benachrichtigt werden können (z. B. per E-Mail), wenn auf dem Server ein Port-Scan durchgeführt wird?
Paul Peelen
1

Sie könnten auch in sshguard schauen. Ich habe es nicht benutzt, aber ich habe gute Dinge gehört.

Quellen:
http://isc.sans.edu/diary.html?storyid=9370

http://www.sshguard.net/

http://www.sshguard.net/docs/faqs/

"Sshguard überwacht Server von ihrer Protokollierungsaktivität. Wenn Protokolle übermitteln, dass jemand eine schlechte Sache tut, reagiert sshguard, indem es ihn für eine Weile blockiert. Sshguard hat eine empfindliche Persönlichkeit: Wenn ein ungezogener Typ darauf besteht, Ihren Host zu stören, reagiert er fester und fester. "

Caleban
quelle
Das klingt ordentlich ... Ich werde es mir ansehen. Danke
Paul Peelen
1

Ich habe einen SSH-Server am Standardport mit dem Internet verbunden und hatte noch nie Probleme.

  • tcp_wrappers (dh hosts.allow hosts.deny) für SSH. Ich glaube nicht, dass es eine SSH gibt, in der keine Unterstützung kompiliert ist
  • iptables dies in Verbindung mit tcp_wrappers beseitigte ungefähr 99% meiner zufälligen Port-Scans / Bruteforce-Versuche. Das einzige Problem ist, dass Sie wissen müssen, von wo aus Sie eine Verbindung herstellen, um diese IP / IP-Bereiche zuzulassen. Ich habe es einfach getan Ein Blick auf beliebte Anbieter in meiner Nähe, um ihre IP-Bereiche zu sehen und diese zuzulassen. Die meisten Scans scheinen aus fernen Ländern zu stammen. :)
  • PermitRootLogin ohne Passwort (dh nur RSA / DSA-Schlüsselpaare, die mit einer Passphrase verschlüsselt sind) funktioniert wunderbar für automatisierte Aufgaben. Wenn ich mich zur Interaktion anmelde, verwende ich offensichtlich mein Konto (regulär), das mit sudo-Zugriff konfiguriert ist
  • Sudoer
  • Ständige Updates. Ich aktualisiere diese Box regelmäßig mit allen Sicherheits- / kritischen Updates
  • Passwort- / Passwortänderungen
  • Führen Sie ab und zu chkrootkit aus, um festzustellen, ob Probleme vorliegen. (Es gibt mehrere, die diese Funktion ausführen.)

ich hoffe es hilft!


quelle
1

Es gibt eine bessere Möglichkeit, dies zu tun: Wenn Sie fail2ban verwenden, müssen Sie eine Anwendung hinzufügen, die auf der Anwendungsebene ausgeführt wird.

Wenn Sie iptables verwenden, ist es effizienter, da es auf Netzwerkebene ausgeführt wird und Sie keine zusätzliche Anwendung installieren müssen.

Verwenden Sie das Modul iptables recent http://www.snowman.net/projects/ipt_recent/

iptables -N SSHSCAN
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSHSCAN
iptables -A SSHSCAN -m recent --set --name SSH
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG --log-level info --log-prefix "SSH SCAN blocked: "
iptables -A SSHSCAN -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP
iptables -A SSHSCAN -j ACCEPT
Platzhirsch
quelle
0

Eine Option (die zusätzlich zu anderen Sicherheitsmaßnahmen verwendet werden kann) ist, dass sshd einen anderen Port als 22 abhört. Ich habe es nicht selbst ausprobiert, aber gehört, dass Bots weniger reine Brute-Force-Angriffe ausführen.

Ich muss betonen, dass dies keine echte Sicherheit ist, sondern nur die Anzahl der automatisierten Brute-Force-Angriffe verringert. Zu viel Arbeit, um jeden Port zu überprüfen, denke ich.

pfyon
quelle
Das habe ich auch getan, indem ich auf Port 23 umgestiegen bin. Hauptsächlich, weil ich einen anderen Server auf Port 22 hatte (den ich jetzt heruntergefahren habe).
Paul Peelen
2
23 ist jedoch ein reservierter Port telnet. Oft ist es besser, Ports zu verwenden, die nicht reserviert sind, z. B.> 60k. Unter iana.org/assignments/port-numbers finden Sie eine Liste der reservierten Portnummern.
ℝaphink
Danke für den Tipp. Ich verwende (noch) kein Tenet auf dieser Maschine, werde aber den Port ändern. Ich habe einen Portbereich zwischen 52000 und 59000, den ich auf meinen professionellen Servern verwende, und denke darüber nach, dasselbe für diesen zu verwenden.
Paul Peelen
1
@Paul: I don't use te[l]net on this machine- mach weiter so. Obwohl Sie aus verschiedenen Gründen einen Telnet- Client benötigen , gibt es keinen Grund, einen Telnet-Server zu betreiben, wenn Sie über ssh verfügen. Klartext-Passwörter über die Leitung sind falsch .
mlp
0

Was hier nicht erwähnt wird und eigentlich sollte, ist die Einschränkung des Zugriffs über eine Firewall. Dies passt nicht zu jeder Situation. Wenn Sie jedoch eine Verbindung mit dem Host von einem konsistenten Standort mit einer statischen IP-Adresse herstellen, können Sie SSH mit Ausnahme dieser IP-Adresse vollständig blockieren. Auf diese Weise wird sichergestellt, dass Eindringlinge nicht eindringen können. Wie ich bereits erwähnte, passt dies nicht immer in jede Situation, insbesondere wenn Ihre IP-Adresse dynamisch ist und sich häufig ändert.

vmfarms
quelle
Im Allgemeinen stimme ich Ihrer Lösung zu. Ich glaube, das ist der Standard in der Firma, für die ich arbeite ... aber ich glaube nicht, dass das etwas für mich ist. Das Problem ist, dass ich mein macbook pro hauptsächlich von zu Hause (lokales Netzwerk), von der Arbeit (statische IP) oder unterwegs (mit 3G-Modem / iPhone) verwende. Für das letzte ist es ein Problem, wenn ich kein VPN habe, das zu viel Overkill ist, denke ich. Danke für deine Antwort.
Paul Peelen
0

DenyHosts, http://denyhosts.sourceforge.net/ , ist ein gutes Projekt, mit dem ich Glück hatte. Wenn Sie denyhosts für die Synchronisierung einrichten, werden neue IP-Adressen heruntergeladen, um sie einer Sperrliste hinzuzufügen, die andere Systeme mit denyhosts zwingen musste. Es läuft auch IPs ab, die seit einiger Zeit nicht mehr gewaltsam versucht haben.

Die Authentifizierung mit öffentlichen Schlüsseln und das Deaktivieren der Kennwortprotokollierung ist wahrscheinlich das Beste, was Sie tun können. Besiegt alle Brute-Force-Angriffe.

John Lowry
quelle
0

Was war für mich effektiv:

  1. Wie bereits gesagt, kein Root-Login, PasswordAuthentication in sshd_config auf no (nur Login mit Schlüsseln) gesetzt

  2. Nur ein oder zwei Benutzer dürfen sich über ssh anmelden und sie haben quasi obskure Namen, die nicht in den üblichen Brute-Force-Tool-Benutzernamenslisten enthalten sind (dh nicht "admin" oder "apache" oder "web" oder " Johnny ")

  3. Restriktive Firewall-Regeln (im Grunde ist alles außer meinem Service-Port und SSH blockiert). Ich beschränke sogar Ping, um die gröberen Scans abzuwehren (sehr zum Ärger meines Partners).

  4. Auf meinem Webhost beschränke ich den Zugriff auf einige bestimmte IP-Adressen - aber dies scheint für Sie keine Option zu sein. Ich kann das auf keinen Fall bei allen unseren Gastgebern machen. Vielleicht möchten Sie sich auch mit "Port-Knocking" befassen.

  5. Und mein Favorit: OSSECs aktives Reaktionsmodul, das eine Reihe von Brute-Force-Bedingungen blockiert und auch bei anderen Fehlern alarmiert. Es erkennt x ungültige Anmeldungen in y Zeit und blockiert dann (über einen iptables-Firewall-Drop-Befehl) für einen bestimmten Zeitraum. Ich sperre jetzt aus Spaß seit ungefähr 12 Stunden. :)

Eine Sache, die ich hier mache, um sicherzustellen, dass ich nicht zu viel von dem Falschen blockiere, ist, dass ich in /etc/ossec.conf die aktive Antwort auf einen hohen Pegel setze (der in der Standardkonfiguration nicht vorhanden ist) und dann Gehen Sie die Datei sshd_rules.xml durch und legen Sie die Regeln, die ich blockieren möchte, auf diese Ebene fest und ändern Sie die Schwellenwerte für Blockierung und Warnung nach Bedarf.

Wenn Sie Apache ausführen, können Sie auch Dinge blockieren, die gegen Apache-Regeln verstoßen. Ich blockiere diese nicht nur wegen des NAT-Problems, ich möchte darüber nachdenken, eine ganze Universität oder so etwas zu blockieren. :) Außerdem können Sie benutzerdefinierte Regeln schreiben, um unter bestimmten Bedingungen in Protokolldateien zu blockieren, was sehr hilfreich sein kann.

jen_h
quelle