155 lines
3.9 KiB
Bash
Executable File
155 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Einfaches DMARC-Testskript für Postfix + OpenDMARC
|
|
# --------------------------------------------------
|
|
# Es simuliert eine eingehende Verbindung über 127.0.0.1:10025
|
|
# und setzt via XFORWARD eine beliebige Absender-IP.
|
|
#
|
|
# MODI:
|
|
# 1) Presets:
|
|
# dmarc-test.sh crsend
|
|
# dmarc-test.sh google
|
|
#
|
|
# 2) Frei:
|
|
# dmarc-test.sh IP MAIL_FROM RCPT_TO [FROM_HEADER] [SUBJECT]
|
|
#
|
|
# Beispiele:
|
|
# dmarc-test.sh crsend
|
|
# dmarc-test.sh google
|
|
#
|
|
# dmarc-test.sh 178.77.121.168 newsletter@cadus.org newsletter@cadus.org
|
|
# dmarc-test.sh 2607:f8b0:4864:20::114a feray@cadus.org ckubu@cadus.org "Feray <feray@cadus.org>" "Google DMARC Test"
|
|
#
|
|
|
|
SERVER="127.0.0.1"
|
|
PORT="10025"
|
|
|
|
# Pfad zum Mail-Log anpassen, falls bei dir anders
|
|
LOGFILE="/var/log/mail.log"
|
|
|
|
preset="$1"
|
|
|
|
if [ -z "$preset" ]; then
|
|
echo "Usage:"
|
|
echo " $0 crsend"
|
|
echo " $0 google"
|
|
echo " $0 IP MAIL_FROM RCPT_TO [FROM_HEADER] [SUBJECT]"
|
|
exit 1
|
|
fi
|
|
|
|
# === Presets auflösen =====================================================
|
|
|
|
case "$preset" in
|
|
crsend)
|
|
IP="178.77.121.168"
|
|
MAIL_FROM="newsletter@cadus.org"
|
|
RCPT_TO="newsletter@cadus.org"
|
|
FROM_HEADER="CRSend Test <newsletter@cadus.org>"
|
|
SUBJECT="CRSend DMARC Test"
|
|
echo "[Preset] CRSend gewählt."
|
|
;;
|
|
google)
|
|
# Beispiel-IP aus deinem Log:
|
|
# mail-yw1-x114a.google.com[2607:f8b0:4864:20::114a]
|
|
IP="2607:f8b0:4864:20::114a"
|
|
MAIL_FROM="feray@cadus.org"
|
|
RCPT_TO="ckubu@cadus.org"
|
|
FROM_HEADER="Feray <feray@cadus.org>"
|
|
SUBJECT="Google Workspace DMARC Test"
|
|
echo "[Preset] Google Workspace gewählt."
|
|
;;
|
|
*)
|
|
# Freier Modus
|
|
IP="$1"
|
|
MAIL_FROM="$2"
|
|
RCPT_TO="$3"
|
|
FROM_HEADER="$4"
|
|
SUBJECT="$5"
|
|
;;
|
|
esac
|
|
|
|
# === Argumente im freien Modus prüfen ======================================
|
|
|
|
if [ "$preset" != "crsend" ] && [ "$preset" != "google" ]; then
|
|
if [ -z "$IP" ] || [ -z "$MAIL_FROM" ] || [ -z "$RCPT_TO" ]; then
|
|
echo "Usage:"
|
|
echo " $0 crsend"
|
|
echo " $0 google"
|
|
echo " $0 IP MAIL_FROM RCPT_TO [FROM_HEADER] [SUBJECT]"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Defaults setzen, falls leer
|
|
if [ -z "$FROM_HEADER" ]; then
|
|
FROM_HEADER="$MAIL_FROM"
|
|
fi
|
|
|
|
if [ -z "$SUBJECT" ]; then
|
|
SUBJECT="DMARC test from $IP"
|
|
fi
|
|
|
|
if [ ! -f "$LOGFILE" ]; then
|
|
echo "WARN: Logfile $LOGFILE existiert nicht. Bitte Pfad im Skript anpassen."
|
|
exit 1
|
|
fi
|
|
|
|
echo
|
|
echo "== DMARC-Test =="
|
|
echo " IP : $IP"
|
|
echo " MAIL FROM : $MAIL_FROM"
|
|
echo " RCPT TO : $RCPT_TO"
|
|
echo " From-Header: $FROM_HEADER"
|
|
echo " Subject : $SUBJECT"
|
|
echo " Server : $SERVER:$PORT"
|
|
echo
|
|
|
|
# Startposition im Log merken
|
|
START_LINES=$(wc -l < "$LOGFILE" 2>/dev/null || echo 0)
|
|
|
|
# Einzigartige Test-ID für die Mail (zum Wiederfinden im Log, falls nötig)
|
|
TEST_ID="DMARC-TEST-$(date +%s)-$$"
|
|
|
|
# SMTP-Dialog bauen
|
|
TMP=$(mktemp)
|
|
{
|
|
echo "EHLO dmarc-test"
|
|
echo "XFORWARD ADDR=$IP NAME=test PROTO=ESMTP HELO=test"
|
|
echo "MAIL FROM:<$MAIL_FROM>"
|
|
echo "RCPT TO:<$RCPT_TO>"
|
|
echo "DATA"
|
|
echo "Subject: $SUBJECT"
|
|
echo "From: $FROM_HEADER"
|
|
echo
|
|
echo "$TEST_ID"
|
|
echo "Dieser Text ist ein DMARC-Testlauf am $(date)."
|
|
echo "."
|
|
echo "QUIT"
|
|
} > "$TMP"
|
|
|
|
echo "== Sende Test-Mail über nc …"
|
|
nc "$SERVER" "$PORT" < "$TMP"
|
|
NC_RC=$?
|
|
|
|
rm -f "$TMP"
|
|
|
|
if [ "$NC_RC" -ne 0 ]; then
|
|
echo "FEHLER: nc konnte nicht erfolgreich mit $SERVER:$PORT sprechen (rc=$NC_RC)."
|
|
exit 1
|
|
fi
|
|
|
|
# Kurz warten, damit Logs geschrieben sind
|
|
sleep 2
|
|
|
|
echo
|
|
echo "== OpenDMARC-Logzeilen seit Start des Tests =="
|
|
echo "(aus $LOGFILE, gefiltert auf 'opendmarc' und die Queue-ID/Testzeit)"
|
|
echo
|
|
|
|
tail -n +"$((START_LINES+1))" "$LOGFILE" | grep opendmarc || echo "Keine neuen opendmarc-Zeilen gefunden."
|
|
|
|
echo
|
|
echo "Hinweis: Falls du die Mail selbst im Log genauer suchen willst, nutze z.B.:"
|
|
echo " grep \"$TEST_ID\" $LOGFILE"
|
|
|