dnl dnl relay based on MX dnl dnl рилеинг входящей почты доменов, для которых мы являемся backup MX, dnl и best MX запись которых входит в наши trusted сети, dnl перечисленные в файле hosts-trusted dnl ifdef(`confRELAY_BASED_ON_MX', `ifelse(confRELAY_BASED_ON_MX, `YES', `dnl define(`confRELAY_BASED_ON_MX', `BEST') ')') ifdef(`confRELAY_BASED_ON_MX', `ifelse(confRELAY_BASED_ON_MX, `BEST', `dnl ifelse(SECTION, `ACL_CHECK_RCPT_BOTTOM', `dnl # Прием почты для получателей из доменов, для которых мы являемся backup MX, # но которые не прописаны явным образом в relay_to_domains, # но best MX которых находится в hosts-trusted warn set acl_m0 = no_mx domains = @mx_any set acl_m0 = set acl_m1 = ${lookup dnsdb{mx=$domain}} acl = acl_get_bestmx set acl_m1 = $acl_m0 set acl_m0 = acl = acl_check_mx # acl_m0 == no_mx - мы не является backup MX # acl_m0 == - мы являемся backup MX, но best MX не находится в trusted networks # acl_m0 == yes - мы являемся backup MX и best MX находится в trusted networks # acl_m0 == $value - мы являемся backup MX и best MX находится в trusted networks deny condition = ${if eq{$acl_m0}{}{yes}{no}} log_message = Unauthorized backup MX for $domain message = Unauthorized backup MX for domain $domain not permitted accept condition = ${if eq{$acl_m0}{no_mx}{no}{yes}} endpass message = Unrouteable address verify = recipient/callout=confVERIFY_RECIPIENT_TIMEOUT,defer_ok ')dnl ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_get_bestmx: # acl_m0 - результат # acl_m1 - список MX записей accept condition = ${if eq{$acl_m1}{}{yes}{no}} warn set acl_m2 = ${extract{1}{\n}{$acl_m1}} set acl_m1 = ${sg{$acl_m1}{\N^.+\n?\N}{}} warn condition = ${if eq{$acl_m2}{}{no}{yes}} condition = ${if eq{$acl_m0}{}{yes}{no}} set acl_m0 = $acl_m2 set acl_m2 = warn condition = ${if eq{$acl_m2}{}{no}{yes}} condition = ${if <\ {${sg{$acl_m2}{\N^(\d+)\s+.+\N}{\$1}}}\ {${sg{$acl_m0}{\N^(\d+)\s+.+(\n.*)*\N}{\$1}}}\ {yes}{no}} set acl_m0 = $acl_m2 set acl_m2 = warn condition = ${if eq{$acl_m2}{}{no}{yes}} condition = ${if eq\ {${sg{$acl_m2}{\N^(\d+)\s+.+\N}{\$1}}}\ {${sg{$acl_m0}{\N^(\d+)\s+.+(\n.*)*\N}{\$1}}}\ {yes}{no}} set acl_m0 = $acl_m0\n$acl_m2 warn acl = acl_get_bestmx accept acl_check_mx: # acl_m0 - результат # acl_m1 - список MX записей accept condition = ${if eq{$acl_m1}{}{yes}{no}} warn set acl_m2 = ${extract{1}{\n}{$acl_m1}} set acl_m1 = ${sg{$acl_m1}{\N^.+\n?\N}{}} set acl_m2 = ${sg{$acl_m2}{\N^(\d+)\s+(.+)\N}{\$2}} set acl_m2 = ${lookup dnsdb{a=$acl_m2}} set acl_c2 = CONFDIR/hosts-trusted acl = acl_iplsearch accept condition = ${if eq{$acl_m0}{}{no}{yes}} warn acl = acl_check_mx accept ')dnl ')') ifdef(`confRELAY_BASED_ON_MX', `ifelse(confRELAY_BASED_ON_MX, `ANY', `dnl ifelse(SECTION, `ACL_CHECK_RCPT_BOTTOM', `dnl # Прием почты для получателей из доменов, для которых мы являемся backup MX, # но которые не прописаны явным образом в relay_to_domains, # но best MX которых находится в hosts-trusted accept domains = @mx_any endpass log_message = Unauthorized backup MX for $domain message = Unauthorized backup MX for domain $domain not permitted verify = recipient ')dnl ifelse(SECTION, `ROUTERS', `dnl route_to_trusted_hosts: driver = dnslookup transport = remote_smtp domains = ! +local_domains check_secondary_mx ignore_target_hosts = ! CONFDIR/hosts-trusted : * # при раскомментированом параметре verify_only почта будет пересылаться на best MX запись # при закомментированом параметре verify_only почта будет пересылаться на более младшую MX запись, # указанную в CONFDIR/hosts-trusted # verify_only self = fail ')dnl ')')