Brute Force SSH kann nicht mit Iptables blockiert werden


9

Ich versuche, Brute-Force-Angriffe auf meinen SSHD-Server zu blockieren (zu verlangsamen). Ich folge dieser Anleitung http://www.rackaid.com/resources/how-to-block-ssh-brute-force-attacks/, die im Grunde besagt, dass ich nur die 2 folgenden Befehle eingeben muss.

sudo iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent  --update --seconds 60 --hitcount 4 -j DROP

Mein sshd-Port ist 6622, also habe ich die Einträge von "22" in "6622" geändert und diese Befehle eingegeben. Dann habe ich versucht, die neuen iptables einfach zu testen. Ich ging zu einem anderen PC und gab mehrmals absichtlich das falsche Login-Passwort ein. Leider scheinen mich die neuen Regeln nicht davon abzuhalten, so viel zu versuchen, wie ich will. Nachfolgend sind meine aktuellen Regeln aufgeführt. Was mache ich falsch?

# iptables --list

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere             tcp dpt:6622 state NEW recent: UPDATE seconds: 60 hit_count: 4 name: DEFAULT side: source
           tcp  --  anywhere             anywhere             tcp dpt:6622 state NEW recent: SET name: DEFAULT side: source

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain LOGDROP (0 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             LOG level warning
DROP       all  --  anywhere             anywhere            

4
Ich empfehle fail2ban , um blockierende IPs zu verarbeiten, die Brute-Force-Versuche anzeigen. Es ist einfach zu installieren und zu konfigurieren. Ich weiß, dass es Ihre Frage nicht direkt beantwortet, aber es könnte Ihnen ein paar Löcher in der Trockenbauwand ersparen.
Banjer

1
Stimmen Sie mit @Banjer überein - vergessen Sie diesen Rackaid-Link und richten Sie fail2ban ein.
Shadur

Gibt es eine Chance MaxStartups, auf der Daemon-Seite zu optimieren?
Peterph

2
@peterph Nur wenn Sie einen Brute-Force-Einbruchversuch in einen Denial-of-Service verwandeln möchten.
Shadur

Warum einen SSH-Server dem Internet aussetzen und dann versuchen, die Folgen zu minimieren? Entweder bei der Arbeit oder zu Hause gehe ich über IPSec-VPNs ein, ohne dass SSH für das Internet offen ist.
Rui F Ribeiro

Antworten:


5

Wie @banjer in seinem Kommentar betonte, versuchen Sie die falsche Lösung für Ihr eigentliches Problem.

Was Sie tun müssen, ist fail2ban einzurichten . Es verwendet iptables im Hintergrund, um Verbindungsversuche von Hosts automatisch zu blockieren, die fehlgeschlagene Zugriffsversuche aus verschiedenen Quellen generieren. Es ist unglaublich vielseitig und ermöglicht das Hinzufügen und Ändern verschiedener Schwellenwerte, zu suchender Muster und Verbotsmethoden. Sie müssen das Standard-SSH-Gefängnis leicht anpassen, um den nicht standardmäßigen Port zu berücksichtigen, den Sie verwenden, aber das sollte nicht schwer sein.


1

Ich benutze Regeln wie diese, um Dinge zu verlangsamen:

iptables -A DDoS -m limit --limit 12/s --limit-burst 24 -j RETURN
iptables -A DDoS -j LOG --log-prefix "[DDos Attack?] "
iptables -A DDoS -j DROP

An anderen Stellen beschränke ich solche Dinge:

LOGLIMIT="50/h"
LOGLIMITBURST="10"
iptables -A IANA -p tcp -m limit --limit $LOGLIMIT --limit-burst \
     $LOGLIMITBURST -j DROP

0

Hast du die Manpage gelesen?

man sshd_config:

 MaxAuthTries
         Specifies the maximum number of authentication attempts 
         permitted per connection.  Once the number of failures 
         reaches half this value, additional failures are logged. 
         The default is 6.
 MaxSessions
         Specifies the maximum number of open sessions permitted 
         per network connection.  The default is 10.
 MaxStartups
         Specifies the maximum number of concurrent unauthenticated
         connections to the SSH daemon.  Additional connections
         will be dropped until authentication succeeds or 
         the LoginGraceTime expires for a connection. The default is 10:30:100.

         Alternatively, random early drop can be enabled by specifying
         the three colon separated values “start:rate:full” (e.g.
         "10:30:60").  sshd(8) will refuse connection attempts with a
         probability of “rate/100” (30%) if there are currently “start”
         (10) unauthenticated connections.  The probability increases
         linearly and all connection attempts are refused if the 
         number of unauthenticated connections reaches “full” (60).

3
Hilft nicht. SSH-Bruteforce-Angriffe werden heutzutage in der Regel von verteilten Bot-Netzwerken verwendet, sodass jede Verbindung nur drei oder vier Versuche ausführen würde, Sie jedoch Hunderte von Verbindungen von verschiedenen Hosts haben würden.
Shadur

0

Ich habe gerade die Lösung mit zwei Regeln ausprobiert und hatte das gleiche Problem, als ich sie überprüfte. Dann stelle ich fest, dass veröffentlichte Regeln eine -i eth0Option haben! Ich habe es auf die gute Netzwerkschnittstelle umgestellt und es fing endlich an zu funktionieren.


0

Die meisten Tutorials werden verwendet -A, um an das Ende des Regelsatzes anzuhängen. OP wurde -Izum Einfügen verwendet , jedoch ohne Index, sodass die Regeln in der falschen Reihenfolge endeten.

Ein wertvolles Tool zum Debuggen von iptables-Regeln ist iptables -vLdas Auflisten der Regeln mit der Anzahl, wie oft jede Regel angewendet wurde. Wenn Sie eine unerwartete Anzahl von 0 erhalten, können Sie erkennen, was falsch ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.