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 # # # Open Proxy check # # ВНИМАНИЕ!!! HACK не закончен! # # встречная проверка рилея на наличие open proxy # используется proxycheck (http://www.corpit.ru/mjt/proxycheck.html, Michael Tokarev ) # dnl используется для исключения из проверки сообщений от авторизованных отправителей dnl define(`confCHECK_OPEN_PROXY_SKIP_AUTH')dnl dnl dnl используется для исключения из проверки исходящих сообщений dnl define(`confCHECK_OPEN_PROXY_SKIP_OUTGOING')dnl dnl подробнее об исходящих сообщениях см. HACK(`is_outgoing') dnl dnl используется для исключения из встречной проверки сообщений, MAIL FROM которых указан в access_db в виде: dnl CheckOpenProxy:10.0.0 OK dnl CheckOpenProxy:host.domain.com OK dnl CheckOpenProxy:domain.com OK dnl define(`confCHECK_OPEN_PROXY_SKIP_EXCLUDES')dnl dnl dnl примеры open proxies для тестов: dnl 65.33.122.51 dnl 66.30.240.165 dnl 80.55.178.34 dnl 216.160.18.30 dnl дополнительные примеры можно взять с http://void.ru dnl dnl divert(0) VERSIONID(`$Id: check_open_proxy.m4,v 8.12-0.02 2003/09/22 19:20:00 corvax Exp $')dnl divert(-1) dnl ifdef(`confCHECK_OPEN_PROXY_SKIP_EXCLUDES',` ifdef(`_ACCESS_TABLE_', `', ` errprint(`*** ERROR: HACK(check_open_proxy) requires FEATURE(access_db) ')')') dnl dnl ifdef(`confOPEN_PROXY_CHECKER',, `define(`confOPEN_PROXY_CHECKER', `/usr/local/debug/mail/sendmail/tmp/proxycheck')') ifdef(`confOPEN_PROXY_CHECKER',, `define(`confOPEN_PROXY_CHECKER', `/usr/local/bin/proxycheck')') ifelse(len(X`'_ARG_),`1', `errprint(`check_open_proxy: hostname and port required as first parameter ')dnl', `ifdef(`confOPEN_PROXY_CHECK_HOST',, `define(`confOPEN_PROXY_CHECK_HOST', `_ARG_')')' ) ifelse(len(X`'_ARG2_),`1', `errprint(`check_open_proxy: SMTP banner required as second parameter ')dnl', `ifdef(`confOPEN_PROXY_CHECK_BANNER',, `define(`confOPEN_PROXY_CHECK_BANNER', `_ARG2_')')' ) ifelse(len(X`'_ARG3_), `1', `define(`confOPEN_PROXY_CHECK_TIMEOUT', `60')', `define(`confOPEN_PROXY_CHECK_TIMEOUT', `_ARG3_')') dnl dnl LOCAL_CONFIG dnl dnl dnl Kopen_proxy_check program `'confOPEN_PROXY_CHECKER -d `'confOPEN_PROXY_CHECK_HOST -c "chat::`'confOPEN_PROXY_CHECK_BANNER" -a -s -t `'confOPEN_PROXY_CHECK_TIMEOUT Kopen_proxy_check program `'confOPEN_PROXY_CHECKER -d `'confOPEN_PROXY_CHECK_HOST -c chat::`'confOPEN_PROXY_CHECK_BANNER -a -s -t `'confOPEN_PROXY_CHECK_TIMEOUT dnl dnl LOCAL_RULESETS dnl dnl SLocal_check_relay R $* $| $* $: $1 $| $2 $| $>check_open_proxy $1 $| $2 R $* $| $* $| OPEN PROXY $#error $: 554 5.1.7 Reject mail from open proxy R $* $| $* $| $* $: $1 $| $2 Scheck_open_proxy dnl ifdef(`confCHECK_OPEN_PROXY_SKIP_AUTH',` # skip checks for authentificated senders R $* $| $* $: $&{auth_type} $| $1 $| $2 R $+ $| $* $| $* $@ SKIP R $* $| $* $| $* $: $2 $| $3 ')dnl dnl ifdef(`confCHECK_OPEN_PROXY_SKIP_OUTGOING',` # skip checks for outgoing messages dnl R $* $: < $&{IsOutgoing} > $1 R < YES > $* $@ SKIP R < $* > $* $: $2 ')dnl dnl ifdef(`confCHECK_OPEN_PROXY_SKIP_EXCLUDES',` R $* $| $* $: $1 $| $2 R $+ $| $* $: $>D <$1> <$1 $| $2> R <$*> < $* $| $* > $: <$1> $2 $| $3 R $* $| $* $: $>A <$2> <$1 $| $2> R <$*> < $* $| $* > $: <$1> $2 $| $3 R $* $| $* $@ OK R $* $| $* $@ SKIP R <$*> $* $| $* $: $2 $| $3 ')dnl dnl R $* $| $+ $: < $(open_proxy_check $2 $: EXECURE_ERROR $) > R < EXECURE_ERROR > $@ Can not execute proxycheck R < $-.$-.$-.$- $* open > $@ OPEN PROXY R $* $@ PASSED dnl