DNSBL / dnsbl-ipset Auswertung
Diese Seite beschreibt das Auswertescript für dnsbl-ipset,
das auf dem Server wöchentlich Top-Statistiken aus `matches.log` erzeugt und per Mail verschickt.
Zweck Das Script verarbeitet die von `dnsbl-ipset.sh`
erzeugte Datei `/var/log/dnsbl-ipset/matches.log`
und erstellt daraus wöchentliche Reports:
- Häufigste IPs (/32) * Häufigste /24-Netze
- Häufigste /16-Netze Nur Einträge mit Score >= 0 (also ohne Whitelist-Treffer) werden berücksichtigt.
- Log-Quelle: /var/log/dnsbl-ipset/matches.log
- Cron-Integration Ein eigener wöchentlicher Cronjob ruft das Script auf,
z.B. als `/etc/cron.weekly/dnsbl-report`:
#!/bin/sh
# Version: 01
# Description: Run weekly DNSBL matches report
/root/scripts/dnsbl.shDanach ausführbar machen:
chmod +x /etc/cron.weekly/dnsbl-report - Anpassungen * `TOP` im Script steuert die Anzahl der protokollierten Zeilen pro Report (Default: 200).
- Bei Bedarf können Crawler-Netze (z.B. Googlebot, Bing, OVH) über zusätzliche `grep -v` Filter aus `extract_ips()` ausgeschlossen werden.
- Weitere Report-Varianten (z.B. Score-Summen pro IP) können in eigenen Blöcken ergänzt werden.
#!/bin/sh
# Script Version: 03
# Description: DNSBL weekly report based on matches.log (TOP N per /32,/24,/16), ignoring whitelists
# Set variables
# ========
LOG_FILE=/var/log/dnsbl-ipset/matches.log
RECIPIENT=srvlogz@bubuit.net
DATE_STR=$(date)
TOP=200 # number of lines to keep per report (adjust if needed)
# Exit quietly if log file does not exist or is empty
# ========
if [ ! -s "$LOG_FILE" ]; then
exit 0
fi
# Helper: extract relevant IPs (ignore negative scores = whitelists)
# Format: "<score> <ip> # <dnsbl-result> from <list>"
# ========
extract_ips() {
awk '$1 >= 0 {print $2}' "$LOG_FILE" \
| grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
}
# Main Process
# ========
# /32 – einzelne IPs (TOP N)
extract_ips \
| sort \
| uniq -c \
| sort -nr \
| head -n "$TOP" \
| mail -s "dnsbl matches.log /32 weekly TOP $TOP $DATE_STR" "$RECIPIENT"
# /24 – erste drei Oktette (TOP N)
extract_ips \
| awk -F. '{print $1"."$2"."$3"."}' \
| sort \
| uniq -c \
| sort -nr \
| head -n "$TOP" \
| mail -s "dnsbl matches.log /24 weekly TOP $TOP $DATE_STR" "$RECIPIENT"
# /16 – erste zwei Oktette (TOP N)
extract_ips \
| awk -F. '{print $1"."$2"."}' \
| sort \
| uniq -c \
| sort -nr \
| head -n "$TOP" \
| mail -s "dnsbl matches.log /16 weekly TOP $TOP $DATE_STR" "$RECIPIENT"
exit 0