Tags

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.sh

Danach 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