
exim과 spamassassin(exiscan에서 사용)이 설치되어 실행 중이지만 "to"와 "envelope-to"가 동일하지 않은 경우 이메일에 몇 가지 포인트를 추가하는 사용자 정의 규칙을 추가하고 싶습니다. local.cf에 다음 규칙을 추가했습니다.
header EXIM_SENDER_SWAP X-Sender-Swap =~ /To_envelope-to/
describe EXIM_SENDER_SWAP To doesnt match envelope-to
score EXIM_SENDER_SWAP 2.0
exim.conf의 줄
acl_check_data:
warn message = X-Subject-Swap: To_envelope-to
condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}
테스트 메시지를 보내고 있는데 해당 헤더가 exim에 의해 추가되었지만 spamassassin에 의해 추가된 포인트는 없습니다. 뭐가 문제 야?
답변1
첫째, "message" 수정자는 원하는 것이 아닙니다. 대신 ACL의 메시지에 헤더를 추가하려는 경우 "add_header"를 사용하려고 합니다. 읽다http://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTaddheadacl그 부분에 대한 추가 정보가 필요하다면.
그러나 나는 당신이 하려는 일이 당신이 사용하는 방식대로 작동할 것이라고 생각하지 않습니다. 각 ACL을 처리하는 exim의 내부에서는 ACL이 실행되고 ACL이 실행되면완전한, 모든 헤더 추가 및 삭제가 완료됩니다. 동일한 DATA ACL에서 이 두 가지 작업을 모두 수행하고 있습니다. 이는 첫 번째 비교에 의해 추가된 헤더가 spam 명령이 검사하는 임시 파일의 메시지에 아직 실제로 추가되지 않았음을 의미합니다.
한 가지 옵션은 스팸 검사를 수행하고 헤더를 추가했을 조건을 감지한 다음 스팸 여부를 비교할 때 스팸 점수를 보유하는 변수에 해당 점수를 추가하는 것입니다.
내 생각에 더 좋은 두 번째 옵션은 스팸 검사를 실행하는 데 사용하는 두 명의 다른 사용자를 두는 것입니다. 하나의 경우 스팸 점수가 (예를 들어) 5.0으로 설정되어 있습니다. 두 번째 항목의 경우 스팸 점수가 3.0으로 설정되어 있습니다. 이는 일반 기준치보다 2점 적은 수치로, 스팸 점수에 2점을 더한 것과 같습니다.
그러면 ACL 스탠자는 다음과 같을 수 있습니다(테스트되지 않음).
warn condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}
set $acl_m_env_ok = 1
spam = strict_user:true
warn condtion = ${if eq{$acl_m_env_ok}{1} {no}{yes}}
spam = normal_user:true
warn add_header = X-Spam-Score: $spam_score
add_header = X-Spam-Report: $spam_report
deny condition = ${if eq{$acl_m_env_ok}{1}}
condition = ${if >{$spam_score_int}{30}}
message = This message with mismatched header/envelope score $spam_score_points...REJECTED
deny condition = ${if >{$spam_score_int}{50}}
message = This message scored $spam_score points...REJECTED