>>Можно ли сделать так, чтобы сначала проверялся обратный адрес отправителя и если с ним все
>>ок (он в вайтлисте), то не важно, с какого IP он идет ?Можно. Ацли экзима проверяются до первого удачного accept. Нужно, чтобы аксепт по вайт-листу происходил раньше, чем проверка и денай по днсбл.
>PS но по моему это неэффективно, у меня 90% спама режет простейшее
>acl_check_helo:
> deny
>message = Invalid name in HELO EHLO command
> log_message = Invalid name $sender_helo_name in HELO EHLO command
> !hosts = +external_relays
> !hosts = /etc/mail/exim.whitelist.hosts
> !verify = helo
> accept
Вот, рекомендую подобную конструкцию. На вопросы отвечу.
--------------------------8<-----------------------------------
acl_on_rcpt:
accept hosts = : +relay_from_hosts
control = submission
control = no_enforce_sync
accept local_parts = postmaster
domains = +local_domains
warn set acl_m0 = 0
warn local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
set acl_m0 = ${eval:$acl_m0+20}
warn condition = ${if eq{$sender_helo_name}{}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+20}
warn condition = ${if match{$sender_helo_name}{\N^\d+$\N}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+20}
warn condition = ${if !eq{$sender_helo_name}{$sender_host_name}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+30}
warn condition = ${if eq{$host_lookup_failed}{1}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+45}
warn condition = ${if eq{$sender_address}{}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+10}
warn condition = ${if >{${strlen:$sender_address}}{30}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+20}
warn condition = ${lookup{$sender_host_name}wildlsearch{/usr/local/etc/exim/dyn.lst}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+60}
warn condition = ${if eq{$sender_host_name}{\N(?>\w+[.-]){7,}\N}{yes}{no}}
set acl_m0 = ${eval:$acl_m0+30}
warn set acl_m1 = ${eval:$acl_m0}s
delay = $acl_m1
deny condition = ${if ge{$acl_m0}{60}{yes}{no}}
require domains = +relay_to_domains : +local_domains
require verify = recipient
verify = sender
accept
--------------------------8<-----------------------------------