Add documentation and service scripts for DMARC reporting.
This commit is contained in:
47
DOC/DMARC-Report/dmarc-collect.sh
Executable file
47
DOC/DMARC-Report/dmarc-collect.sh
Executable file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
BASE="/var/lib/dmarc"
|
||||
INBOX="$BASE/reports"
|
||||
PROC="$BASE/processed"
|
||||
LOGF="$BASE/logs/collector.log"
|
||||
|
||||
umask 027
|
||||
|
||||
TMPDIR="$(mktemp -d)"
|
||||
EML="$TMPDIR/mail.eml"
|
||||
cat > "$EML"
|
||||
|
||||
ripmime --no-nameless --name-by-type --overwrite -i "$EML" -d "$TMPDIR" >>"$LOGF" 2>&1 || true
|
||||
|
||||
TODAY="$(date -u +%Y/%m/%d)"
|
||||
OUTDIR="$INBOX/$TODAY"
|
||||
mkdir -p "$OUTDIR"
|
||||
|
||||
moved=0
|
||||
shopt -s nullglob
|
||||
for f in "$TMPDIR"/*; do
|
||||
case "$f" in
|
||||
*.xml|*.XML|*.gz|*.zip)
|
||||
sha="$(sha256sum "$f" | awk '{print $1}')"
|
||||
base="$(basename "$f")"
|
||||
dst="$OUTDIR/$(date -u +%Y%m%dT%H%M%SZ)_${sha:0:12}_$base"
|
||||
mv "$f" "$dst"
|
||||
echo "$(date -Is) stored $dst" >> "$LOGF"
|
||||
moved=$((moved+1))
|
||||
;;
|
||||
*) : ;;
|
||||
esac
|
||||
done
|
||||
|
||||
mkdir -p "$PROC"
|
||||
mv "$EML" "$PROC/$(date -u +%Y%m%dT%H%M%SZ)_mail.eml" || true
|
||||
rm -rf "$TMPDIR"
|
||||
|
||||
if (( moved > 0 )); then
|
||||
exit 0
|
||||
else
|
||||
echo "$(date -Is) no usable attachment in message" >> "$LOGF"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user