Een praktische workflow om logstatistieken te verzamelen en misbruik te blokkeren via UFW.
Waarom dit nodig is
In productie zien we vaak grote hoeveelheden verkeer naar
/accounts/-paden zoals login, signup en social login.
Dit zijn typische doelen voor bots, scraping of brute‑force activiteiten.
Door verkeer te analyseren en IP’s met opvallend veel requests te blokkeren,
beperk je overbelasting en beveilig je de site beter.
Stap 1 — Logstatistieken opslaan
We parsen eerst het access‑log en schrijven per datum een JSON‑database.
URL’s worden genormaliseerd (alles na ? of # wordt verwijderd),
zodat statistieken generiek blijven.
python3 log_stats.py parse --log /var/log/apache2/vindazo_fr_access.log --db log_stats.json
Meerdere logfiles?
python3 log_stats.py parse --log /pad/naar/log1.log --log /pad/naar/log2.log --db log_stats.json
Stap 2 — Statistieken bekijken
Bekijk per datum de meest opgevraagde URL’s en de top IP’s.
Standaard worden static assets zoals .css en .js gefilterd.
python3 log_stats.py report --db log_stats.json --date 2026-02-01 --top-urls 20 --top-ips 20
Onder elke IP zie je nu ook de top‑URL’s voor die IP. Wil je meer of minder?
python3 log_stats.py report --db log_stats.json --date 2026-02-01 --top-ips 20 --per-ip-urls 5
Static assets toch meenemen?
python3 log_stats.py report --db log_stats.json --date 2026-02-01 --include-static
Stap 3 — IP’s blokkeren die /accounts/ misbruiken
Met de verzamelde statistieken blokkeren we IP’s die heel veel requests naar
/accounts/ doen. Dit is meestal een sterke indicatie van geautomatiseerd verkeer.
Dry‑run (alleen tonen)
python2 block_accounts_abuse.py --db log_stats.json --date 2026-02-01 --min-requests 200 --dry-run
Direct blokkeren via UFW
python2 block_accounts_abuse.py --db log_stats.json --date 2026-02-01 --min-requests 200
De geblokkeerde IP’s worden bijgehouden in
blocked_accounts_ips.txt om dubbele regels te vermijden.
Python 2 of Python 3?
Zowel Python 3 als Python 2 worden ondersteund.
Voor Python 2 gebruik je log_stats_py2.py.
python2 log_stats_py2.py parse --log /var/log/apache2/vindazo_fr_access.log --db log_stats.json
python2 log_stats_py2.py report --db log_stats.json --date 2026-02-01
Samengevat
- Parse logs en bouw per‑dag statistieken op.
- Bekijk top‑URL’s en top‑IPs met per‑IP URL‑details.
- Blokkeer automatisch IP’s die abnormaal veel
/accounts/requests doen.
Deze workflow werkt snel, is herhaalbaar en helpt om bot‑verkeer te beperken zonder echte gebruikers te blokkeren. https://github.com/OnlineSolutionsGroupBV/DropIPsByCountry

Comments
Post a Comment