Wiedza caddy geoip

SiewcaRyżu

Kimchi & Pikachu
Q's Architect
9 Październik 2023
947
3
639
93
23
QNAP
null
Ethernet
null
Zbudowac caddy z pluginem github.com/porech/caddy-maxmind-geolocation

Upewnić się ze caddy ma załadowany moduł
└─▪ caddy list-modules | grep -i geo
http.matchers.maxmind_geolocation

W Caddyfile można wtedy używać
Kod:
test.domena.ovh {
[...]
# stworzyć matcher  używający modułu maxmind'a
        @mygeofilter {
                maxmind_geolocation {
# ścieżka do pliku GeoLite2-Country.mmdb
                        db_path "/var/lib/GeoIP/GeoLite2-Country.mmdb"
# odrzucaj połączenia z Rosji , Chin i nieznane (nie zidentyfikowane w bazie maxminda)
                        deny_countries RU CN UNK
                }
        }
# jeśli reguła pasuje to zrób coś .. w tym przypadku przekieruj
        reverse_proxy @mygeofilter localhost:8180
}

source: GitHub - porech/caddy-maxmind-geolocation: Caddy v2 module to filter requests based on source IP geolocation
 
dodam cos od siebie bo zawsze bylem leniwy do robienia czegos z reki :D
Auto updater GeoLite2-Country.mmdb
Dla wersji dokerowej bedzie jeden mod na koncu, tutaj opis dla wersji standalone na hoscie:
1. rodziny plik /etc/caddy/update_geolite2.sh

Kod:
#!/bin/bash

LICENSE_KEY="Twoja Licka z https://www.maxmind.com/"

DB_PATH="/etc/caddy/GeoLite2-Country.mmdb"

curl -s -L "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=$LICENSE_KEY&suffix=tar.gz" -o /tmp/GeoLite2-Country.tar.gz
mkdir -p /tmp/GeoLite2-Country
tar -xzf /tmp/GeoLite2-Country.tar.gz -C /tmp/GeoLite2-Country --strip-components=1
mv /tmp/GeoLite2-Country/GeoLite2-Country.mmdb $DB_PATH

rm -rf /tmp/GeoLite2-Country /tmp/GeoLite2-Country.tar.gz
Pozniej klasycznie
Kod:
sudo chmod +x /etc/caddy/update_geolite2.sh
pozniej dajemy do crona tutaj przyklad aby co poniedzialek o 03:00 pobieralo nowa baze
Kod:
sudo crontab -e

0 3 * * 1 /path/to/your/db/update_geolite2.sh
I na koncu rester caddy
Kod:
sudo systemctl restart caddy


A jesli chodzi o wersje na dockerze to cron jak w przypadku standalone i mala zmiana aby mapowalo plik z DB lokalnie w docker-compose.yml (podmiana tylko sciezki aby byla zgodna w lokalizacja .mmdb)
Kod:
volumes:          
- /path/to/your/db/GeoLite2-Country.mmdb:/etc/caddy/GeoLite2-Country.mmdb

i tyle.
Elo