Настройка Postfix + DKIM / DomainKeys для подписания сообщений через DKIMproxy

Материал из Wiki МИАЦ ВО
Версия от 13:48, 20 июня 2013; Misha (обсуждение | вклад) (Генерация RSA ключей)
Перейти к навигации Перейти к поиску

Статья взята тут. Настраивал все по этой статье + еще немного нашел в инете.

Предпосылки

С постоянно растущим объемом передаваемых спам, многие почтовые сервисы стали использовать более сложные способы проверки подлинности электронной почты. Помимо очевидного - контент - два широко используемых метода (возможно, с некоторыми вариациями), включают Sender Policy Framework (SPF) и DomainKeys Identified Mail (DKIM). Оба эти метода требуют использования DNS записи. SPF- список серверов которым разрешено отправлять почту для домена вводится в DNS. Основное внимание в этой статье будет уделено DKIM.

DKIM это процесс генерации криптографических хэш из электронной почты. Это выполняет две основные функции: во-первых, подпись обеспечивает достоверность, тем, что используется частный ключ, необходимый для генерации подписи. Поскольку закрытый ключ не опубликован, подписанная им почта обеспечивает степень уверенности, что сервер обладающий закрытым ключом одобрил сообщение (как правило, это означает, что опознанный пользователь отправил сообщение). Во-вторых, так как криптографический хэш зависит от содержания электронной почты, подпись подтверждает, что сообщение не было изменено между приемом и передачей серверов.

Есть несколько способов реализации DKIM и DomainKeys - один распространенный способ использует Milter для каждого алгоритма. Другим подходом является DKIMproxy, с подписанием модуль прослушивает указанный порт, а также отдельные сообщения электронной почты через прокси подписания модуля. DKIMproxy реализует оба DomainKeys и DKIM спецификации

Установка модулей PERL

DKIMproxy имеет ряд Perl зависимостей.
Запуск через CPAN:
Усли он не установлен, то устанавливаем

urpmi Perl-CPAN

Запускаем CPAN

perl -MCPAN -e shell
install Mail::DKIM

(Зависимости включают: Crypt::OpenSSL::RSA, Digest::SHA, Mail::Address, MIME::Base64, Net::DNS)

install Net::Server
install Error (может не потребоваться)

Установка

После установки зависимостей, загружаем DKIMproxy (текущая версия, на момент написания это 1.4.1).

# cd /usr/local/src
# wget http://downloads.sourceforge.net/dkimproxy/dkimproxy-1.4.1.tar.gz
# tar -xzvf dkimproxy-1.4.1.tar.gz
# cd dkim*
# ./configure --prefix=/usr/local/dkimproxy
# make install

С помощью этих команд мы загрузили программное обеспечение, и установили его в в папку, указанную в параметре prefix.

Теперь создадим пользователя (dkim) для работы DKIMproxy. Нам не нужен каталог пользователя, а для дополнительной безопасности мы также заблокируем пароль (в идеале, мы запрещаем вход с паролем).

# useradd -M -s /bin/false dkim
# passwd -l dkim

Для удаления пароля вообще (если он был установлен), выполните:

# passwd -d dkim

Вы также можете изменить shell после создания учетной записи пользователя, запустив:

# usermod -s /sbin/nologin dkim

Вы можете проверить пользователя и группы, запустив:

# id dkim

==Установка Init-Script запуска Затем мы устанавливаем скрипт инициализации. DKIMproxy поставляется с образцом сценария, но Вам, возможно, потребуется изменить некоторые пути. Следующие команды скопирует сценарий инициализации, сделают его исполняемым и добавляет его в автозапуск.

# cp /usr/loca/src/ dkimproxy-1.4.1/sample-dkim-init-script.sh /etc/init.d/dkimproxy
# cd /etc/init.d
# chmod +x dkimproxy
# chkconfig --add dkimproxy

Некоторые переменные в сценарии инициализации, необходимо поправить:

  • DKIMPROXYUSER (установлено на пользователя, созданного выше)
  • DKIMPROXYGROUP (набор в группу пользователя, созданного выше)
  • PIDDIR (Я установил /var/run/)
  • DKIMPROXY_IN_CFG (путь к dkimproxy_in.conf, может не существовать, если не используется в / корректор скрипта)
  • DKIMPROXY_OUT_CFG (путь к dkimproxy_out.conf, может не существовать, если не используется OUT / подписавшего скрипта)

В сценарий инициализации нет никаких опций, указывающих, используете ли вы IN, OUT, или оба сценария. Это определяется автоматически, на основе того, какие конфигурационные файлы существуют. Сценарий только включает фильтр(ы) с существующими конфигурационными файлами. Таким образом, не создавайте/переименовывайте файлы конфигурации для фильтров, которые вы не хотите.

Генерация RSA ключей

Ключи будем хранить в папке dkimproxy:

cd /usr/local/dkimproxy

Начнем с генерации закрытого ключа. Если вы будете использовать разные ключи для каждого домена (вероятно, хорошая идея), вы можете включить имя домена в имя файла. Кроме того, необходимо указать длину ключа (в битах) - обычно 512, 768 и 1024. Поскольку у некоторых регистраторов есть предел в 256 символов на DNS TXT записи, а закрытый ключ превышает 1024 бит, что может привести к тому, что открытый ключ будет превышать этот предел. UDP обычно имеет предел в 512 байт, который будет ограничивать применение ключей более 4096 бит. Кроме того, более длинные ключи требуют больше обработки электронной почты.
Вы можете проверить существующие ключа RSA, запустив:

#openssl rsa -in domain.priv.key -check

Вы можете найти информацию (например, длину ключа) из существующего ключа RSA, запустив:

#openssl rsa -in domain.priv.key -text -noout

Если вы еще не используете ключ, создать 1024-битный секретный ключ RSA:

#openssl genrsa -out domain.priv.key 1024

Теперь сгенерировать открытый ключ из секретного ключа - уточните имя секретного ключа в качестве входного, и желаемого файла в качестве выхода.

#openssl rsa -in domain.priv.key -pubout -out domain.pub.key

Установите права доступа и владельца ключей:

#chown dkim:dkim *.key
#chmod 400 *.key

Очень удобно генерить ключи на DKIM Wizard. Кроме ключей генерится еще строка для DNS, которую нужно вставит в файл описания зоны DNS. Вводим имя домена, например, volmed.org.ru и селектор, например, mail.

Настройка DKIMproxy-OUT

Для того, чтобы было легко настроить несколько доменов, мы будем использовать sender_map параметр. В связи с этим, мы можем удалить строки (domain, signature, keyfile, selector) из конфигурационного файла, но необходимо добавить путь к файлу sender_map.
Начинаем с копирования файла примера

#cp /usr/local/dkimproxy/etc/dkimproxy_out.conf.example /usr/local/dkimproxy/etc/dkimproxy_out.conf

Редактируем файл /usr/local/dkimproxy/etc/dkimproxy_out.conf:

  • Удаляем или комментируем строки : domain, signature (может быть две), keyfile, selector
  • Из файла по умолчанию, оставить только параметры: listen и relay.
  • Добавляем строку
    sender_map /usr/local/dkimproxy/etc/senders

Создаем файл /usr/local/dkimproxy/etc/senders Формат файла sender_map является:

  • Один домен в одной строке;
  • Параметры (DKIM / DomainKeys) разделены запятыми;
  • Сведения о подписи (например, c, a, s, key) в скобках, рядом с подписью типа, разделены запятыми.
ОБЩИЕ ПАРАМЕТРЫ
Параметр Описание
c Selector (без доменного имени)
d домена подписать для (по умолчанию домена соответствия)
i Идентичность (по умолчанию отсутствует)
key Полный путь к закрытому ключу