dnl dnl Проверка адреса отправителя в black list'ах dnl dnl NO - не проводить проверку dnl REJECT - возврат клиенту кода 5xx dnl DEFER - возврат клиенту кода 451 dnl WARN - вывод в лог файл предупреждения dnl QUARANTINE - принять письмо с сохранением в карантин без доставки получателям dnl GREYLIST:XX - добавить XX баллов к счетчику опционального грейлистинга dnl REJECT:XX - добавить XX баллов к счетчику опционального reject'а dnl DELAY:XX - задержка XX секунд перед ответом на RCPT TO dnl define(`confCHECK_MAIL_ACCESS', `NO')dnl dnl dnl черный список отправителей находится в файле CONFDIR/access-mail dnl в виде: dnl sender_address : действие : сообщение dnl dnl в качестве "действия" могут выступать: dnl ok - принимать сообщения с данным mail from dnl warn - выдача предупреждения в лог файл и в заголовки письма dnl и добавление в заголовки сообщения поле X-Warn-Sender dnl текст сообщения об ошибке может быть указан через двоеточие dnl deny или reject - отказ в приеме сообщения dnl drop - отказ в приеме сообщения с обрывом соединения dnl discard - прием письма без доставки получателю dnl defer - возврат клиенту временной ошибки 4xx dnl quarantine - принять письмо с сохранением в карантин без доставки получателям 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-mail будет отсутствовать поле "действие", dnl то будет выполнено действие по умолчанию из переменно confCHECK_MAIL_ACCESS dnl поле "сообщение" может отсутствовать dnl dnl пример: dnl lesya@tcu.kiev.ua : deny : Access denied dnl *@realdeals4u.net : deny dnl shadowcrew@ziplip.com : deny dnl postmaster@domain.ua : ok dnl abuse@domain.ua : warn dnl admin@domain.ua : ok dnl test@domain.ua : warn pause=20 greylist=4 : Sender domain blacklisted dnl *@domain.ua : reject : Sender domain blacklisted dnl \N.*\@.*\d.*\d.*\d.*\d.*\d\N: warn pause=20 greylist=4 : Too many digits in the sender domain dnl ifelse(confCHECK_MAIL_ACCESS, `YES', `define(`confCHECK_MAIL_ACCESS', `REJECT')') # Проверка адреса отправителя в blacklist-ах warn set acl_m0 = ifdef(`confRECIPIENTS_SPAM_FRIENDS', `ifelse(confRECIPIENTS_SPAM_FRIENDS, `NO', `dnl warn domains = +local_domains confDOMAINS_ABUSE local_parts = postmaster : abuse set acl_m0 = skip ', `dnl warn domains = +local_domains confDOMAINS_ABUSE recipients = @@wildlsearch;CONFDIR/recipients_spam_friends set acl_m0 = skip ')') dnl ifdef(`confRECIPIENTS_SPAM_FRIENDS', `ifelse(confRECIPIENTS_SPAM_FRIENDS, `NO', `')') warn set acl_m1 = condition = ${if eq{$acl_m0}{}{yes}{no}} set acl_m0 = ${lookup{$sender_address}wildlsearch{CONFDIR/access-mail}\ {${if eq{$value}{}{confCHECK_MAIL_ACCESS}{$value}}}{}\ } 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 = ${expand:${sg{${extract{2}{:}{$acl_m0}}}{\N^\s+\N}{}}} set acl_m2 = ${if eq{$acl_m2}{}{Access denied}{$acl_m2}} set acl_m0 = ${expand:${sg{${extract{3}{:}{$acl_m0}}}{\N^\s+\N}{}}} set acl_m_check_mail_msg = ${if eq{$acl_m0}{}{}{: $acl_m0}} set acl_m0 = ${if eq{$acl_m0}{}{sender address blacklisted${if eq{$acl_m2}{}{}{: $acl_m2}}}{$acl_m0}} ifdef(`confENTERPRISE_USER', `dnl warn set acl_m10 = ${lookup{$sender_host_address}iplsearch{CONFDIR/access-mail}{${lc:$value}}{}} warn condition = ${if or{\ {eq{${extract{submitted}{$acl_m9}}}{1}}\ {eq{${extract{relay_from_hosts}{$acl_m9}}}{1}}\ {eq{${extract{authenticated}{$acl_m9}}}{1}}\ {eq{${extract{abuse_or_postmaster}{$acl_m9}}}{1}}\ {eq{${extract{white_list_relays}{$acl_m9}}}{1}}\ {eq{${extract{white_list_senders}{$acl_m9}}}{1}}\ {eq{${extract{white_list_compat}{$acl_m9}}}{1}}\ }{yes}{no}} set acl_m10 = skip_submit warn senders = : set acl_m10 = skip_submit warn condition = ${if eq{$sender_address_local_part}{postmaster}{yes}{no}} set acl_m10 = skip_submit warn condition = ${if match{$acl_m1}{submit_mysql}{yes}{no}} condition = ${if eq{$acl_m10}{skip_submit}{no}{yes}} ENTERPRISE(`mysql', `submit', `mail', `blacklisted', `$sender_address', `0') warn condition = ${if match{$acl_m1}{submit_sqlite}{yes}{no}} condition = ${if eq{$acl_m10}{skip_submit}{no}{yes}} ENTERPRISE(`sqlite', `submit', `mail', `blacklisted', `$sender_address', `0') warn condition = ${if match{$acl_m1}{submit_rbl}{yes}{no}} condition = ${if eq{$acl_m10}{skip_submit}{no}{yes}} dnl ENTERPRISE(`rbl', `update', `mx.org.ua', `mail.rbl.mx.org.ua', `blacklisted', `$sender_address') ENTERPRISE(`rbl', `submit', `mail', `blacklisted', `$sender_address') ')dnl warn condition = ${if match{$acl_m1}{warn}{yes}{no}} log_message = $acl_m0${if eq{${extract{pause}{$acl_m1}}}{}{}{: message delayed for ${extract{pause}{$acl_m1}}s}} add_header = X-Warn-Sender: $acl_m0 warn condition = ${if eq{${extract{pause}{$acl_m1}}}{}{no}{yes}} delay = ${extract{pause}{$acl_m1}}s set acl_m15 = ${acl_m15}\t\ delay=${extract{pause}{$acl_m1}}s\t\t\ $acl_m0\n # deny condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} # log_message = $acl_m0 # message = ${expand:$acl_m2} # quarantine and !reject accept condition = ${if eq{${extract{quarantine}{$acl_m1}}}{00}{yes}{no}} condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{no}{yes}} add_header = X-Quarantine-Sender: sender address $sender_address blacklisted${acl_m_check_mail_msg} log_message = message will be quarantined: sender address $sender_address blacklisted set acl_m_add_x_orig_rcpt = yes # reject and quarantine accept condition = ${if eq{${extract{quarantine}{$acl_m1}}}{00}{yes}{no}} condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} log_message = message will be quarantined: sender address $sender_address blacklisted set acl_m_fakereject = \ message will be quarantined: sender address $sender_address blacklisted\ |X-Quarantine-Sender: sender address $sender_address blacklisted${acl_m_check_mail_msg}\ |${expand:$acl_m2} set acl_m_add_x_orig_rcpt = yes # reject and !quarantine deny condition = ${if eq{${extract{reject}{$acl_m1}}}{00}{yes}{no}} condition = ${if eq{${extract{quarantine}{$acl_m1}}}{00}{no}{yes}} 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} discard condition = ${if match{$acl_m1}{discard}{yes}{no}} log_message = $acl_m0 ifelse(confGREYLIST, `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;" set acl_m15 = ${acl_m15}\t\ greylist scores=${extract{greylist}{$acl_m1}}\t\ $acl_m0\n ') dnl ifelse(confGREYLIST, `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;" set acl_m15 = ${acl_m15}\t\ reject scores=${extract{reject}{$acl_m1}}\t\t\ $acl_m0\n ')') dnl ifdef(`confOPTIONAL_REJECT', `ifelse(confOPTIONAL_REJECT, `NO', `', `')')