Установка модулей 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. Вводим имя домена, например, desktopbsd.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:
Создаем файл /usr/local/dkimproxy/etc/senders Формат файла sender_map является:
- Один домен в одной строке;
- Параметры (DKIM / DomainKeys) разделены запятыми;
- Сведения о подписи (например, c, a, s, key) в скобках, рядом с подписью типа, разделены запятыми.
ОБЩИЕ ПАРАМЕТРЫ
Параметр |
Описание |
s |
Selector (без доменного имени) |
d |
домена подписать для (по умолчанию домена соответствия) |
i |
Идентификатор (по умолчанию отсутствует) |
key |
Полный путь к закрытому ключу |
DKIM КОНКРЕТНЫЕ ПАРАМЕТРЫ
Параметр |
Описание |
c |
Канонизация (simple/relaxed) (по умолчанию simple) |
a |
Алгоритм хеширования (rsa-sha1/rsa-sha256) |
DOMAINKEYS КОНКРЕТНЫЕ ПАРАМЕТРЫ
Параметр |
Описание |
c |
Канонизация (simple/nofws) (по умолчанию simple) |
a |
Алгоритм хеширования (RSA-SHA1) |
Примечание: DomainKeys поддерживает только SHA-1 хэш, а также поддерживает DKIM SHA-256. Если вы установите = RSA-SHA256 для DomainKeys, DKIMproxy не запустится с ошибкой (‘signing error: Can’t call method “new” on an undefined value at Signer.pm’) Пример файла senders
desktopbsd.ru dkim(c=relaxed, a=rsa-sha256,s=mail,key=/usr/local/dkimproxy/desktopbsd.ru.priv.key), domainkeys(c=nofws,a=rsa-sha1,s=mail,key=/usr/local/dkimproxy/desktopbsd.ru.priv.key)
Настройка DNS-записей
Для того чтобы ваш DKIM заработал, необходимо добавить запись TXT в DNS вашего домена. Надо добавить 2 записи - одна для «policy», другая открытый ключ.
Policy запись
Параметр |
Название |
Описание |
Название |
_domainkey |
|
Содержимое |
o=~; t=y |
o: исходящие политики:
- ~ (некоторые электронные письма, подписанные)
- - (все письма подписаны)
- ! (Все подписано, нет подписи 3ей стороны)
- . (Не отправляются письма)
t флаги: n (не тестирование), s (без поддоменов), y (тестовый режим) n заметки (human readable) r: отчетность адрес электронной почты (куда сообщать неправильные результаты)
|
Пример
mail._domainkey.desktopbsd.ru. TXT "k=rsa\; p=J2caGXV2a5JD8MSQE+4shPU3xjIxKi30szQ3h7YxotNTICdXMcktyCPyLGOwIDAQAB"
_domainkey.desktopbsd.ru. TXT "t=s\; o=~\;"
_adsp._domainkey.desktopbsd.ru. TXT "dkim=all"
Так же можно у домена прописать ADSP запись (RFC5617) — это позволит принимающему серверу понять, должно ли ваше письмо быть подписано или нет. Запись выгладит таким образом:
_adsp._domainkey.desktopbsd.ru. TXT "dkim=all"
Значений dkim= может быть три:
- all — Все письма должны быть подписаны
- discardable — Не подписанные письма не должны приниматься
- unknown — Аналогично отсутствию записи
Добавление SPF записи
Для нормального приема почты еще необходимо добавить SPF запись в DNS запись. 1. Добавляем строки в файл зоны
_SPF 14400 IN TXT "v=spf1 ip4:213.141.132.188"
desktopbsd.ru. 14400 IN TXT "v=spf1 include:_SPF.desktopbsd.ru ~all"
2. После перезагрузки named, отправляем письмо на gmail.com и смотрим его код и находим строки
spf=pass (google.com: domain of admin@desktopbsd.ru designates 213.141.132.188 as permitted sender) smtp.mail=admin@desktopbsd.ru;
Проверка DNS
После перезапуска named, можно проверить все ли у нас правильно с нашим DNS Проверяем policy запись
$dig +short -ttxt _domainkey.desktopbsd.ru
"t=s\; o=~\;"
Проверяем Запись селектора
$ dig +short -ttxt mail._domainkey.desktopbsd.ru
"k=rsa\; p=J2caGXV2a5JD8MSQE+4shPU3xjIxKi30szQ3h7YxotNTICdXMcktyCPyLGOwIDAQAB"
Так же можно проверить DNS на сайте. После генерации ключей найдете ссылку для проверки Вашего DNS сервера.
Настройка Postfix
Часть материалов взята тут Считаем, что у Вас до этого Postfix работал нормально DKIMproxy получает почту, полученную Postfix, на определенный порт (обычно, представление порта - 587), далее подписывает ее, а затем отправлены обратно в Postfix на порт 25 (типичный порт SMTP) откуда он послан. Любая почта, приходящая на порт 25 не подписана.
Чтобы настроить Postfix, нам необходимо только отредактировать файл master.cf.
- Затем, в зависимости от того, какие сообщения Вы хотите подписывать, необходимо добавить строку
-O = content_filter dksign:127.0.0.1:10027
Так, например, для подписывания сообщений с 25 порта:
smtp inet n – n – – smtpd
-o content_filter=dksign:127.0.0.1:10027
Если Вы хотите скрипт, созданной почты должен быть подписан:
pickup fifo n – n 40 1 pickup
-o content_filter=dksign:127.0.0.1:10027
Для подписывания сообщений с 587 порта:
submission inet n – n – – smtpd
-o smtpd_etrn_restrictions=reject
-o smtpd_sasl_auth_enable=yes
-o content_filter=dksign:[127.0.0.1]:10027
-o receive_override_options=no_address_mappings
-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
Для того что бы работала подписка почты и от клиента и с рассылки php, я добавил все 3 варианта.
Нам нужно добавить еще два блока (в конец файла) для завершения конфигурации. Первый блок нужен для указанных выше параметров и передает сообщения фильтру
dksign unix - - n - 4 smtp
-o smtp_send_xforward_command=yes
-o smtp_discard_ehlo_keywords=8bitmime,starttls
Второй блок настраивает слушателя SMTP для приема сообщений, которые были подписаны:
127.0.0.1:10028 инет N - N - 10 SMTPD
-O = content_filter
-O = receive_override_options no_unknown_recipient_checks, no_header_body_checks
-O = smtpd_helo_restrictions
-O = smtpd_client_restrictions
-O = smtpd_sender_restrictions
-O = smtpd_recipient_restrictions permit_mynetworks, отклонить
-О mynetworks = 127.0.0.0 / 8
-О smtpd_authorized_xforward_hosts = 127.0.0.0 / 8
Чтобы закончить настройку, мы запускаем DKIMproxy и перезагружаем Postfix:
service dkimproxy start
service postfix reload
Проверка
Для проверки отсылаем письмо на gmal.com (Создайте там ящик и отправьте письмо себе). Если письмо не вернулось, то вероятнее всего все работает нормально. Получаем отправленное письмо и смотрим его код. Там должны быть следующие строки.
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of admin@desktopbsd.ru designates 213.141.132.188 as permitted sender) smtp.mail=admin@desktopbsd.ru;
dkim=pass header.i=@desktopbsd.ru
Что говорит, что и SPF и DKIM прошли нормально.
|