Geoblocking

  • Kennt jemand eine möglichst einfache Methode für geoblocking in Ubuntu?

    (EIne die nicht mit aktiven fail2ban und ufw in Konflikt gerät)

    Einige meiner Server müssen eigentlich nur innerhalb DE/AT/CH erreichbar sein. (Also evtl. Whitelist?)

    Die ganzen Asiaten und Amis, die ständig auf ssh anklopfen oder sql-Injections versuchen, bräuchte ich nicht unbedingt. ;)


    EDIT:

    Vorsicht!

    Allzu restriktives Geoblocking über Whitelisting kann unangenehme Nebenwirkungen haben, habe ich leider festgestellt:

    Geoblocking - netcup Kundenforum
    Kennt jemand eine möglichst einfache Methode für geoblocking in Ubuntu? (EIne die nicht mit aktiven fail2ban und ufw in Konflikt gerät) Einige meiner Server…
    forum.netcup.de

  • Ich selbst verwende kein Geoblocking, würde aber zuerst einen Blick auf https://github.com/friendly-bits/geoip-shell werfen.

    Kann ich empfehlen

    War schnell und problemlos installiert und scheint sogar zu funktionieren.

    Der Server ist jetzt tatsächlch nur noch aus DE/AT/CH erreichbar. (Mit Proxy getestet)


    EDIT:

    Grml... Jetzt habe ich mich beim rumtesten, doch glatt selbst ausgesperrt. ^^

  • Ist die Doku gut? Falls nicht: Magst du ein netcup-Tutorial erstellen? 😅

    [RS] 2000 G11 | 1000 G11 | 2x Cyber Quack | Vincent van Bot

    [VPS] 2000 ARM G11 | 1000 G9 | mikro G11s | 4x nano G11s
    [WH] 8000 SE | 4000 SE | 2000 SE

  • Interessantes Tool. Wenn ich das richtig verstanden habe, kann man auch bestimmte Ports von der Sperre ausnehmen? Kann das jemand bestätigen?

    Ja, kann man.Ich habe es aber bei mir noch nicht durchgetestet.

    Letztlich ist es ja nur ein Aufsatz für nftables, der einem die Arbeit abnimmt, die entsprechenden Regeln per Hand zu erstellen.

    (Kann also auch durchaus lehhrreich sien, wenn man sich nach Konfigurationsänderung mit nft die Regeln ausgeben lässt und vergleicht, was das Tool denn nun überhaupt gemacht hat)

  • Ich habe geoip-shell jetzt auch kurz installiert, und ja, das mit den Ports scheint einwandfrei zu funktionieren.


    Auf meinem Testserver sind aktuell nur IP-Adressräume aus Deutschland zugelassen, aber eine OpenVPN-Verbindung ist weltweit möglich. Getestet habe ich das über meinen VPN-Anbieter. Die Installation und Konfiguration von geoip-shell war wirklich sehr einfach und Fail2ban hat aktuell überhaupt nichts mehr zu tun. 🙂


    Ich lasse das jetzt noch ein paar Wochen im Testbetrieb laufen und werde noch ein paar Einstellungsmöglichkeiten ausprobieren, aber das Ganze hat wirklich potenzial um dauerhaft zu bleiben. Danke @m_ueberall für den Tipp!


    Kann also auch durchaus lehhrreich sien, wenn man sich nach Konfigurationsänderung mit nft die Regeln ausgeben lässt und vergleicht, was das Tool denn nun überhaupt gemacht hat.

    👍👍👍

  • Die Unterschiede sind sichtbar.

    Apache-Zugriffe:

    pasted-from-clipboard.png


    Interessanterweise sind in der map trotzdem einige Zugriffe aus USA und Finnland dargestellt.

    Entweder liegt also RIPE (das geoip-shell genutzt wird) bei einigen IP-Subnetzen falsch oder ipinfo.io (Die Seite, die die Karte erstellt hat)


    Bei den echten Attacken (festgestellt mit modsecurity) ist der Unterschied noch deutlicher. Da kommt nun kaum noch was an:

    pasted-from-clipboard.png

  • Ja das wollte ich noch anmerken. Unter Umständen kann es auch sein das vereinzelte - in den meisten Fällen amerikanische - Netzwerke nicht augeschlossen sind, weil die IP Subnetze nicht immer tagesaktuell sind oder anders oder falsch hinterlegt sind.


    z.B. europäischer Hosting Anbieter dessen ASN auch für die Server in der USA verwendet werden

  • Hinweis:

    Restriktives Geoblocking über Whitelisting, wie ich es hier nutze, verhindert u.U. das Erstellen oder Erneuern von letsenrypt-Zertifikaten.

    (Also evtl. auf DNS-challenge umschwenken. Oder halt manuell erneuern und dazu temporär das geoblocking abschalten)

  • Die Let's Encrypt Server stehen in den USA, wenn du eine Whitelist ohne USA konfiguriert hast und die Ports 80/443 darüber mit gefiltert werden, dann funktioniert die HTTP-Challenge nicht mehr. In geoip-shell können zwar IP-Adressen von dem Filter ausgenommen werden, aber Let's Encrypt veröffentlicht leider keine IP-Adressen seiner Server.

    Wenn du certbot benutzt, besteht noch die Möglichkeit, das per „Pre and Post Validation“ Script zu lösen.

    Pre-Hook-Script: Vor dem Renewal wird der Filter für das Protokoll TCP und die Ports 80/443 ausgeschaltet.
    geoip-shell configure -p tcp:allow:80,443

    Post-Hook-Script: Nach dem Renewal werden die Ports wieder gefiltert.
    geoip-shell configure -p tcp:block:all

    Mangels certbot auf meinem Testserver konnte ich das bisher noch nicht ausprobieren, aber genau so würde ich das Versuchen umzusetzen.

  • Ja, die Idee mit den Hook-Skripten scheint mir gut.:thumbup: Danke für den Hinweis.

    Habe ich zwar noch nie genutzt, aber es sollte ja funktionieren, wenn ich einfach jeweils ein bash-skript in die Unterverzeichnisse pre und post in /etc/letsencrypt/renewal-hooks lege. Dann sollte die automatische Erneuerung funktionieren.

    Da es ja nur kurz abgeschaltet wird, sollte auch das radikale geoip-shell on/off tragbar sein. ;)

  • Klappt :)


    Zumindest bei manuellem Aufruf des certbot mit certbot renew --force-renewal --cert-name ...

    Jetzt hoffe ich mal, dass es bei der automatischen Verlängerung auch klappt...

  • Zumindest, wenn die pre/post Scripte in der Konfigurationsdatei für die jeweilige Domain mit hinzugefügt wurden, sollte das bei der automatischen Verlängerung mit ausgeführt werden. Ausprobiert habe ich es aber auch noch nicht.


    /etc/letsencrypt/renewal/${certname}.conf

    Code
    # Options used in the renewal process
    [renewalparams]
    account = xx
    authenticator = apache
    installer = apache
    server = https://acme-v02.api.letsencrypt.org/directory
    pre_hook = bash /path/to/script.sh
    post_hook = bash /path/to/script.sh


    Zur Not könnte man den "certbot renew" mit allen Script-Parametern auch über Cron ausführen lassen