Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
# Command-line options specified here will override the contents of
# /etc/opendkim.conf. See opendkim(8) for a complete list of options.
#DAEMON_OPTS=""
#
# Uncomment to specify an alternate socket
# Note that setting this will override any Socket value in opendkim.conf
SOCKET="inet:10035@localhost" # listen on loopback on port 8891 - Ubuntu default
# This is a basic configuration that can easily be adapted to suit a standard
# installation. For more advanced options, see opendkim.conf(5) and/or
# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
##
## opendkim.conf -- configuration file for OpenDKIM filter
##
ADSPAction Continue
ADSPNoSuchDomain Yes
AutoRestart Yes
AutoRestartRate 10/1h
Canonicalization simple/simple
ExternalIgnoreList refile:/etc/mail/opendkim/trusted-hosts
InternalHosts refile:/etc/mail/opendkim/trusted-hosts
KeyTable refile:/etc/mail/opendkim/keyTable
LogWhy Yes
On-Default accept
On-BadSignature accept
On-DNSError tempfail
On-InternalError accept
On-NoSignature accept
#On-Security tempfail
On-Security accept
PidFile /var/run/opendkim/dkim-milter.pid
SignatureAlgorithm rsa-sha1
SigningTable refile:/etc/mail/opendkim/signingTable
Socket inet:10035@127.0.0.1
Syslog Yes
SyslogSuccess Yes
TemporaryDirectory /tmp
UMask 000
UserID opendkim:postfix
#X-Header Yes
USER="postfix"
GROUP="mail"
SOCKET="inet:10034@127.0.0.1"
SIGNING_DOMAIN="/etc/mail/domainkeys/domains"
KEYFILE="/etc/mail/domainkeys/keys"
SELECTOR_NAME="mail"
SIGNER=yes
VERIFIER=yes
CANON=simple
#REJECTION="bad=r,dns=t,int=t,no=a,miss=r"
REJECTION="bad=r,dns=t,int=a,no=a,miss=r"
HOSTLIST="/etc/mail/domainkeys/trusted-hosts"
EXTRA_ARGS="-A -H -k -l -D -i ${HOSTLIST} -I ${HOSTLIST}"
#========================================================
MODES=
if [ x${SIGNER:0:1} == "xy" -o x${SIGNER:0:1} == "xY" ]; then
MODES=${MODES}s
fi
#if [ x${VERIFIER:0:1} == "xy" -o x${VERIFIER:0:1} == "xY" ]; then
# MODES=${MODES}v
#fi
[ ! -z "$MODES" ] && MODES="-b $MODES"
#========================================================
DAEMON_OPTS="-d ${SIGNING_DOMAIN} -s ${KEYFILE} -S ${SELECTOR_NAME} ${MODES} -c ${CANON} -C ${REJECTION} ${EXTRA_ARGS}"
#!/bin/bash
if [ -z $1 ]; then
echo "The domainname is not specified"
exit 1
fi
PREFIX=/etc/mail
#PREFIX=/opt/postfixadmin-hooks/mail
# Location of OpenSSL binary (whereis -b openssl)
OPENSSL=/usr/bin/openssl
DOMAIN=$1
USE_DKIM=1
USE_DOMAINKEYS=1
SELECTOR=mail
MAILTMPFFILE=/tmp/mail-`date "+%s"`
POSTMASTER="postmaster@example.com"
ADMINMAIL="tech@example.com"
SENDMAIL="/usr/sbin/sendmail"
# Create the directories for keys
if [ -d ${PREFIX}/.privatekeys/${DOMAIN} ]; then
echo "Directory for private keys for the domain ${DOMAIN} exists."
exit 1
else
mkdir --mode=755 -p ${PREFIX}/.privatekeys/${DOMAIN}
fi
if [ -d ${PREFIX}/.publickeys/${DOMAIN} ]; then
echo "Directory for private keys for the domain ${DOMAIN} exists."
exit 1
else
mkdir --mode=755 -p ${PREFIX}/.publickeys/${DOMAIN}
fi
if [[ ${USE_DKIM} -eq "1" || ${USE_DOMAINKEYS} -eq "1" ]]; then
echo "Generating the private key for ${DOMAIN}"
${OPENSSL} genrsa -out ${PREFIX}/.privatekeys/${DOMAIN}/${SELECTOR} 1024 > /dev/null
echo "Generating the public key for ${DOMAIN}"
${OPENSSL} rsa -in ${PREFIX}/.privatekeys/${DOMAIN}/${SELECTOR} -out ${PREFIX}/.publickeys/${DOMAIN}/${SELECTOR}.public.key -pubout -outform PEM > /dev/null
# Prepare the key
keydata=$(grep -v '^-' ${PREFIX}/.publickeys/${DOMAIN}/${SELECTOR}.public.key)
pubkey=$(echo ${keydata} | sed 's/ //g')
fi
# Process dk-milter
if [ ${USE_DKIM} -eq "1" ]; then
if [ -d ${PREFIX}/opendkim/keys/${DOMAIN} ]; then
echo "DKIM directory for private keys for the domain ${DOMAIN} exists."
exit 1
else
mkdir --mode=755 -p ${PREFIX}/opendkim/keys/${DOMAIN}
install --owner=opendkim --group=opendkim --mode=400 ${PREFIX}/.privatekeys/${DOMAIN}/${SELECTOR} ${PREFIX}/opendkim/keys/${DOMAIN}/${SELECTOR}
echo "${SELECTOR}._domainkey.${DOMAIN} ${DOMAIN}:${SELECTOR}:${PREFIX}/opendkim/keys/${DOMAIN}/${SELECTOR}" >> ${PREFIX}/opendkim/keyTable
echo "*@${DOMAIN} ${SELECTOR}._domainkey.${DOMAIN}" >> ${PREFIX}/opendkim/signingTable
/usr/sbin/service opendkim restart
fi
else
echo "DKIM signature is not used. Skipping."
fi
# Process Domainkeys
if [ ${USE_DOMAINKEYS} -eq "1" ]; then
if [ -d ${PREFIX}/domainkeys/privatekeys/${DOMAIN} ]; then
echo "Domainkeys directory for private keys for the domain ${DOMAIN} exists."
exit 1
else
mkdir --mode=755 -p ${PREFIX}/domainkeys/privatekeys/${DOMAIN}
install --owner=postfix --group=root --mode=400 ${PREFIX}/.privatekeys/${DOMAIN}/${SELECTOR} ${PREFIX}/domainkeys/privatekeys/${DOMAIN}/${SELECTOR}
echo "*@${DOMAIN}:${PREFIX}/domainkeys/privatekeys/${DOMAIN}/${SELECTOR}" >> ${PREFIX}/domainkeys/keys
echo "${DOMAIN}" >> ${PREFIX}/domainkeys/domains
/usr/sbin/service dk-filter restart
fi
else
echo "Domainkeys signature is not used. Skipping."
fi
echo "From: Postfix Admin <${POSTMASTER}>" >> ${MAILTMPFFILE}
echo "To: ${ADMINMAIL}" >> ${MAILTMPFFILE}
echo "Subject: Domain ${DOMAIN} was added, DNS intervention is needed" >> ${MAILTMPFFILE}
echo "MIME-Version: 1.0" >> ${MAILTMPFFILE}
echo "Content-Type: text/plain; charset=us-ascii" >> ${MAILTMPFFILE}
echo "X-Priority: 1" >> ${MAILTMPFFILE}
echo "X-MSMail-Priority: High" >> ${MAILTMPFFILE}
echo "" >> ${MAILTMPFFILE}
echo "Publish these NS records:" >> ${MAILTMPFFILE}
echo "_domainkey.${DOMAIN} IN TXT \"o=-\"" >> ${MAILTMPFFILE}
echo "_adsp._domainkey.${DOMAIN} IN TXT \"dkim=all\"" >> ${MAILTMPFFILE}
echo "${SELECTOR}._domainkey.${DOMAIN} IN TXT \"v=DKIM1; k=rsa; p=${pubkey}\"" >> ${MAILTMPFFILE}
echo "" >> ${MAILTMPFFILE}
echo "" >> ${MAILTMPFFILE}
echo "" >> ${MAILTMPFFILE}
echo "--" >> ${MAILTMPFFILE}
echo "Thanks," >> ${MAILTMPFFILE}
echo "Postfix Administrator mailto:${POSTMASTER}" >> ${MAILTMPFFILE}
cat ${MAILTMPFFILE} | ${SENDMAIL} -f ${POSTMASTER} -t
unlink ${MAILTMPFFILE}
Реализация Exim + OpenDKIM для массовых рассылок