У меня есть частный сервер postfix, который использует dovecot sasl для факультативной аутентификации клиентов отправки, и я пытаюсь настроить его так, чтобы он также принимал сертификаты клиентов, чтобы он мог действовать в качестве узла ретрансляции для определенных конкретных исходных серверов.
У меня это в основном работает, но я столкнулся с ошибкой, когда opendkim milter не распознает ретрансляционные соединения с аутентификацией по сертификату как внутренние или аутентифицированные, поэтому он не добавляет подпись DKIM.
в main.cf:
milter_default_action = accept
smtpd_milters = inet:opendkim:8891
non_smtpd_milters = inet:opendkim:8891
smtpd_tls_CAfile = /path/to/private-ca-cert.pem
tls_append_default_CA = no
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_tls_all_clientcerts,reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,permit_tls_all_clientcerts,reject_unauth_destination
и master.cf в submission / inet:
-o smtpd_client_restrictions=permit_sasl_authenticated,permit_tls_all_clientcerts,reject
-o smtpd_tls_ask_ccert=yes
Все вышеперечисленное работает, и соединениям, которые представляют действительный сертификат, подписанный моим частным CA, разрешен ретрансляционный доступ.
Однако эти ретранслируемые электронные письма не подписываются opendkim - вместо этого opendkim milter регистрирует это:
external host [host.that.connected.with.cert] attempted to send as [mydomain.com]
Я знаю, что могу использовать конфигурацию opendkim ExternalIgnoreList
, но поскольку эти хосты находятся на динамических IP-адресах, это не идеальное решение, и я ищу решение, которое принимает любой хост так же, как он принимает почту, отправленную через SASL-аутентифицированное соединение для отправки от любого почтового клиента.
Кажется, я проследил это до макроса {auth_authen}
, который milter использует для определения того, пришла ли почта из аутентифицированного соединения ... postfix только устанавливает этот макрос для имени пользователя sasl.
Есть ли способ расширить функциональность {auth_authen}
или добавить новый макрос (используя конфигурацию opendkim MacroList
), чтобы указать, что использовался действующий сертификат клиента ?
Поскольку вы в любом случае принимаете только аутентифицированную почту, вам не нужно передавать информацию о том, какой метод использовался для opendkim - только (логическое) различие между портами с обязательной аутентификацией (подписью) и портами, которые не предлагать аутентификацию (проверить).
Вы можете установить -o milter_macro_daemon_name = something
в master.cf
, чтобы opendkim знал, какое письмо должно быть подписано. В противном случае этот макрос по умолчанию будет $ myhostname
, но, используя (произвольно, opendkim все равно) разные значения для портов только для проверки и для портов с обязательной аутентификацией, вы можете различить их.
Документы рекомендуют использовать ORIGINATING
и VERIFYING
, чтобы сделать это совершенно очевидным. MacroList
в вашем opendkim.conf
может затем проверить, совпадает ли daemon_name
с тем, что вы установили.