Add script 'dmarc-test.sh'.
This commit is contained in:
154
dmarc-test.sh
Executable file
154
dmarc-test.sh
Executable file
@@ -0,0 +1,154 @@
|
||||
#!/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"
|
||||
|
||||
Reference in New Issue
Block a user