Cơ bản về SpamAssassin

Một phần của tài liệu Nghiên cứu và thiết kế hệ thống lọc thư rác tiếng việt trên linux (Trang 53)

1. Hệ thống lọc thư rác của SpamAssassin

1.1. Cơ bản về SpamAssassin

1.1.1. Giới thiệu.

SpamAssassin là mơ đun lọc thư rác mã nguồn mở được dùng khá rộng rãi trên thế giới. SpamAssassin được xây dựng bởi Apache (http://spamassassin.apache.org), sản phẩm này đã được ứng dụng hơn năm năm và được liên tục cập nhật phát triển bởi cộng đồng mã nguồn mở.

SpamAssassin là mơ đun mã nguồn mở viết bằng Perl và C/C++ được rất linh động, cĩ thể tích hợp vào hệ thống khác nhau. Hiện tại, SpamAssassin đã tích hợp thành cơng với các máy chủ thư điện tử như SendMail, Qmail, Poffix, Exim,… Ngồi ra, SpamAssassin đã cĩ thể chạy trên Windows trên nền Perl. Vì vậy khả năng ứng ụng của SpamAssassin là rất lớn.

Mặt khác, SpamAssassin cịn được hộ trợ bởi nhiều tổ chức và người dùng trên tồn thế giới. Cụ thể, ngồi tiếng Anh, SpamAssassin cịn được phát triển các bộ luật cho nhiều ngơn ngữ ở các quốc gia khác nhau.Cụ thể là :

• Tiếng Pháp (http://maxime.ritter.eu.org/Spam/french_rules.cf), • TiếngĐức (http://zmi.at/x/70_zmi_german.cf),

• Tiếng Trung, (http://www.ccert.edu.cn/spam/sa/Chinese_rules.cf) và tiếng Nhật, Brazin. Các tập luật cho nhiều lĩnh vực khác nhau như chống qu ảng cáo thuốc, chống các thư lừa đảo, các thư phát tán Vi-rút. Bạn cĩ thể xem chi tiết ở (http://wiki.apache.org/spamassassin/CustomRulesets)

SpamAssassin lọc thư rác dựa trên các phương pháp hiệu quả hiện nay, đĩ là dùng Blacklist/ Whitelist, hệ thống phân loại Bayesian, các danh sách tự động, và tập luật cấu hình của người dùng. Trong đĩ, lọc Bayesian là phương pháp hiệu quả và cĩ khả năng áp dụng được cho các hệ thống lọc thư rác của các ngơn ngữ khác nhau trên thế giới.

1.1.2. Các thành phần chính

Trong [4] đưa ra khá cụ thể các cơ sở và nâng cao về SpamAssassin. Ở đây chúng ta sẽ xem xét SpamAssassin dưới các khía cạnh phục vụ cho sinh luật lọc thư rác cho thư Tiếng Việt. Chúng ta cĩ thể truy cập các tài nguyên của SpamAssassin ở các địa chỉ sau:

SpamAssassin :

• Tài liệu, mã nguồn và các hộ trợ http://SpamAssassin.apache.org

Perl:

• Dùng CPANhttp://www.cpan.org.

• Cài thủ cơng. phải cập nhật các Module:

ExtUtils::MakeMaker, File::Spec, Pod::Usage, HTML::Parser, Sys::Syslog, DB_File, Digest::SHA1, và Net::DNS.

Nếu dùng spamd và Spamc thì phải cĩ Net::Ident và IO::Socket::SSL

• checksum-based ( 256 bits)

• SpamAssassin 3.0 cĩ thể sử dụng:

Vipul's Razor (http://razor.sourceforge.net) Pyzor (http://pyzor.sourceforge.net)

• DCC (http://www.rhyolite.com/anti-spam/dcc/). Khi cài đặt SpamAssassin chúng ta sẽ cĩ các thành phần:

Các mơ đun viết bằng Perl

Các hàm chính của SpamAssassin nằm trong các mơ đun viết bằng Perl. Phần quan trọng nhất là Mail::SpamAssassin, là mơ đun mức cao nhất gọi đến các mơ đun khác, và mơ đun Mail::SpamAssassin::Conf chứa các tài liệu của các tệp cấu hình cho SpamAssassin. Các mơ đun trên thường được cài trong thư mục như /usr/lib/perl5/site_perl/5.8.1, nhưng bạn khơng cần biết vị trí của chúng, perl sẽ đảm bảo là chúng cài vào thư mục mà Perl sẽ tìm kiếm khi cần đến.

SpamAssassin 3.0 giới thiệu một sự khác biệt giữa các mơ đun chính của SpamAssassin và các mơ đun plug-ins được viết bởi các hãng khác. Tên của các mơ dun đĩ được đặt phân cấp theo Mail::SpamAssassin::Plugin (Ví dụ Mail::SpamAssassin::Plugin::URIDNSBL).

Tập luật

Tập luật mà SpamAssassin sử dụng để quyết định xem một thơng điệp cĩ phải là thư rác khơng được giữ trong các tệp cấu hình trong thu mục /usr/share/spamassassin. Bạn cĩ thể tìm thấy vị trí của các tệp này bằng lệnh :

spamassassin --local --debug và cĩ thể đổi thư mục được • Tệp cấu hình chung

Các tệp cấu hình chung điều khiển các hành vi mặc định của spamassassin (và spamd) khi khơng cĩ các cài đặt trên từng người dùng. Tệp đĩ là local.cf và được cài trong /etc/mail/spamassassin. Các ứng dụng khác sử dụng mơ đun Mail::SpamAssassin cũng thường đặt tệp cấu hình chung trong thư mục này.

Bạn cĩ thể tìm thấy vị trí của các tệp này bằng lệnh : spamassassin --local --debug

và cĩ thể đổi thư mục được • Spamassassin

Chương trình SpamAssassin viết bằng Perl chấp nhận các thư dưới dạng chuẩn đầu vào, áp dụng hàm của Mail::SpamAssassin, trả về thư là chuẩn đầu ra cùng với điểm spam, các báo cáo, các chỉnh sửa khi phê chuẩn. Nĩ cĩ một số hàm khác mơ tả trong phần sau. SpamAssassin thường được cài trong thư mục /usr/bin.

spamd và spamc

Trong hệ thống nhận một số lương lớn thư, chạy một đoạn mã SpamAssassin cho mỗi thư là rất tốn kém. Do đĩ, chúng ta sẽ chạy một dịch vụ (daemon), khởi động lúc khởi động hệ thống, thường trực trong bộ nhớ và thực hiện kiểm tra thư. Nĩ lắng nghe trên cả Socket Unix lẫn cổng TCP để nhận các yêu cầu kiểm tra thư, thực hiện kiểm tra thư và trả về kết quả cho các yêu cầu.

Spamc là chương trình client cho hệ thống chạy Spamd. Nĩ chấp nhận các thư là chuẩn đầu vào, chuyển cho spamd, và trả về dưới dạng chuẩn đầu ra.

Giống như spamassassin, nĩ thực hiện với từng bức thư nhưng nĩ được viết dưới C và được biên dịch, do đĩ tránh được phải chạy thơng qua Perl. Nĩ cung cấp các hàm cần thiết của spamassassin.

spamc và spamd thường được cài trong /usr/bin.. • sa-learn

Thành phần được sử dụng để huấn luyện hệ thống phân loại thư rác dựa trên lý thuyết Bayesian. Nĩ dạy hệ thống cách phân biệt một thư là một thư rác hay là thư sạch.

1.1.3. Cấu hình cơ bản

Tệp cấu hình:

/etc/mail/spamassassin/local.cf

Dịng chú thích bắt đầu bằng # dịng cấu hình bắt đầu bằng từ khĩa, ví dụ skip_rbl_checks

Các từ khĩa là:

required_hits (SpamAssassin 2.63) hay required_score (SpamAssassin 3.0)

Khi xét mỗi luật của SpamAssassin cho thư, thì tổng điểm của thư đĩ sẽ được cộng hoặc trừ tùy thuộc vào luật đĩ cĩ đúng hay khơng. Khi tổng điểm vượt quá giá trị required_hits thì thư được co là thư rác. Giá trị mặc định là 5, nĩ khá phù hợp với các cài đặt thơng thường.

report_safe

Tham số này xác định cách SpamAssassin xử lý với thư nếu thư được xác định là thư rác. Cho dù tham số này cĩ được đặt hay khơng thì SpamAssassin thêm vào Header của thư các thơng tin:

o X-Spam-Level: Số dấu * biểu diễn cho điểm của bức thư.

o X-Spam-Status: Dịng mơ tả điểm của thư và các luật kiểm tra thư rác thỏa mãn

o X-Spam-Flag : Giá trị Yes.

Khi report_safe được đặt bằng 0, thân của thư sẽ được giữ nguyên, cịn Header được thêm phần X-Spam-Report được thêm với các mơ tả chi tiết của các luật thỏa mãn

Cịn khi report_safe đặt bằng 1, một thư MIME (Multipurpose Internet Mail Extension) được tạo ra với các thơng tin báo cáo được thêm vào như là một phần đính kèm vào thư gốc với content-type là message/rfc822.

Khi report_safe được đặt bằng 2, là tương tự như trường hợp bằng 1 nhưng với content-type là text/plain.

rewrite_subject ( chỉ cĩ ở SpamAssassin 2.x )

Nếu tham số này được đặt bằng, SpamAssassin sẽ thêm "*****SPAM*****" vào trước tiêu đề nếu thư được xem là thư rác. Nĩ sẽ thuận tiện khi người dùng cĩ các chương trình mail clients mà chỉ kiểm tra các thơng tin Header chuẩn.

rewrite_header ( chỉ cĩ ở SpamAssassin 3.0 )

Tham số này được sử dụng để xác định xem cĩ thể ghi lại thơng tin Subject, From, và To trong Header khi thư được xem là thư rác. Ví dụ:

rewrite_header subject *****SPAM*****

thì chuỗi *****SPAM***** sẽ được thêm vào đầu Subject, From, To nếu là thư rác

skip_rbl_checks

SpamAssassin thường kiểm tra địa chỉ IP của người gửi trong các blacklist (Domain Name System (DNS)-based real-time blacklists -DNSBLs or RBLs) để xác định xem nĩ cĩ được liệt trong các danh sách các nguồn thư rác các proxy mở các relay, các host dial-up…. Rất nhiều ISP thực hiện các kiểm tra ở ngay MTA của nĩ để từ chối ngay các kết nối từ các danh sách trên. Nếu bạn làm như vậy, bạn cĩ thể tránh cho SpamAssassin phải kiểm tra và đặt nĩ về 1, mặc định sẽ là 0- tức SpamAssassin cĩ kiểm tra.

1.1.4. Tích hợp SpamAssassin với Procmail

Chúng ta thực hiện SpamAssassin với Procmail, một MDA rất tốt và thơng dụng trong hệ thống Unix.

Hình 15. Tích hợp SpamAssassin vào Procmail

Cách đơn giản nhất là gọi SpamAssassin từ tệp cấu hình của Procmail Thơng thường là tệp: /etc/procmailrc

Ví dụ: Một tệp : /etc/procmailrc đầy đủ: DROPPRIVS=yes PATH=/bin:/usr/bin:/usr/local/bin SHELL=/bin/sh # Spamassassin : 0fw * <300000 |/usr/bin/spamassassin

Lời gọi SpamAssassin được thực hiện bằng 3 dịng sau chú thích # Spamassassin. Cụ thể:

• :0fw → thư phải được lọc (f- filter)- và Procmail phải đợi (w- wait) cho đến khi SpamAssassin kiểm tra xong và cho đầu ra.

• * <300000→ độ lớn của thư khơng quá 300000 byte

• |/usr/bin/spamassassin →dịng này hướng dẫn Procmail phải xếp các thư cho SpamAssassin xử lý

Bạn cĩ thể cấu hình SpamAssassin cho Procmail của từng người dùng, thường là tệp: ~/.procmailrc

1.2. Luật sử dụng trong SpamAssassin 1.2.1. Biểu thức chính quy 1.2.1. Biểu thức chính quy

Regular Expression là một cơng cụ rất hữu hiệu trong lập trình dùng để xử lý các chuỗi hay văn bản. Hầu hết các ngơn ngữ lập trình đều hỗ trợ nĩ, đặc biệt Perl, một ngơn ngữ rất mạnh trong việc xử lý chuỗi và văn bản. Chúng ta sẽ bàn đến các quy tắc và cơng dụng của Regular Expression trong Perl và áp dụng cho việc xây dựng và kiểm tra luật của SpamAssassin.

1.2.2. Cấu trúc luật của SpamAssassin

Hầu hết các luật hay cịn gọi là các test của SpamAssassin thường cĩ những thành phần cơ bản sau:

• Tên luật, cấu thành bởi chữ cái hoa, số, gạch dưới. Độ dài tối đa là 22 ký tự. Luật bắt đầu bằng T_ là ký hiệu luật đang được thử nghiệm

• Dịng mơ tả, chứa tới 50 ký tự dùng để SpamAssassin báo cáo.

• Một từ khĩa xác định vị trí của bức thư được kiểm tra. Cĩ thể áp dụng cho header,body, URI trong thân thư. Khi thử luật với thân thư, cĩ thể thực hiện kiểm tra ở trạng thái thơ (chưa tiền xử lý thân thư), sau khi MIME-decoding, sau khi MIME-decoding và loại thẻ HTML, sau khi loại bỏ các ký tự trắng, xuống dịng vơ nghĩa.

• Một dịng mơ tả dấu hiệu cần phải tìm kiếm. Chẳng hạn như một thơng tin Header, một Regular expression của perl, một Blacklist để truy vấn, hay một hàm của SpamAssassin cần tính

• Một cờ xác định xem luật cĩ được áp dụng hay khơng

• Giá trị điểm của luật. Cĩ một giá trị này cĩ thể luơn được sử dụng hoặc cĩ 4 giá trị dùng trong 4 trường hợp khác nhau:

o Khi phân loại Bayesian và kiểm tra mạng khơng được sử dụng

o Khi phân loại Bayesian khơng được sử dụng cịn kiểm tra mạng được sử dụng

o Khi phân loại Bayesian được sử dụng cịn kiểm tra mạng khơng được sử dụng

o Khi phân loại Bayesian và kiểm tra mạng đều được sử dụng

Các tệp chứa tập luật thường được đặt trong /usr/share/spamassassin và cĩ đuơi là .cf. Chúng ta sẽ xem xét một vài luật điển hình

Luật kiểm tra xem From cĩ bắt đầu bằng hai chữ số hay khơng:

header FROM_STARTS_WITH_NUMS From =~ /^\d\d/

1.2.3. Quy tắc tạo các luật.

Đối với hệ thống sinh luật của chúng ta thường là kiểm tra sự xuất hiện của một từ khĩa, chúng ta dùng regular expression cĩ dạng /^\s*Dear Friend\b/i.

Ví dụ:

body DEAR_FRIEND /^\s*Dear Friend\b/i describe DEAR_FRIEND Dear Friend? That's not very dear!

score DEAR_FRIEND 0.542

Cụ thể :

Ví dụ trên là một ví dụ điển hình cho một luật của SpamAssassin, cụ thể luật này áp dụng cho body của các bức thư. Nĩ gồm 3 phần :

• body :là phần chỉ ra tên và regular expression áp dụng cho thư. Ở trường hợp trên cĩ tên là DEAR_FRIEND với biểu thức là “/^\s*Dear Friend\b/i”

• describe: Là phần chỉ ra tên và mơ tả của luật. Ở ví dụ trên mơ tả cĩ tên là DEAR_FRIEND và mơ tả của luật là Dear Friend? That's not very dear! • score: là từ khĩa chỉ ra tên luật và điểm của luật được theo sau ngay nĩ.

Các bộ phận và các chỉ thị tương ứng trong luật: Bảng 2. Các bộ phận của thư và các chỉ thị. Bộ phận Chỉ thị Các kiểm tra cĩ thể thực hiện Headers header TESTNAME Thỏa mãn một regexp Khơng thỏa mãn một regexp

Tồn tại hay khơng

Đánh giá băng mã lệnh của Perl

Kiểm tra thơng tin Received

trong header bằng DNSBL Tiêu đề thư và phần text của thư, đã

giải mã tất cả các phần MIME, lột các thẻ HTML và loại ký tự xuống dịng body TESTNAME Thỏa mãn một regexp Đánh giá băng mã lệnh của Perl

Phần text của nội dung thư, giải mã tất cả các phần MIME, vẫn giữ nguyên thẻ HTML và ký hiệu xuống dịng

rawbody TESTNAME

Thỏa mãn một regexp Đánh giá băng mã lệnh của Perl

Tồn bộ thân của thư, chưa giải mã các phần MIME

full

TESTNAME

Thỏa mãn một regexp Đánh giá băng mã lệnh của Perl

Các URI trong thân thư uri

TESTNAME Thỏa mãn một regexp Các URI trong thân thư uridnsbl

TESTNAME

Kiểm tra địa chỉ qua DNS- based blacklist( SpamAssassin 3.0)

Chúng ta cĩ bảng các cờ và ý nghĩa của các cờ:

Bảng 3. Các cờ trong luật của SpamAssassin. Cờ Ý nghĩa

net Luật dựa trên mạng sẽ khơng được chạy nếu SpamAssassin được cấu hình chỉ chạy các luật cục bộ

learn Luật cần được huấn luyện trước khi dùng

userconf Luật cần được người dùng cấu hình trước khi sử dụng nice Luật sẽ cho điểm âm

noautolearn (Spamassassin 3.0) Luật sẽ khơng được áp dụng cho điểm của thư rác khi xác định thư được học tự động như là một thư rác hoặc thư sạch Ví dụ : TA chọn luật RCVD_IN_BL_SPAMCOP_NET t, kiểm tra thơng tin Received trong header của thư qua DNS-based blacklist tại bl.spamcop.net được viết

header RCVD_IN_BL_SPAMCOP_NET eval:check_rbl_txt('spamcop', 'bl.spamcop.net.')

describe RCVD_IN_BL_SPAMCOP_NET Received via a relay in bl.spamcop.net

tflags RCVD_IN_BL_SPAMCOP_NET net

Cuối cùng, sau khi thêm vào các luật,bạn nên chạy lệnh spamassassin –lint để kiểm tra chính tả của tập luật. Lệnh này cố gắng phân tích các luật trong tập cấu hình và tập luật. Nếu cĩ lỗi thì sẽ được báo cụ thể từng dịng.

1.2.4. Các tập luật xây dựng sẵn của SpamAssassin

SpamAssassin xây dựng hơn 700 luật cho ngơn ngữ tiếng Anh và hơn 2900 luật cho các ngơn ngữ khác. Hiện tại ngơn ngữ được SpamAssassin 3.0 hộ trợ là tiếng Pháp và tiếng Đức. Việc nghiên cứu các tập luật này cĩ ý nghĩa quan trọng trong chiến lược xây dựng và huấn luyện tạo ra bộ luật áp dụng cho các thư rác vi ết trong ngơn ngữ của quốc gia bạn.Các luật trong SpamAssassin được lưu giữ ở thư mục /usr/share/spamassassin bao gồm:

10_misc.cf

Tập luật 10_misc.cf định nghĩa các mẫu cho các báo cáo thư rác mà SpamAssassin đính kèm cào các thư rác.

10_plugins.cf (SpamAssassin 3.0)

Tập cấu hình này cung cấp một số chỗ thuận tiện để nạp các mơ đun thêm vào của SpamAssassin với chỉ thị loadplugin.

20_fake_helo_tests.cf

Tập cấu hình này xác định một tập luật để kiểm tra các HELO hostname giả mạo.

20_body_tests.cf

Tập luật để kiểm tra thân của thư, spam clearinghouses, ngơn ngữ của thư và vị trí địa lý của thư.

20_dnsbl_tests.cf

Tâp luật này thực hiện kiểm tra các DNS blacklists, sử dụng các hàm check_rbl( ), check_rbl_sub( ), và check_rbl_txt( ). Các blacklist này gồm cĩ các địa chỉ chính: ▪ NJABL (http://www.dnsbl.njabl.org/) ▪ SORBS (http://www.dnsbl.sorbs.net/) ▪ OPM (http://opm.blitzed.org/) ▪ Spamhaus (http://www.spamhaus.org/sbl/) ▪ DSBL (http://dsbl.org) ▪ Spamcop (http://www.spamcop.net/bl.shtml) ▪ MAPS (http://www.mail-abuse.org)

20_ratware.cf and 20_anti_ratware.cf

Tập luật 20_ratware.cf kiểm tra các dấu hiệu đặc biệt của các thư được sử dụng bởi các chương trình gửi thư hàng loạt ( gọi là ratware or spamware). Hầu hết, chúng ta kiểm tra các thơng tin của header và phải biết được đặc điểm riêng của các phần mềm gửi thư đĩ

20_head_tests.cf

Tập luật kiểm tra các thơng tin trong header, bao gồm kiểm tra các danh sách địa chỉ đen và địa chỉ trắng trong thơng tin From and To

20_porn.cf (cho tất cả các phiên bản của SpamAssassin ) và 20_drugs.cf (SpamAssassin 3.0)

Tập luật chứa các luật kiểm tra các dấu hiệu của các thư khiêu dâm, văn hĩa phẩm độc hại, thư phản động, thư quảng cáo thuốc,.. trong nội dung thư. Ngơn ngữ của thư là tiếng Anh.

20_phrases.cf

Tập luật này chứa các cụm từ thơng thường của thư rác trong tiếng Anh. Hầu hết chúng hướng dẫn bạn cách rút khỏi các mailing list hoặc hướng dẫn bạn chỉnh lại hoặc cấu hình lại các luật cho hộp thư của mình

Tập luật kiểm tra các dấu hiệu trong URI trong nội dung thư.

20_compensate.cf

Tập luật tạo ra nhằm mục đích bù cho các luật sai trong khi kiểm tra header và luật với cờ nice (điểm âm).

Một phần của tài liệu Nghiên cứu và thiết kế hệ thống lọc thư rác tiếng việt trên linux (Trang 53)

Tải bản đầy đủ (PDF)

(80 trang)