Wie kann ich die SSHD-Anmeldung nach einem falschen Passwort verzögern?

8

Wie kann ich die Wiederholungsantwort von SSH verzögern, wenn ein falsches Kennwort versucht wird oder der Anmeldeversuch fehlschlägt? Ich wollte, dass die Verzögerung 2-3 Sekunden länger als gewöhnlich ist.

Ich konnte keine Option in der Datei sshd_config finden, um dasselbe zu erreichen.

Kann mir jemand mitteilen, wie ich vorgehen soll?

Patha
quelle
Welches Betriebssystem verwenden Sie?
Kockiren
Ich arbeite auf einem eingebetteten Entwicklungsboard mit Linux-Kernel 3.4.8.
Patha
Die Verzögerung sollte nach jedem Versuch länger werden.
Sören

Antworten:

12

Wenn Sie alle Benutzer blockieren und sogar root blockieren, können Sie diese Zeilen zu /etc/pam.d/password-authoder /etc/pam.d/sshdim Abschnitt auth hinzufügen, um alle Benutzer für 5 Minuten zu blockieren:

auth        required      pam_tally2.so  file=/var/log/tallylog deny=3 even_deny_root unlock_time=300

Fügen Sie nun die folgende Zeile zum Kontoabschnitt hinzu:

account     required      pam_tally2.so

Starten Sie Ihren sshd endgültig neu und es sollte funktionieren. Danach können Sie mit dem folgenden Befehl nach Fehleranmeldungen suchen: pam_tally2Sie erhalten diese Ausgabe:

# pam_tally2
Login           Failures Latest failure     From
userxy            4    12/10/13 09:52:31  192.168.100.100
Kockiren
quelle
1
Aber @kockiren Ich habe /etc/pam.d/sshd/ nicht auf meiner Box
Patha
1
Dann versuchen Sie zu verwenden: Passwort-Auth, ich aktualisiere meine Antwort
Kockiren
Ich habe kein Verzeichnis /etc/pam.d auf meiner Box, konnte aber /etc/login.defs sehen.
Patha
2
@singh Überprüfen Sie dann, wo sich Ihre PAM-Konfiguration befindet. Könnte nicht für alle Systeme gleich sein, sicher, wenn Sie SSHD eingerichtet haben, können Sie die PAM-Konfiguration finden ...
TC1
2

Sie können versuchen, hinzuzufügen

auth       optional   pam_faildelay.so  delay=250000

zur pam-Konfigurationsdatei für sshd (In Debian-Systemen normalerweise in /etc/pam.d/sshd) Der Verzögerungswert von 250000 beträgt 0,25 Sekunden.

noqqe
quelle
Danke @noqqe, aber ich habe /etc/pam.d/sshd nicht in meiner Distribution
Patha
2

IPtables- Regeln können angepasst werden, um das zu erreichen, was Sie erreichen möchten .

Annahme: In Ihrem Embedded Linux ist das Netfilter-Modul kompiliert und vorausgesetzt, Sie kennen das Firewall-Konzept und haben zuvor iptables verwendet. Root-Zugriff wird angenommen. Wenn Sie sudo-fähig sind, fügen Sie sudo vor den Befehlen hinzu.

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource

Die Syntax hat keine gewünschte Vebosität, aber die Zeile weist die Firewall-Polizei-Iptables an, dass Sie eine Regel an die vorhandene INPUT-Kette anhängen möchten. Das Argument -p tcp gibt an, dass diese Regel nur für TCP-Pakete gilt. Die meisten anderen Argumente basieren auf der Option -m, die für match steht und iptables mitteilt, dass die Regel für Pakete gilt, die den spezifischen Attributen entsprechen, nach denen wir suchen. Hier wird die Regel auf Pakete angewendet, die den Beginn neuer Verbindungen auf dem Weg zum TCP-Port 22 signalisieren. Wenn ein Paket diesen Attributen entspricht, notiert iptables die Adresse des Remote-Hosts in einer temporären Liste.

iptables -N LOG_AND_DROP

Die obige Regel führt tatsächlich eine Aktion mit einer anderen Kette aus. Um sie anzuhängen, müssen wir zuerst die Kette erstellen, die wir erstellt haben (z. B. LOG_AND_DROP).

iptables -A INPUT  -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 20 --hitcount 4 --name DEFAULT --rsource -j LOG_AND_DROP

Diese Regel weist iptables an, nach Paketen zu suchen, die den Parametern der vorherigen Regel entsprechen und die auch von Hosts stammen, die bereits zur Überwachungsliste hinzugefügt wurden. Wenn iptables ein Paket sieht, das von einem solchen Host kommt, wird der zuletzt gesehene Zeitstempel für diesen Host aktualisiert. Die Argumente --seconds 20 und --hitcount 4 werden verwendet, um die zu blockierenden Hosts weiter einzugrenzen. Wenn ein Host innerhalb von 60 Sekunden vier- oder mehrmals versucht, eine Verbindung herzustellen, stimmt er mit diesem Teil der Regel überein, und wir springen (-j) ) zur LOG_AND_DROP-Kette.

iptables -A INPUT  -p tcp -m tcp --dport 22 -j ACCEPT

Technisch gesehen ist diese Regel für die INPUT-Kette nicht erforderlich, da für alle nicht übereinstimmenden Pakete standardmäßig die Richtlinie ACCEPT festgelegt ist. Ausfallsicher, wenn Sie eine restriktive Firewall erstellen, z. B. Standard-Ablehnung.


Anhängen, nachdem Feedback von @singh erhalten wurde. Ich wusste nicht, dass der Staat zugunsten eines Techie-Conntrack-Moduls (Connectiontracking) vertrieben wurde

Anstelle von zB:

-m state --state RELATED

-m conntrack --ctstate RELATED
Kaji
quelle
Vielen Dank an kaji für Ihre Antwort, aber muss ich einer Konfiguration "iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m Recent --set --name DEFAULT --rsource" hinzufügen Datei?
Patha
Die oben genannten Codes sind Iptable-Regeln. Sie können ein Bash-Skript erstellen, diese Regeln ablegen und abfeuern. Oder Sie können es einfach einzeln in dieser Reihenfolge kopieren und einfügen.
Kaji
Kaji Ich habe versucht, diesen Befehl auszuführen, konnte aber keinen Unterschied feststellen. Auch das Ausführen des ersten und vierten Befehls gibt mir iptables: Die Statusübereinstimmung ist veraltet. Verwenden Sie stattdessen conntrack.
Patha