This commit is contained in:
2026-08-14 23:07:21 +02:00
parent 1eb46d98ef
commit 9fdd3408a0
6 changed files with 195 additions and 57 deletions

View File

@@ -1,47 +1,61 @@
#!/bin/bash
# user-patches.sh laeuft bei jedem Start von DMS automatisch
# user-patches.sh laeuft bei jedem Start von DMS automatisch,
# nach dem Setup und bevor die Daemons gestartet werden.
ACCOUNTS_FILE="/tmp/docker-mailserver/postfix-accounts.cf"
WHITELIST_FILE="/etc/rspamd/override.d/docker_whitelist.map"
SRC_BASE="/tmp/docker-mailserver/rspamd"
LOCAL_D="/etc/rspamd/local.d"
# --- Rspamd Whitelist generieren ---
STATIC_DOMAINS=(
"bayarea-cc.com"
"ruehrgedoens.de"
"annavillesda.org"
"bizmatch.net"
"biz-match.com"
"qrmaster.net"
"nqsltd.com"
"iitwelders.com"
)
echo "Patching: Generiere Rspamd Whitelist aus Accounts + statischen Domains..."
{
for domain in "${STATIC_DOMAINS[@]}"; do
echo "$domain"
done
if [ -f "$ACCOUNTS_FILE" ]; then
awk -F'|' '{print $1}' "$ACCOUNTS_FILE" | cut -d'@' -f2
fi
} | sort | uniq > "$WHITELIST_FILE"
chmod 644 "$WHITELIST_FILE"
chown _rspamd:_rspamd "$WHITELIST_FILE" 2>/dev/null || true
echo "Whitelist erstellt:"
cat "$WHITELIST_FILE"
# --- local.d configs manuell kopieren (DMS kopiert local.d nicht automatisch) ---
# ---------------------------------------------------------------------------
# 1) local.d configs kopieren
# DMS kopiert nur rspamd/override.d automatisch, local.d nicht.
# ---------------------------------------------------------------------------
echo "Patching: Kopiere custom rspamd local.d configs..."
SRC="/tmp/docker-mailserver/rspamd/local.d"
DST="/etc/rspamd/local.d"
if [ -d "$SRC" ]; then
for f in "$SRC"/*; do
if [ -d "${SRC_BASE}/local.d" ]; then
for f in "${SRC_BASE}/local.d"/*; do
[ -f "$f" ] || continue
cp "$f" "$DST/$(basename "$f")"
chown root:root "$DST/$(basename "$f")"
chmod 644 "$DST/$(basename "$f")"
echo " Kopiert: $(basename "$f") -> $DST/"
base=$(basename "$f")
cp "$f" "${LOCAL_D}/${base}"
chown root:root "${LOCAL_D}/${base}"
chmod 644 "${LOCAL_D}/${base}"
echo " Kopiert: ${base} -> ${LOCAL_D}/"
done
fi
fi
# ---------------------------------------------------------------------------
# 2) append.d: an bestehende local.d-Dateien ANHAENGEN statt sie zu ersetzen
#
# Zwingend fuer settings.conf: DMS legt dort selbst die Regel fuer
# authentifizierte User ab (DMS::SED_TAG::1). Ein cp darueber wuerde sie
# loeschen und RSPAMD_CHECK_AUTHENTICATED=0 wirkungslos machen.
#
# Der Marker DMS-CUSTOM-APPEND macht das Anhaengen idempotent - /etc/rspamd
# liegt im Container-Dateisystem und ueberlebt einen `docker restart`.
# ---------------------------------------------------------------------------
echo "Patching: Haenge custom rspamd Snippets an local.d configs an..."
if [ -d "${SRC_BASE}/append.d" ]; then
for f in "${SRC_BASE}/append.d"/*; do
[ -f "$f" ] || continue
base=$(basename "$f")
target="${LOCAL_D}/${base}"
if grep -q 'DMS-CUSTOM-APPEND' "$target" 2>/dev/null; then
echo " Bereits vorhanden, uebersprungen: ${base}"
continue
fi
printf '\n' >>"$target"
cat "$f" >>"$target"
chown root:root "$target"
chmod 644 "$target"
echo " Angehaengt: ${base} -> ${target}"
done
fi
# ---------------------------------------------------------------------------
# HINWEIS: Die frueher hier erzeugte Rspamd-Whitelist
# (/etc/rspamd/override.d/docker_whitelist.map aus postfix-accounts.cf +
# statischer Domainliste) ist entfernt. Die zugehoerige multimap-Regel
# DOCKER_WL (-50) und das erzwungene "no action" aus force_actions.conf gibt
# es nicht mehr - sie waren ein Spoofing-Loch und haben echten Spam an
# weitergeleitete Adressen durchgereicht. Ersatz: rspamd/append.d/settings.conf.
# ---------------------------------------------------------------------------