dnl dnl Поддержка DSPAM dnl dnl команда получения названия и версии демона DSPAM dnl define(`confDSPAM_NAME_VERSION', `echo quit | nc localhost 24 | head -n 1 | grep -i dspam | perl -p -e "s/^\d+\s+//;s/\s*ready\s*//i"') dnl define(`confDSPAM_NAME_VERSION_DEFAULT', `DSPAM Server') dnl dnl параметры подключения к DSPAM dnl define(`confDSPAM_ADDRESS', `127.0.0.1 24 ident@localhost') dnl dnl пользователь, от имени которого выполняются запросы к dspam dnl define(`confDSPAM_USER', `mailnull')dnl dnl dnl действие в случае отсутствия ответа от dspam либо возврата кода ошибки dnl NO - возвращать клиенту 4xx dnl YES - продолжать обработку письма dnl define(`confDSPAM_DEFER_OK', `YES') dnl dnl действие для писем, набравших confDSPAM_ACTION_SCORE баллов dnl REJECT - отказ в приеме письма (возврат клиенту кода 5xx) dnl DENY - синоним для REJECT dnl DISCARD - удаление письма dnl DROP - синоним для DISCARD dnl QUARANTINE - вывод в лог файл предупреждения и помещение зараженного письма в карантин dnl QUARANTINE_MAILLIST - сохранение в карантине писем из списков рассылки вместо отказа в приеме письма dnl (используется только одновременно с REJECT) dnl DISCARD_MAILLIST - игнорирование писем из списков рассылки вместо отказа в приеме письма dnl (используется только одновременно с REJECT) dnl SUBMIT_GREYLIST=XX - занесение хоста в greylist_relays на XX минут, dnl если письмо набрало confDSPAM_ACTION_SCORE баллов dnl SUBMIT_MYSQL - внесение в базу MySQL информации о письме, dnl если оно набрало confDSPAM_ACTION_SCORE баллов dnl (только для enterprise версии) dnl SUBMIT_SQLITE - внесение в базу SQLite информации о письме, dnl если оно набрало confDSPAM_ACTION_SCORE баллов dnl (только для enterprise версии) dnl define(`confDSPAM_ACTION', `')dnl dnl если не будут указаны действия REJECT, DENY, DISCARD, или DROP, то письмо будет просто помечено dnl действие QUARANTINE можно указывать вместо с REJECT или DISCARD через пробел dnl действия QUARANTINE_MAILLIST и DISCARD_MAILLIST работоспособны только с действием REJECT dnl действия SUBMIT_* могут использоваться вместе с REJECT или DISCARD dnl dnl величина score, при которой производится действие confDSPAM_ACTION dnl define(`confDSPAM_ACTION_SCORE', `80')dnl dnl confDSPAM_ACTION_SCORE указывается в десятых долях процентах, т. е. значение может быть от 0 до 1000 dnl dnl значение по умолчанию времени жизни записи о хосте в кеше greylisting'а в минутах dnl define(`confDSPAM_GREYLIST_PERIOD', `eval(24*60)')dnl dnl dnl сообщение полностью исключается из проверки, если в значении $acl_m13 dnl поля white_list_relays, white_list_senders или white_list_compat равны 1 dnl и поле spam_hater не равно 1 dnl dnl заголовки DSPAM dnl define(`confDSPAM_HEADERS', `:X-DSPAM-Info:X-DSPAM-Version:X-Daemon-Classification:X-DSPAM-Result:X-DSPAM-Processed:X-DSPAM-Confidence:X-DSPAM-Improbability:X-DSPAM-Probability:X-DSPAM-Signature:X-DSPAM-Factors') dnl ifelse(SECTION, `MAIN', `dnl define(`confSPAMASSASSIN_HEADERS', confSPAMASSASSIN_HEADERS`'confDSPAM_HEADERS)dnl dspam_address = confDSPAM_ADDRESS ') dnl ifelse(SECTION, `MAIN', `') ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_check_data_dspam: warn set acl_c0 = defer warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} # Always add DSPAM headers warn condition = ${if eq{$acl_m0}{skip}{no}{yes}} dspam = confDSPAM_USER:true add_header = \ ${if eq{$dspam_classification}{}{}{X-Daemon-Classification: $dspam_classification\n}}\ ${if eq{$dspam_result}{}{}{X-DSPAM-Result: $dspam_result\n}}\ ${if eq{$dspam_processed}{}{}{X-DSPAM-Processed: $dspam_processed\n}}\ ${if eq{$dspam_confidence}{}{}{X-DSPAM-Confidence: $dspam_confidence\n}}\ ${if eq{$dspam_improbability}{}{}{X-DSPAM-Improbability: $dspam_improbability\n}}\ ${if eq{$dspam_probability}{}{}{X-DSPAM-Probability: $dspam_probability\ ${if eq{$dspam_probability_int}{}{}{ ($dspam_probability_int)}}\n}}\ ${if eq{$dspam_signature}{}{}{X-DSPAM-Signature: $dspam_signature\n}}\ ${if eq{$dspam_factors}{}{}{X-DSPAM-Factors: $dspam_factors\n}} set acl_c0 = accept condition = ${if eq{$acl_c0}{defer}{yes}{no}} accept ! dspam = confDSPAM_USER:true warn set acl_c0 = nospam dspam = confDSPAM_USER set acl_c0 = spam accept ') dnl ifelse(SECTION, `ACLS_ADDITIONAL', `') ifelse(SECTION, `ACL_CHECK_DATA_TOP', `dnl ifelse(confDSPAM_OLD_HEADERS, `REMOVE', `dnl warn remove_header = confDSPAM_HEADERS ') dnl ifelse(confDSPAM_OLD_HEADERS, `REMOVE', `') ifelse(confDSPAM_OLD_HEADERS, `RENAME', `dnl warn remove_header = confDSPAM_HEADERS add_header = ${sg{RENAME_FIELD(confDSPAM_HEADERS)}{\N\n \n\N}{\n}} ') dnl ifelse(confDSPAM_OLD_HEADERS, `RENAME', `') ') dnl ifelse(SECTION, `ACL_CHECK_DATA_TOP', `') ifelse(SECTION, `ACL_CHECK_DATA', `dnl # DSPAM ifdef(`confDSPAM_NAME_VERSION',`define(`_DSPAM_VER_', `esyscmd(confDSPAM_NAME_VERSION)')')dnl ifelse(len(X`'_DSPAM_VER_), `1', `ifdef(`confDSPAM_NAME_VERSION_DEFAULT',`define(`_DSPAM_VER_', confDSPAM_NAME_VERSION_DEFAULT)',`define(`_DSPAM_VER_', `DSPAM Server')')')dnl # добавляем информацию о версии DSPAM warn add_header = X-DSPAM-Version: _DSPAM_VER_ on $primary_hostname\n warn condition = ${if eq{$acl_m5}{skip}{no}{yes}} acl = acl_check_data_dspam warn set acl_m0 = condition = ${if eq{$acl_m5}{skip}{no}{yes}} condition = ${if eq{$acl_c0}{defer}{no}{yes}} condition = ${if eq{$dspam_probability_int}{}{no}{yes}} condition = ${if <{$dspam_probability_int}{confDSPAM_ACTION_SCORE}{no}{yes}} set acl_m0 = certainly_spam add_header = X-Spam-Original-Recipients: $recipients\n ifelse_strstr(confDSPAM_ACTION, `SUBMIT_GREYLIST', `ENTERPRISE(`greylist', `submit_dspam')') ifelse_strstr(confDSPAM_ACTION, `SUBMIT_MYSQL', `ENTERPRISE(`mysql', `submit_dspam')') ifelse_strstr(confDSPAM_ACTION, `SUBMIT_SQLITE', `ENTERPRISE(`sqlite', `submit_dspam')') ifdef(`confDSPAM_DEFER_OK', `ifelse(confDSPAM_DEFER_OK, `YES', `dnl warn condition = ${if eq{$acl_m5}{skip}{no}{yes}} condition = ${if eq{$acl_c0}{defer}{yes}{no}} add_header = X-DSPAM-Info: DSPAM connection deferred on $primary_hostname\n log_message = DSPAM connection deferred ', ` dnl ifdef(`confDSPAM_DEFER_OK', `ifelse(confDSPAM_DEFER_OK, `YES', `')') defer condition = ${if eq{$acl_m5}{skip}{no}{yes}} condition = ${if eq{$acl_c0}{defer}{yes}{no}} message = System busy. Try again later log_message = DSPAM connection deferred ')') dnl ifdef(`confDSPAM_DEFER_OK', `ifelse(confDSPAM_DEFER_OK, `YES', `')') dnl define(`confDSPAM_ACTION', confDSPAM_ACTION` ') ifelse_strstr(confDSPAM_ACTION` ', `REJECT ', ` dnl ifelse_strstr(confDSPAM_ACTION` ', `QUARANTINE_MAILLIST ', ` # Reject and quarantine spam messages if spam probability is over confDSPAM_ACTION_SCORE 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 (DSPAM probability: $dspam_probability) set acl_m_quarantined = yes 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(confDSPAM_ACTION` ', `QUARANTINE_MAILLIST ', `') dnl ifelse_strstr(confDSPAM_ACTION` ', `DISCARD_MAILLIST ', ` # Discard spam messages if spam probability is over confDSPAM_ACTION_SCORE 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 (DSPAM probability: $dspam_probability) ') dnl ifelse_strstr(confDSPAM_ACTION` ', `DISCARD_MAILLIST ', `') dnl ifelse_strstr(confDSPAM_ACTION` ', `QUARANTINE ', ` # Reject and quarantine spam messages if spam probability is over confDSPAM_ACTION_SCORE warn condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} control = fakereject/Spam is blocked (${message_id}) logwrite = Spam is blocked and quarantined (DSPAM probability: $dspam_probability) set acl_m_quarantined = yes add_header = X-Spam-Action: quarantined\n accept condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = original recipients: $recipients ',` # Reject spam messages if spam probability is over confDSPAM_ACTION_SCORE deny condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = Spam is rejected (DSPAM probability: $dspam_probability) message = Spam is blocked (${message_id}) ')') ifelse_strstr(confDSPAM_ACTION` ', `DISCARD ', ` ifelse_strstr(confDSPAM_ACTION` ', `QUARANTINE ', ` # Discard and quarantine spam messages if spam probability is over confDSPAM_ACTION_SCORE warn condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = Spam is quarantined (DSPAM probability: $dspam_probability) set acl_m_quarantined = yes add_header = X-Spam-Action: quarantined\n accept condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = original recipients: $recipients ',` # Discard spam messages if spam probability is over confDSPAM_ACTION_SCORE discard condition = ${if eq{$acl_m0}{certainly_spam}{yes}{no}} logwrite = Spam is discarded (DSPAM probability: $dspam_probability) ')') ') dnl ifelse(SECTION, `ACL_CHECK_DATA', `')