Используя DKIM в моем сервере для нескольких доменов (веб-сайты)

Я прочитал учебное руководство, отправленное MountainX (Установка DKIM (DomainKeys) для Ubuntu, Постфикса и Почтальона), но я не могу выяснить, как применить эти шаги, если я хочу разместить и послать электронные письма для нескольких доменов. У кого-либо есть подсказка?

22
задан 13 April 2017 в 05:23

3 ответа

Хороший! Я изобразил это из сообщения, упомянутого в вопросе. Я сделал своего рода соединение между самим ответом и ссылками обеспеченным в нем. Особенно четвертая ссылка является той, которую я использовал.

, Таким образом, дело идет как это. Предположим, что Вы имеете сервер или VPS и делаете один из Ваших доменов, чтобы быть основным доменом и использоваться в качестве имени сервера (в моем примере: mydomain.com).

Так, в первую очередь, мы изменимся на корень для создания вещей легче, но можно пропустить этот шаг и использование 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"

Мы открываем Постфиксный файл конфигурации.

nano /etc/postfix/main.cf

И добавляют эти строки до конца файла. Они скажут Постфиксу, что он должен послать электронные письма, которые будут подписаны и где.

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 для примера, заменять его Вашим собственным.

Помнят, что я был корнем до, но если Вы не, выполняете 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

Сделанный!

30
ответ дан 23 November 2019 в 01:34

Этот сценарий автоматизирует часть после "Сделанный! Сервер готов работать с DKIM",

, Чтобы помочь автоматизировать этот процесс немного я создал этот сценарий удара. Просто добавьте один 'domain.com' на строку в доменах = () массив.

Первый создают файлы и каталоги, если они не будут уже существовать

/etc/opendkim/keys/
/etc/opendkim/KeyTable
/etc/opendkim/SigningTable
/etc/opendkim/TrustedHosts
/etc/opendkim/spfs.txt

, то файл spfs.txt будет содержать весь SPF, записывает Вас, должен добавить к Вашим записям DNS для каждого домена.

ПРИМЕЧАНИЕ: не работайте несколько раз, это не проверяет, чтобы видеть, существует ли домен уже. Скрипт также должен быть запущен как корень.

#!/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
4
ответ дан 23 November 2019 в 01:34

Этот сценарий автоматизирует часть после "Сделанный! Сервер готов работать с DKIM",

, Чтобы помочь автоматизировать этот процесс немного я создал этот сценарий удара. Просто добавьте один домен как 'example.com' на строку в доменах = () массив.

Этот сценарий создает файлы для Вас и проверок, если строка уже находится в файле

, Spfs.txt удален и воссоздан каждый раз его выполнение и проверяет 2-ю строку 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
3
ответ дан 23 November 2019 в 01:34

Другие вопросы по тегам:

Похожие вопросы: