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" |