dnl путь к файлу кеша dnl define(`confGREYLIST_DBM_CACHE', `/var/spool/exim/db/greylist.dbm')dnl dnl время блокировки записи в "сером списке" в минутах dnl define(`confGREYLIST_DBM_BLOCKED', `55')dnl dnl минимальное время жизни записи в "сером списке" в минутах dnl define(`confGREYLIST_DBM_RECORD_EXIRE_MIN', `240')dnl dnl время жизни записи в "сером списке" в днях dnl define(`confGREYLIST_DBM_RECORD_EXIRE', `36')dnl dnl # определяем необходимость использования "серого списка" warn set acl_m0 = skip domains = +local_domains ! authenticated = * ! hosts = +relay_from_hosts condition = ${if eq{$local_part}{postmaster}{no}{yes}} condition = ${if eq{$local_part}{abuse}{no}{yes}} condition = ${if eq{$sender_address_local_part}{postmaster}{no}{yes}} condition = ${if eq{$sender_address_local_part}{}{no}{yes}} ! recipients = @@lsearch;CONFDIR/skip_greylist_recipients ! senders = @@lsearch;CONFDIR/skip_greylist_senders set acl_m0 = no_skip # если использовать серый список необходимо, # ищем запись а рилее/отправителе/получателе в "сером списке" warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} set acl_m0 = ${lookup{$sender_host_address|$sender_address|$local_part@$domain}\ dbm{confGREYLIST_DBM_CACHE}} # если запись в "сером списке не найдена, создаем ее defer condition = ${if eq{$acl_m0}{}{yes}{no}} condition = ${if eq{\ ${perl{dbm_save}{confGREYLIST_DBM_CACHE}\ {$sender_host_address|$sender_address|$local_part@$domain}\ {\ block_expires=${eval:$tod_epoch+confGREYLIST_DBM_BLOCKED*60} \ record_expires=${eval:$tod_epoch+confGREYLIST_DBM_RECORD_EXIRE_MIN*60} \ blocked_count=1 \ passed_count=0 \ aborted_count=0 \ origin_type=AUTO \ create_time=$tod_epoch \ last_update=$tod_epoch \ }}\ }{}{yes}{yes}} message = Temporary local problem - please try later log_message = message blocked by greylist: $sender_host_address; $sender_address; $local_part@$domain # если запись в "сером списке найдена, но истек record_expires defer condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m0}{}{no}{yes}} condition = ${if <{${extract{record_expires}{$acl_m0}}}{$tod_epoch}{yes}{no}} condition = ${if eq{\ ${perl{dbm_save}{confGREYLIST_DBM_CACHE}\ {$sender_host_address|$sender_address|$local_part@$domain}\ {\ block_expires=${eval:$tod_epoch+confGREYLIST_DBM_BLOCKED*60} \ record_expires=${eval:$tod_epoch+confGREYLIST_DBM_RECORD_EXIRE_MIN*60} \ blocked_count=1 \ passed_count=0 \ aborted_count=0 \ origin_type=AUTO \ create_time=$tod_epoch \ last_update=$tod_epoch \ }}\ }{}{yes}{yes}} message = Temporary local problem - please try later log_message = message blocked by greylist: $sender_host_address; $sender_address; $local_part@$domain # если запись в "сером списке найдена, но не истек block_expires defer condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m0}{}{no}{yes}} condition = ${if >{${extract{block_expires}{$acl_m0}}}{$tod_epoch}{yes}{no}} condition = ${if eq{\ ${perl{dbm_save}{confGREYLIST_DBM_CACHE}\ {$sender_host_address|$sender_address|$local_part@$domain}\ {\ block_expires=${extract{block_expires}{$acl_m0}} \ record_expires=${extract{record_expires}{$acl_m0}} \ blocked_count=${eval:${extract{blocked_count}{$acl_m0}}+1} \ passed_count=${extract{passed_count}{$acl_m0}} \ aborted_count=${extract{aborted_count}{$acl_m0}} \ origin_type=${extract{origin_type}{$acl_m0}} \ create_time=${extract{create_time}{$acl_m0}} \ last_update=$tod_epoch \ }}\ }{}{yes}{yes}} message = Temporary local problem - please try later log_message = message blocked by greylist: $sender_host_address; $sender_address; $local_part@$domain # если запись в "сером списке найдена, block_expires истек, а record_expires не истек warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} condition = ${if eq{$acl_m0}{}{no}{yes}} condition = ${if eq{\ ${perl{dbm_save}{confGREYLIST_DBM_CACHE}\ {$sender_host_address|$sender_address|$local_part@$domain}\ {\ block_expires=${extract{block_expires}{$acl_m0}} \ record_expires=${eval:$tod_epoch+confGREYLIST_DBM_RECORD_EXIRE*24*60*60} \ blocked_count=${extract{blocked_count}{$acl_m0}} \ passed_count=${eval:${extract{passed_count}{$acl_m0}}+1} \ aborted_count=${extract{aborted_count}{$acl_m0}} \ origin_type=${extract{origin_type}{$acl_m0}} \ create_time=${extract{create_time}{$acl_m0}} \ last_update=$tod_epoch \ }}\ }{}{yes}{yes}}