primary_hostname  | = stecs.ru | 
smtp_banner  | = "[mx.stecs.ru]...aloha" | 
  | 
domainlist local_domains  | = ${lookup sqlite,file=/www/db/exim/exim.sqlite \ | 
   |  {SELECT domain FROM domain WHERE \  | 
   |  domain='${quote_sqlite:$domain}' AND active='1'}}  | 
domainlist relay_to_domains  | = ${lookup sqlite,file=/www/db/exim/exim.sqlite \ | 
   |  {SELECT domain FROM domain WHERE \  | 
   |  domain='${quote_sqlite:$domain}' AND active='1'}}  | 
domainlist dkim_required_domains  | = gmail.com : yandex.ru : rambler.ru : \ | 
   |  mail.ru : bk.ru : list.ru : inbox.ru  | 
hostlist relay_from_hosts  | = localhost : 96.47.72.84 | 
  | 
| begin acl | 
  | 
acl_smtp_dkim:  | 
  | 
# Отклоняем письма с неправильной DKIM-подписью  | 
  deny  | message  | = Wrong DKIM signature  | 
   | dkim_status  | = fail  | 
# Для выбранных доменов требуем наличия DKIM-подписи  | 
  deny  | message  | = Valid DKIM signature needed for mail from $sender_domain  | 
   | sender_domains  | = +dkim_required_domains  | 
   | dkim_status  | = none  | 
  accept  | 
  | 
acl_check_rcpt:  | 
  | 
# Accept if the source is local SMTP (i.e. not over TCP/IP). We do this by 
# testing for an empty sending host field.  | 
  accept  | hosts  | = :  | 
   | control  | = dkim_disable_verify  | 
# Restricted characters in address (local_domains)  | 
  deny  | message  | = Restricted characters in address  | 
   | domains  | = +local_domains  | 
   | local_parts  | = ^[.] : ^.*[@%!/|]  | 
# Restricted characters in address (! local_domains)  | 
  deny  | message  | = Restricted characters in address  | 
   | domains  | = !+local_domains  | 
   | local_parts  | = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
  | 
# Restricted characters in address (root)  | 
  deny  | message  | = Restricted characters in address  | 
   | hosts  | = !+relay_from_hosts  | 
   | local_parts  | = ^.*root@*  | 
# Accept postmaster  | 
  accept  | local_parts  | = postmaster  | 
   | domains  | = +local_domains  | 
  | 
# Reject all RCPT commands after too many bad recipients  | 
  deny  | condition  | 
 = ${if and {\ 
 {>{$rcpt_count}{10}}\ 
 {<{$recipients_count}{${eval:$rcpt_count/2}}} }}  | 
   | message  | = Rejected for too many bad recipients  | 
   | logwrite  | 
 = REJECT [$sender_host_address]: bad recipient count high 
 [${eval:$rcpt_count-$recipients_count}]  | 
  | 
# Запрещаем тех, кто не обменивается приветственными сообщениями (HELO/EHLO)  | 
  deny  | message  | = "HELO/EHLO require by SMTP RFC"  | 
   | condition  | = ${if eq{$sender_helo_name}{}{yes}{no}}  | 
# Рубаем, кто подставляет свой IP в HELO  | 
  deny  | message  | = "Your IP in HELO - access denied!"  | 
   | hosts  | =  * : !+relay_from_hosts  | 
   | condition  | 
 = ${if eq{$sender_helo_name}\ 
 {$sender_host_address}{true}{false}}  | 
# Рубаем тех, кто в HELO пихает мой IP  | 
deny  | condition  | 
 = ${if eq{$sender_helo_name}\ 
 {$interface_address}{yes}{no}}  | 
   | hosts  | = !127.0.0.1 : !localhost : *  | 
   | message  | = "Main IP in your HELO! Access denied!"  | 
# Рубаем тех, кто в HELO пихает только цифры (не бывает хостов ТОЛЬКО из цифр)  | 
deny  | condition  | 
 = ${if match{$sender_helo_name}\ 
 {\N^\d+$\N}{yes}{no}}  | 
   | hosts  | = !127.0.0.1 : !localhost : *  | 
   | message  | = "Can not be only number in HELO!"  | 
# Рубаем тех, кто не пишет отправителя (пробел)  | 
  deny  | condition  | = ${if match{$sender_address}{\N^\s+$\N}{yes}{no}}  | 
   | hosts  | = !127.0.0.1 : !localhost : *  | 
   | message  | = "Sender address contains spaces?! not for RFC..."  | 
  | 
# Задержка (это такой метод борьбы со спамом, основанный на принципе его рассылки) # На этом рубается почти весь спам  | 
  warn  | # ставим дефолтовую задержку в 30 секунд  | 
   | set acl_m0  | = 30s  | 
  warn  | # ставим задержку в 0 секунд своим хостам  | 
   | hosts  | = +relay_from_hosts  | 
   | set acl_m0  | = 0s  | 
  warn  | # пишем в логи задержку (если оно вам надо)  | 
   | logwrite  | 
 = Delay $acl_m0 for $sender_host_name \ 
 [$sender_host_address] with HELO=$sender_helo_name. Mail \ 
 from $sender_address to $local_part@$domain.  | 
   | delay  | = $acl_m0  | 
  | 
# Deny unless the sender address can be verified.  | 
  require  | verify  | = sender  | 
# Accept if the message comes from one of the hosts for which we are an 
# outgoing relay.  | 
  accept  | hosts  | = +relay_from_hosts  | 
   | control  | = submission  | 
   | control  | = dkim_disable_verify  | 
  | 
# Accept if the message arrived over an authenticated connection  | 
  accept  | authenticated  | = *  | 
# При control = submission exim постоянно дописывал отправителю qualify_domain  | 
   | control  | = submission/sender_retain  | 
   | control  | = dkim_disable_verify  | 
# Проверка получателя в локальных доменах  | 
# Если не проходит, то проверяется следующий ACL, и если не прошёл и там - deny  | 
  accept  | domains  | = +local_domains  | 
   | endpass  |    | 
   | message  | = "Unknown user (local_domains)" | 
   | verify  | = recipient | 
# Проверяем получателя в релейных доменах  | 
# Опять-таки если не проходит -> следующий ACL, и если не прошёл и там - deny  | 
  accept  | domains  | = +relay_to_domains  | 
   | endpass  |    | 
   | message  | = "Unknown user (relay_to_domains)" | 
   | verify  | = recipient | 
# Рубаем тех, кто в блэк-листах  | 
# Серваки перебираются сверху вниз, если не хост не найден на первом, то запрашивается второй, и т.д.  | 
# Если не найден ни в одном из списков - то почта пропускается  | 
  deny  | message  | = you in blacklist: $dnslist_domain \n $dnslist_text  | 
   | dnslists  | = opm.blitzed.org : \ | 
   |  cbl.abuseat.org : \  | 
   |  bl.csma.biz : \  | 
   |  dynablock.njabl.org  | 
   | 
#-# require  | message  | = relay not permitted  | 
   | #-# domains  | = +local_domains : +relay_to_domains  | 
# Если не подошло ни одно правило - чувак явно ищет открытый релей. Пинаем с сервера  | 
  deny  | message  | = "Access denied - autorization failed. Relay not permitted"  |