dnl dnl встречная проверка адреса отправителя dnl dnl NO - не проводить проверку dnl WARN - вывода в лог файл предупреждения (не выводятся для сообщений, попадающих в исключения) dnl WARN_LOG - вывода в лог файл предупреждения (выводятся и для сообщений, попадающих в исключения) dnl REJECT - возврата клиенту кода 5xx dnl REJECT_LOG - возврата клиенту кода 5xx (для сообщений, попадающих в исключения, выводится предупреждения) dnl define(`confVERIFY_SENDER', `REJECT')dnl dnl dnl исключения из встречной проверки адреса отправителя dnl NO - не делать исключений dnl AUTH - исключать аутентифицированных отправителей dnl RELAY - исключать рилеи, перечисленные в CONFDIR/skip_verify_sender_relay dnl MAIL - исключать адреса отправителей, перечисленные в CONFDIR/skip_verify_sender_mail dnl RCPT - исключать адреса получателей, перечисленные в CONFDIR/skip_verify_sender_rcpt dnl SPF_PASS - делать исключение, если проверка соответствия SPF записи выполнена успешно dnl define(`confVERIFY_SENDER_SKIP', `RELAY AUTH MAIL RCPT')dnl dnl dnl величина таймаута при проверке отправителя dnl define(`confVERIFY_SENDER_TIMEOUT', `120s')dnl dnl dnl дополнительные параметры, используемые при встречной проверке отправителя dnl define(`confVERIFY_SENDER_PARAMETERS', `')dnl dnl define(`confVERIFY_SENDER_PARAMETERS', `postmaster_mailfrom=postmaster@${qualify_domain}')dnl dnl dnl файл с перечисленными адресами/доменами получателей, для которых при verify sender надо использовать defer=ok dnl пример: dnl define(`confVERIFY_SENDER_DEFER_OK_RCPT', `CONFDIR/verify_sender_defer_ok_rcpt')dnl dnl список указывается в виде: dnl domain : addr1 : addr2 : addr3 dnl пример: dnl my.domain.com : user : info : admin dnl my.another.domain.com : !user : * dnl dnl файл с перечисленными доменами/адресами отправителей, для которых при verify sender надо использовать defer=ok dnl пример: dnl define(`confVERIFY_SENDER_DEFER_OK_MAIL', `CONFDIR/verify_sender_defer_ok_mail')dnl dnl список указывается в виде: dnl domain : addr1 : addr2 : addr3 dnl пример: dnl sender.domain.com : user : info : admin dnl dnl игнорирование defer'ов при встречной проверке отправителя при приеме писем от php функции mail dnl NO - не игноировать defer'ы при встречной проверке отправителя при приеме писем от php функции mail dnl YES - не игноировать defer'ы при встречной проверке отправителя при приеме писем от php функции mail dnl define(`confVERIFY_SENDER_DEFER_OK_PHP', `NO') dnl исключение из встречной проверки производится, если: dnl - для доменной часть адреса отправителя не прописаны MX записи dnl - A запись домена отправителя совпадает с IP адресом отправителя dnl - локальная часть адреса отправителя равна www, apache или nobody dnl dnl список мейлбоксов адресов отправителей можно дополнять, при этом необходимо использовать символ pipe в качестве разделителя dnl define(`confVERIFY_SENDER_DEFER_OK_PHP_SENDER_LOCAL_PARTS', `www|apache|nobody') dnl ifelse(SECTION, `MAIN', `dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `RELAY', `dnl hostlist skip_verify_sender = 127.0.0.1 : CONFDIR/skip_verify_sender_relay ')dnl dnl ifdef(`confVERIFY_SENDER_DEFER_OK_RCPT', `', `define(`confVERIFY_SENDER_DEFER_OK_RCPT', `')')dnl ifdef(`confVERIFY_SENDER_DEFER_OK_MAIL', `', `define(`confVERIFY_SENDER_DEFER_OK_MAIL', `')')dnl define(`confVERIFY_SENDER_PARAMETERS_TMP',`') ifdef(`confVERIFY_SENDER_PARAMETERS', `ifelse(X`'confVERIFY_SENDER_PARAMETERS, `X', `', `define(`confVERIFY_SENDER_PARAMETERS_TMP', `,'confVERIFY_SENDER_PARAMETERS)')') ')dnl ifelse(SECTION, `MAIN', `') ifelse(SECTION, `ACL_CHECK_RCPT', `dnl # Проверка адреса отправителя warn set acl_m12 = ifelse(len(X`'confVERIFY_SENDER_DEFER_OK_RCPT), `1', `dnl', `dnl warn recipients = @@wildlsearch;confVERIFY_SENDER_DEFER_OK_RCPT set acl_m12 = ,defer_ok ') dnl ifelse(len(X`'confVERIFY_SENDER_DEFER_OK_RCPT), `1', `') ifelse(len(X`'confVERIFY_SENDER_DEFER_OK_MAIL), `1', `dnl', `dnl warn condition = ${if eq{$acl_m12}{}{yes}{no}} senders = @@wildlsearch;confVERIFY_SENDER_DEFER_OK_MAIL set acl_m12 = ,defer_ok ') dnl ifelse(len(X`'confVERIFY_SENDER_DEFER_OK_MAIL), `1', `') ifelse(confVERIFY_SENDER_DEFER_OK_PHP, `NO', `', ` warn condition = ${if eq{$acl_m12}{}{yes}{no}} condition = ${if match{$sender_address_local_part}{\N^(confVERIFY_SENDER_DEFER_OK_PHP_SENDER_LOCAL_PARTS)$\N}{yes}{no}} condition = ${if eq{${lookup dnsdb{a=$sender_address_domain}}}{$sender_host_address}{yes}{no}} condition = ${if eq{${lookup dnsdb{mx=$sender_address_domain}}}{}{yes}{no}} set acl_m12 = ,defer_ok ') dnl ifelse(confVERIFY_SENDER_DEFER_OK_PHP, `NO', `', `') ifelse(confVERIFY_SENDER, `WARN', `dnl warn \ ifelse_strstr(confVERIFY_SENDER_SKIP, `RELAY', `dnl hosts = !+skip_verify_sender ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `RELAY', `') ifelse_strstr(confVERIFY_SENDER_SKIP, `AUTH', `dnl ! authenticated = * ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `AUTH', `') ifelse_strstr(confVERIFY_SENDER_SKIP, `MAIL', `dnl ! senders = @@wildlsearch;CONFDIR/skip_verify_sender_mail ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `MAIL', `') ifelse_strstr(confVERIFY_SENDER_SKIP, `RCPT', `dnl ! recipients = @@wildlsearch;CONFDIR/skip_verify_sender_rcpt ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `RCPT', `') ! verify = sender/callout=confVERIFY_SENDER_TIMEOUT`'confVERIFY_SENDER_PARAMETERS_TMP # condition = ${if eq{$sender_verify_failure}{recipient}{yes}{no}} log_message = Verify sender failed add_header = X-Verify-Sender: NOT verified ') dnl ifelse(confVERIFY_SENDER, `WARN', `') ifelse(confVERIFY_SENDER, `WARN_LOG', `dnl warn ! verify = sender/callout=confVERIFY_SENDER_TIMEOUT`'confVERIFY_SENDER_PARAMETERS_TMP # condition = ${if eq{$sender_verify_failure}{recipient}{yes}{no}} log_message = Verify sender failed add_header = X-Verify-Sender: NOT verified ') dnl ifelse(confVERIFY_SENDER, `WARN_LOG', `') ifelse_strstr(confVERIFY_SENDER, `REJECT', `dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `SPF_PASS', `dnl ifdef(`confSPF2', `ifelse(confSPF2, `NO', `dnl', `dnl warn acl = acl_spf_pass condition = ${if eq{$acl_m_spf_result}{pass}{yes}{no}} set acl_m12 = spf_pass ')')dnl ifdef(`confSPF2', `ifelse(confSPF2, `NO', `dnl', `')') ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `SPF_PASS', `') deny \ ifelse_strstr(confVERIFY_SENDER_SKIP, `SPF_PASS', `dnl condition = ${if eq{$acl_m12}{spf_pass}{no}{yes}} ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `SPF_PASS', `') ifelse_strstr(confVERIFY_SENDER_SKIP, `RELAY', `dnl hosts = !+skip_verify_sender ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `RELAY', `') ifelse_strstr(confVERIFY_SENDER_SKIP, `AUTH', `dnl ! authenticated = * ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `AUTH', `') ifelse_strstr(confVERIFY_SENDER_SKIP, `MAIL', `dnl ! senders = @@wildlsearch;CONFDIR/skip_verify_sender_mail ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `MAIL', `') ifelse_strstr(confVERIFY_SENDER_SKIP, `RCPT', `dnl ! recipients = @@wildlsearch;CONFDIR/skip_verify_sender_rcpt ')dnl ifelse_strstr(confVERIFY_SENDER_SKIP, `RCPT', `') ! verify = sender/callout=confVERIFY_SENDER_TIMEOUT`'confVERIFY_SENDER_PARAMETERS_TMP${acl_m12} # condition = ${if eq{$sender_verify_failure}{recipient}{yes}{no}} ifelse_strstr(confVERIFY_SENDER, `LOG', `dnl warn ! verify = sender/callout=confVERIFY_SENDER_TIMEOUT`'confVERIFY_SENDER_PARAMETERS_TMP # condition = ${if eq{$sender_verify_failure}{recipient}{yes}{no}} log_message = Verify sender failed add_header = X-Verify-Sender: NOT verified ') dnl ifelse_strstr(confVERIFY_SENDER, `LOG', `') ') dnl ifelse_strstr(confVERIFY_SENDER, `REJECT', `') ') dnl ifelse(SECTION, `ACL_CHECK_RCPT', `')