Script pour automatiser la configuration de postfix/DKIM pour un nouveau site à héberger (prérequis: installer dkim et configurer postfix comme ici: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy )
#!/bin/bash
domain=$1
# «selector» est utilisé pour retrouver l'enregistrement TXT correspondant dans la zone DNS
selector=mail
opendkim_config_path=/etc/opendkim
keys_path=$opendkim_config_path/keys
if [[ -z "$domain" ]]; then
echo "1er argument (domaine) manquant"
exit 1
fi
if [[ ! "$domain" =~ ^[a-z_A-Z-]+\.[a-zA-Z]{2,4}$ ]]; then
echo "domaine '$domain' incorrect"
exit 2
fi
if [[ -d $keys_path/$domain ]]; then
echo "dossier '$domain' existe déjà dans $keys_path"
exit 3
fi
file_trusted_host=$opendkim_config_path/TrustedHosts
file_signing_table=$opendkim_config_path/SigningTable
file_key_table=$opendkim_config_path/KeyTable
if grep "$domain" $file_trusted_host; then
echo "Le domaine '$domain' existe déjà dans $file_trusted_host"
exit 4
fi
if grep "$domain" $file_signing_table; then
echo "Le domaine '$domain' existe déjà dans $file_signing_table"
exit 5
fi
if grep "$domain" $file_key_table; then
echo "Le domaine '$domain' existe déjà dans $file_key_table"
exit 6
fi
keyTableString="$selector._domainkey.$domain $domain:$selector:/etc/opendkim/keys/$domain/$selector.private"
signingTableString="*@$domain $selector._domainkey.$domain"
trustedHostString="*.$domain"
echo $trustedHostString >> $file_trusted_host
echo $signingTableString >> $file_signing_table
echo $keyTableString >> $file_key_table
mkdir $keys_path/$domain
cd $keys_path/$domain
opendkim-genkey -s $selector -d $domain
chown opendkim:opendkim $selector.private
cd $opendkim_config_path
chown opendkim:opendkim $keys_path/$domain
echo "Ajouter la clé publique à la zone DNS"
echo "-----"
cat $keys_path/$domain/$selector.txt
echo "-----"
systemctl restart postfix
systemctl restart opendkim
echo "Commande pour tester:"
echo -----
random_email_dkimvalidator=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 19 | head -n 1)@dkimvalidator.com
echo "test |mail -a 'From: root@$domain' -s 'test dkim pour $domain' $random_email_dkimvalidator"
echo "et vérifier: https://dkimvalidator.com/results?email=$random_email_dkimvalidator"
echo -----