dnl dnl роутинг почты для MS Exchange dnl dnl NO - не производить роутинг dnl RELAY_LIST - производить роутинг, используя список рилеев dnl (список A или PTR записей, разделенных двоеточиями) dnl define(`confEXCHANGE_ROUTERS', `NO')dnl dnl dnl список адресов контроллеров домена со списком пользователей MS Exchange в AD dnl define(`confEXCHANGE_AD_HOSTS', `10.0.0.1 : 10.0.0.2')dnl dnl dnl параметры запроса к LDAP серверу dnl define(`confEXCHANGE_LDAP_USER', `cn=ldapuser,cn=Users,dc=domain,dc=ua')dnl dnl define(`confEXCHANGE_LDAP_USER', `ldapuser@domain.ua')dnl dnl define(`confEXCHANGE_LDAP_PASSWORD', `password')dnl dnl define(`confEXCHANGE_LDAP_BASE', `cn=Users,dc=domain,dc=ua')dnl dnl dnl адреса, исключаемые из проверки получателей, указываются в CONFDIR/domains-exchange dnl в виде: dnl dnl domain : addr1 : addr2 : addr3 dnl dnl пример: dnl zuper.domain.com : user : info : admin dnl dnl проверка пользователя MS Exchange в роутере имеет по сравнению с приведенной dnl ниже проверкой в acl_smtp_rcpt как недостаток (при каждой проверке происходит и dnl обращение по LDAP протоколу к AD и обращение по SMTP протоколу к MS Exchange), dnl так и преимущество (verify = recipient кешируется exim'ом) dnl dnl deny domains = +exchange_domains dnl ! recipients = @@lsearch;CONFDIR/skip_exch_check dnl condition = ${if eq{${lookup ldap{\ dnl user="confEXCHANGE_LDAP_USER" pass=confEXCHANGE_LDAP_PASSWORD \ dnl ldap:///confEXCHANGE_LDAP_BASE?proxyAddresses?sub?\ dnl (proxyAddresses=smtp:$local_part@$domain)}\ dnl {ok}fail}}{ok}{no}{yes}} dnl message = Unrouteable address dnl ifelse(SECTION, `MAIN', `dnl domainlist exchange_domains = lsearch;CONFDIR/domains-exchange ldap_default_servers = confEXCHANGE_AD_HOSTS define(`DNSLOOKUP_DOMAINS', DNSLOOKUP_DOMAINS` : ! +exchange_domains')dnl ') ifelse(SECTION, `ACL_CHECK_RCPT', `dnl # Проверка существования получетеля из домена MS Exchange deny domains = +exchange_domains ! recipients = @@lsearch;CONFDIR/skip_exch_check message = Unrouteable address ! verify = recipient/callout ') ifelse(SECTION, `ACL_CHECK_RCPT_BOTTOM', `dnl # Прием почты для получателей из доменов MS Exchange accept domains = +exchange_domains endpass ') dnl ifelse(SECTION, `ROUTERS', `dnl dnl exchange_router: driver = manualroute transport = remote_smtp domains = +exchange_domains # route_data = ${sg{\ # ${lookup ldap{\ # user="confEXCHANGE_LDAP_USER" pass=confEXCHANGE_LDAP_PASSWORD \ # ldap:///confEXCHANGE_LDAP_BASE?cn,proxyAddresses?sub?\ # (proxyAddresses=smtp:$local_part@$domain)}\ # {confEXCHANGE_ROUTERS}fail}\ # }{\N\s\N}{}} route_data = ${lookup ldap{\ user="confEXCHANGE_LDAP_USER" pass=confEXCHANGE_LDAP_PASSWORD \ ldap:///confEXCHANGE_LDAP_BASE?cn,proxyAddresses?sub?\ (proxyAddresses=smtp:$local_part@$domain)}\ {del_spaces(confEXCHANGE_ROUTERS)}fail} # no_verify_sender ifdef(`confHEADERS_REMOVE_EXCHANGE_ROUTER', `headers_remove = confHEADERS_REMOVE_EXCHANGE_ROUTER ')dnl no_more ')