Использование DKIM на моем сервере для нескольких доменов (веб-сайтов)
Я прочитал учебник, опубликованный MountainX ( Setup DKIM (DomainKeys) для Ubuntu, Postfix и Mailman), но я не могу понять, как применить эти шаги, если я хочу размещать и отправлять электронную почту для нескольких доменов. У кого-нибудь есть подсказка?
3 ответа
Хорошо! Я понял это из поста, упомянутого в вопросе. Я сделал своего рода смесь между самим ответом и ссылками, приведенными в нем. Специально четвертая ссылка - та, которую я использовал.
Так что все идет так. Предположим, у вас есть сервер или VPS, и вы сделаете один из ваших доменов главным доменом и будете использоваться в качестве имени сервера (в моем примере: mydomain.com).
Итак, во-первых, мы изменим на root, чтобы упростить процесс, но вы можете пропустить этот шаг и использовать sudo
перед каждой командой.
sudo su
Теперь мы устанавливаем OpenDKIM:
apt-get install opendkim opendkim-tools
Давайте исправим файл конфигурации. Мы открываем /etc/opendkim.conf
для редактирования. Я использую нано, но то же самое с другим редактором.
nano /etc/opendkim.conf
После открытия сделайте так, как это выглядит. Если вы чувствуете себя комфортно, вы можете изменить некоторые параметры, но Domain
, KeyFile
а также Selector
должен оставаться прокомментированным.
# 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.
#
#Domain example.com
#KeyFile /etc/opendkim/201205.private
#Selector 201205
#
# Commonly-used options
Canonicalization relaxed/simple
Mode sv
SubDomains yes
# Log to syslog
Syslog yes
LogWhy yes
# Required to use local socket with MTAs that access the socket as a non-
# privileged user (e.g. Postfix)
UMask 022
UserID opendkim:opendkim
#
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
#
Socket inet:8891@localhost
#EOF
Далее мы создаем некоторые папки и файлы, которые будут содержать информацию о том, что OpenDKIM должен использовать и обрабатывать. На данный момент TrustedHosts
файл. Мы создаем и редактируем это:
mkdir /etc/opendkim
nano /etc/opendkim/TrustedHosts
Мы должны поместить в этот файл список доверенных адресов: localhost и 127.0.0.1, а также имя и IP-адрес вашего сервера:
127.0.0.1
localhost
192.99.34.121
mydomain.com
Теперь мы редактируем конфигурационный файл OpenDKIM.
nano /etc/default/opendkim
И добавьте эти строки в конец файла. Они сообщат OpenDKIM, в каком порту следует ожидать подписывания запросов:
SOCKET="inet:8891@localhost"
Открываем файл конфигурации Postfix.
nano /etc/postfix/main.cf
И добавьте эти строки в конец файла. Они сообщат Postfix, что он должен отправлять электронные письма для подписи и куда.
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Если вы не добавляете домены прямо сейчас, вы можете перезапустить все, чтобы конфигурация вступила в силу.
/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart
Готово! Сервер готов к работе с DKIM. Теперь вам нужно добавить свои домены в эту систему. Следующий процесс одинаков для всех доменов, которые вы хотите добавить. Я буду использовать otherdomain.com для примера, замените его своим.
Помните, что раньше я был root, но если нет, бегите sudo su
или перед вашими командами с ключевым словом sudo
,
sudo su
Сначала мы создаем каталог для нашего домена и заходим в него:
mkdir -p /etc/opendkim/keys/otherdomain.com
cd /etc/opendkim/keys/otherdomain.com
Теперь мы генерируем ключ для домена:
opendkim-genkey -r -d otherdomain.com
Мы даем пользователю OpenDKIM право собственности на вновь созданный файл:
chown opendkim:opendkim default.private
И мы открываем KeyTable
файл, чтобы добавить наш новый ключ для нашего нового домена:
nano /etc/opendkim/KeyTable
Мы добавляем его в конец файла (после всех других доменов, которые мы можем иметь здесь):
default._domainkey.otherdomain.com otherdomain.com:default:/etc/opendkim/keys/otherdomain.com/default.private
Мы открываем SigningTable
файл.
nano /etc/opendkim/SigningTable
И добавьте в конец файла (опять же, у нас будет одна строка для каждого домена):
otherdomain.com default._domainkey.otherdomain.com
Этот SigningTable перечисляет все письма, которые подписываются. Просто добавив доменное имя, все письма с этого домена будут подписаны.
Я не уверен в необходимости сделать следующий шаг, но я просто сделал это, на всякий случай... Мы открываем TrustedHosts
файл.
nano /etc/opendkim/TrustedHosts
И добавьте в конце файла:
otherdomain.com
И последнее: мы показываем содержимое файла /etc/opendkim/keys/otherdomain.com/default.txt
,
cat /etc/opendkim/keys/otherdomain.com/default.txt
И добавить информацию между кавычками в TXT
запись в зоне DNS домена, и мы также должны использовать default._domainkey
как имя записи. ПРИМЕЧАНИЕ: "между кавычками" - это текст, начинающийся с "v=DKIM1;k=rsa; p=WIGfM...
".
Если мы закончили добавлять домены (сейчас), мы перезапускаем все, чтобы применить изменения.
/etc/init.d/opendkim restart
/etc/init.d/postfix reload
/etc/init.d/postfix restart
Готово!
Этот скрипт автоматизирует деталь после "Готово! Сервер готов к работе с DKIM"
Чтобы немного автоматизировать этот процесс, я создал скрипт bash. Просто добавьте один домен, например, example.com, в строку внутри массива domains=().
Этот скрипт создает файлы для вас и проверяет, есть ли строка в файле
Spfs.txt удаляется и воссоздается каждый раз при запуске и проверяет вторую строку default.txt на соответствие spfs.txt перед добавлением
Вы должны разместить свои серверы ipv4 и ipv6 (если они у вас есть) в предоставленных переменных. Проверяет, не пустые ли они
Вы можете запустить этот файл несколько раз благодаря добавленным проверкам.
#!/bin/bash
# List of domains
domains=(
'example.com'
)
# file paths and directories
dkim="/etc/opendkim"
keys="$dkim/keys"
keyfile="$dkim/KeyTable"
signfile="$dkim/SigningTable"
trustfile="$dkim/TrustedHosts"
spffile="$dkim/spfs.txt"
# Set Ipv6 and Ipv4 addresses for the server here
ipv4=""
ipv6=""
# loopback addresses for the server
loop=( localhost 127.0.0.1 )
function loopback {
for back in "${loop[@]}"
do
if ! grep -q "$back" "$trustfile"; then
echo "$back" >> "$trustfile"
fi
done
}
# Check for files and create / write to them if they dont exist
if [ ! -d "$keys" ]; then
mkdir "$keys"
fi
if [ ! -f "$keyfile" ]; then
touch "$keyfile"
fi
if [ ! -f "$signfile" ]; then
touch "$signfile"
fi
if [ ! -f "$trustfile" ]; then
touch "$trustfile"
loopback
else
loopback
fi
if [ ! -f "$spffile" ]; then
touch "$spffile"
else
rm -rf "$spffile"
touch "$spffile"
fi
if [ ! -z "$ipv6" ]; then
if ! grep -q "$ipv6" "$trustfile"; then
echo "$ipv6" >> "$trustfile"
fi
fi
if [ ! -z "$ipv4" ]; then
if ! grep -q "$ipv4" "$trustfile"; then
echo "$ipv4" >> "$trustfile"
fi
fi
# Generate keys and write the spfs records we need for each domain to one file
for domain in "${domains[@]}"
do
keydir="$keys/$domain"
default="$keydir/default.txt"
if [ ! -d "$keydir" ]; then
mkdir $keydir
fi
cd $keydir
opendkim-genkey -r -d $domain
chown opendkim:opendkim default.private
key="default._domainkey.$domain $domain:default:$keydir/default.private"
sign="$domain default._domainkey.$domain"
trust="$domain"
spf="$(cat $default)"
# Check only the last line against the spf file as the first line is always the same
spflast="$(tail -1 $default)"
if ! grep -q "$key" "$keyfile"; then
echo "$key" >> "$keyfile"
fi
if ! grep -q "$sign" "$signfile"; then
echo "$sign" >> "$signfile"
fi
if ! grep -q "$trust" "$trustfile"; then
echo "$trust" >> "$trustfile"
fi
if ! grep -q "$spflast" "$spffile"; then
echo "$spf" >> "$spffile"
fi
done
Этот скрипт автоматизирует деталь после "Готово! Сервер готов к работе с DKIM"
Чтобы немного автоматизировать этот процесс, я создал скрипт bash. Просто добавьте по одному "domain.com" на строку внутри массива domains=().
Сначала создайте файлы и каталоги, если они еще не существуют
/etc/opendkim/keys/
/etc/opendkim/KeyTable
/etc/opendkim/SigningTable
/etc/opendkim/TrustedHosts
/etc/opendkim/spfs.txt
Файл spfs.txt будет содержать все записи spf, которые необходимо добавить в записи DNS для каждого домена.
ПРИМЕЧАНИЕ: не запускайте более одного раза, он не проверяет, существует ли домен. Скрипт также должен быть запущен от имени пользователя root.
#!/bin/bash
domains=(
'domain.com'
)
for domain in "${domains[@]}"
do
keydir="/etc/opendkim/keys/$domain"
if [ -d "$keydir" ]
then
cd $keydir
else
mkdir $keydir
cd $keydir
fi
opendkim-genkey -r -d $domain
chown opendkim:opendkim default.private
echo "default._domainkey.$domain $domain:default:$keydir/default.private" >> /etc/opendkim/KeyTable
echo "$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable
echo "$domain" >> /etc/opendkim/TrustedHosts
echo "$(cat $keydir/default.txt)" >> spfs.txt
done