ifelse(SECTION, `MAIN', `dnl hostlist skip_proxy_check = 127.0.0.1 : CONFDIR/skip_proxy_check : CONFDIR/hosts-relayfrom ')dnl ifelse(SECTION, `ACL_CHECK_RCPT', `dnl # Проверка open proxy # требуется установленный proxycheck (/usr/ports/security/proxycheck) ifdef(`confCHECK_OPEN_PROXY_HOST', `dnl', `dnl errprint(`*** ERROR: confCHECK_OPEN_PROXY_HOST variable required ')') ifdef(`confCHECK_OPEN_PROXY_BANNER', `dnl', `dnl errprint(`*** ERROR: confCHECK_OPEN_PROXY_BANNER variable required ')') ifelse(confCHECK_OPEN_PROXY, `REJECT', `dnl # поиск информации в кеше deny hosts = !+skip_proxy_check set acl_m0 = ${lookup{$sender_host_address}dbm{confCHECK_OPEN_PROXY_CACHE}} condition = ${if match{$acl_m0}{openproxy}{yes}{no}} message = Open proxy detected log_message = Open proxy detected # если в кеше не указано, что хост является open proxy deny hosts = !+skip_proxy_check # если в кеше была информация о том, что хост не является open proxy, дальнейшую проверку не проводим condition = ${if match{$acl_m0}{ok}{no}{yes}} # если в кеше вообще нет информации о клиентском хосте, проводим сканирование set acl_m0 = ${run{/usr/local/sbin/proxycheck -a -s -t confCHECK_OPEN_PROXY_TIMEOUT -d confCHECK_OPEN_PROXY_HOST -c "chat::confCHECK_OPEN_PROXY_BANNER" $sender_host_address}\ {no}{yes}} # сохраняем результаты сканирования в кеше condition = ${if eq{$acl_m0}{yes}\ {${perl{dbm_save}{confCHECK_OPEN_PROXY_CACHE}\ {$sender_host_address}{openproxy}{1}}}\ {${perl{dbm_save}{confCHECK_OPEN_PROXY_CACHE}\ {$sender_host_address}{ok}{1}}}\ } condition = $acl_m0 message = Open proxy detected log_message = Open proxy detected ')dnl ifelse(confCHECK_OPEN_PROXY, `WARN', `dnl # поиск информации в кеше warn hosts = !+skip_proxy_check set acl_m0 = ${lookup{$sender_host_address}dbm{confCHECK_OPEN_PROXY_CACHE}} condition = ${if match{$acl_m0}{openproxy}{yes}{no}} log_message = Open proxy detected add_header = X-Warn-Proxy: $sender_host_address - open proxy detected # если в кеше не указано, что хост является open proxy warn hosts = !+skip_proxy_check # если в кеше была информация о том, что хост не является open proxy, дальнейшую проверку не проводим condition = ${if match{$acl_m0}{}{yes}{no}} # если в кеше вообще нет информации о клиентском хосте, проводим сканирование set acl_m0 = ${run{/usr/local/sbin/proxycheck -a -s -t confCHECK_OPEN_PROXY_TIMEOUT -d confCHECK_OPEN_PROXY_HOST -c "chat::confCHECK_OPEN_PROXY_BANNER" $sender_host_address}\ {no}{yes}} # сохраняем результаты сканирования в кеше condition = ${if eq{$acl_m0}{yes}\ {${perl{dbm_save}{confCHECK_OPEN_PROXY_CACHE}\ {$sender_host_address}{openproxy}{1}}}\ {${perl{dbm_save}{confCHECK_OPEN_PROXY_CACHE}\ {$sender_host_address}{ok}{1}}}\ } condition = $acl_m0 log_message = Open proxy detected add_header = X-Warn-Proxy: $sender_host_address - open proxy detected ')dnl ')dnl