SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird

L

LukaszRT

Grünschnabel
Hallo

Ich bin andauernd Opfer einer Brute Force Attacke. Die IPs die fehlerhafte Logins produzieren werden nach dem 3ten Versuch gesperrt. Aber das Problem ist, dass der Hacker XY IPs hat und trotzdem jeder Stunde hunderte wenn nicht tausende Passwörter probiert. Mittel verschiedener Botnetze. Er hat also hunderte IP tunnel.

Nun will ich folgendes bewirken. Ich will dass der SSHD praktisch nur noch eine einzige IP zulässt. Und zwar die meines zweitservers (statisch). D.h. dass SSH nur noch über diesen PC Login versuche akzeptiert. Alle anderen IP dürfen sich nicht einloggen. Und somit den SSH überhaupt nicht nutzen gar irgend ein Login Versuch unternehmen.

Dazu möchte ich diese IP Adresse in einer Textdatei auf dem Server speichern. Um mir ggf. mittels FTP oder ähnlichen eine hintertür offen zu lassen. Wer hat eine Idee wie ich das bewerkstelligen kann?

Gruß und Danke
 
Hi,

auf die Schnelle gibt es hier zwei mögliche Ansätze.
Der Erste ist, alles außer deinem Server per Firewall/IPtables sperren.
Der Zweite, mittels /etc/hosts.allow nur SSH von deinem Server erlauben.

Lektüre für beides https://www.debian-administration.org - Keeping_SSH_access_secure.

Wenn du dir gedanken um dein Passwort machst, kanns tu SSH auch so Konfigurieren, das nur Logins nur mittls SSH-Key funktionieren.

mfg
HeadCrash

PS:
Pass auf das du dich dabei nicht selbst aussperrst :D, wärst nicht der erste :D
 
Hallo

Also das mit dem /etc/hosts.allow hat schon mal wunderbar geklapt und es hat sich sofort ausgehackt gehabt. Super Sache. Nun würde ich dort aber noch eine IP aus einer extrenen Datei einlesen aber wie?

sshd: 48.5.xxx.xxx
sshd: /opt/data/ip.txt

so scheints nicht zu funktionieren! Die IP 45..... erkennt er. Aber die IP aus der Textdatei nicht.
 
Was spricht gegen ssh-Keys? Damit hat es sich per se "ausgehackt", ohne daß Du irgendwelche kruden Hintertürchen einbauen musst.
 
Also es spricht so nichts gegen SSH-Keys außer eben dass er dann den Port noch belasten kann. Ich habe es jetzt mittlerweile ja hinbekommen, sodass er die IP aus der txt Datei berücksichtigt. Das Problem war ja nur das, dass ich den SSH Service neu starten muss. Das mache ich jetzt via Cronjob alle 30 Minuten. Zudem habe ich mir jetzt was gebastelt, dass er ca. 12 Statische IPs akzeptiert, damit ich mich nicht ausschließe.
Das gute ist natürlich dass er nun gar keinen Conncet mehr annimmt. Das ist meiner Meinung nach echt toll. Weil die Verbindung gar nicht erst aufgebaut wird, sondern das ganze wird halt sofort abgewiesen.
Prinzipiell brauche ich nur noch ein Script mittels der ich weitere IPs in diese TXT Datei anfügen kann, wenn ich mich Mal doch ausschliessen sollte. Ein oder 2 eigene Backdoors. Hierzu würden mir 2 Dinge einfallen.

1.) Soll der Server selbst anfragen ob sich die IP geändert hat. Hier denke ich zum Beispiel auch an DynDNS womit ich schnell und flexibel eine neue IP mitteilen kann falls irgendwie notwendig.
2.) Soll ich dem Server von außen eine IP übermitteln z.b. über FTP oder CGI Script
 
Zuletzt bearbeitet:
Ehrlich gesagt finde ich das eine umständliche, fehleranfällige Lösung für ein nicht-existierendes Problem.

Um es wenigstens halbwegs "professionell" zu haben - schau Dir mal Port-Knocking an.
 
Also wenn ich mir das gerade durchgelesen habe ist es doch prinzipiell das Selbe. Mit dem Unterschied dass dort der Port geöffnet wird. Das Problem beim Protknocking ist ja dass der Server ja trotzdem für die Abfolge lauscht. Zumindest so wie ich es überflogen habe: https://de.wikipedia.org/wiki/Portknocking

Ich kenne mich nicht insoweit aus. Und deshalb kenne ich bestimmte professionelle Lösungen gar nicht erst. Es gibt ganz bestimmt bessere Lösungen. Mit wenigen kniffen funktioniert meine vorerst halt auch. Und das mit 2 oder 3 Zeilen Code. Ich kann dies auch der Professionalität her bestimmt nicht so einschätzen wie Du. Wichtig ist mir halt das ganze zu unterbinden. Ich habe ja eigentlich ja gar kein Problem. Einzige was ich jetzt nur machen muss ist halt sich auf einen meiner anderen statischen Server zu verbinden um von denen aus mittels SSH auf den Server zuzugreifen. Im Prinzip kann man getrost sagen ein unprofessioneller Tunnel. Da muss ich dir wohl im Prinzip vollkommen Recht.

Darüber hinaus habe ich noch die weniger professionelle Lösung genommen, ein kleinen Backdoor einzubauen. Für den Fall der Fälle z.B. mittels FTP/DYDNS die Möglichkeit eine weitere IP anzugeben, falls ich zum Beispiel im Urlaub notmäßig was erledigen muss. Klar ist das nicht professionell. Aber auch kein Aufwand. Ich brauche im Prinzip nur eine Shell mit 5 bis 6 Zeilen Code.

Das habe ich vorgenommen:
1.) Eintrag in /etc/hosts.deny
Das Ganze war jetzt mal abgesehen von der Theorie die Zeit und Hilfe von Euch in Anspruch genommen hat, zum nachmachen oder wiederholen eine Arbeit von 10 Minuten. Also nix wildes. Und es funktioniert. Und ich wüsste auch nicht ganz wo die Gefahren sind. Denn wenn irgend was beim Abgleich schief geht, dann bleiben Statische IPs. Und zum Schluss immer noch der Remote Zugriff vom Provider vor Ort. Zudem bleiben meine Statischen Server immer Login Berechtigt. Der anderen Sicherheit halbe sind ja alle Anderen Verbindungen abgewiesen.

Ich denke Mal wenn ich es zumindest selbst gemacht hab, verstehe ich auch vollkommen wie ich es gemacht habe und wie es auch funktioniert. Ich bin sicher weder Guru noch Experte. Aber den Port hab ich erst Mal da wo ich ihn haben wollte. Insofern bin ich auch dankbar für die Hilfe.

Zu aller letzt bleibt immer noch die RemoteHand auf 127.0.0.1 aber von außen mit einer Fermden IP noway.

Ich weis nur eines. Ich habe Monate lang BF Attacken gehabt. Da bat ich sogar meinen Provider um Hilfe der per Remote Firewall und alles gemacht hat. Und trotzdem war meinte AUTH Log voll fehlherhafter Login Versuchen. Und zwar manchmal tausende die Stunde. Und nun habe ich seit 48 Stunden Ruhe. Nicht ein Eintrag. Firewall hin und her. Und IP Tables super Sache. Allerdings bringt das nichts wenn ständig eine andere IP sich anmeldet. Wenn der Hacker ein Pool von praktisch unendlich IPs nutzt nützt die Firwall auch nichts. Ausserdem hat er immer hin 1 2 oder 3 Loginversuche je IP bis er in der Table landet. So hat er genau genommer erst mal nicht 1 einzigen Versuch.

Also zumindest der Effekt ist da. Ich habe zumindest nicht ein einzigen Faillogin in der Auth mehr. Das SSH kann er so erstmal vergessen.

Und jetzt fass ich mal zusammen.
Er kann jetzt 3 oder 4 IPs nutzen. Dazu muss er wissen welche. Und wenn er diese nutzt, d.h. andere Server hackt oder den Backdoor ausnutzen kann, dann bleibt ihm für diese IPs immer nur noch 2 Login Versuche je erlaubte IP ehe er 30 Minuten gesperrt ist. Und das sind ca. 5 IPs die ich zulasse. Jeder interligente Hacker weiss dass dies Zeitverschwendung wäre. Und würde dann vermutlich was anderes attackieren.

Jetzt kann er sich einfach in irgend ein IP Bot netzt einloggen und ins Fäustchen lachen dass er nach 3 Versuchen von der Firewall gesperrt wurde, weil er ja die nächsten 3 Versuche mit den nächsten IP macht. Einfach sinnlos sowas. Das einzige was ihm erschwert wird ist hier der Zugriff auf ein Botnetz wie für das Anonyme Surfen fast jeder Hacker doch ehe hat. Der hat jetzt also z.B. auf einerm Rechner 10 Vserver mit nem kleinen Script hat er je IP 3 Versuche dann IP wechsel sagen wir also 3 Versuche je 5 Sekunden o.ä und VServer dann hat er in der Minute 30 Logins je V-Server und 300 Die Miunte je PC. Wenn er 5 Kisten hat kann er soch tausende Loginversuche die Minute machen. Klar landet die IP in der Table aber das macht ja nix.

Bsp: 1PC x 10 Vserver x 3 Loginversuche je 5 Sekunden je IP Wechsel = 21.600 Loginversuche / Stunde

Genau so hat er es praktisch bei mir gemacht.

Und ja knocking (kenne mich nicht aus) dürfte doch auch die Angriffsfläche bieten wenn ich selbst mich verbinde. Oder mein PC ber SSH sein Backup abholt oder ähnliches. In vielen Fällen muss der Port geöffnet werden. Wenn dass dann so ist und der Backup läuft kann er dann wieder 10.000 Passwörter probieren.
 
Zuletzt bearbeitet:
Hast du schon mal daran gedacht SSH einfach auf nen anderen Port zu legen?
Also wenn es nur irgendwelche script kiddis sind die einfach hosts scannen ob da ssh drauf läuft bist du die quasi damit auch schon los.
 
Ein Portscan sollte ja eigentlich eine kleine Hürde sein. Da kann er sogar Standarttools nutzen. Das würde er denke ich als erstes machen auf der Suche nach Lücken.
Es ist eine harte Maßnahme. Aber wirksam und ich denke an dieser Stelle auch notwendig. Interessant ist mein Server deshalb weil es was zu stehlen gibt. z.B. Prepaidcard Codes.
 
(1) Standard
(2) Oh je.

... ich sehe schon, ein paar Grundlagen sollten da durchaus noch nachgearbeitet werden. Sorry, aber viele von Deinen Gedanken oben sind falsch - und wie bereits mehrfach gesagt ließe sich das alles völlig problemlos durch ssh (nur) mit key-auth erledigen ohne auf irgendwelche IPs einschränken zu müssen. Ein IP-Filter ist immer nur ein zusätzlicher Schutz...
 
Ah, jetzt erfährt man auch zum ersten Mal das es nicht der ganz normale Beifang ist...
Kann marce da nur Zustimmen und es ggf. um die Idee erweitern, dir nen VPN aufzusetzen und darin dein SSH gedöns zu machen.
OpenVPN hat z.B. die Option port-share damit kannst du es z.B. auf dein https port legen, so ist er quasi unsichtbar auch vor regulären portscans, wenn du ssh dann nur über den vpn tunnel machen würdest, sähe es von außen so aus als wäre er überhaupt gar nicht fern-wartbar auf normalem Wege.
 
Zurück
Oben