divert(-1) # # Copyright (c) 2003, 2004 Victor Ustugov # This hack is under BSD License # Redistributions of source code must retain the above copyright notice # # hacks disscussion's maillist - http://www.mta.org.ua/mailman/listinfo/sendmail-conf # # # Check hosts from Received field in dnsbl # Проверка хостов из полей Received в dnsbl # dnl # dnl # для исключения из проверки Received в DNSBL для получателей, указанных в access_db с dnl # квалификатором Spam и значением FRIEND нужно в переменной confCHECK_RECEIVED_DNSBL_SKIP dnl # указать значение SPAMFRIEND: dnl # define(`confCHECK_RECEIVED_DNSBL_SKIP', `SPAMFRIEND')dnl dnl # dnl # если в письме есть получатели, часть которых указана в access_db как SPAMFRIEND'ы, а dnl # часть не указана, то отдельным значением переменной confCHECK_RECEIVED_DNSBL_SKIP указывается, dnl # делать ли исключения в таких случаях: dnl # CHECK - проверять поля Received, если хоть один получатель не является SPAMFRIEND'ом dnl # SKIP - не проверять поля Received, если хоть один получатель является SPAMFRIEND'ом dnl # define(`confCHECK_RECEIVED_DNSBL_SKIP', `SPAMFRIEND SKIP')dnl dnl # dnl # по умолчанию используется значение SKIP dnl # divert(0) ifdef(`_DNSBL_R_RECEIVED_',`dnl',`dnl VERSIONID(`$Id: check_received_dnsbl.m4,v 8.12-0.05 2004/10/31 20:09:55 corvax Exp $')dnl define(`_DNSBL_R_RECEIVED_',`') dnl dnl LOCAL_CONFIG dnl dnl ifdef(`_RECEIVED_PARSED_', `', ` errprint(`*** ERROR: HACK(check_received_dnsbl) requires HACK(parse_received) ')') dnl dnl LOCAL_RULESETS dnl dnl ifelse_strstr(confCHECK_RECEIVED_DNSBL_SKIP, `SPAMFRIEND', ` SLocal_check_rcpt # R $* $: $>Parse0 $>3 $1 R $+ < @ $+ > $* $: $1 < @ $2 > $3 $| $1@$2 $| R $* $| $+@$+ . $| $: $1 $| $2@$3 $| R $* $| $+@$+ $| $: $1 $| $2@$3 $| $>SearchList $| <> ifelse_strstr(confCHECK_RECEIVED_DNSBL_SKIP, `CHECK', ` R $* $| $+ $| $: $1 R $* $| $+ $| $* $: $1 $(macro {rcvd_dnsbl_skip} $@ NO $) ',` R $* $| $+ $| $: $1 $(macro {rcvd_dnsbl_skip} $@ YES $) R $* $| $+ $| $* $: $1 ') ') ifelse_strstr(confCHECK_RECEIVED_DNSBL_SKIP, `SPAMFRIEND', ` dnl ifelse_strstr(confCHECK_RECEIVED_DNSBL_SKIP, `CHECK', ` dnl SCheck_Received R $+ $: $1 $| $&{rcvd_dnsbl_skip} R $+ $| $: $1 R $+ $| $* $: $1 $| $>Check_Received_DNSBL $1 R $+ $| $#$* $#$2 R $+ $| $* $: $1 dnl ',` dnl SCheck_Received R $+ $: $1 $| $&{rcvd_dnsbl_skip} R $+ $| YES $: $1 R $+ $| $* $: $1 $| $>Check_Received_DNSBL $1 R $+ $| $#$* $#$2 R $+ $| $* $: $1 dnl ') ',` dnl SCheck_Received R $+ $: $1 $| $>Check_Received_DNSBL $1 R $+ $| $#$* $#$2 R $+ $| $* $: $1 dnl ') dnl ') dnl dnl LOCAL_CONFIG dnl dnl define(`_DNSBL_SRV_', `ifelse(len(X`'_ARG_), `1', `blackholes.mail-abuse.org', `_ARG_')')dnl define(`_DNSBL_MSG_', `ifelse(len(X`'_ARG2_), `1', `"550 Mail from " $`'&{hop_addr} " refused by blackhole site '_DNSBL_SRV_`"', `_ARG2_')')dnl define(`_DNSBL_MSG_TMP_', `ifelse(_ARG3_,`t', `"451 Temporary lookup failure of " $`'&{hop_addr} " at '_DNSBL_SRV_`"', `_ARG3_')')dnl dnl dnl LOCAL_RULESETS dnl dnl SCheck_Received_DNSBL dnl # DNS based IP address spam list _DNSBL_SRV_ R $* $: $(macro {hop_addr} $@ $) $1 R $- $* ( $* [127.$-.$-.$-]) $* $@ SKIP_127 R $- $* ( $* [10.$-.$-.$-]) $* $@ SKIP_10 R $- $* ( $* [192.168.$-.$-]) $* $@ SKIP_192_168 R $- $* ( $* [172.16.$-.$-]) $* $@ SKIP_172_16 R $- $* ( $* [$-.$-.$-.$-]) $* $: $(macro {hop_addr} $@ $4.$5.$6.$7 $) $1 $2 ( $3 [ $4.$5.$6.$7]) $8 R $- $* ( $* [$-.$-.$-.$-]) $* $: < $(dns_a $7.$6.$5.$4._DNSBL_SRV_. $: OK $) > $1 $2 ( $3 [ $4.$5.$6.$7]) $8 R < OK > $* $: $1 ifelse(len(X`'_ARG3_),`1', `R < $+ > $* $: $2', `R < $+ > $* $#error $@ 4.7.1 $: _DNSBL_MSG_TMP_') R < $+ > $* $#error $@ 5.7.1 $: _DNSBL_MSG_ dnl