dnl dnl добавление заголовка Authentication-Results с результатами проверки резолвинга dnl рилея отправителя, результатами проверки соответствия адреса рилея dnl отправителя SPF записи домена отправителя, результатами проверки DKIM и ARC dnl подписи: dnl NO - не добавлять поле Authentication-Results dnl CUSTOM - добавлять кастомный заголовок Authentication-Results с самостоятельно собранным занчением dnl DEFAULT - добавлять поле Authentication-Results с использованием ${authresults {$smtp_active_hostname}} (exim 4.91 и выше) dnl define(`confAUTH_RESULTS_ADD', `NO')dnl dnl dnl старое значение YES будет интерпретироваться как CUSTOM dnl dnl действие для существующих заголовков Authentication-Results: dnl RENAME - переименование старых заголовков (в конец имени добавляется -Old) dnl REMOVE - удаление старых заголовков dnl NOTHING - оставлять заголовки без изменений dnl define(`confAUTH_RESULTS_OLD_HEADERS', `NOTHING')dnl dnl dnl имя хоста сервера, используемое в заголовке Authentication-Results dnl по умолчанию используется smtp_active_hostname dnl define(`confAUTH_RESULTS_HOSTNAME', `')dnl dnl dnl название кастомного заголовка с самостоятельно собранным занчением dnl define(`confAUTH_RESULTS_ADD_CUSTOM_HEADER_DEFAULT', `Authentication-Results')dnl dnl dnl если в confAUTH_RESULTS_ADD будут присутствовать оба значения (и CUSTOM и DEFAULT), dnl то будет использовано альтернативное название кастомного заголовка dnl define(`confAUTH_RESULTS_ADD_CUSTOM_HEADER_FALLBACK', `X-Authentication-Results')dnl dnl dnl показывать в кастомном заголовке Authentication-Results пропущенные проверки dnl NO - не показывать пропущенные проверки dnl YES - показывать пропущенные проверки dnl define(`confAUTH_RESULTS_ADD_CUSTOM_SHOW_SKIPPED', `NO')dnl dnl dnl блокировать добавление кастомного и штатного заголовков Authentication-Results при пересылке писем из командной строки от имени пользователя root dnl NO - не блокирование добавление добавление кастомного и штатного заголовков Authentication-Results dnl REMOTE - блокировать добавление добавление кастомного и штатного заголовков Authentication-Results только в письмах, отправляемых транспортов remote_smtp dnl ALL - блокировать добавление добавление кастомного и штатного заголовков Authentication-Results во всех письмах dnl define(`confAUTH_RESULTS__HIDE_ROOT_FORWARD', `NO')dnl dnl ifelse(SECTION, `MAIN', `dnl ifdef(`confAUTH_RESULTS_HOSTNAME', `ifelse(len(X`'confAUTH_RESULTS_HOSTNAME), `1', `dnl define(`confAUTH_RESULTS_HOSTNAME', `$smtp_active_hostname')dnl ')', `dnl define(`confAUTH_RESULTS_HOSTNAME', `$smtp_active_hostname')dnl ') dnl ifelse_strstr(confAUTH_RESULTS_ADD, `YES', `dnl define(`confAUTH_RESULTS_ADD', confAUTH_RESULTS_ADD` CUSTOM')dnl ') dnl ifelse_strstr(confAUTH_RESULTS_ADD, `YES', `') ifelse_strstr(confAUTH_RESULTS_ADD, `DEFAULT', `dnl define(`_confAUTH_RESULTS_ADD_CUSTOM_HEADER_', confAUTH_RESULTS_ADD_CUSTOM_HEADER_FALLBACK)dnl ',`dnl define(`_confAUTH_RESULTS_ADD_CUSTOM_HEADER_', confAUTH_RESULTS_ADD_CUSTOM_HEADER_DEFAULT) ') dnl ifelse_strstr(confAUTH_RESULTS_ADD, `DEFAULT', `') ') dnl ifelse(SECTION, `MAIN', `', `') ifelse(SECTION, `ACL_CHECK_DATA', `dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `REMOVE', `dnl warn acl = acl_remove_header Authentication-Results ') dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `REMOVE', `') ifelse(confAUTH_RESULTS_OLD_HEADERS, `RENAME', `dnl warn acl = acl_remove_header Authentication-Results RENAME_HEADERS(Authentication-Results) ') dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `RENAME', `') warn acl = acl_add_auth_results data ') dnl ifelse(SECTION, `ACL_CHECK_RCPT', `') ifelse(SECTION, `ACL_CHECK_NOT_SMTP', `dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `REMOVE', `dnl warn acl = acl_remove_header Authentication-Results ') dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `REMOVE', `') ifelse(confAUTH_RESULTS_OLD_HEADERS, `RENAME', `dnl warn acl = acl_remove_header Authentication-Results RENAME_HEADERS(Authentication-Results) ') dnl ifelse(confAUTH_RESULTS_OLD_HEADERS, `RENAME', `') warn acl = acl_add_auth_results not_smtp ') dnl ifelse(SECTION, `ACL_CHECK_NOT_SMTP', `') ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_add_auth_results: # acl_arg1 - стадия обработки письма (data, not_smtp) ifelse(confAUTH_RESULTS__HIDE_ROOT_FORWARD, `NO', `', `dnl # определение необходимости блокировки добавления кастомного и штатного заголовков Authentication-Results при пересылке писем из командной строки от имени пользователя root warn set acl_m_auth_results_hide = no condition = ${if eq{$acl_arg1}{not_smtp}{yes}{no}} condition = ${if eq{$received_protocol}{local}{yes}{no}} condition = ${if eq{$sender_ident}{root}{yes}{no}} condition = ${if <{${listcount:$lh_Received:}}{2}{no}{yes}} set acl_m_auth_results_hide = yes ')dnl ifelse(confAUTH_RESULTS__HIDE_ROOT_FORWARD, `NO', `', `') ifelse(confAUTH_RESULTS__HIDE_ROOT_FORWARD, `ALL', ` # полная блокировка добавления кастомного и штатного заголовков Authentication-Results при пересылке писем из командной строки от имени пользователя root accept condition = ${if eq{$acl_m_auth_results_hide}{yes}{yes}{no}} ')dnl ifelse(confAUTH_RESULTS__HIDE_ROOT_FORWARD, `ALL', `') ifelse_strstr(confAUTH_RESULTS_ADD, `CUSTOM', `dnl ifdef(`confAUTH_RESULTS_ADD_CUSTOM_SHOW_SKIPPED', `ifelse(confAUTH_RESULTS_ADD_CUSTOM_SHOW_SKIPPED, `NO', `', `dnl ifdef(`confCHECK_RELAY_RESOLVE', `ifelse(confCHECK_RELAY_RESOLVE, `NO', `', `dnl warn condition = ${if match{$acl_m_auth_results}{\N\biprev=\N}{no}{yes}} set acl_m_auth_results = ${acl_m_auth_results};\n\tiprev=skip ')') dnl ifdef(`confCHECK_RELAY_RESOLVE', `ifelse(confCHECK_RELAY_RESOLVE, `NO', `', `')') ifelse(confSPF2, `YES', `dnl warn condition = ${if eq{$spf_result}{}{yes}{no}} condition = ${if match{$acl_m_auth_results}{\N\bspf=\N}{no}{yes}} set acl_m_auth_results = ${acl_m_auth_results};\n\tspf=skip ') dnl ifelse(confSPF2, `YES', `') ifelse(confDKIM_CHECK, `YES', `dnl warn condition = ${if match{$acl_m_auth_results}{\N\bdkim=\N}{no}{yes}} set acl_m_auth_results = ${acl_m_auth_results};\n\tdkim=skip ') dnl ifelse(confDKIM_CHECK, `YES', `') ifelse(confDMARC, `YES', `dnl warn condition = ${if match{$acl_m_auth_results}{\N\bdmarc=\N}{no}{yes}} set acl_m_auth_results = ${acl_m_auth_results};\n\tdmarc=skip ') dnl ifelse(confDMARC, `YES', `') ifdef(`confARC', `ifelse(confARC, `NO', `', `dnl warn condition = ${if match{$acl_m_auth_results}{\N\barc=\N}{no}{yes}} set acl_m_auth_results = ${acl_m_auth_results};\n\tarc=skip ')') dnl ifdef(`confARC', `ifelse(confARC, `NO', `', `')') ')') dnl ifdef(`confAUTH_RESULTS_ADD_CUSTOM_SHOW_SKIPPED', `ifelse(confAUTH_RESULTS_ADD_CUSTOM_SHOW_SKIPPED, `NO', `', `')') warn condition = ${if eq{$acl_arg1}{not_smtp}{yes}{no}} set acl_m_auth_results = ${acl_m_auth_results};\n\tlocal=pass (non-smtp, $smtp_active_hostname) u=$authenticated_id warn condition = ${if def:acl_m_auth_results{no}{yes}} ! hosts = +relay_from_hosts ! authenticated = * set acl_m_auth_results = ; none # добавление кастомного заголовка Authentication-Results warn condition = ${if def:acl_m_auth_results{yes}{no}} # add_header = :at_start:_confAUTH_RESULTS_ADD_CUSTOM_HEADER_: $smtp_active_hostname${acl_m_auth_results} set acl_m_auth_results_header = _confAUTH_RESULTS_ADD_CUSTOM_HEADER_: confAUTH_RESULTS_HOSTNAME${acl_m_auth_results} acl = acl_add_header "$acl_m_auth_results_header" yes set acl_m_auth_results_short = ${sg{_confAUTH_RESULTS_ADD_CUSTOM_HEADER_: confAUTH_RESULTS_HOSTNAME${acl_m_auth_results}}{\N;\r?\n\s+auth=[^\r\n]*\N}{}} ') dnl ifelse_strstr(confAUTH_RESULTS_ADD, `CUSTOM', `') ifelse_strstr(confAUTH_RESULTS_ADD, `DEFAULT', `dnl # добавление штатного заголовка Authentication-Results warn set acl_m_auth_results_default_short = ${sg{${authresults{confAUTH_RESULTS_HOSTNAME}}}{\N;\r?\n\s+auth=[^\r\n]*\N}{}} ifelse_strstr(confARC, `SIGN', `dnl dnl при наложении ARC подписей убираем из добавляемого Authentication-Results информацию об аутентификации # add_header = :at_start:$acl_m_auth_results_default_short acl = acl_add_header "$acl_m_auth_results_default_short" yes ', `dnl dnl если ARC подпись не накладывается, то заголовок Authentication-Results будет удалён при отсылке по SMTP dnl и данные SMTP аутентификации можно сохранить для локальной доставки # add_header = :at_start:${authresults {$smtp_active_hostname}} set acl_m_auth_results_header = ${authresults {$smtp_active_hostname}} acl = acl_add_header "$acl_m_auth_results_header" yes ') dnl ifelse_strstr(confARC, `SIGN', `', `') ') dnl ifelse_strstr(confAUTH_RESULTS_ADD, `DEFAULT', `') accept ') dnl ifelse(SECTION, `ACLS_ADDITIONAL', `', `')