@@ -8,24 +8,34 @@ if [ "$RSPAMD_ENABLE" != "true" ]; then
8
8
echo " INFO: Rspamd service disabled."
9
9
exit 0
10
10
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} "
14
16
fi
15
17
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 ' } "
19
30
20
31
echo " Setting Rspamd dkim_signing.conf"
21
32
cat > /etc/rspamd/local.d/dkim_signing.conf << EOL
22
33
signing_table = [
23
- "*@${ANONADDY_DOMAIN} ${ANONADDY_DOMAIN} ",
24
- "*@*.${ANONADDY_DOMAIN} ${ANONADDY_DOMAIN} ",
34
+ ${CONFIG_SIGNING_TABLE}
25
35
];
26
36
27
37
key_table = [
28
- " ${ANONADDY_DOMAIN} ${ANONADDY_DOMAIN} : ${ANONADDY_DKIM_SELECTOR} :/var/lib/rspamd/dkim/ ${ANONADDY_DOMAIN} . ${ANONADDY_DKIM_SELECTOR} .key",
38
+ ${CONFIG_KEY_TABLE}
29
39
];
30
40
31
41
use_domain = "envelope";
@@ -36,9 +46,35 @@ use_esld = true;
36
46
sign_authenticated = false;
37
47
EOL
38
48
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
+
39
56
echo " Setting Rspamd arc.conf"
40
57
cp /etc/rspamd/local.d/dkim_signing.conf /etc/rspamd/local.d/arc.conf
41
58
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
+
42
78
echo " Setting Rspamd classifier-bayes.conf"
43
79
cat > /etc/rspamd/local.d/classifier-bayes.conf << EOL
44
80
backend = "redis";
0 commit comments