Я читав підручник, опублікований MountainX ( Setup DKIM (DomainKeys) для Ubuntu, Postfix та Mailman )), але не можу зрозуміти, як застосувати ці кроки, якщо хочу розмістити та надсилати електронні листи для кількох доменів. Хтось має підказку?
Я читав підручник, опублікований MountainX ( Setup DKIM (DomainKeys) для Ubuntu, Postfix та Mailman )), але не можу зрозуміти, як застосувати ці кроки, якщо хочу розмістити та надсилати електронні листи для кількох доменів. Хтось має підказку?
Відповіді:
Добре! Я зрозумів це з посади, згаданої у питанні. Я зробив своєрідну суміш між самою відповіддю та посиланнями, що містяться в ній. Особливо четверте посилання - це те, що я використав.
Так справа йде так. Припустимо, у вас є сервер або 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"
Відкриваємо конфігураційний файл 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 для прикладу, заміню його своїм.
Пам'ятайте, що я корінь був раніше, але якщо ви цього не зробите, виконайте 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
Готово!
/etc/opendkim/TrustedHosts
файлі IP-хост повинен бути там один раз, незалежно від того, скільки доменів працює через цей хост. Якщо ви хочете скористатися іншим селектором, default
переконайтесь, що ви зміните його у всіх файлах!
*@
частина попереду доменного імені в SigningTable; нічого не було підписано, поки я не виправив цього. куб .: @the_nuts
# touch /etc/opendkim/KeyTable
# touch /etc/opendkim/SigningTable
Цей сценарій автоматизує частину після "Готово! Сервер готовий працювати з DKIM"
Щоб трохи автоматизувати цей процес, я створив цей скрипт bash. Просто додайте по одному домену.com на рядок всередині масиву domeins = ().
Спочатку створіть файли та каталоги, якщо вони вже не існують
/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
Цей сценарій автоматизує частину після "Готово! Сервер готовий працювати з DKIM"
Щоб трохи автоматизувати цей процес, я створив цей скрипт bash. Просто додайте один домен на зразок "example.com" на рядок всередині масиву domeins = ().
Цей скрипт створює файли для вас і перевіряє, чи рядок вже є у файлі
Spfs.txt видаляється та відтворюється кожного разу, коли він запускається, і перед додаванням перевіряє другий рядок за замовчуванням.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