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 записи в таком случае должны использовать один и тот же селектор.
комментарии поддерживаются Disqus