dnl dnl проверка рилея отправителя в black list'ах dnl dnl NO - не проводить проверку dnl WARN - вывода по умолчанию в лог файл предупреждения dnl REJECT - возврата по умолчанию клиенту кода 5xx dnl DEFER - возврата по умолчанию клиенту кода 4xx dnl GREYLIST:XX - добавить XX баллов к счетчику опционального грейлистинга dnl define(`confCHECK_RELAY_BLACKLIST', `WARN')dnl dnl dnl в файле access-relay-addr перечисляются A записи хостов и сети в виде CIDR dnl для хостов и сетей, перечисленных в файле access-relay-addr, применяется dnl действие, указанное в переменной confCHECK_RELAY_BLACKLIST dnl dnl в файле access-relay-host перечисляются A записи хостов, сети в виде CIDR, dnl PTR записи хостов, доменные зоны в виде wildcard или регулярных выражений dnl dnl в файле access-relay-host можно указать необходимое действие для данного dnl хоста в виде: dnl host : action : message dnl dnl где dnl host - A запись хоста, сеть в виде CIDR, PTR запись хоста или доменная зона dnl в виде wildcard или регулярного выражения dnl action - действие dnl message - ответ SMTP клиенту dnl dnl возможные значения для action: dnl warn - вывод в лог файл предупреждения dnl reject - отказ в приеме сообщения dnl deny - синоним для reject dnl defer - возврат временной ошибки dnl greylist:X - добавление X баллов к счетчику опционального грейлистинга dnl ok - исключение из проверки для указанного хоста dnl dnl ответ SMTP будет использован в случае указания reject/deny или defer в dnl качестве значения для action. если текст ответа не будет указан, будет dnl использован текст сообщения об ошибке по умолчанию dnl dnl если параметр action не будет указан, будет использоваться действие, указанное dnl в переменной confCHECK_RELAY_BLACKLIST dnl dnl пример: dnl A.B.C.D : defer : message defered. contact postmaster dnl A.B.C.0/24 : deny : sender network blacklisted dnl host.domain.tld : warn dnl host2.domain.tld : ok dnl *.domain.tld dnl \N^.+\.zuper-ISP\..+$\N : reject ifelse(SECTION, `MAIN', `dnl hostlist relay_addr_blacklisted = CONFDIR/access-relay-addr ')dnl dnl ifelse(SECTION, `ACL_CHECK_RCPT', ` # Проверка рилея отправителя в black list-ах warn set acl_m0 = ${lookup{$sender_host_address}\ iplsearch{CONFDIR/access-relay-host}\ {${if eq{$value}{}{confCHECK_RELAY_BLACKLIST}{$value}}}\ {\ ${lookup{$sender_host_name}\ wildlsearch{CONFDIR/access-relay-host}\ {${if eq{$value}{}{confCHECK_RELAY_BLACKLIST}{$value}}}\ {no}}\ }} # следующий фрагмент оставлен для совместимости со старой версией check_relay_blacklist.m4 warn condition = ${if eq{$acl_m0}{no}{yes}{no}} condition = ${lookup{$sender_host_name|reject} wildlsearch{CONFDIR/access-relay-host}{yes}{no}} set acl_m0 = reject warn condition = ${if eq{$acl_m0}{no}{yes}{no}} condition = ${lookup{$sender_host_name|accept} wildlsearch{CONFDIR/access-relay-host}{yes}{no}} set acl_m0 = ok # извлечение из результатов запроса необходимого дейстия и сообщения smtp клиенту либо кол-ва баллов greylist-инга warn set acl_m1 = ${lc:${sg{${extract{1}{:}{$acl_m0}}}{\N\s\N}{}}} set acl_m2 = ${sg{${extract{2}{:}{$acl_m0}}}{\N^\s+\N}{}} # Warning в случае принадлежности хоста рилея к blacklisted сетям # Warning if sender host in blacklisted network warn condition = ${if eq{$acl_m1}{warn}{yes}{no}} message = X-Warn-Relay-BlackListed: relay $sender_host_name is blacklisted log_message = relay $sender_host_name blacklisted ifelse(confCHECK_RELAY_BLACKLIST, `WARN', `dnl warn condition = ${if eq{$acl_m1}{no}{yes}{no}} hosts = +relay_addr_blacklisted message = X-Warn-Relay-BlackListed: relay $sender_host_address is blacklisted log_message = relay $sender_host_address blacklisted ') # Defer в случае принадлежности хоста рилея к blacklisted сетям # Defer if sender host in blacklisted network defer condition = ${if eq{$acl_m1}{defer}{yes}{no}} message = ${if eq{$acl_m2}{}{Access from relay $sender_host_name defered according to the local policy}{$acl_m2}} log_message = relay $sender_host_name blacklisted ifelse(confCHECK_RELAY_BLACKLIST, `DEFER', `dnl defer condition = ${if eq{$acl_m1}{no}{yes}{no}} hosts = +relay_addr_blacklisted message = Access from relay $sender_host_address defered according to the local policy log_message = relay $sender_host_address blacklisted ') # Reject в случае принадлежности хоста рилея к blacklisted сетям # Reject if sender host in blacklisted network deny condition = ${if or{\ {eq{$acl_m1}{reject}}\ {eq{$acl_m1}{deny}}\ }{yes}{no}} message = ${if eq{$acl_m2}{}{Access from relay $sender_host_name denied according to the local policy}{$acl_m2}} log_message = relay $sender_host_name blacklisted${if eq{$acl_m2}{}{}{: $acl_m2}} ifelse(confCHECK_RELAY_BLACKLIST, `REJECT', `dnl deny condition = ${if eq{$acl_m1}{no}{yes}{no}} hosts = +relay_addr_blacklisted message = Access from relay $sender_host_address denied according to the local policy log_message = relay $sender_host_address blacklisted ') # greylist в случае принадлежности хоста рилея к blacklisted сетям # greylist if sender host in blacklisted network warn condition = ${if eq{$acl_m1}{greylist}{yes}{no}} set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+$acl_m2} \ log_message="${extract{log_message}{$acl_c8}} relay $sender_host_name greylisted;" ifelse_strstr(confCHECK_RELAY_BLACKLIST, `GREYLIST', `dnl warn condition = ${if eq{$acl_m1}{no}{yes}{no}} hosts = +relay_addr_blacklisted set acl_c8 = scores=${eval:${extract{scores}{$acl_c8}}+_DELSUBSTR_(confCHECK_RELAY_BLACKLIST,`GREYLIST:')} \ log_message="${extract{log_message}{$acl_c8}} relay $sender_host_address greylisted;" ') ')