geoip: Einsatz um seine im Netz stehende Raspi vor unberechtigten Zugriffen zu schützen ?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Bei mir läuft @home ein Seafileserver der aus dem Internet erreichbar ist. Leider habe ich keine DMZ ;(. Es gibt aber diverse iptables Rules um den Server soweit wie möglich vom lokalen Netz zu isolieren. Auch sind Seafile fail2ban Regeln aktiv. Zusaetzlich hat Seafile ein RateLimitThrotteling so dass BruteforcePasswordGuessVersuche ins Leere laufen.

    Immer wieder sah ich im Log Zugriffsversuche aus CN, SU, US, SG, IN, ... - ca 1-2 pro Tag - obwohl mein Server nur ganz bestimmten Personen bekannt ist. Klar, da scannt jemand IP Ranges nach offenen Ports und findet dann auch meinem offenen SeafilePort. Das ist für mich so als würde jemand an meiner Haustuer ruetteln und pruefen on sie verschlossen ist und das stoert mich :mad_GREEN:.

    Ich habe dann geoip gefunden und es bei mir aktiviert. Da meine Benutzer nur in D sitzen habe ich seitdem vor denen Ruhe. Es ist mir klar dass es natuerlich immer noch boese Buben in D geben kann und wird. Die werden auch kein Erfolg haben (s.o.). Aber ich finde es trotzdem sinnvoll geoip zu aktivieren und damit die Tuerruetteler auszusperren.

    Empfindet Ihr aehnlich und schuetzt Ihr Eure im Netz stehende Raspis aehnlich oder sind Euch die Tuerruettler egal?

  • geoip: Einsatz um seine im Netz stehende Raspi vor unberechtigten Zugriffen zu schützen ?? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    Hallo framp,

    ich hatte mal vor einer Weile bei einem RPi eine Portweiterleitung für SSH eingerichtet. Es dauerte natürlich nicht lange bis der erste Kandidat versucht hat durch die Tür zu kommen. Der RPi war halbwegs gesichert, kein sudo, keine SSH-Anmeldung für root, starke Passwörter und nicht in meinem "normalen" Netzwerk.

    Statt das Ding vom Netz zu nehmen, wollte ich wissen wie energisch die Türrüttler (wie Du sie nennst) sind und habe mal den Port nach außen von 22 in einen vierstelligen "Nichtstandardport" geändert. Damit meine ich eine Zahl, die nicht Standard wie z.B. 8080 für HTTP ist, also eher sowas wie 7481. Von da an keine Klingelputzer mehr. Bei denen scheint der schnelle Hack sinnvoll zu sein um Masse zu machen und sich nicht an einzelnen Systemen aufzureiben. :denker:

    Klar ist das nur eine Verschleierung, aber wenn die bösen Buben die Tür schon sehen, dann muss man denen ja nicht auch noch zeigen wo das Schlüsselloch ist. ;)

  • Die Erfahrung Port 22 auf Port 4711 zu legen habe ich auch gemacht. Dann ist Ruhe im Karton. Hatte ich auch ueberlegt beim Seafile zu machen. Es gibt aber Gruende warum es nicht geht.

    wend Die Mac kommt bei Requests aus dem Internet nicht an. Wuerde nur bei lokalen Requests funktionieren.

  • Dann bin ich wohl ein Paranoia :lol:

    Allerdings moechte ich noch kurz berichten was mir auch fail2ban im Zusammenhang mit geoip Blocking Anfang der Woche zutage brachte: So ganz grundlos ist meine Paranoia eben doch nicht :fies:

    Ich hatte eine fail2ban Regel geschrieben die mich immer auf ein reject von geoip hinwies und irgendwann hatte ich morgens um die 20 eMails von fail2ban drin. Es zeigte sich dann dass da jemand ab 5:00 Uhr penetrant 1-3 Mal pro Sekunde versuchte bei mir reinzukommen. Da der Fail2Ban nur 10 Minuten lang blockte bekam ich eben alle 10 Minuten eine email. Nachdem ich den Ban auf 1 Stunde gesetzt hatte und mir vom Provider durch einen reconnect eine neue IP geben lies war die IP nach etwa 15 Minuten wieder am syn flooden :@Er macht also offensichtlich ein Netzscan nach offenen Ports in meinem Providernetz.

    Danach habe ich die IP mit DROP generell geblocked und Ruhe war. Allerdings hat der immer noch ca 3 Tage lang rumprobiert bis er aufgegeben hat. Ich hoffe er hat in dieser Zeit keine Opfer mit offenen Ports in meinem Providernetz gefunden :-/

    Interessant war dass bei meinem Gegenüber der PPTP Port offen war und ein nmap OS Scan vermutet einen Linux Router (Standort: USA). Da PPTP unsicher ist vermute ich dass da jemand einen Router bei einem unbedarften Opfer in den USA fuer seine Netzwerkscans und SYN flooding benutzt hat.

  • Ich kann nur jedem der seine Raspi am Internet haengen hat geoip und fail2ban zu aktivieren. Entweder um auch so Paranoia zu sein wie ich :shy: oder auch nur um mal zu sehen aus welchen Ländern der Welt doch so Portscans aufschlagen. Es sollte aber ein non Standard Port sein der offen ist. Ansonsten wird man mit fail2ban Notifications erschlagen (Port 80, 443, 22, ...)

  • Ich kann nur jedem der seine Raspi am Internet haengen hat geoip und fail2ban zu aktivieren.

    fail2ban auf jeden Fall :thumbup:

    oder auch nur um mal zu sehen aus welchen Ländern der Welt doch so Portscans aufschlagen.

    Wenn man nur lang genug wartet, kommen sie von überall, in Scharen:

    Ansonsten wird man mit fail2ban Notifications erschlagen (Port 80, 443, 22, ...)

    Wer lässt denn den SSH-Port auf 22? :shy:

    Das in Verbindung mit Standard-Passwörtern und es dauert keine 5 Minuten, bis jemand drin ist. Wennschon, dennschon: dann aber bitte auch root-Login erlauben :bravo2:

    Edit: auch schön sind die "halbherzigen" Versuche, Standard-URLs abzugrasen :)

  • Wer Standardports benutzt ist selber Schuld :shy:

    Wenn man geoip vorschaltet hat fail2ban aber nicht mehr so viel zu tun ;)

    Die Graphik gefaellt mir :thumbup: Wie hast Du die erzeugt? Ich hatte schon mal dran gedacht meine Logs mit geoip auszuwerten. Wenn es dazu ein Tuelchen gibt ist ja noch besser.

  • Hi framp,

    Die Graphik gefaellt mir :thumbup:

    Danke :)

    Wie hast Du die erzeugt? Ich hatte schon mal dran gedacht meine Logs mit geoip auszuwerten. Wenn es dazu ein Tuelchen gibt ist ja noch besser.

    Genau das wollte ich auch mal machen. Ich glaube, ein gutes fertiges Tool hatte ich nicht gefunden, jedenfalls keins, was eine Karte darstellt (Tools zum auswerten von Server-Logs gibt's natürlich schon).

    Also hab ich's selber gemacht: serverseitig dekomprimiert ein (Python)-Programm die vorhandenen .log.gz-Dateien und extrahiert aus jeder Zeile (siehe oben) die IP-Adresse. Die werden dann alle einem Geo-IP-online-Dienst vorgeworfen (kann man sicher performanter mit einer lokalen GeoPI-DB machen...), zurück kommt ein großer "Haufen" JSON. Eine kleines JS-Script zeichnet für jeden Eintrag an der passenden Stelle einen fast durchsichtigen Punkt auf eine Leaflet.JS-Karte, das summiert sich, fertig.

    Mittlerweile würde ich wohl eine Heatmap bevorzugen, vielleicht mach ich das mal... Ich hab das Mini-Projekt seither nicht mehr angefasst :)

    Wenn Interesse besteht kram' ich den Code mal heraus, räume auf und packe das Teil auf GitHub (...ähh GitLab ;)).

  • So, ich habe jetzt so gut wie jede Zeile Code ein mal umgedreht, unglaublich, wie unflexibel man sowas gestaltet, wenn wirklich nur der eigene Use-Case betrachtet wird. :shy:

    Ich tipp' noch ein README zusammen. Der bisher verwendete Online-Dienst hat sein API als "deprecated" erklärt und verlangt ab 01.07. für die neue Version einen API-Key. Das bau' ich dann als nächstes um, noch funktioniert's ja :lol:

    Bis gleich...

  • Sodele: https://github.com/linusg/serverlog2map

    Daten sammeln und per geoip Location bestimmen ist kein Hexenwerk fuer mich.

    Jap, aber die

    Visualisierung

    ist dann auch nur noch ein kleiner Schritt ;)

    Muss nicht sein.

    Jetzt hab ich nochmal weitergemacht, dann kommt das schon auch noch. Mal sehen, vielleicht bastel' ich da noch ein bisschen weiter... Zumindest eine Config ist jetzt drin.

    Feedback natürlich immer gerne, gut wie schlecht ;)

  • Feedback natürlich immer gerne, gut wie schlecht ;)

    Perfekt :thumbup:

    Habe Dein git gecloned, meine Logs gesammelt und die Config entsprechend updated. Bin dann Deiner Anleitung gefolgt aber bekomme dann bei

    Code
    export FLASK_APP=serverlog2map
    flask run
    Code
    File "/home/framp/github/linusg/serverlog2map/serverlog2map/__init__.py", line 69
        grequests.get(f"https://freegeoip.net/json/{ip}")
                                                       ^
    SyntaxError: invalid syntax

    Dein Code verlangt Python3 :neutral:

    Weisst Du eine gute Methode wie man schnell zwischen 2.7 und 3 hin und her wechseln kann? Bei mir laeuft alles mit 2.7.

  • Jetzt habe ich ein virtual environment mit Python3 aufgesetzt. Trotzdem bekomme ich immer noch

    Code
     File "/home/framp/github/linusg/serverlog2map/venv/lib/python3.5/site-packages/flask/cli.py", line 235, in locate_app
        __import__(module_name)
      File "/home/framp/github/linusg/serverlog2map/serverlog2map/__init__.py", line 69
        grequests.get(f"https://freegeoip.net/json/{ip}")
                                                       ^

    :denker:

    EDIT: Habe die Zeile geaendert in

    Code
        grequests.get("https://freegeoip.net/json/"+ip)

    da ich Python 3.5.2 habe. Das ist ein Feature von 3.6.

    Jetzt bekomme ich

    Python
     File "/home/framp/github/linusg/serverlog2map/serverlog2map/__init__.py", line 8, in <module>
        from serverlog2map.log_reader import parse_log_files
      File "/home/framp/github/linusg/serverlog2map/serverlog2map/log_reader.py", line 10
        ip: str

    Das reicht jetzt erst mal fuer heute. Das es so ein Problem wg der Python Version gibt haette ich nicht gedacht :no_sad:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!