Exim/DKIM

Материал из ИНФОвики
Перейти к: навигация, поиск

Содержание

Настройка DKIM в Exim 4.70+

Начиная с версии 4.70, Exim поддерживает технологию DKIM (Domain Keys Identified Message), иными словами, позволяет добавлять в заголовки сообщения цифровую подпись — как признак подлинности письма и в качестве защиты от фальсификации письма.

DKIM добавляется в три этапа. Далее в примере предполагается, что мы создаём ключ для домена example.com, а Exim работает из-под пользователя exim и группы exim. Измените параметры, выделенные жирным, чтобы соответствовали действительным параметрам.

1. Создать пару ключей для подписи

Создаём RSA-ключ (не менее, чем 1024 бита длиной), создаём парнный ему общедоступный ключ. Прячем тайный ключ от посторонних глаз:

mkdir /etc/pki/dkim
cd /etc/pki/dkim
openssl genrsa -out example.com.key 1024
openssl rsa -in example.com.key -pubout > example.com.pub
chown exim:exim example.com.key
chmod 640 example.com.key

2. Создать DNS-запись для верификации DKIM

Берём публичный ключ (в нашем примере example.com.pub), который выглядит примерно так:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCy4cRpKEmBmlm6Enrc0Qk/WEG6
uQKrzAe+aS8L0GG+PK+oxr1DtMihbZU1CCpAND0NYceWicI9XCqD7bS9WE1U2GCW
J8MxM8o//3b3T/yV3TCTFJRb3xn4xJOL5/fx6f/d76ra34BY8xUfedPQORg2T3pv
YRhOq9VT1IuiNhULLQIDAQAB
-----END PUBLIC KEY-----

Удаляем комментарии (начинаются со знаков минуса), всё остальное разворачиваем в одну линию, и приписываем к началу строку

k=rsa; p=

Получим что-то вроде следующего (многоточие замещает часть ключа, чтобы не вызывать горизонтальной прокрутки на этой странице:

k=rsa; p=MIGfMA0GCSqG...YRhOq9VT1IuiNhULLQIDAQAB

Входим в интерфейс управления зоной для домена example.com и создаём запись вида

selector._domainkey.example.com 86400 IN TXT "k=rsa; p=MIGfMA0GCSqG...YRhOq9VT1IuiNhULLQIDAQAB"

Где selector — произвольная строка (допустимая в доменном имени). Важно: можно создать несколько DKIM-записей для одного и того же домена, если у них различаются селекторы.

3. Дополнить конфигурацию Exim

Открываем файл exim.conf (если ставили из репозитория Fedora/CentOS, то это /etc/exim/exim.conf), ищем в нём фрагмент вида

remote_smtp:
  driver = smtp

и заменяем на

DKIM_DOMAIN      = ${lc:${domain:$h_from:}}
DKIM_KEY_FILE    = /etc/pki/dkim/DKIM_DOMAIN.key
DKIM_PRIVATE_KEY = ${if exists{DKIM_KEY_FILE}{DKIM_FILE}{0}}

remote_smtp:
  driver = smtp
  dkim_domain = DKIM_DOMAIN
  dkim_selector = selector
  dkim_private_key = DKIM_PRIVATE_KEY

Перезапускаем Exim, отправляем письмо с адреса в @example.com на почтовый ящик, который умеет делать проверку DKIM-подписи (например, на Google Mail) и убеждаемся, что всё работает. Внимание: DNS записи могут обновляться не мгновенно, поэтому убедитесь, что указанная DKIM-запись существует.

Важно, чтобы в конфигурации Exim и в DNS записи использовался один и тот же селектор.

Пояснения

Указанные макро (начинающиеся с DKIM_) призваны подставить или имя файла с секретным ключом для домена отправителя, если такой есть в /etc/pki/dkim, или ноль, в последнем случае подпись просто не создаётся.

Таким образом, достаточно создать пары ключей для всех доменов отправителей, которые поддерживает ваш почтовый сервер, без изменения конфигурации Exim. Главное, чтобы имена ключей имели ту же структуру: domain.name.key. Просьба помнить, что в указанном примере все DNS записи в таком случае должны использовать один и тот же селектор.

Источник — «http://boyandin.info/w/Exim/DKIM»
комментарии поддерживаются Disqus