Beabsichtigen Sie, der Welt den SSH-Dienst zu erlauben? Oder nur um Teammitglieder an bestimmten Orten? Meine Antwort hängt ein wenig von der Schwere Ihrer Herausforderung ab.
In beiden Fällen sollten Sie sicherstellen, dass der SSH-Server keine Kennwortanmeldungen für den Root-Benutzer zulässt.
- Stellen Sie in / etc / ssh / sshd_config sicher, dass Sie nur mit einem SSH-Schlüssel eine Root-Anmeldung zulassen.
In meinen Systemen habe ich diese Einstellung
PermitRootLogin without-password
aber ich merke, in neueren Ubuntu haben sie
PermitRootLogin prohibit-password
Wenn Sie "man sshd_config" lesen, dann bedeutet dies, dass dieses neuere "prohibit-password" dasselbe bedeutet und seine Bedeutung sicherlich offensichtlicher ist. Das ist auf einigen Linux-Systemen NICHT die Standardeinstellung, sollte es aber wahrscheinlich sein.
Nun zu deinem Problem. Unterstützt Ihr System Server nur einige Benutzer an bestimmten Orten? Mach das!
editiere /etc/hosts.deny und füge ein
ALLES ALLES
Bearbeiten Sie dann /etc/hosts.allow und listen Sie die IP-Nummern oder einen Bereich auf, der die Verwendung von SSH zulassen soll. Die Notation dort ist etwas verwirrend, denn wenn Sie alle Systeme mit IP-Nummern wie 111.222.65.101 bis 111.222.65.255 zulassen möchten, fügen Sie einen Eintrag wie diesen in hosts.allow ein
ALL: 127.0.0.1
sshd: 111.222.65.
sshdfwd-X11: 111.222.65.
Das ist eine schlagkräftige Lösung. Wenn Ihre Benutzer nach IP-Bereich aufgelistet werden können, tun Sie es!
Diese Lösung gab es vor der Erstellung von IP-Tabellen, sie ist (meiner Meinung nach) viel einfacher zu verwalten, aber nicht so gut wie eine IP-Tabellen-Lösung, da IP-Tabellen-Routinen Feinde früher erkennen als die von hosts.allow und hosts gesteuerten Programme .verweigern. Dies ist jedoch eine sichere und einfache Möglichkeit, viele Probleme zu beseitigen, nicht nur bei SSH.
Beachten Sie das Problem, das Sie selbst erstellen. Wenn Sie einen FTP-Server, einen Webserver oder etwas anderes eröffnen möchten, müssen Sie Einträge in Hosts zulassen.
Sie können denselben grundlegenden Zweck erreichen, indem Sie mit iptables und der Firewall spielen. In gewisser Hinsicht ist dies eine bevorzugte Lösung, da Sie Gegner an der Außengrenze blockieren. Ubuntu hat "ufw" (unkomplizierte Firewall) und "man ufw" hat viele Beispiele. Ich hätte lieber eine nette Benutzeroberfläche, um das durchzuarbeiten, ich muss das nicht die ganze Zeit tun. Vielleicht können uns andere sagen, ob es jetzt eine gibt.
- Andere Posts hier schlugen vor, den öffentlichen SSH-Schlüssel nur für Ihre Benutzer zu verwenden. Das wird sicherlich helfen, zum Preis von Komplexität und Frustration für Ihre Benutzer. In unserem Labor gibt es 15 Computer. Benutzer wechseln zwischen Computern. Das Erfordernis der SSH-Schlüsselauthentifizierung würde einen großen Aufwand verursachen, da die Benutzer von einem Computer zum nächsten wechseln.
Eine weitere Quelle der Frustration tritt auf, wenn einige Benutzer unterschiedliche SSH-Schlüssel für verschiedene Server sammeln. Da ich SSH-Schlüssel für ungefähr 12 verschiedene Projekte habe, schlägt ssh jetzt fehl, weil ich zu viele öffentliche Schlüssel habe (entweder "ssh -o PubkeyAuthentication = false" oder die Erstellung eines Eintrags in der .ssh / config-Datei erforderlich. Es ist eine PITA)
- Wenn Sie den Server von der großen Welt aus für SSH offen lassen müssen, sollten Sie auf jeden Fall eine Zurückweisungsroutine verwenden, um Standorte zu blockieren, die häufig versuchen, sich einzuloggen. Es gibt dafür zwei nette Programme, die wir verwendet haben: denyhosts und fail2ban . Diese Programme verfügen über Einstellungen, mit denen Sie Täter für eine von Ihnen gewünschte Dauer sperren können.
In unseren Centos Linux-Systemen ist mir aufgefallen, dass sie das Denyhosts-Paket verworfen haben und nur Fail2Ban anbieten. Ich mochte Denyhosts, weil es eine Liste von problematischen Benutzern / IP-Bereichen aufbaute und diese Liste dann in hosts.deny notiert wurde. Wir haben stattdessen fail2ban installiert und es ist OK. Ich verstehe, dass Sie diese schlechten Benutzer lieber am äußeren Rand des Servers blockieren möchten, daher sind die IP-Tabellen-basierten Blocker wie fail2ban tatsächlich besser. Denyhosts arbeitet auf der sekundären Ebene, nachdem die Gegner die Iptables überschritten haben, werden sie vom sshd-Daemon zurückgewiesen.
In beiden Programmen ist es etwas mühsam, Benutzer aus dem Gefängnis zu holen, wenn sie ihr Passwort vergessen und sich ein paar Mal anzumelden. Es ist etwas schwierig, die Benutzer wieder einzuladen, wenn sie Anmeldefehler machen. Sie hätten gedacht, es gäbe eine Point-and-Click-Benutzeroberfläche, auf der Sie einfach zeigen und die Leute wieder hereinlassen könnten, aber das ist nicht der Fall. Ich muss das nur alle paar Monate machen und zwischenzeitlich vergessen, also habe ich Anweisungen für mich auf meiner Webseite http://pj.freefaculty.org/blog/?p=301 geschrieben