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 = defer set acl_m1 = ${extract{2}{ }{\ ${reduce{<\n ${lookup dnsdb{mx=$domain}}}{999999 localhost}{${if <{${extract{1}{ }{$item}}}{${extract{1}{ }{$value}}}{$item}{$value}}}}\ }}\N set acl_m_iplsearch_result = acl = acl_iplsearch CONFDIR/hosts-trusted "${lookup dnsdb{a=$acl_m1}}" set acl_m0 = $acl_m_iplsearch_result condition = ${if eq{$acl_m_iplsearch_result}{}{yes}{no}} acl = acl_iplsearch CONFDIR/hosts-trusted "${lookup dnsdb{aaaa=$acl_m1}}" set acl_m0 = $acl_m_iplsearch_result # 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 defer condition = ${if eq{$acl_m0}{defer}{yes}{no}} log_message = Could not resolve MX records for $domain message = Access temporarily denied. Could not resolve MX records for $domain accept condition = ${if eq{$acl_m0}{no_mx}{no}{yes}} set acl_m_recipients_accepted = ${if eq{$acl_m_recipients_accepted}{}{}{$acl_m_recipients_accepted, }}$local_part@$domain endpass message = Unrouteable address verify = recipient/callout=confVERIFY_RECIPIENT_TIMEOUT,defer_ok ')dnl ifelse(SECTION, `ACL_CHECK_RCPT_BOTTOM', `') ')') dnl ifdef(`confRELAY_BASED_ON_MX', `ifelse(confRELAY_BASED_ON_MX, `BEST', `')') 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 set acl_m_recipients_accepted = ${if eq{$acl_m_recipients_accepted}{}{}{$acl_m_recipients_accepted, }}$local_part@$domain endpass log_message = Unauthorized backup MX for $domain message = Unauthorized backup MX for domain $domain not permitted verify = recipient ')dnl ifelse(SECTION, `ACL_CHECK_RCPT_BOTTOM', `') 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 ifelse(SECTION, `ROUTERS', `') ')') dnl ifdef(`confRELAY_BASED_ON_MX', `ifelse(confRELAY_BASED_ON_MX, `ANY', `')')