Tôi gặp một số khó khăn khi thiết lập các spamassassin
quy tắc cá nhân của tôi . Vấn đề của tôi: Tôi nhận được rất nhiều thư rác tiếng Nga với các chữ cái Cyrillic, nhiều trong UTF-8
. Do đó, tìm kiếm một bộ ký tự là không đủ. Vì vậy, tôi muốn tìm kiếm một vài chữ cái tiếng Nga điển hình thay thế (ví dụ) : (д|ж|з|и|й)
.
Tôi đã thử mẫu này /(д|ж|з|и|й)/i
cũng như /(\xd0\xb4|\xd0\xb6|\xd0\xb7|\xd0\xb8|\xd0\xb9)/i
(các mẫu regex này sẽ làm tương tự, phải không?) Trong một Subject
tìm kiếm:
header CYRILLIC_LETTER_PRESENT Subject =~/(д|ж|з|и|й)/i
Kết quả: Thư UTF-8
rác vẫn đến. Tôi đã phân tích các email đi qua. Tất cả đều có cấu trúc tương tự nhau. Nguồn (phần quan trọng của) tìm kiếm một ví dụ thư rác như sau
Subject: =?UTF-8?B?0KLQtdCx0LUg0L/QvtC90YDQsNCy0LjRgtGM0YHRjyEg0J/QvtC60LDQt9GL?= =?UTF-8?B?0LLQsNGOINC+0YLQu9C40YfQvdGL0Lkg0LLQsNGA0LjQsNC90YIg0L/QvtC7?= =?UTF-8?B?0YPRh9C10L3QuNGPINC00L7RhdC+0LTQsCEg0J/RgNC+0YHRgtC+0Lkg0Lgg?= =?UTF-8?B?0YDQtdC30YPQu9GM0YLQsNGC0LjQstC90YvQueKAiyE=?=
MIME-Version: 1.0
Date: Wed, 8 Mar 2017 06:57:11 +0100
From: =?UTF-8?B?0KDQsNC00LjQuSDQn9C40YjRgg==?= <radiypisht140@zarabotokfm8.ru>
Sender: radiypisht140@zarabotokfm8.ru
Message-ID: <904499458.39893@zarabotokfm8.ru>
X-Priority: 3
List-Unsubscribe: <http://ie8qrshyns.zarabotokfm8.ru/uns/tFRyGZzisv/58dhKEk2im53c/DBetz>
Content-Type: multipart/alternative;
boundary="291e4fd846a7aa548d279e9eb1f199e9_1"
--291e4fd846a7aa548d279e9eb1f199e9_1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
....encoded....body....
--291e4fd846a7aa548d279e9eb1f199e9_1
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: base64
....2nd(?)....encoded....body....
--291e4fd846a7aa548d279e9eb1f199e9_1--
Tôi googled và tìm thấy chỉ một loại thông tin hữu ích: http://shallowsky.com/blog/programming/decoding-email-headers.html
Vì vậy, điều này subject
sử dụng RFC2047
: =?UTF-8?B?msg_subject?= =?UTF-8?B?msg_subject2?= [...]
. Dòng này cho chúng tôi biết, việc subject
sử dụng bộ utf-8
ký tự và base64
mã hóa (so sánh http://www.ietf.org/rfc/rfc2047.txt ).
Rõ ràng, spamassassin
không phải là giải mã điều này (đúng). Tôi đã không tìm thấy bất kỳ khả năng để làm việc này. Tôi cũng tìm thấy trang web này: https://dropbear.xyz/2007/08/07/filtering-base64-encoding-spam/
Nhưng điều này không giúp tôi, vì nó chỉ mô tả, làm thế nào để lọc các chuỗi được mã hóa base64, đủ dài. Vì tôi đang tìm kiếm các ký tự đơn, tôi không thể sử dụng phương pháp này.
Tui bỏ lỡ điều gì vậy? Cảm ơn bạn đã giúp đỡ!
chỉnh sửa: Tôi cũng đã thử rawbody
tìm kiếm, vì điều này sẽ giải mã mã hóa base64 như được nêu trong các tài liệu :
rawbody CYRILLIC_LETTER_PRESENT /(д|ж|з|и|й)/i
Nó cũng không hoạt động với tôi, mặc dù nó cũng sẽ tìm kiếm toàn bộ cơ thể, và nó chứa đầy các chữ cái Cyrillic.
edit2: Tôi đã cố gắng điều tra vấn đề hơn nữa. Nếu tôi thử kiểm tra textcat với spamassassin -D textcat -t spamtest
, nó sẽ cho tôi biết rằng nó " can't determine language uniquely enough
".
Hơn nữa, tôi nhận được kết quả sau đây:
X-Spam-Flag: YES
X-Spam-Level: *******
X-Spam-Status: Yes, score=7.3 required=3.0 tests=HTML_FONT_LOW_CONTRAST,
HTML_MESSAGE,LOCAL_CYRILLIC,RDNS_NONE,SPF_SOFTFAIL,T_DKIM_INVALID
autolearn=no autolearn_force=no version=3.4.0
Vì vậy, nó trông giống như nó hoạt động. Mọi thứ đều ổn. Quy tắc của tôi, ở đây được gọi LOCAL_CYRILLIC
, hoạt động như dự định. NHƯNG, vấn đề là, thư này đã đi qua mà không bị nhận ra là thư rác, vì cùng một quy tắc đã có trong tệp cấu hình. Tôi đã cố gắng chuyển tiếp cùng một thư một lần nữa cho tôi và sau đó, nguồn email trông như thế này:
X-Spam-Level: **
X-Spam-Status: No, score=2.7 required=3.0 tests=LOCAL_CYRILLIC,
RCVD_IN_DNSWL_MED autolearn=no autolearn_force=no version=3.4.0
Vì vậy, dường như có một sự khác biệt giữa việc chạy thử nghiệm cục bộ trên một tệp và một email thực sự đến. Tại sao? Tôi luôn luôn khởi động lại spamassassin với systemctl restart spamassassin
. Tôi đã kiểm tra nó systemctl status spamassassin
và mọi thứ đều ổn, spamd
cũng được khởi động lại. Ở đó tôi cũng có thể tìm thấy thông tin sau cho email được chuyển tiếp:
spamd: clean message (2.7/3.0) for spamd:5555 in 6.0 seconds, 8371 bytes.
spamd: result: . 2 - LOCAL_CYRILLIC,RCVD_IN_DNSWL_MED scantime=6.0,size=8371,user=spamd,uid=5555,required_score=3.0,[...]
ok_locales
chỉ tìm kiếm các bộ ký tự khu vực điển hình. Điều này sẽ không giúp tôi, vì các email nằm trong utf-8
= /
ok_languages
là thích hợp hơn. UNWANTED_LANGUAGE_BODY
điểm kiểm tra là 2,8. spamassassin.apache.org/full/3.1.x/doc/
utf-8
bộ ký tự của họ kết hợp với base64
mã hóa.
spamassassin -D textcat -t spam_message_file
ok_locales
? spamassassin.apache.org/full/3.2.x/doc/