dnl dnl Поддержка Distributed Checksum Clearinghouses dnl dnl ВНИМАНИЕ!!! dnl при использовании dcc необходимо включить использование dnl системного фильтра (см. параметр confSYSTEM_FILTER) dnl dnl команда получения названия и версии демона DCC dnl define(`confDCC_NAME_VERSION', `rpm -q dcc | perl -p -e "s/\n//"') dnl define(`confDCC_NAME_VERSION', `pkg_info -I dcc\* | perl -p -e "s/\s+.+\n//"') dnl define(`confDCC_NAME_VERSION_DEFAULT', `DCC') dnl dnl параметры подключения к DCC Interface Daemon dnl define(`confDCC_ADDRESS', `127.0.0.1 55744') dnl define(`confDCC_ADDRESS', `/usr/local/dcc/dccifd') dnl dnl действие в случае отсутствия ответа от DCC либо возврата кода ошибки dnl NO - возвращать клиенту 4xx dnl YES - продолжать обработку письма dnl define(`confDCC_DEFER_OK', `YES') dnl dnl действие для писем, опознанных как SPAM dnl REJECT - отказ в приеме письма (возврат клиенту кода 5xx) dnl DENY - синоним для REJECT dnl DROP - отказ в приеме сообщения с обрывом соединения dnl DISCARD - прием письма без доставки получателю dnl QUARANTINE - вывод в лог файл предупреждения и помещение письма в карантин dnl QUARANTINE_MAILLIST - сохранение в карантине писем из списков рассылки вместо отказа в приеме письма dnl (используется только одновременно с REJECT) dnl DISCARD_MAILLIST - игнорирование писем из списков рассылки вместо отказа в приеме письма dnl (используется только одновременно с REJECT) dnl define(`confDCC_ACTION', `')dnl dnl если не будут указаны действия REJECT, DROP или DISCARD, то письмо будет просто помечено dnl действие QUARANTINE можно указывать вместо с REJECT и DISCARD через пробел dnl действия QUARANTINE_MAILLIST и DISCARD_MAILLIST можно указывать вместе с REJECT и DROP dnl dnl сообщение полностью исключается из проверки, если в значении $acl_m_wl_flag_msg dnl поля white_list_relays, white_list_senders или white_list_compat равны 1 dnl и поле spam_hater не равно 1 dnl dnl define(`confDCC_BODY_MAX', `999999') dnl define(`confDCC_FUZ1_MAX', `999999') dnl define(`confDCC_FUZ2_MAX', `999999') dnl dnl действие для старых заголовков dnl RENAME - переименование старых заголовков (в конец имени добавляется -Old) dnl REMOVE - удаление старых заголовков dnl NOTHING - оставлять заголовки без изменений dnl define(`confDCC_OLD_HEADERS', `RENAME')dnl dnl dnl заголовки DCC dnl define(`confDCC_HEADERS', `:X-DCC-URT-Metrics') dnl ifelse(SECTION, `MAIN', `dnl dccifd_address = confDCC_ADDRESS ') dnl ifelse(SECTION, `MAIN', `') ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_check_data_dcc: warn set acl_m_contentscan_result = set acl_m_certainly_spam = dcc = * set acl_m_dcc_header = $dcc_header accept condition = ${if eq{$dcc_result}{}{yes}{no}} # logwrite = DCC check failed set acl_m_contentscan_result = defer warn add_header = $acl_m_dcc_header # warn condition = ${if eq{$acl_m_dcc_header}{}{no}{yes}} # set acl_m_dcc_body = ${sg{$acl_m_dcc_header}{\N^.+Body=(\S+).*$\N}{\$1}} # warn condition = ${if eq{$acl_m_dcc_header}{}{no}{yes}} # set acl_m_dcc_fuz1 = ${sg{$acl_m_dcc_header}{\N^.+Fuz1=(\S+).*$\N}{\$1}} # warn condition = ${if eq{$acl_m_dcc_header}{}{no}{yes}} # set acl_m_dcc_fuz2 = ${sg{$acl_m_dcc_header}{\N^.+Fuz2=(\S+).*$\N}{\$1}} accept condition = ${if match{$acl_m_dcc_header}{many}} set acl_m_certainly_spam = certainly_spam add_header = X-DCC-Info: DCC Interface Daemon detect spam message warn add_header = X-DCC-Info: DCC Interface Daemon detect ham message accept ') dnl ifelse(SECTION, `ACLS_ADDITIONAL', `') ifelse(SECTION, `ACL_CHECK_DATA_TOP', `dnl ifelse(confDCC_OLD_HEADERS, `REMOVE', `dnl warn remove_header = confDCC_HEADERS ') dnl ifelse(confDCC_OLD_HEADERS, `REMOVE', `') ifelse(confDCC_OLD_HEADERS, `RENAME', `dnl warn remove_header = confDCC_HEADERS RENAME_HEADERS(confDCC_HEADERS) ') dnl ifelse(confDCC_OLD_HEADERS, `RENAME', `') ') dnl ifelse(SECTION, `ACL_CHECK_DATA_TOP', `') ifelse(SECTION, `ACL_CHECK_DATA', `dnl # DCC ifdef(`confDCC_NAME_VERSION',`define(`_DCC_VER_', `esyscmd(confDCC_NAME_VERSION)')')dnl ifelse(len(X`'_DCC_VER_), `1', `ifdef(`confDCC_NAME_VERSION_DEFAULT',`define(`_DCC_VER_', confDCC_NAME_VERSION_DEFAULT)',`define(`_DCC_VER_', `DCC Interface Daemon')')')dnl # добавляем информацию о версии DCC # warn add_header = X-DCC-Version: _DCC_VER_ on $primary_hostname\n warn condition = ${if eq{$acl_m_contentscan_skip}{skip}{no}{yes}} acl = acl_check_data_dcc warn set acl_m0 = condition = ${if eq{$acl_m_contentscan_skip}{skip}{no}{yes}} condition = ${if eq{$acl_m_contentscan_result}{defer}{no}{yes}} condition = ${if eq{$acl_m_certainly_spam}{certainly_spam}{yes}{no}} set acl_m0 = certainly_spam add_header = X-Spam-Original-Recipients: $recipients\n dnl ifelse_strstr(confDCC_ACTION, `SUBMIT_GREYLIST', `ENTERPRISE(`greylist', `submit_dcc')') dnl ifelse_strstr(confDCC_ACTION, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit_dcc')') dnl ifelse_strstr(confDCC_ACTION, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit_dcc')') ifdef(`confDCC_DEFER_OK', `ifelse(confDCC_DEFER_OK, `YES', `dnl warn condition = ${if eq{$acl_m_contentscan_skip}{skip}{no}{yes}} condition = ${if eq{$acl_m_contentscan_result}{defer}{yes}{no}} add_header = X-DCC-Info: DCC Interface Daemon connection deferred on $primary_hostname\n log_message = DCCIF connection deferred ', ` dnl ifdef(`confDCC_DEFER_OK', `ifelse(confDCC_DEFER_OK, `YES', `')') defer condition = ${if eq{$acl_m_contentscan_skip}{skip}{no}{yes}} condition = ${if eq{$acl_m_contentscan_result}{defer}{yes}{no}} message = System busy. Try again later log_message = DCCIF connection deferred ')') dnl ifdef(`confDCC_DEFER_OK', `ifelse(confDCC_DEFER_OK, `YES', `')') dnl define(`confDCC_ACTION', confDCC_ACTION` ') ifelse_strstr(confDCC_ACTION` ', `REJECT ', ` dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE_MAILLIST ', ` # Quarantine spam messages warn condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} condition = ${if or{{!eq{$h_List-Id:}{}}{eq{$h_Precedence:}{list}}}{yes}{no}} logwrite = Spam is blocked and quarantined set acl_m_quarantined = $acl_m_quarantined content_scanner add_header = X-Spam-Action: quarantined\n accept condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} condition = ${if or{{!eq{$h_List-Id:}{}}{eq{$h_Precedence:}{list}}}{yes}{no}} logwrite = original recipients: $recipients ') dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE_MAILLIST ', `') dnl ifelse_strstr(confDCC_ACTION` ', `DISCARD_MAILLIST ', ` # Discard spam messages discard condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} condition = ${if or{{!eq{$h_List-Id:}{}}{eq{$h_Precedence:}{list}}}{yes}{no}} logwrite = Spam is discarded ') dnl ifelse_strstr(confDCC_ACTION` ', `DISCARD_MAILLIST ', `') dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE ', ` # Reject and quarantine spam messages warn condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} control = fakereject/Spam is blocked (${message_id}) logwrite = Spam is blocked and quarantined set acl_m_quarantined = $acl_m_quarantined content_scanner add_header = X-Spam-Action: quarantined\n accept condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = original recipients: $recipients ',` dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE ', `') # Reject spam messages deny condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = Spam is rejected message = Spam is blocked (${message_id}) ') dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE ', `') ') dnl ifelse_strstr(confDCC_ACTION` ', `REJECT ', `') ifelse_strstr(confDCC_ACTION` ', `DROP ', ` dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE_MAILLIST ', ` # Quarantine spam messages warn condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} condition = ${if or{{!eq{$h_List-Id:}{}}{eq{$h_Precedence:}{list}}}{yes}{no}} logwrite = Spam is blocked and quarantined set acl_m_quarantined = $acl_m_quarantined content_scanner add_header = X-Spam-Action: quarantined\n accept condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} condition = ${if or{{!eq{$h_List-Id:}{}}{eq{$h_Precedence:}{list}}}{yes}{no}} logwrite = original recipients: $recipients ') dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE_MAILLIST ', `') dnl ifelse_strstr(confDCC_ACTION` ', `DISCARD_MAILLIST ', ` # Discard spam messages discard condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} condition = ${if or{{!eq{$h_List-Id:}{}}{eq{$h_Precedence:}{list}}}{yes}{no}} logwrite = Spam is discarded ') dnl ifelse_strstr(confDCC_ACTION` ', `DISCARD_MAILLIST ', `') dnl # Drop spam messages drop condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = Spam is rejected message = Spam is blocked (${message_id}) ') dnl ifelse_strstr(confDCC_ACTION` ', `REJECT ', `') ifelse_strstr(confDCC_ACTION` ', `DISCARD ', ` ifelse_strstr(confDCC_ACTION` ', `QUARANTINE ', ` # Discard and quarantine spam messages warn condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = Spam is quarantined set acl_m_quarantined = $acl_m_quarantined content_scanner add_header = X-Spam-Action: quarantined\n accept condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = original recipients: $recipients ',` dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE ', `') # Discard spam messages discard condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = Spam is discarded ') dnl ifelse_strstr(confDCC_ACTION` ', `QUARANTINE ', `') ') dnl ifelse_strstr(confDCC_ACTION` ', `DISCARD ', `') ') dnl ifelse(SECTION, `ACL_CHECK_DATA', `')