SpamAssassin 3.2.x 配置文檔中文版 02
2010-04-06 18:14
規則定義與特權設置
這些設置與上面的設置不同,它們被稱之爲“特權設置”。只有用戶在通過 procmailrc 文件或 forward 文件調用 SpamAssassin 時,或在系統管理員編輯 /etc/mail/spamassassin 下的配置文件時才能使用它們。出於安全性及效率的考慮,通過 spamc 來訪問 spamd 的用戶是不允許在他們的 user_prefs 文件中使用這些“特權設置”,除非設置了 allow_user_rules 選項(而且,也只能使用下面列出的這些特權設置)。 allow_user_rules ( 0 | 1 ) (默認值: 0) 這個選項允許用戶在他們的 user_prefs 中創建可以用於 spamd 的規則(也只能創建規則)。默認是不允許用戶創建規則的,因爲這樣可能會造成一些安全漏洞,如果 spamd 是以 root 身份運行的話,就有可能授予了用戶 root 級別的訪問權限。這並不是一個好的做法,除非你能夠通過別的方法確保用戶的規則是安全的。如果不是很有把握,不要打開這個選項。 此外,這個選項會導致每當一封郵件遞交給用戶時,如果他的 user_prefs 裏面有自己定義的規則,那麼 SpamAssassin 每次都會重新編譯所有的規則,這會顯著的增大服務器的負載。所以強烈建議不要允許用戶自己定義規則! 注意,現在即便打開了這個選項, spamd 也不會使用 user_prefs 中的規則來修改系統現存的規則定義。 redirector_pattern /模式/修飾符 用來匹配 URI 中的重定向站點部分和目標站點部分的正則表達式。 注意:目標 URI 必須使用小括號包含起來,模式的其它部分可以創建一個反向引用。 範例: http://chkpt.zdnet.com/chkpt/whatever/spammer.domain/yo/dude redirector_pattern /^https?:\/\/(?:opt\.)?chkpt\.zdnet\.com\/chkpt\/\w+\/(.*)$/i header 測試規則名 信頭名 操作符 /模式/修飾符 [if-unset: 字符串] 這個選項用於定義一個信頭測試規則。測試規則名 是一個測試規則的名稱,如“FROM_ENDS_IN_NUMS”。信頭名是一個郵件信頭的名稱,如 “Subject”、“To”等。 信頭後面加上“:raw”後綴可以防止使用 quoted-printable 或 base-64 編碼的字符串自動進行解碼。 信頭後面加上“:addr”後綴可以去掉除了信頭中的第一個郵件地址外的其他部分。例如,以下所有信頭處理後都只剩下“example@foo” 了: example@foo example@foo (Foo Blah) example@foo, example@bar display: example@foo (Foo Blah), example@bar ; Foo Blah <example@foo> ``Foo Blah'' <example@foo> ``'Foo Blah''' <example@foo> 信頭後面加上“:name”後綴可以去掉除了信頭中第一個真實名字外的其他部分。例如, 以下所有信頭處理後只剩下“Foo Blah”了: example@foo (Foo Blah) example@foo (Foo Blah), example@bar display: example@foo (Foo Blah), example@bar ; Foo Blah <example@foo> ``Foo Blah'' <example@foo> ``'Foo Blah''' <example@foo> 可以使用以下的幾個“僞”信頭: ALL 表示任何信頭的文字。 ToCc 表示“To”和“Cc”信頭。 EnvelopeFrom 是在遞交郵件的 SMTP 通訊過程中,“MAIL FROM:”中的地址(如果可用)。如何設置的更多信息參見 envelope_sender_header。 MESSAGEID 表示信件中所有的 Message-Id 信頭。一些郵件列表軟件會將原來的 Message-Id 信頭改名爲 Resent-Message-Id 或 X-Message-Id ,然後使用自己的 Message-Id 信頭。這個“僞”信頭返回以上全部三種信頭,使用回車符分隔開。 X-Spam-Relays-Untrusted, X-Spam-Relays-Trusted, X-Spam-Relays-Internal 和 X-Spam-Relays-External 表示一個可移植的、預解析的郵件網絡路徑。像 Received 信頭的信息一樣,分別是“可信”與“不可信”和“內部”與“外部”。更多細節參見 http://wiki.apache.org/spamassassin/TrustedRelays。 操作符是 =~ (匹配其後的正則表達式)或 !~ (不匹配其後的正則表達式)。模式是一個 Perl 風格的正則表達式,修飾符是對正則表達式的修飾(請參見 Perl 中有關正則表達式的部分)。 注意,即便你使用了 x 修飾符,也不支持多行的正則表達式。還要注意,“#”字符必須轉義成“\#”,否則會被認爲是一行註釋。 如果使用了 [if-unset: 字符串] 標記,那麼如果郵件中沒有發現該信頭,就會使用該字符串來進行模式匹配。 測試規則名不能用數字開頭,只能使用英文字母、數字和下劃線。按照慣例不要使用小寫字母、名字不要超過22個字符。也不能使用中劃線。 注意,以“__”(兩個下劃線)開頭的測試規則被保留用於元規則,他們不會被計分和列在“命中的測試”報告中。以“T_”開頭的測試規則被保留用於 QA測試,它們應該給予很低的評分。 如果你增加或修改一個測試規則,請使用 spamassassin --lint 來測試一下是否有語法錯誤。這可以避免出現錯誤消息或導致其它的測試被忽略。 header 測試規則名 exists:信頭名 定義一個“信頭存在”測試規則。信頭是一個要測試存在與否的信頭名。這是上面的信頭測試規則的一個簡化版本。 header 測試規則名 eval:評估行數([參數]) 定義一個郵件信頭的評估測試。評估函數是Mail::SpamAssassin::EvalTests 中定義的測試函數。參數是可選的。 header 測試規則名 eval:check_rbl('名單名稱', '名單地址' [, '返回碼']) 檢查一個 DNSBL (以 DNS 方式運行的黑名單或白名單)。它會從郵件的 Received: 信頭中取出所有的IP地址,如果IP地址不在 trusted_networks 中,那麼對這些IP地址進行DNSBL查詢。以下幾點需要注意: 重複或保留的 IP 地址 重複的IP地址僅僅被查詢一次。保留的IP地址(如192.168.0.1、127.0.0.1等)不查詢。保留的IP地址列在 <http://www.iana.org/assignments/ipv4-address-space>, <http://duxcw.com/faq/network/privip.htm>, <http://duxcw.com/faq/network/autoip.htm>, 或 <ftp://ftp.rfc-editor.org/in-notes/rfc3330.txt> 中 名單名稱 它也稱作“zone ID”(譯者注:即給所查詢的DNSBL的一個名字,如用 CBLPLUS 代表 cblplus.anti-spam.org.cn. )。如果你要查詢像 NJABL 或 SORBS 這樣的由多個黑名單合併而成的多重 DNSBL ,你可以通過 check_rbl_sub() 來比較查詢返回的結果。 如果上面取出的多個IP地址的DNSBL查詢不止一個返回了命中結果,並不會重複計分,因爲對於每封郵件來說,該規則只被觸發一次(譯者注:即只要有一個 IP 地址在黑名單中就算觸發了該規則)。 黑白名單地址 這是DNSBL的根區(譯者注:即DNSBL的服務地址,如cblplus.anti-spam.org.cn.),使用點結尾。 返回碼 這是一個和下面的 check_rbl_sub() 一樣的返回碼,它是可選的。 查詢除了第一跳外的所有 IP 地址 可以在“名單名稱”後加上“-notfirsthop”後綴來查詢除了第一跳外的所有IP地址。它被用於在查詢動態地址黑名單(譯者注:動態地址是用於動 態的分配給撥號、ISDN、ADSL等連接的IP地址)。郵件的第一跳也許是動態地址,但是至少應該有一跳以上(通過他們的 SMTP 服務器)的郵件遞交跳數,這是合理的,所以在這種情況下不應該因第一跳在動態地址黑名單裏面而增加評分。但是如果只有一跳,那麼無論如何都會被查詢的,因 爲郵件應該通過它的外發郵件服務器進行遞交,而不是直接投遞到你的郵件服務器。 按 IP 是否可信查詢 當查詢一個“正向”的DNSBL(DNS白名單)時,你不能盲目信任那些“Received”信頭中的沒有被列在可信任的中繼服務器名單中的IP地址(譯 者注:除了你的可信中繼服務器及連接到它們的IP以外,其它地址有可能是僞造的;連接到你的可信中繼服務器的 IP 地址是無法僞造的,該地址的真實可靠的)。爲了查詢第一個可信的 IP 地址,可以在“黑白名單名稱”後加上“-firsttrusted”後綴,這會查詢連接到最遠的一個可信中繼服務器的IP地址。 注意,這需要 SpamAssassin 能知道那個中繼服務器是可信任的。在簡單的環境裏, SpamAssassin 能夠很好的自行推測。在複雜的環境,你可以通過手工設定 trusted_networks 可以得到更好的結果。 此外,你能夠通過在“名單名稱”後加上“-untrusted”後綴來查詢所有不可信的IP地址。重要提示:這不包括最近的一個“不可信行”,如上述的 “-firsttrusted”所指的地址。因爲我們在這裏討論的是IP地址是否是可信任的,而不是信頭的來源;而且最近的一個信頭(即 “firsttrusted”),其包含的數據是可信的。更多細節參見 http://wiki.apache.org/spamassassin/TrustedRelays。 只查詢最後的外部 IP 在“名單名稱”後加上“-lastexternal”後綴,你可以只查詢連接到你的內部網絡的外部主機或使用公開 IP 地址的最後一個外部主機。 譯者注:中國反垃圾郵件聯盟所推出的DNSBL服務的設置如下,它們可以放到 /etc/mail/spamassassin/local.cf 中,但是不必全部放入和使用,通常根據需要使用其中一個就可以了,推薦使用CBL-。設定的評分可以自己的情況自行調整: CBL(返回值是127.0.8.2): header RCVD_IN_CASA_CBL eval:check_rbl('CBL','cbl.anti-spam.org.cn.','127.0.8.2') describe RCVD_IN_CASA_CBL Relay has be listed in CASA CBL, http://anti-spam.org.cn/ tflags RCVD_IN_CASA_CBL net score RCVD_IN_CASA_CBL 3.0 CDL(返回值是127.0.8.4): header RCVD_IN_CASA_CDL eval:check_rbl('CDL','cdl.anti-spam.org.cn.','127.0.8.4') describe RCVD_IN_CASA_CDL Relay has be listed in CASA CDL, http://anti-spam.org.cn/ tflags RCVD_IN_CASA_CDL net score RCVD_IN_CASA_CDL 4.0 CBL+(返回值是127.0.8.6): header RCVD_IN_CASA_CBLPLUS eval:check_rbl('CBLPLUS','cblplus.anti-spam.org.cn.','127.0.8.6') describe RCVD_IN_CASA_CBLPLUS Relay has be listed in CASA CBL+, http://anti-spam.org.cn/ tflags RCVD_IN_CASA_CBLPLUS net score RCVD_IN_CASA_CBLPLUS 4.0 雖然CBL+是CBL和CDL的綜合,但是CBL+不是一個多重列表,其返回值是固定的一個 127.0.8.6。 CBL-(返回值是127.0.8.5): header RCVD_IN_CASA_CBLLESS eval:check_rbl('CBLLESS','cblless.anti-spam.org.cn.','127.0.8.5') describe RCVD_IN_CASA_CBLLESS Relay has be listed in CASA CBL-, http://anti-spam.org.cn/ tflags RCVD_IN_CASA_CBLLESS net score RCVD_IN_CASA_CBLLESS 4.0 CML(返回值是127.0.8.1): header RCVD_IN_CASA_CML eval:check_rbl('CML','cml.anti-spam.org.cn.','127.0.8.1') describe RCVD_IN_CASA_CML Relay has be listed in CASA CML (whitelist), http://anti-spam.org.cn/ tflags RCVD_IN_CASA_CML net nice score RCVD_IN_CASA_CML -5.0 這是一個白名單,評分是負值,可以降低計分。 此外,由於國內一些 ISP 的 DNS 存在劫持問題(即在查詢一個不存在的地址時候,總是返回一個特定的地址,用於將用戶錯誤的訪問導向到一個特定網站),這種情況下,用戶會發現其所查詢的任 何地址都被列入到了 RBL 中。因此,我們建議,儘可能的情況下都設置返回碼驗證,以避免這個問題。當然,更換一個沒有被劫持的 DNS 也可以。 header 測試規則名 eval:check_rbl_txt('名單名稱', '名單地址') 類似於 check_rbl() ,只是查詢的是 TXT 類型的 DNS 記錄而不是 A 類型的 DNS 記錄。如果所查詢的DNSBL支持TXT查詢,返回的結果是一行文字,用來說明該地址被列入黑名單的原因,通常是一個可以查詢黑名單數據庫的鏈接。 header 測試規則名 eval:check_rbl_sub('名單名稱', '返回碼') 創建某個 DNSBL 查詢的子測試。如果你要查詢一個像 relays.osirusoft.com 那樣的多重DNSBL,你可以使用對應的“名單名稱”來比較 chek_rbl 查詢得到結果。如果DNSBL查詢返回多個 A 記錄時,“返回碼”可以設置爲一個用點分隔的 IPv4 地址;如果DNSBL查詢返回一個包含掩碼的IP地址時,“返回碼”可以是一個代表掩碼的正十進制整數;如果是一個SenderBase查詢(對 sa.senderbase.org 的TXT查詢),“測試結果”是一個以“sb:”開頭的表達式;如果前面的都不符合,它還可以是一個正則表達式。 注意:這個“名單名稱”必須和前面的 check_rbl() 中的名字完全一樣,包括後綴的“-notfirsthop”等。 body 測試規則名 /模式/修飾符 定義一個信體模式測試。模式是一個Perl的正則表達式。注意,“#”字符必須轉義成“\#”,否則會被認爲是一行註釋。 這裏“body”指的是郵件信體裏面的普通文本;任何非文本的MIME部分都會去掉,如果需要的話, Quoted-Printable 或 Base 64 編碼的文本都會被解碼。郵件的主題信頭也作爲了郵件信體的第一個段落處理。在模式匹配前,所有的HTML標記和換行都會被去掉。 body 測試規則名 eval:評估函數([參數]) 定義一個郵件信體的評估測試,參見上面。 uri 測試規則名 /模式/修飾符 定義一個uri的模式測試。模式是一個Perl的正則表達式。注意,“#”字符必須轉義成“\#”,否則會被認爲是一行註釋。 這裏“uri”指的是郵件信體中所有的URI,測試會對每一個URI進行測試,如果發現了匹配,增加其對應的評分。當需要測試URI時,可以用這個測試來 替代使用“body”測試來匹配信體中的URI,它會更精確的匹配在URL的兩端,同時也速度更快。 rawbody 測試規則名 /模式/修飾符 定義一個原始信體模式測試。模式是一個Perl的正則表達式。注意,“#”字符必須轉義成“\#”,否則會被認爲是一行註釋。 這裏“raw body”指的是郵件信體裏面所有的文本。Quoted-Printable 或 Base 64 編碼的文本都會被解碼,但是HTML代碼和換行仍舊保留。模式是逐行進行匹配的。 rawbody 測試規則名 eval:評估函數([參數]) 定義一個原始郵件信體的評估測試,參見上面。 full 測試規則名 /模式/修飾符 定義一個整個郵件的模式測試。模式是一個Perl的正則表達式。注意,“#”字符必須轉義成“\#”,否則會被認爲是一行註釋。 整個郵件包括完整的信頭和信體,其中包括MIME編碼的數據,如圖像、其它附件、MIME邊界等等。 full 測試規則名 eval:評估函數([參數]) 定義一個整個郵件的評估測試,參見上面。 meta 測試規則名 邏輯表達式 定義一個邏輯表達式來測試其他的測試是否命中或未命中。例如: meta META1 TEST1 && !(TEST2 || TEST3) 注意,英語的操作符(“and”、“or”)會被作爲測試規則名處理,另外,不支持異或(XOR)操作。 meta 測試規則名 邏輯運算表達式 還能夠定義一個邏輯運算表達式來計算其他的測試結果的運算結果,未命中的值是“0”,命中的值是非零值。命中的元測試的值是它的運算表達式;命中的評估函 數測試的值是它返回的值;測試標誌設置爲“multiple”的命中的信頭、信體、原始信體、uri或整個郵件的測試的值是測試命中的次數;其它的命中測 試的值是“1”. 例如: meta META2 (3 * TEST1 - 2 * TEST2) > 0 注意,不能使用Perl內建的運算符和函數,如abs()等,它們會被作爲測試規則名處理。 如果你要定義一個元規則,但是不希望在測試每個子規則時將其評分計算到總的評分上,只在整個元規則匹配時纔將元規則的評分計算到總的評分上時,可以給子規 則名前加上“__”(兩個下劃線),SpamAssassin 不會計入這些子規則的評分。 tflags 測試規則名 [ {net|nice|learn|userconf|noautolearn|multiple} ] 用於設置一個測試規則的標誌。這些標誌用於評分驅動的後臺系統的測試行爲細節。關於這些標誌對那些系統的作用的更多信息請參見 bayes_auto_learn 。有下列標誌: net 該測試是一個網絡測試,在大量測試的系統或使用 -L 參數時,他們不會被運行,所以它的評分不會被計算進總的評分。 nice 該測試被用於補償誤判的郵件評分,它應該被指定爲負值。 userconf 該測試在使用前需要用戶配置(如 language- 類的測試)。 learn 該測試使用前要求經過學習。 noautolearn 該測試的評分不會被學習系統所學習。 multiple 該測試將被運行多次,用於元規則測試。隻影響信頭、信體、原始信體、uri和整個郵件的測試規則。 priority 測試規則名 n 指定一個測試的優先級。除了DNS和元測試外的所有測試都按照優先級的順序進行測試(負優先級的測試運行在所有正優先級測試之前)。默認值是0。 不能使用 -99999999999999 和 -99999999999998 ,它們在內部有特殊用途。 管理員設置 這些設置與上面的設置不同,它們甚至比上面的“特權設置”還要“更特權”。無論 allow_user_rules 是否設置,它們不能用於供 spamc/spamd 所讀取的用戶的 user_prefs 文件中。不過,所有的設置都可用在用戶直接運行的本地程序中。 version_tag 版本標籤 版本標籤會後綴到 X-Spam-Status 中的 SA 的版本號後面。你應該在修改規則集的同時也修改這個版本標籤,特別是你計劃公開發布你的規則集時。可以考慮用你的姓或名字縮寫並加上一個遞增的表示修改次 數的數字來組合成這個字符串。 這個字符串會轉換成小寫的,任何的非字母/數字和標點符號會被轉換成下劃線。 範例: version_tag myrules1 # version=2.41-myrules1 test 測試規則名 (ok|fail) 用於測試的字符串 定義一個迴歸測試字符串。你能給每個測試規則定義一個以上的迴歸測試字符串。簡單的說,就是定義一個測試規則所匹配的字符串。 這些測試僅僅在測試環境中使用,它們不會影響到 SpamAssassin 的正常使用。 rbl_timeout n (默認值: 15) 所有的DNS查詢都是在整個測試開始的時候進行,並且在整個測試結束時候讀取結果。這個選項設置了最大的DNS查詢等待時間。在大多數 DNS查詢都成功完成的情況下, SpamAssassin 將不會浪費時間來等待剩下的那些查詢,可能它們根本沒有迴應了。當剩餘沒有完成的請求越少時,等待的時候也越短。對於默認的15秒的等待時間,下面是一個 表格說明了當剩餘請求有多少時會等待多少時間: 剩餘的查詢 100% 90% 80% 70% 60% 50% 40% 30% 20% 10% 0% 等待時間 15 15 14 14 13 11 10 8 5 3 0 此外,當更多的查詢結果返回時,剩餘時間會變得更短,在超時前,未完成的查詢會給至少1秒鐘的查詢時間,但是等待時間總不會超過 rbl_timeout 所指定的時間。 舉個例子,如果郵件檢查開始時候有20個查詢,當有16個(剩下20%)返回了結果後,剩下的4個查詢必須在開始後的5秒鐘內完成,否則就會放棄這幾個查 詢。 util_rb_tld 頂級域 頂級域 ... 用於給 RegistrarBoundaries 列表裏增加新的頂級域(TLD)。這個列表的更新通常與 SpamAssassin 發佈新版本時一同更新,不過可以用該選項在新版本發佈前就更新這個列表。頂級域如 com 、 net 、 org 等等。 util_rb_2tld 二級域 二級域 ... 用於給 RegistrarBoundaries 列表裏增加新的二級域(2TLD)。這個列表的更新通常與 SpamAssassin 發佈新版本時一同更新,不過可以用該選項在新版本發佈前就更新這個列表。二級域如 co.uk 、 fed.us 等等。 bayes_path 路徑 (默認值: ~/.spamassassin/bayes) 指定貝葉斯數據庫的目錄和文件名。使用這個路徑,並加上“_toks”、“_seen”等後綴創建幾個數據庫:默認情況下就是 ~/.spamassassin/bayes_seen 、 ~/.spamassassin/bayes_toks 等。 默認情況下,每個用戶都在自己的 ~/.spamassassin 目錄裏面存放這些數據庫,權限模式爲0700或0600。如果整個站點應用 SpamAssassin ,你可以讓所有用戶共享同一個數據庫,從而降低磁盤的佔用。(不過,貝葉斯過濾器在用戶使用自己單獨的數據庫時更加有效。) bayes_file_mode (默認值: 0700) 指定貝葉斯數據庫的權限模式。 確保你指定的權限包含“x”(執行)權限,因爲在創建目錄時,它需要執行權限才能正常使用。不過,如果創建的是文件,該文件並不會有任何執行權限 (umask 被設置爲111)。 bayes_store_module 模塊名稱 如果設置了該選項,該模塊用於提供替換默認的貝葉斯存儲方式。該模塊必須遵循公佈的存儲規範。(參見 Mail::SpamAssassin::BayesStore )。例如,可以設置爲 Mail::SpamAssassin::BayesStore::SQL 來使用通用的 SQL 存儲模塊。 bayes_sql_dsn DBI::數據庫類型:數據庫名:主機名:端口 該選項用於 BayesStore::SQL 存儲方式。 這個選項指定的DSN用於連接到基於SQL方式的貝葉斯數據庫。 bayes_sql_username 用戶名 該選項用於 BayesStore::SQL 存儲方式。 這個選項指定上述的DSN的連接用戶名。 bayes_sql_password 密碼 該選項用於 BayesStore::SQL 存儲方式。 這個選項指定上述的DSN的連接密碼。 bayes_sql_username_authorized ( 0 | 1 ) (默認值: 0) 設置是否在 BayesSQL 中調用 services_authorized_for_username 插件。如果這個插件沒有檢測到用戶被授權使用貝葉斯功能或該模塊不可用,數據庫不會進行初始化。 注意:默認情況下用戶是未授權的,除非插件返回真值。如果使用該插件,但是插件不能正確載入執行,所有的用戶都被認爲是未授權的。 傳遞到插件用於檢測的用戶名能使用 bayes_sql_override_username 選項來覆蓋。 user_scores_dsn (LDAP連接 | DBI:數據庫類型:數據庫名:主機名:端口) 如果你從一個 SQL 數據庫中載入用戶自定義的評分,那麼在這裏定義連接的DSN。例如: DBI:mysql:spamassassin:localhost 如果你從一個 LDAP 目錄服務裏面載入用戶自定義的評分,那麼也在這裏定義連接的DSN。你需要寫成LADP的URL格式,包含下列部分:LDAP主機、端口、用於查找的基 DN、搜索範圍(base、one 或 sub)、一個用來存儲配置的多值屬性(空格分隔開的鍵值對,像在文件中一樣),最後是一個過濾表達式來過濾出所要的用戶名。注意,過濾表達式用在 sprintf 語句中,只有一個用戶名參數 :“__USERNAME__”,它會替換成實際的用戶名。 例子: ldap://localhost:389/dc=koehntopp,dc=de?spamassassinconfig?uid=__USERNAME__ user_scores_sql_username 用戶名 連接到上述DSN的用戶名。 user_scores_sql_password 密碼 連接到上述DSN的密碼。 user_scores_sql_custom_query 查詢語句 這個選項可以讓你定製查詢用戶的評分和配置的SQL查詢語句。 查詢結果需要按順序返回配置名、配置值這兩個字段才行。此外,你可以在SQL中使用以下的“變量”,它們會在查詢時候被替代成當前值。當前支持以下變量: _TABLE_ 存儲用戶評分和配置的表名。當前它的值指定爲“userpref”,如果需要,可以在定製查詢裏使用另外的表名。 _USERNAME_ 當前用戶的用戶名。 _MAILBOX_ 當前用戶的用戶名的“@”前的部分。 _DOMAIN_ 當前用戶的用戶名的“@”後的部分。這個值也許是空的。 查詢語句必須是一個連續的行,以便能正常工作。 下面是幾個查詢語句的例子。注意,有一些爲了閱讀方便進行了換行,但是在你的配置中應該是一行。 當前的默認查詢語句: SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '@GLOBAL' ORDER BY username ASC 使用全局和域級別的默認值: SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '@GLOBAL' OR username = '@~'||_DOMAIN_ ORDER BY username ASC 使用用戶配置來覆蓋全局配置: SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '@GLOBAL' ORDER BY username DESC user_scores_ldap_username 用戶名 指定用於連接到 LDAP 服務器的綁定 DN。默認是空字符串(“”),即允許匿名綁定。 例子:cn=master,dc=koehntopp,dc=de user_scores_ldap_password 密碼 指定用於連接到 LDAP 服務器的密碼,默認是空字符串(“”)。 loadplugin 插件模塊名 [模塊路徑] 裝入一個 SpamAssassin 插件模塊。模塊名是一個Perl的模塊名,用於創建插件模塊對象。 模塊路徑是裝入模塊的路徑,包含模塊的 Perl 代碼。如果指定的是一個相對路徑,那是相對於當前配置文件的位置而言的。如果省略了路徑參數,會從Perl的查找路徑(@INC數組)中找到並載入。 參見 Mail::SpamAssassin::Plugin中的更多細節來寫自己的插件。 tryplugin 插件模塊名 [模塊路徑] 同 loadplugin 一樣,但是當不能找到模塊文件(.pm)時會直接忽略。 預處理選項 include 文件名 包含文件中的配置選項。相對路徑是相對於當前配置文件或用戶的配置文件的位置。 if (Perl 的條件表達式) 用於支持按條件選擇的配置。在它到 else 或 endif 之間的配置僅在條件表達式爲真值時有效(對於Perl而言,就是該值是有定義的且非0)。 由於安全的原因,條件表達式只接受 Perl 的限定的部分,只能進行基本的算術比較。 允許下列輸入: 數字、空白、算術運算符和括號 即以下字符: ( ) - + * / _ . , < = > ! ~ 0-9 空白 version 它被替換爲當前運行的 SpamAssassin 的版本號。注意,SpamAssassin 內部使用的版本號是 x.yyyzzz 格式,這裏 x 是主版本號, y 是輔版本號, z 是修訂號。 所以3.0.0是3.000000,3.4.80是3.004080。 plugin(插件名) 如果該插件被載入,那麼該函數返回1,否則返回 undef。 如果一個文件直到結束也沒有使用 endif 來結束 if 語句,那麼會觸發一個警告,但是下一個配置文件將會繼續進行處理(譯者注:相當於在上個文件中末尾自動用 endif 結束了)。 例子: if (version > 3.000000) header MY_FOO ... endif loadplugin MyPlugin plugintest.pm if plugin (MyPlugin) header MY_PLUGIN_FOO eval:check_for_foo() score MY_PLUGIN_FOO 0.1 endif ifplugin 插件模塊名 同 if plugin(PluginModuleName) 一樣。 else 用於支持按條件選擇的配置。在它到 endif 之間的配置僅在條件表達式爲假值時有效(對於Perl而言,就是該值是未定義的和0)。 require_version 版本號 指定包含該配置的文件需要運行在特定版本的 SpamAssassin 下。如果不同版本(舊的或者新的)試圖從這個文件中讀取配置,它會輸出一個警告並忽略該配置文件。 注意,SpamAssassin 內部使用的版本號是 x.yyyzzz 格式,這裏 x 是主版本號, y 是輔版本號, z 是修訂號。 所以3.0.0是3.000000,3.4.80是3.004080。 模板標記 下列標記可以作爲變量在幾個選項中使用。它們會被替換爲相應的值。 一些標記可以使用擴號包括參數。參數是可選的,下面列出了它們的默認值。 _YESNOCAPS_ 根據是否是垃圾郵件返回:“YES”/“NO” _YESNO_ 根據是否是垃圾郵件返回:“Yes”/“No” _SCORE(PAD)_ 郵件的評分。如果指定了PAD參數,且是空格或數字0時,評分會用 空格或數字0進行填充(默認情況下是不填充)。例如 _SCORE(0)_ 將2.4填充成02.4,而 _SCORE(00)_ 將其填充成002.4。12.3則會 分別填充成12.3和012.3 _REQD_ 垃圾郵件評分標準線(譯者注:即 require 的值) _VERSION_ 版本號(如:3.0.0或3.1.0-r26142-foo1) _SUBVERSION_ 子版本號或代碼修訂日期(如:2004-01-10) _HOSTNAME_ 處理郵件的主機的主機名 _REMOTEHOSTNAME_ 發送郵件的主機的主機名,只在 spamd 中可用 _REMOTEHOSTADDR_ 發送郵件的主機的IP地址,只在 spamd 中可用 _BAYES_ 貝葉斯評分 _TOKENSUMMARY_ 所找到的新的、中立的、垃圾郵件的、正常郵件的字串數量 _BAYESTC_ 所找到的新的字串數量 _BAYESTCLEARNED_ 所找到的出現過的字串數量 _BAYESTCSPAMMY_ 所找到的垃圾郵件傾向的字串數量 _BAYESTCHAMMY_ 所找到的正常郵件傾向的字串數量 _HAMMYTOKENS(N)_ 前N個最重要的正常郵件字串(默認是5個) _SPAMMYTOKENS(N)_ 前N個最重要的垃圾郵件字串(默認是5個) _DATE_ 掃描時間,使用 rfc-2822 格式 _STARS(*)_ 每一分的評分分值使用一個“*”代表(可以使用任何字符) (限制最多有50個星號) _RELAYSTRUSTED_ 使用的可信任中繼服務器(參見 X-Spam-Relays-Trusted) _RELAYSUNTRUSTED_ 使用的非信任中繼服務器(參見 X-Spam-Relays-Untrusted) _RELAYSINTERNAL_ 使用的內部中繼服務器(參見 X-Spam-Relays-Internal) _RELAYSEXTERNAL_ 使用的外部中繼服務器(參見 X-Spam-Relays-External) _LASTEXTERNALIP_ 從外部投遞到內部的客戶端的 IP 地址 _LASTEXTERNALRDNS_ 從外部投遞到內部的客戶端的反向DNS解析名稱 _LASTEXTERNALHELO_ 從外部投遞到內部的客戶端的 HELO 字符串 _AUTOLEARN_ 自動學習狀態(“ham”、“no”、“spam”、“disabled”、 “failed”或“unavailable”) _AUTOLEARNSCORE_ 用於自動學習的郵件分值 _TESTS(,)_ 使用逗號(或其它字符)分隔開的命中的測試列表 _TESTSSCORES(,)_ 如上,只是加上了相應的分值(如:AWL=-3.0,...) _SUBTESTS(,)_ 使用逗號(或其它字符)分隔開的命中的子測試列表 _DCCB_ DCC 的“Brand” _DCCR_ DCC 的結果 _PYZOR_ Pyzor 的結果 _RBL_ 正向RBL查詢的完整的原始結果(使用DNS URI格式) _LANGUAGES_ 郵件中可能使用的語言 _PREVIEW_ 內容預覽 _REPORT_ 命中的測試規則的簡要報告(用於信頭報告中) _SUMMARY_ 命中的測試規則的標準報告(用於郵件報告中) _CONTACTADDRESS_ report_contact 的值 _HEADER(NAME)_ 包括信頭的值。值與信頭規則中匹配的一樣(參見文檔中其它部分) 如果引用的標記不在上述列表中,也沒有在載入的模塊中定義,標記將保持不變。 HAMMYTOKENS 和 SPAMMYTOKENS 標記有一個可選的用於指定特定格式的第二個參數,參見下面的 正常字串/垃圾字串標記格式 部分。 正常字串/垃圾字串標記格式 正常字串(HAMMYTOKENS)和垃圾字串(SPAMMYTOKENS)有一個用於指定特定格式的可選的第二個參 數:_SPAMMYTOKENS(N,FMT)_, _HAMMYTOKENS(N,FMT)_ 。可用格式如下: short 只列出字串。例如,配置文件中加上: add_header all Spammy _SPAMMYTOKENS(2,short)_ 信頭中會出現: X-Spam-Spammy: remove.php, UD:jpg 指出了最高的兩個垃圾郵件字串:“remove.php” 和 “UD:jpg”。(最後一個冒號後面的是字串,冒號前的標識符表示該字串的一些特性,這裏 UD 的意思是“該字串看起來像是域名的一部分”) compact 列出字串的概率、一個縮寫的保留權重(declassification distance,譯者注:表示在貝葉斯字串庫中何時被刪除,當該值小於1時,該字串被刪除)(參見例子)和字串。例如,在配置文件中加上: add_header all Spammy _SPAMMYTOKENS(2,compact)_ 信頭中會出現: 0.989-6--remove.php, 0.988-+--UD:jpg 分別指出了最高的兩個垃圾郵件字串的概率是 0.989 和 0.988。第一個字串的保留權重的數量是6,意思是這個字串至少在6封沒有被判定爲垃圾郵件的郵件中出現過。第二個字串中的+表示保留權重的數量超過了 9。 long 列出字串的概率、保留權重的數量、出現在正常郵件中的次數、出現在垃圾郵件中的次數和字串的存在時間。 例如,在配置文件中加上: add_header all Spammy _SPAMMYTOKENS(2,long)_ 信頭中會出現: X-Spam-Spammy: 0.989-6--0h-4s--4d--remove.php, 0.988-33--2h-25s--1d--UD:jpg long 比 compact 提供了更多的信息,第一個字串出現在0個正常郵件中(0 ham)和4個垃圾郵件中(4 spam),最後出現是在4天前(4 day);第二個字串出現在兩個正常郵件中(2 ham)和25個垃圾郵件中(25 spam ),最後出現是在1天前(1 day)。(不像 compact ,long 顯示超過9個的保留權重數量而不是顯示一個+。) 本地化 使用 lang xx 開始的行僅在用戶使用該語言時有效,允許在測試規則的描述和模板中使用特定的語言。 本地化字符串可以使用語言和國家來定義,如 lang pt_BR; 或僅使用語言,如 lang de 。 參見 Mail::SpamAssassin spamassassin spamd |
http://hi.baidu.com/shengit/blog/item/53986f4db82298f5d72afcf8.html