Skip to content

Commit 4ffb000

Browse files
authored
Update 14-config-rspamd.sh
Ensure all DKIM are created, including those in ANONADDY_ALL_DOMAINS
1 parent 6e3c1fe commit 4ffb000

File tree

1 file changed

+45
-9
lines changed

1 file changed

+45
-9
lines changed

rootfs/etc/cont-init.d/14-config-rspamd.sh

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,34 @@ if [ "$RSPAMD_ENABLE" != "true" ]; then
88
echo "INFO: Rspamd service disabled."
99
exit 0
1010
fi
11-
if [ ! -f "$DKIM_PRIVATE_KEY" ]; then
12-
echo "WRN: $DKIM_PRIVATE_KEY not found. Rspamd service disabled."
13-
exit 0
11+
12+
echo "Determining shared domains"
13+
CHECK_DOMAINS="${ANONADDY_ALL_DOMAINS}"
14+
if [[ "${CHECK_DOMAINS}" != *"${ANONADDY_DOMAIN}"* ]]; then
15+
CHECK_DOMAINS="${ANONADDY_DOMAIN} ${CHECK_DOMAINS}"
1416
fi
1517

16-
echo "Copying DKIM private key for Rspamd"
17-
mkdir -p /var/lib/rspamd/dkim
18-
cp -f "${DKIM_PRIVATE_KEY}" "/var/lib/rspamd/dkim/${ANONADDY_DOMAIN}.${ANONADDY_DKIM_SELECTOR}.key"
18+
echo "Building DKIM tables"
19+
CONFIG_SIGNING_TABLE=
20+
CONFIG_KEY_TABLE=
21+
for DOM in ${CHECK_DOMAINS//,/ }; do
22+
CONFIG_SIGNING_TABLE=$( printf '%s\n"*@%s %s",\n"*@*.%s %s",' "${CONFIG_SIGNING_TABLE}" "${DOM}" "${DOM}" "${DOM}" "${DOM}")
23+
CONFIG_KEY_TABLE=$( printf '%s\n"%s %s:%s:/var/lib/rspamd/dkim/%s.%s.key",' "${CONFIG_KEY_TABLE}" "${DOM}" "${DOM}" "${ANONADDY_DKIM_SELECTOR}" "${DOM}" "${ANONADDY_DKIM_SELECTOR}")
24+
# try to register a new dkim and if it fails don't exit this script.
25+
# failure can occur when the files have already been generated.
26+
/bin/sh /usr/local/bin/gen-dkim "${DOM}" >/dev/null 2>/dev/null && true
27+
done
28+
CONFIG_SIGNING_TABLE="${CONFIG_SIGNING_TABLE#*$'\n'}"
29+
CONFIG_KEY_TABLE="${CONFIG_KEY_TABLE#*$'\n'}"
1930

2031
echo "Setting Rspamd dkim_signing.conf"
2132
cat >/etc/rspamd/local.d/dkim_signing.conf <<EOL
2233
signing_table = [
23-
"*@${ANONADDY_DOMAIN} ${ANONADDY_DOMAIN}",
24-
"*@*.${ANONADDY_DOMAIN} ${ANONADDY_DOMAIN}",
34+
${CONFIG_SIGNING_TABLE}
2535
];
2636
2737
key_table = [
28-
"${ANONADDY_DOMAIN} ${ANONADDY_DOMAIN}:${ANONADDY_DKIM_SELECTOR}:/var/lib/rspamd/dkim/${ANONADDY_DOMAIN}.${ANONADDY_DKIM_SELECTOR}.key",
38+
${CONFIG_KEY_TABLE}
2939
];
3040
3141
use_domain = "envelope";
@@ -36,9 +46,35 @@ use_esld = true;
3646
sign_authenticated = false;
3747
EOL
3848

49+
echo "Copying and moving keys for shared domains"
50+
for file in /data/dkim/*.private; do
51+
cp "$file" "${file%.*}.${ANONADDY_DKIM_SELECTOR}.key"
52+
done
53+
mkdir -p /var/lib/rspamd/dkim
54+
mv /data/dkim/*.key /var/lib/rspamd/dkim/
55+
3956
echo "Setting Rspamd arc.conf"
4057
cp /etc/rspamd/local.d/dkim_signing.conf /etc/rspamd/local.d/arc.conf
4158

59+
# Note to future self, if you are stuck, then read these instructions.
60+
#
61+
# Run these commands in your addy docker folder, they generate two
62+
# local variables you can use to generate the DNS records you need:
63+
#
64+
# YOUR_DOMAIN_NAME=idhi.de
65+
# DKIM_DOM="$( cat data/dkim/${YOUR_DOMAIN_NAME}.txt | tr -d '\n\\"' | sed -r 's/[[:space:]]+/ /g' | sed -E 's/ ([^;])/\1/g' | grep -oP '\(\K[^)]+' )"
66+
#
67+
# These are the DNS records required for a bare domain (you will need to
68+
# amend these for subdomains and fill in the ANONADDY_* variables yourself,
69+
# I'm not going to do all the work for you):
70+
#
71+
# TXT ${ANONADDY_DKIM_SELECTOR}._domainkey.${YOUR_DOMAIN_NAME} ${DKIM_DOM}
72+
# MX ${YOUR_DOMAIN_NAME} ${ANONADDY_DOMAIN}. 10
73+
# TXT ${YOUR_DOMAIN_NAME} v=spf1 mx include:${ANONADDY_DOMAIN} ~all
74+
# TXT _dmarc.${YOUR_DOMAIN_NAME} v=DMARC1; p=reject; rua=mailto:postmaster@${YOUR_DOMAIN_NAME}; ruf=mailto:postmaster@${YOUR_DOMAIN_NAME}; pct=100; adkim=r; aspf=r
75+
#
76+
# You will need to add these records wherever your domain name is registered.
77+
4278
echo "Setting Rspamd classifier-bayes.conf"
4379
cat >/etc/rspamd/local.d/classifier-bayes.conf <<EOL
4480
backend = "redis";

0 commit comments

Comments
 (0)