Skip to content

Instantly share code, notes, and snippets.

@richardevcom
Created April 12, 2022 22:57
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save richardevcom/a79e8ca313c2b6f34f9ea8c02959165c to your computer and use it in GitHub Desktop.
Save richardevcom/a79e8ca313c2b6f34f9ea8c02959165c to your computer and use it in GitHub Desktop.
Create Signing Table, Key Table, Trusted Hosts File and test DKIM key.
#!/bin/bash
# Which domain?
get_domain(){
printf "\n"
read -p "Domain: " DOMAIN
}
# Is domain set?
domain_is_set(){
if [ -z "$DOMAIN" ]; then
return 1
fi
}
# Is domain valid?
domain_is_valid(){
if echo $DOMAIN | grep -P '(?=^.{4,253}$)(^(?:[a-zA-Z0-9](?:(?:[a-zA-Z0-9\-]){0,61}[a-zA-Z0-9])?\.)+([a-zA-Z]{2,}|xn--[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])$)' >/dev/null 2>&1; then
return 0
else
return 1
fi
}
# Prompt try again
try_again() {
printf "\n"
read -p "Try again? (Y|N)" -n 1
if [[ $REPLY =~ ^[Yy]$ ]]
then
return 0
else
return 1
fi
}
# Sign DKIM in table
dkim_add_signing_table() {
DKIM_SIGN_STRING="*@$DOMAIN\t\tdefault._domainkey.$DOMAIN"
if grep -Fxq "$DOMAIN" /etc/opendkim/signing.table; then
echo "DKIM already signed in /etc/opendkim/signing.table"
else
echo -e $DKIM_SIGN_STRING >> /etc/opendkim/signing.table
echo "Added $DKIM_SIGN_STRING to /etc/opendkim/signing.table"
fi
}
# Add key to table
dkim_add_key_table(){
DKIM_KEY_STRING="default._domainkey.$DOMAIN\t$DOMAIN:default:/etc/opendkim/keys/$DOMAIN/default.private"
if grep -Fxq "$DOMAIN" /etc/opendkim/key.table; then
echo "DKIM key already in /etc/opendkim/key.table"
else
echo -e $DKIM_KEY_STRING >> /etc/opendkim/key.table
echo "Added $DKIM_KEY_STRING to /etc/opendkim/key.table"
fi
}
# Add domain to trusted hosts
add_trusted_host(){
TRUSTED_HOST_STRING="*.$DOMAIN"
if grep -Fxq "$DOMAIN" /etc/opendkim/trusted.hosts; then
echo "Domain already in /etc/opendkim/trusted.hosts"
else
echo -e $TRUSTED_HOST_STRING >> /etc/opendkim/trusted.hosts
echo "Added $TRUSTED_HOST_STRING to /etc/opendkim/trusted.hosts"
fi
}
mkdirs(){
mkdir /etc/opendkim/keys/$DOMAIN
}
mkkeys(){
opendkim-genkey -b 2048 -d $DOMAIN -D /etc/opendkim/keys/$DOMAIN -s default -v
}
own(){
chown opendkim:opendkim /etc/opendkim/keys/$DOMAIN/default.private
chmod 600 /etc/opendkim/keys/$DOMAIN/default.private
}
while true; do
get_domain
if ! domain_is_set || ! domain_is_valid; then
echo -ne "Please provide valid domain name (ex. domain.com)."
if ! try_again; then
break
fi
else
dkim_add_signing_table
dkim_add_key_table
add_trusted_host
mkdirs
mkkeys
own
printf "\n"
echo "You can now add these DNS records as follows:"
echo "---------------------------------------------"
echo " TXT @ v=spf1 mx ~all"
# Print DKIM
cat /etc/opendkim/keys/$DOMAIN/default.txt
break
fi
done
exit 0
#!/bin/bash
printf "\n"
read -p "Domain: " DOMAIN
opendkim-testkey -d $DOMAIN -s default -vvv
@richardevcom
Copy link
Author

Shout-out to @linuxbabe - for all his effort into creating in-depth #sysadmin tutorials about everything gnu linux. 🙏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment