GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie man SSH Bruteforce stoppt/verhindert

Lösung 1:

Wie erhalte ich Zugang?

Es ist nicht klar, warum Sie nicht auf Ihr Konto zugreifen können.

Wenn Ihr Rechner angegriffen wird oder stark ausgelastet ist, sollten Sie mit Ihrem Provider sprechen, um den Zugriff einzuschränken (IP-Einschränkungen) oder den Server offline zu schalten (Verbindung zum Internet trennen).

Möglicherweise benötigen Sie auch einen Out-of-Band-Zugang, bei dem Ihr Anbieter möglicherweise behilflich sein kann.

Wenn jemand Ihren Server kompromittiert hat, müssen Sie ihn möglicherweise aus Backups wiederherstellen oder ein Wiederherstellungs-Image verwenden.

So verhindern Sie Angriffe auf Ihren Server, insbesondere SSH

beste Möglichkeit, Brute-Force-Anmeldungen zu verhindern?

Lassen Sie sie erst gar nicht an Ihre Maschine gelangen! Es gibt viele Möglichkeiten, Brute-Force-Versuche zu stoppen, bevor sie Ihren Host erreichen, oder sogar auf SSH-Ebene.

Allerdings ist es eine großartige Idee, Ihr Betriebssystem mit so etwas wie fail2ban zu schützen. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban ist DenyHosts ähnlich ... aber im Gegensatz zu DenyHosts, das sich auf SSH konzentriert, kann fail2ban so konfiguriert werden, dass es jeden Dienst überwacht, der Anmeldeversuche in eine Protokolldatei schreibt, und anstatt /etc/hosts.deny nur zum Blockieren von IP-Adressen/Hosts zu verwenden, fail2ban kann Netfilter/iptables und TCP Wrapper /etc/hosts.deny.

verwenden

Es gibt eine Reihe wichtiger Sicherheitstechniken, die Sie berücksichtigen sollten, um Brute-Force-Anmeldungen zu verhindern:

SSH:

  • Erlaube Root nicht, sich anzumelden
  • Keine SSH-Passwörter zulassen (Authentifizierung mit privatem Schlüssel verwenden)
  • Hören Sie nicht auf jeder Schnittstelle zu
  • Erstellen Sie eine Netzwerkschnittstelle für SSH (z. B. eth1), die sich von der Schnittstelle unterscheidet, von der Sie Anfragen bedienen (z. B. eth0)
  • Verwenden Sie keine allgemeinen Benutzernamen
  • Verwenden Sie eine Zulassungsliste und lassen Sie nur Benutzer zu, die SSH-Zugriff benötigen
  • Wenn Sie Internetzugang benötigen...Beschränken Sie den Zugriff auf eine begrenzte Anzahl von IPs. Eine statische IP ist ideal, es ist jedoch besser, sie auf x.x.0.0/16 zu sperren als 0.0.0.0/0
  • Wenn möglich, finden Sie einen Weg, sich ohne Internetzugang zu verbinden, damit Sie den gesamten Internetverkehr für SSH verweigern können (z. B. mit AWS können Sie eine direkte Verbindung erhalten, die das Internet umgeht, es heißt Direct Connect)
  • Verwenden Sie Software wie fail2ban, um Brute-Force-Angriffe abzufangen
  • Stellen Sie sicher, dass das Betriebssystem immer auf dem neuesten Stand ist, insbesondere Sicherheits- und SSH-Pakete

Anwendung:

  • Stellen Sie sicher, dass Ihre Anwendung immer auf dem neuesten Stand ist, insbesondere die Sicherheitspakete
  • Sperren Sie die Admin-Seiten Ihrer Anwendung. Viele der oben genannten Ratschläge gelten auch für den Verwaltungsbereich Ihrer Anwendung.
  • Password Protect your Admin Area, so etwas wie htpasswd für die Webkonsole projiziert alle zugrunde liegenden Anwendungsschwachstellen und schafft eine zusätzliche Eintrittsbarriere
  • Dateiberechtigungen sperren. 'Upload-Ordner' sind berüchtigt dafür, Einstiegspunkte für alle möglichen unangenehmen Dinge zu sein.
  • Erwägen Sie, Ihre Anwendung hinter einem privaten Netzwerk zu platzieren und nur Ihren Front-End-Load-Balancer und eine Jumpbox offenzulegen (dies ist eine typische Einrichtung in AWS mit VPCs)

Lösung 2:

Wie kann ich diesen Angriff unterdrücken und nachfolgende Angriffe verhindern

Normalerweise ändere ich den Standard-SSH-Port von 22 auf einen anderen wie 1122. Dies verhindert viele automatische Angriffe von Bots, aber ein einfacher Port-Scan kann ihn erkennen. Wie auch immer:

vi /etc/ssh/sshd_config

und bearbeiten Sie Port 22 an Port 1122 , aber das ist nicht genug.

Automatische IPTables-Regeln für Bruteforce

Ich verwende log2iptables https://github.com/theMiddleBlue/log2iptables statt Fail2ban, weil es sich um ein einfaches Bash-Skript handelt, das jede Protokolldatei mit einem regulären Ausdruck parst und iptables ausführt. Wenn beispielsweise 5 Übereinstimmungen auftreten, löscht log2iptables die spezifische IP-Adresse. Es ist cool, weil er die Telegram-API verwendet und mir eine Nachricht auf meinem Telefon senden kann, wenn er ein Problem findet :)

hoffe das hilft!

Lösung 3:

Ich habe das gerade zusammengestellt, alle 15 Minuten als Cronjob ausführen usw.:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

Linux
  1. Wie stoppen Sie den systemd-Dienst

  2. Wie beende ich eine SSH-Verbindung?

  3. Wie verweigere ich den Zugriff auf deaktivierte AD-Konten über Kerberos in pam_krb5?

  4. SSH - So fügen Sie den Befehl -t in die Datei ~/.ssh/config ein

  5. Wie kann ich verhindern, dass Tintenfisch entdeckt wird?

So ändern Sie den SSH-Port auf VPS

So erstellen Sie einen SSH-Alias ​​unter Linux

So gewähren oder verweigern Sie einem bestimmten Benutzer oder einer bestimmten Gruppe in Linux den SSH-Zugriff

So verhindern Sie ein Timeout von SSH

So stoppen Sie einen Spam-Server

So verhindern Sie, dass SSH die Verbindung trennt, wenn es eine Weile inaktiv war