Есть вопрос по работе программы Opendkim + Postfix, которая подписывает заголовки исходящих писем цифровыми подписями DKIM. Основное условие - это постфикс имеет несколько инстанцев с разными Ай-Пи и доменами.
Беда в том, что Opendkim по умолчанию проверяет в заголовках поле FROM для определения домена, которому надо добавить цифровую подпись.
Но дело в том, что поле FROM может иметь бесконечно разные домены (разные пользователи) и ориентироваться на это поле и создавать бесчисленное множество ключей бессмысленно.
Единственно неизменным (для каждого инстанца postfix) является адрес Retart-Patch. То есть к нему должна идти привязка цифровой подписи.
Но, Увы!!!
Я перепробавал кучу разных вариантов, указанных здесь http://www.opendkim.org/opendkim-README в разделе MAILING LISTS (3) и здесь http://www.opendkim.org/opendkim.conf.5.html
Добавил следующие параметры в /etc/opendkim.confMultipleSignatures yes
MustBeSigned Return-Path,From
SignHeaders Return-Path,From
AlwaysSignHeaders Return-Path
OversignHeaders Return-Path
OmitHeaders .
SenderHeaders Return-Path,FromВсе это не работает. Он по прежнему определяет домен по полю From
Вот такой вариант таблицы /etc/opendkim/signingtable не устраивает
qwerty.com default._domainkey.qwerty.com
* default._domainkey.abcde.comпотому, что это действительно только для одного инстанца Postfix. Для второго инстанца таблица будет выглядеть так
* default._domainkey.edcba.com
Но для этого должно быть два файла конфигурации.
Сейчас главный вопрос, Как научить OpenDKIM определять домен по полю Return-Path ?Если это все же не получится, то надо создать еще одну копию процесса Opendkim с другим файлом конфигурации. Что, собственно, у меня тоже не получилось.
Второй вопрос (на случай, если не решится первый) - как создать копию процесса с новым конфигом?
man opendkim-x configfile
Read the named configuration file.
> man opendkim
> -x configfile
>
> Read the named configuration file.Интересная штука выходит:
:~# opendkim -x configfile
opendkim: configfile: configuration error at line 0: error reading configuration fileНа другие команды:
:~# opendkim -D
:~# opendkim -q
:~# opendkim -W
у всех один ответ:
opendkim: milter socket must be specifiedХотя при отправке тестового письма подпись ДКИМ вставилась исправно. То есть, сокеты указаны в настройках у opendkim и у postfix
Вот скопировал /etc/opendkim.conf
Syslog yes
Canonicalization relaxed/relaxed
SyslogSuccess yes
X-Header no
LogWhy yes
UMask 002
KeyTable file:/etc/opendkim/keytable
SigningTable file:/etc/opendkim/signingtable
InternalHosts file:/etc/opendkim/internal
MultipleSignatures yes
MustBeSigned Return-Path,From
SignHeaders Return-Path,From
AlwaysSignHeaders Return-Path
OversignHeaders Return-Path
OmitHeaders .
SenderHeaders Return-Path,From
> :~# opendkim -x configfile
> opendkim: configfile: configuration error at line 0: error reading configuration fileОдаренность не позволяет понять, что вместо configfile надо указать путь к реально существующему конфиг-файлу?
>> :~# opendkim -x configfile
>> opendkim: configfile: configuration error at line 0: error reading configuration file
> Одаренность не позволяет понять, что вместо configfile надо указать путь к реально
> существующему конфиг-файлу?~# opendkim -x /etc/opendkim.conf
opendkim: milter socket must be specifiedВот содержимое файла /etc/default/opendkim
SOCKET="inet:8891@localhost"Это дописано в файл /etc/postfix-2/main.cf
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
>[оверквотинг удален]
>> существующему конфиг-файлу?
> ~# opendkim -x /etc/opendkim.conf
> opendkim: milter socket must be specified
> Вот содержимое файла /etc/default/opendkim
> SOCKET="inet:8891@localhost"
> Это дописано в файл /etc/postfix-2/main.cf
> milter_default_action = accept
> milter_protocol = 2
> smtpd_milters = inet:localhost:8891
> non_smtpd_milters = inet:localhost:8891Спасибо за информацию.
> Спасибо за информацию.Честно говоря, я не понял. Может я что то не то сказал?
>> Спасибо за информацию.
> Честно говоря, я не понял. Может я что то не то сказал?Честно говоря, я тоже не понял, чего вы хотите, но на всякий случай поблагодарил.
> Честно говоря, я тоже не понял, чего вы хотите, но на всякий
> случай поблагодарил.Я сейчас подумал, что в окне терминала не показывает конфиг потому, что я его создавал через Filezilla (Windows)
... Хотя нет. Notepad++ показывает, что Unix
Тогда непонятно, почему не показывает конфиг...
> Вот содержимое файла /etc/default/opendkim
> SOCKET="inet:8891@localhost"Содержимое этого файла используется инит-скриптом запуска.
В результате OpenDKIM запускается такой командой:/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:8891@localhost
> Это дописано в файл /etc/postfix-2/main.cf
> milter_default_action = accept
> milter_protocol = 2
> smtpd_milters = inet:localhost:8891
> non_smtpd_milters = inet:localhost:8891Ну что я могу сказать - поздравляю. Осознайте, что второй инстанс OpenDKIM должен слушать отдельный порт, научитесь пользоваться консолью.
> Ну что я могу сказать - поздравляю. Осознайте, что второй инстанс OpenDKIM
> должен слушать отдельный порт, научитесь пользоваться консолью.Не спорю... Но не ошибается тот, кто ничего не делает. На ошибках то и учимся!!!!
Хочется выделить два основных момента, чтобы конкретизировать эту тему.1. Не показывает файл конфигурации в консоли
~# opendkim -x /etc/opendkim.conf
opendkim: milter socket must be specified:~# opendkim -x configfile
opendkim: configfile: configuration error at line 0: error reading configuration fileя не могу понять почему.
2. >Осознайте, что второй инстанс OpenDKIM
>должен слушать отдельный портЯ еще не создал второй инстанс вообще. Прошу помощи, как это сделать.
> 1. Не показывает файл конфигурации в консолиНе понимаю, с чего вы решили что что-то должно показать в консоли.
> ~# opendkim -x /etc/opendkim.conf
> opendkim: milter socket must be specifiedНаписал в сообщении выше и в конце этого сообщения.
> :~# opendkim -x configfile
> opendkim: configfile: configuration error at line 0: error reading configuration file
> я не могу понять почему.Есть одна хорошая правильная команда - называется "man".
Набираем в консоли "man openkim" и наслаждаемся чтением.Я уже объяснил, что так оно ругается когда не находит файл configfile, и что нужно указать путь к реально существующему файлу.
> 2. >Осознайте, что второй инстанс OpenDKIM
> >должен слушать отдельный порт
> Я еще не создал второй инстанс вообще. Прошу помощи, как это сделать.Цитирую сообщение выше:
... Содержимое этого файла используется инит-скриптом запуска.
В результате OpenDKIM запускается такой командой:/usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid -p inet:8891@localhost
> ... Содержимое этого файла используется инит-скриптом запуска.
> В результате OpenDKIM запускается такой командой:
> /usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid
> -p inet:8891@localhostСпасибо большое!
Помогло, ура!!!А вот в файле /etc/default/opendkim
как правильно указать новый SOKET через запятую/пробел или новой строкой?
SOCKET="inet:8891@localhost", SOCKET="inet:8892@localhost"
или
SOCKET="inet:8891@localhost"
SOCKET="inet:8892@localhost"
------------------------------------------------
а номер /var/run/opendkim/opendkim1.pid
произвольно указать?
>[оверквотинг удален]
>> /usr/sbin/opendkim -x /etc/opendkim.conf -u opendkim -P /var/run/opendkim/opendkim.pid
>> -p inet:8891@localhost
> Спасибо большое!
> Помогло, ура!!!
> А вот в файле /etc/default/opendkim
> как правильно указать новый SOKET через запятую/пробел или новой строкой?
> SOCKET="inet:8891@localhost", SOCKET="inet:8892@localhost"
> или
> SOCKET="inet:8891@localhost"
> SOCKET="inet:8892@localhost"ИМХО такой возможности не предусмотрено.
> ------------------------------------------------
> а номер /var/run/opendkim/opendkim1.pid
> произвольно указать?произвольно.