dnl dnl Проверка комбинации адреса отправителя и получателя dnl dnl NO - не проводить проверку dnl REJECT - возврата клиенту кода 5xx dnl DEFER - возврата клиенту кода 451 dnl WARN - вывод в лог файл предупреждения dnl GREYLIST:XX - добавить XX баллов к счетчику опционального грейлистинга dnl REJECT:XX - добавить XX баллов к счетчику опционального reject'а dnl DELAY:XX - задержка XX секунд перед ответом на RCPT TO dnl define(`confCHECK_COMPAT', `NO')dnl dnl dnl комбинации адресов отправителей и получателей указываются в файле CONFDIR/access-compat dnl в виде: dnl sender_mailbox@sender.domain<@>rcpt_mailbox@rcpt.domain : действие : сообщение dnl dnl в качестве "действия" могут быть использованы: dnl ok - принимать сообщения с данной парой mail from и rcpt to dnl warn - выдача предупреждения в лог файл и в заголовки письма dnl и добавление в заголовки сообщения поле X-Warn-Compat dnl текст сообщения об ошибке может быть указан через двоеточие dnl deny или reject - отказ в приеме сообщения dnl drop или discard - отказ в приеме сообщения с обрывом соединения dnl defer - возврат временной ошибки отправителю dnl greylist:xx - добавление xx баллов к счетчику опционального greylisting'а dnl greylisting:xx - синоним greylist:xx dnl reject:yy - добавление yy баллов к счетчику опционального reject'а dnl deny:yy - синоним reject:yy dnl delay:zz - задержка на zz секунд перед продолжением обработки сообщения dnl pause:zz - синоним delay:zz dnl submit_mysql - занесение записи о хосте в базу MySQL dnl submit_sqlite - занесение записи о хосте в базу SQLite dnl submit_rbl - занесение записи о хосте в DNSBL dnl dnl если в файле CONFDIR/access-compat будет отсутствовать поле "действие", dnl то будет выполнено действие по умолчанию из переменно confCHECK_COMPAT dnl поле "сообщение" может отсутствовать dnl dnl в адресе отправителя в левой части допустимо использование масок: dnl *@sender.domain<@>rcpt_mailbox@rcpt.domain : deny : Access denied dnl dnl допустимо использование регулярных выражений: dnl \N^<@>(hostmaster|ftpmaster)@rcpt\.domain$\N : deny : Null sender rejected. Thist is incoming address only. dnl dnl если доставка производится в unix mailbox'ы, то возможно указание dnl только почтового ящика в качестве адреса получателя, если домен dnl получателя входит в список локальных доменов dnl dnl примеры: dnl <@>hostmaster@domain.tld : deny : Null sender rejected. Thist is incoming address only. dnl a@b.c<@>hostmaster@domain.tld : warn dnl *@b.c<@>hostmaster@domain.tld : drop dnl *<@>hostmaster@domain.tld : warn dnl <@>*@domain.tld : deny dnl a@b.c<@>*@domain.tld : warn : Access denied dnl *@b.c<@>*@domain.tld : warn dnl *<@>*@domain.tld : warn dnl \N^<@>.+@domain.tld\N : deny dnl \N^a@b.c<@>.+@domain.tld\N : warn dnl \N^.+@b.c<@>.+@domain.tld\N : defer dnl \N^.+<@>.+@domain.tld\N : warn dnl *@sender.domain<@>user1 : reject dnl ifelse(confCHECK_COMPAT, `YES', `define(`confCHECK_COMPAT', `REJECT')') # Проверка комбинации адреса отправителя и получателя warn set acl_m1 = set acl_m0 = ${lookup{$sender_address<@>$local_part@$domain}\ wildlsearch{CONFDIR/access-compat}\ {${if eq{$value}{}{confCHECK_COMPAT}{$value}}}\ {\ ${lookup{$sender_address_local_part@<@>$local_part@$domain}\ wildlsearch{CONFDIR/access-compat}\ {${if eq{$value}{}{confCHECK_COMPAT}{$value}}}\ {}}\ }} ifelse_strstr(confDELIVERY_TO, `MBOX', `dnl warn condition = ${if eq{$acl_m0}{}{yes}{no}} domains = +local_domains set acl_m0 = ${lookup{$sender_address<@>$local_part}\ wildlsearch{CONFDIR/access-compat}\ {${if eq{$value}{}{confCHECK_COMPAT}{$value}}}\ {\ ${lookup{$sender_address_local_part@<@>$local_part}\ wildlsearch{CONFDIR/access-compat}\ {${if eq{$value}{}{confCHECK_COMPAT}{$value}}}\ {}}\ }} ') dnl warn condition = ${if eq{$acl_m0}{}{no}{yes}} set acl_m1 = ${extract{1}{:}{$acl_m0}} acl = normalize_action set acl_m1 = ${sg{$acl_m1 }{\N\b([^=\s\d]+)(\s)\N}{\$1=00\$2}} # message = $acl_m2 # log_message = $acl_m0 set acl_m2 = ${sg{${extract{2}{:}{$acl_m0}}}{\N^\s+\N}{}} set acl_m2 = ${if eq{$acl_m2}{}{Access denied}{$acl_m2}} set acl_m0 = ${sg{${extract{3}{:}{$acl_m0}}}{\N^\s+\N}{}} set acl_m0 = ${if eq{$acl_m0}{}{sender/recipient addresses pair blacklisted${if eq{$acl_m2}{}{}{: $acl_m2}}}{$acl_m0}} accept condition = ${if eq{${extract{whitelist}{$acl_m1}}}{}{no}{yes}} set acl_m9 = white_list_compat=1 $acl_m9 ifdef(`confENTERPRISE_USER', `dnl warn condition = ${if match{$acl_m1}{submit_mysql}{yes}{no}} ENTERPRISE(`mysql', `submit', `mail-rcpt', `blacklisted', `$sender_address|$local_part@$domain', `0') warn condition = ${if match{$acl_m1}{submit_sqlite}{yes}{no}} ENTERPRISE(`sqlite', `submit', `mail-rcpt', `blacklisted', `$sender_address|$local_part@$domain', `0') warn condition = ${if match{$acl_m1}{submit_rbl}{yes}{no}} ENTERPRISE(`rbl', `update', `mx.org.ua', `mail-rcpt.rbl.mx.org.ua', `blacklisted', `$sender_address|$local_part@$domain') ')dnl warn condition = ${if eq{${extract{pause}{$acl_m1}}}{}{no}{yes}} delay = ${extract{pause}{$acl_m1}}s deny condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} log_message = $acl_m0 message = ${expand:$acl_m2} defer condition = ${if match{$acl_m1}{defer}{yes}{no}} log_message = $acl_m0 message = ${expand:$acl_m2} drop condition = ${if match{$acl_m1}{drop}{yes}{no}} log_message = $acl_m0 message = ${expand:$acl_m2} warn condition = ${if match{$acl_m1}{warn}{yes}{no}} log_message = $acl_m0 message = X-Warn-Cpmpat: $acl_m2 ifelse(confGREYLIST_DBM, `OPTIONAL', `dnl warn condition = ${if eq{${extract{greylist}{$acl_m1}}}{}{no}{yes}} set acl_c8 = \ scores=${eval:${extract{scores}{$acl_c8}}+${extract{greylist}{$acl_m1}}} \ log_message="${extract{log_message}{$acl_c8}} $acl_m0;" ') dnl ifelse(confGREYLIST_DBM, `OPTIONAL', `') ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `dnl', `dnl warn condition = ${if eq{${extract{reject}{$acl_m1}}}{}{no}{yes}} condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{no}{yes}} set acl_c6 = \ scores=${eval:${extract{scores}{$acl_c6}}+${extract{reject}{$acl_m1}}} \ log_message="${extract{log_message}{$acl_c6}} $acl_m0;" ')') dnl ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `', `')')