QTM - Trong bài viết sau, Quản Trị Mạng sẽ giới thiệu với các bạn cách thức quét email để phát hiện ảnh spam với công cụ FuzzyOCR trên Fedora 12 server.
FuzzyOCR là 1 plugin dành cho SpamAssassin, được trang bị để nhằm vào số lượng lớn thư rác có chứa ảnh nội dung (không phải hoặc ít nội dung dưới dạng text). Sử dụng phương pháp phân tích tiên tiến, chương trình tự động thu thập nội dung, thuộc tính của hình ảnh để phân biệt giữa 2 loại thư bình thường và thư rác. FuzzyOCR sẽ cố gắng sử dụng ít tài nguyên hệ thống ở mức có thể bằng cách scan những email không được phân loại bằng SpamAssassin, qua đó tránh được những việc làm không cần thiết.
1. Lưu ý sơ bộ
Hệ thống sử dụng ở đây là Fedora 12. Giả sử rằng SpamAssassin đã cài đặt và hoạt động ổn định với /etc/mail/spamassassin/ là thư mục thiết lập mặc định. Nếu thư mục của bạn có khác biệt (chẳng hạn có cài đặt ISPConfig 2 thì thư mục đó sẽ là /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/), hoàn toàn không có vấn đề gì cả.
2. Cài đặt thành phần cần thiết của FuzzyOCR
FuzzyOCR có yêu cầu 1 số thành phần như ocrad và gocr, do đó ta phải cài đặt trước:
yum install netpbm gifsicle giflib giflib-utils gocr ocrad ImageMagick tesseract perl-String-Approx perl-MLDBM perl-CPAN
Bên cạnh đó, chúng ta cũng phải cài đặt module MLDBM::Sync của Perl, nhưng lại không có sẵn như gói RPM thông thường. Mở Perl shell…:
perl -MCPAN -e shell
Và cài đặt theo câu lệnh sau:
install MLDBM::Sync
Sau đó gõ q để thoát khỏi Perl shell.
3. Cài đặt FuzzyOCR
Tiếp theo chúng ta cần tải và cài đặt FuzzyOCR tại đây. Lưu ý rằng nên chọn bản mới nhất ổn định theo khuyến cáo từ các nhà phát triển FuzzyOCR:
Khuyến cáo hiện nay dành cho phiên bản phát triển bởi vì bản ổn định thiếu khá nhiều chức năng.
cd /usr/src/
wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz
Sau đó giải nén gói FuzzyOCR, đồng thời di chuyển toàn bộ file FuzzyOcr* và thư mục FuzzyOcr (vốn ở trong thư mục FuzzyOcr-3.5.1/) tới /etc/mail/spamassassin:
tar xvfz fuzzyocr-3.5.1-devel.tar.gz
cd FuzzyOcr-3.5.1/
mv FuzzyOcr* /etc/mail/spamassassin/
Nếu thư mục SpamAssassin khác biệt (ví dụ /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/) thì phải thay thế dòng lệnh cuối cùng bên trên bằng:
mv FuzzyOcr* /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/
Đừng vội xóa thư mục /usr/src/FuzzyOcr-3.5.1/ vì trong đó có chứa thư rác mẫu để kiểm tra liệu FuzzyOCR có hoạt động hay không. Việc tiếp theo là thiết lập và tùy chỉnh FuzzyOCR.
4. Thiết lập FuzzyOCR
File tùy chỉnh này nằm ở thư mục /etc/mail/spamassassin/FuzzyOcr.cf. Mở file đó và chỉnh 1 số chi tiết sau:
vi /etc/mail/spamassassin/FuzzyOcr.cf
Đặt dòng sau vào vị trí xác định từ ngữ nhận dạng spam của FuzzyOCR:
[...]
focr_global_wordlist /etc/mail/spamassassin/FuzzyOcr.words
[...]
/etc/mail/spamassassin/FuzzyOcr.words thực chất là danh sách từ đã được định nghĩa trước đi kèm với FuzzyOCR. Các bạn có thể chỉnh sửa file này nếu muốn.
Thay đổi tiếp theo:
[...]
# Include additional scanner/preprocessor commands here:
#
focr_bin_helper pnmnorm, pnminvert, pamthreshold, ppmtopgm, pamtopnm
focr_bin_helper tesseract
[...]
thành:
[...]
# Include additional scanner/preprocessor commands here:
#
focr_bin_helper pnmnorm, pnminvert, convert, ppmtopgm, tesseract
[...]
Cuối cùng thêm tiếp dòng lệnh sau:
[...]
# Search path for locating helper applications
focr_path_bin /usr/local/netpbm/bin:/usr/local/bin:/usr/bin
focr_preprocessor_file /etc/mail/spamassassin/FuzzyOcr.preps
focr_scanset_file /etc/mail/spamassassin/FuzzyOcr.scansets
focr_enable_image_hashing 2
focr_digest_db /etc/mail/spamassassin/FuzzyOcr.hashdb
focr_db_hash /etc/mail/spamassassin/FuzzyOcr.db
focr_db_safe /etc/mail/spamassassin/FuzzyOcr.safe.db
[...]
Với 4 dòng mã cuối chúng ta có thể kích hoạt cơ chế ảnh hash. Và đây là những gì nhà phát triển FuzzyOCR nói về cơ chế này:
Cơ sở dữ liệu của cơ chế ảnh hash cho phép các plugin lưu trữ vector của ảnh tới cơ sở dữ liệu, vì vậy dễ dàng nhận ra khi những bức ảnh này khi nó đến lần thứ 2 (do vậy không cần phải tiến hành scan lại). Điểm đặc biệt trong chức năng này là cũng vẫn có thể nhận dạng được những bức ảnh tương tự, hoặc đã được chỉnh sửa chút ít (được làm bởi những kẻ spam).
Nếu bạn dùng /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin thay vì /etc/mail/spamassassin, file thiết lập của FuzzyOCR là /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/FuzzyOcr.cf thay vì /etc/mail/spamassassin/FuzzyOcr.cf, hãy chỉnh lại file này. Trong file tùy chỉnh, bạn sẽ phải thay thế tất cả /etc/mail/spamassassin với /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin, hoặc bỏ lại như dưới đây trước khi tạo 1 symlink từ /etc/mail/spamassassin thành /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin như sau:
mkdir /etc/mail/
ln -s /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/ /etc/mail/spamassassin
Vậy là đã kết thúc bước thiết lập và tùy chỉnh FuzzyOCR. Tiếp theo hãy chờ xem liệu có hoạt động như mong đợi hay không.
5. Kiểm tra FuzzyOCR
Ở phía trên, chúng ta đã đề cập rằng FuzzyOCR đi kèm với mẫu thư ảnh spam (trong thư mục samples/):
ls -l /usr/src/FuzzyOcr-3.5.1/samples/
Và kết quả thu được sẽ có dạng như sau:
total 156
-rw-r--r-- 1 1000 users 13633 2007-01-07 12:55 ocr-animated.eml
-rw-r--r-- 1 1000 users 16108 2007-01-07 12:55 ocr-gif.eml
-rw-r--r-- 1 1000 users 27506 2007-01-07 12:55 ocr-jpg.eml
-rw-r--r-- 1 1000 users 27842 2007-01-07 12:59 ocr-multi.eml
-rw-r--r-- 1 1000 users 24657 2007-01-07 12:55 ocr-obfuscated.eml
-rw-r--r-- 1 1000 users 18236 2007-01-07 12:55 ocr-png.eml
-rw-r--r-- 1 1000 users 16113 2007-01-07 12:55 ocr-wrongext.eml
-rw-r--r-- 1 1000 users 3576 2007-01-07 12:55 README
Chúng ta có thể feed mỗi email tới SpamAssassin để thấy rằng nếu FuzzyOCR liên kết đúng tới SpamAssassin. Tìm xem file thực thi spamassassin ở đâu (trong đường dẫn đầy đủ) bằng cách chạy lệnh sau:
which spamassassin
Nếu có hiển thị kết quả, spamassassin có ở trong PATH và bạn không cần phải chỉ định đường dẫn đầy đủ tới spamassassin để chạy ứng dụng.
Nếu bạn không biết spamassassin ở đâu, có thể tìm ra bằng cách chạy lệnh sau:
updatedb
locate spamassassin
Nếu bạn đang sử dụng ISPConfig 2 thì spamassassin ở đây: /home/admispconfig/ispconfig/tools/spamassassin/usr/bin/spamassassin. Bây giờ bạn đã biết spamassassin ở đâu, thì có thể feed ảnh spam mẫu tới spamassassin như sau:
/path/to/spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null
Ví dụ:
/home/admispconfig/ispconfig/tools/spamassassin/usr/bin/spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null
Hoặc nếu spamassassin có ở trong PATH của bạn:
spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null
Và sẽ thấy rất nhiều kết quả hiển thị, đoạn cuối sẽ trông như thế này:
[...]
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: Friday Augurt 4, 4:01 pm ET
[10025] dbg: FuzzyOcr: LAS VEGAS, NEVADA--(MARKET WIRE)--Aug 4, 2006 -- auantum Energy, lnc. (OTC
[10025] dbg: FuzzyOcr: BB:aEGY.oB-_-
[10025] dbg: FuzzyOcr: auantum Energy, lnc. is pleased to announce that it has applied to have its shares listed for
[10025] dbg: FuzzyOcr: trading on the Frankfurt Stock Exchange. The company has retained the services ofBaltic
[10025] dbg: FuzzyOcr: lnvestment Group of Hamburg, Germany to assist with the application.
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: _ qEGY,OB "
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: <<=end
[10025] info: FuzzyOcr: Scanset "ocrad" found word "target" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "short term price target oo"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "service" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "stock" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "hot energy stocki"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "stock" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "price" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "current price o"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "price" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "short term price target oo"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "company" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "recommendation" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "sboog bup recommendation"
[10025] dbg: FuzzyOcr: Enough OCR Hits without space stripping, skipping second matching pass...
[10025] info: FuzzyOcr: Scanset "ocrad" generates enough hits (8), skipping further scansets...
[10025] info: FuzzyOcr: Message is spam, score = 15.000
[10025] info: FuzzyOcr: Adding Hash to "/etc/mail/spamassassin/FuzzyOcr.db" with score "15.000"
[10025] dbg: FuzzyOcr: Digest: 538584:327:549:7::255:255:255:255:168580::0:0:0:0:9098::0:128:0:75:1086::0:0:128:15:395::128:0:128:53:213::0:0:255:29:115
[10025] info: FuzzyOcr: Words found:
[10025] info: FuzzyOcr: "target" in 1 lines
[10025] info: FuzzyOcr: "service" in 1 lines
[10025] info: FuzzyOcr: "stock" in 2 lines
[10025] info: FuzzyOcr: "price" in 2 lines
[10025] info: FuzzyOcr: "company" in 1 lines
[10025] info: FuzzyOcr: "recommendation" in 1 lines
[10025] info: FuzzyOcr: (12 word occurrences found)
[10025] dbg: FuzzyOcr: Remove DIR: /tmp/.spamassassin10025QnPTq8tmp
[10025] dbg: FuzzyOcr: FuzzyOcr ending successfully...
[10025] dbg: FuzzyOcr: Processed in 2.191381 sec.
Bạn có thể thấy /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml đã được phân loại spam với số điểm 15, có nghĩa là FuzzyOCR đã hoạt động.
Chúc các bạn thành công!
Các đường dẫn tham khảo: FuzzyOCR, SpamAssassin và Fedora.