In einem meiner letzten Beiträge habe ich gezeigt, wie der Nginx Proxy Manager Plus mit Crowdsec-Integration eingerichtet werden kann.
Um die Sicherheit eures Revproxys noch zu erhöhen, könnt ihr auch Geoblocking aktivieren.
Dies führt dazu, dass eure Sites nur noch von IP-Adressen aus selber festgelegten Ländern aufgerufen werden können.

Schritt 1:
Erstellt euch eine Account bei Maxmind, um immer die aktuellsten GeoIP-Datenbanken nutzen zu können.
Die GeoIP-Lite Datenbank ist kostenlos nutzbar.
Erstellt in eurem Account einen neuen License-Key und speichert diesen ab.

Schritt 2:
Passt eure „compose.yaml“ Datei an, indem ihr die passende Enviroment-Variable hinzufügt und den „geoipupdate“-Container aktiviert. Tragt im geoipupdate Container eure License ID und den Key ein, den ihr euch bei Maxmind erstellt habt.
Meine „compose.yaml“ sieht z.B. so aus:

services:
  npmplus:
    container_name: npmplus
    image: docker.io/zoeyvid/npmplus:latest
    restart: always
    network_mode: host
    volumes:
      - "/opt/npmplus:/data"
    environment:
      - "TZ=Europe/Berlin"
      - "ACME_EMAIL=mail@beispiel.org" # Anpassen
      - "LOGROTATE=true"
      - "GOA=true"
      - "NGINX_LOAD_GEOIP2_MODULE=true" # Diese Zeile wurde neu hinzugefuegt

  crowdsec:
    container_name: crowdsec
    image: docker.io/crowdsecurity/crowdsec:latest
    restart: always
    network_mode: bridge
    ports:
      - "127.0.0.1:7422:7422"
      - "127.0.0.1:8080:8080"
    environment:
      - "TZ=Europe/Berlin"
      - "COLLECTIONS=ZoeyVid/npmplus"
    volumes:
      - "/opt/crowdsec/conf:/etc/crowdsec"
      - "/opt/crowdsec/data:/var/lib/crowdsec/data"
      - "/opt/npmplus/nginx:/opt/npmplus/nginx:ro"
  geoipupdate:
    container_name: npmplus-geoipupdate
    image: ghcr.io/maxmind/geoipupdate:latest
    restart: always
    network_mode: bridge
    environment:
      - "TZ=Europe/Berlin" # needs to be changed
      - "GEOIPUPDATE_EDITION_IDS=GeoLite2-Country GeoLite2-City GeoLite2-ASN"
      - "GEOIPUPDATE_ACCOUNT_ID=<your-account-id>" # Anpassen
      - "GEOIPUPDATE_LICENSE_KEY=<your-license-key>" # Anpassen
      - "GEOIPUPDATE_FREQUENCY=24"
    volumes:
      - "/opt/npmplus/goaccess/geoip:/usr/share/GeoIP"

Ladet nun die Compose-Datei neu:

docker compose down
docker compose up -d

Schritt 3:
Nun muss die „http_top.conf“ mit dem folgendes Inhalt gefüllt werden.
Die Ländercodes können natürlich nach Bedarf angepasst werden.

nano /opt/npmplus/custom_nginx/http_top.conf

geoip2 /data/goaccess/geoip/GeoLite2-Country.mmdb {
auto_reload 60m;
$geoip2_data_country_code default=DE country iso_code;
}

map $geoip2_data_country_code $allowed_country {
default no;
DE yes;
DK yes;
CH yes;
}

geo $lan-ip {
default no;
192.168.0.0/16 yes;
172.16.0.0/12 yes;
10.0.0.0/8 yes;
}

map $http_upgrade $connection_upgrade_keepalive {
default upgrade;
'' '';
}

Startet nun den npmplus-Container neu:

docker compose restart npmplus

Schritt 4:
In den Hosteinstellungen im NPMplus Dashboard könnt ihr nun im Advanced-Tab diese Einstellungen einfügen:

if ($lan-ip = yes) {
    set $allowed_country yes;
}

if ($allowed_country = no) {
    return 403;
}

Zum testen einfach mit einem VPN in einem gesperrten Land verbinden und testen, ob die Verbindung blockiert wird oder nicht.

Die Liste der Erlaubten Hosts wird in dieser Konfiguration immer in der „http_top.conf“-Datei angepasst.
Vorteil dieser Methode ist, dass nicht alle Hosts im NPMplus Geoblocking aktiv haben, man kann selbst entscheiden, ob Geoblocking bei allen Hosts oder nur bei einzelnen aktiv sein soll.

image_print

Von NRTX

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert