Bộ lọc spam đọc được mọi ngôn ngữ và giải thích mọi quyết định.
Spam Scanner phát hiện spam, phishing, lừa đảo và mã độc cho Node.js, dòng lệnh và các máy chủ thư như Postfix, Exim và Haraka. Mỗi kết quả liệt kê các phép kiểm tra đã kích hoạt và lý do.
npm install -g spamscanner
- Node.js 18+
- Milter, spamd, HTTP
- Ollama, Claude, ChatGPT
- Không thu thập dữ liệu sử dụng
$ spamscanner scan message.eml SPAM score 16.3 (spam at 5.0, reject at 15.0) action: reject language: en +6.3 BAYES_999 Classifier spam probability 99.9% +5.0 PHISHING_LOOKALIKE_DOMAIN "paypa1-secure.top" imitates paypal by swapping characters +3.0 DECEPTIVE_LINK A link shows "https://www.paypal.com/signin" but goes to paypa1-secure.top +2.0 FROM_NAME_BRAND Display name says "paypal" but the message is from paypa1-secure.top $ echo $? 1
Cách một thư được đánh giá
Mỗi phép kiểm tra cộng hoặc trừ điểm, và tổng điểm quyết định. Có thể thay đổi ngưỡng và điểm, và không có gì là hộp đen: kết quả nêu tên từng phép kiểm tra.
Đọc
Thư được phân tích và văn bản được chuẩn hóa: chữ cái cách điệu, ký tự vô hình và bảng chữ cái trông giống nhau được hoàn nguyên.
Kiểm tra
Bộ phân loại và các phép kiểm tra liên kết, tệp đính kèm, xác thực, danh sách chặn và quy tắc chạy đồng thời, mỗi phép có một thời gian chờ.
Điểm
Mỗi phép kiểm tra cộng hoặc trừ điểm. Từ 5 điểm, thư là spam; từ 15 điểm, máy chủ thư nên từ chối nó.
Hỏi
Các trường hợp sát nút có thể được chuyển cho một mô hình ngôn ngữ, mô hình này cộng tối đa 6 điểm hoặc trừ tối đa 3 điểm.
- dưới 5chấp nhận
- từ 5 đến 15gắn nhãn spam
- từ 15 trở lêntừ chối
Những gì nó kiểm tra
Từ ngữ chỉ là một tín hiệu. Liên kết, người gửi, tệp đính kèm và xác thực cũng cho biết nhiều như vậy, và không cái nào phụ thuộc vào ngôn ngữ của thư.
Bộ phân loại cho mọi hệ chữ viết
Từ, cặp từ, liên kết, người gửi, HTML và tệp đính kèm, được đếm và kết hợp theo cách của SpamBayes, với kết quả “không chắc” trung thực khi các dấu hiệu mâu thuẫn.
Cách nó quyết địnhMọi ngôn ngữ, một cách cẩn trọng
Tách từ theo Unicode cho tiếng Trung, tiếng Nhật và tiếng Thái, hoàn nguyên các kiểu ngụy trang, và không phạt ngôn ngữ mà mô hình ít thấy thư hợp lệ.
Ngôn ngữPhishing
Tên miền giả mạo dùng chữ Kirin hoặc chữ cái bị tráo, liên kết có văn bản hiển thị một địa chỉ khác, thương hiệu trong tên hiển thị, và DNS resolver chặn mã độc của Cloudflare.
Kiểm tra phishingTệp đính kèm
Tệp thực thi được nhận diện qua các byte của chúng, kể cả khi bị đổi tên thành .pdf; đuôi tệp kép; chương trình trong tệp ZIP; macro Office; PDF chứa nội dung chủ động; ClamAV.
Kiểm tra tệp đính kèmXác thực
SPF, DKIM, DMARC và ARC, danh sách chặn DNS, danh sách cho phép và từ chối, và một quy tắc cho thư giả mạo tên miền của chính bạn.
Xác thựcMô hình ngôn ngữ
Các trường hợp sát nút được chuyển cho một mô hình: Ollama trên máy của bạn, hoặc Claude, ChatGPT, Gemini và mọi máy chủ tương thích OpenAI.
Mô hình ngôn ngữ
Mọi ngôn ngữ, không phỏng đoán
Từ được tách theo quy tắc Unicode, nên các ngôn ngữ viết không có khoảng trắng vẫn hoạt động, và các kiểu ngụy trang được hoàn nguyên trước khi đếm. Đây là các từ mà bộ phân loại đếm, được tính khi trang này được tạo.
Với ngôn ngữ mà mô hình đi kèm ít thấy thư hợp lệ, kết quả là “không chắc” thay vì “spam”, nên thư bình thường bằng tiếng Ả Rập hay tiếng Hàn không bao giờ bị đánh dấu chỉ vì chữ viết của nó. Ngôn ngữ
Claim your fr␣ee prіze: V1agra 𝐅𝐑𝐄𝐄
- claim
- your
- free
- prize
- viagra
- free
Một khoảng trắng độ rộng bằng không, một chữ і Kirin, một chữ số thay cho chữ cái và các chữ in đậm toán học
恭喜您获得一百万元大奖
- 恭喜
- 您
- 获得
- 一
- 百万
- 元
- 大奖
Tách từ bằng từ điển
ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท
- ยินดี
- ด้วย
- คุณ
- ได้
- รับ
- รางวัล
- หนึ่ง
- ล้าน
- บาท
Tách từ bằng từ điển
Поздравляем! Вы выиграли миллион
- поздравляем
- вы
- выиграли
- миллион
Chuyển thành chữ thường theo quy tắc Unicode
Tích hợp vào máy chủ thư của bạn
Một milter cho Postfix và Sendmail, một máy chủ spamd tương thích SpamAssassin cho spamc, Exim và Haraka, một content filter, một HTTP API, một máy chủ TCP và thư viện.
Tất cả đều thêm các header X-Spam-Flag, X-Spam-Score, X-Spam-Status và xóa mọi header mà người gửi giả mạo.
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptMilter kiểm tra thư ngay trong phiên SMTP, nên spam đạt ngưỡng từ chối bị chặn trước khi được chấp nhận. Hướng dẫn Postfix
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1Một máy chủ spamd tương thích SpamAssassin: dừng spamd, khởi động Spam Scanner trên cùng cổng, và các client SpamAssassin vẫn tiếp tục hoạt động. Hướng dẫn spamd
import SpamScanner from 'spamscanner';
const scanner = new SpamScanner({authentication: true});
const result = await scanner.scan(stream, {session});
if (result.action === 'reject') {
// refuse with a 4xx or 5xx reply
}Thư viện, cho smtp-server, plugin Haraka hoặc bất kỳ dịch vụ nào xử lý thư. Tham chiếu API
spamscanner http --port 7832 --token "$TOKEN"
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
--data-binary @message.eml "http://127.0.0.1:7832/scan?ip=203.0.113.5"Cho mọi ngôn ngữ lập trình và mọi máy chủ có thể gửi yêu cầu HTTP. Hướng dẫn HTTP API
Mô hình ngôn ngữ cho các trường hợp sát nút
Spam rõ ràng và thư hợp lệ rõ ràng không bao giờ đến được nó. Khi điểm sát ngưỡng hoặc bộ phân loại không chắc, một mô hình đọc thư và trả lời spam, phishing, scam, malware hoặc ham. Chạy mô hình trên máy của bạn, hoặc dùng một mô hình được lưu trữ, với bất kỳ URL, cổng và cách xác thực nào.
Các chỉ dẫn giấu trong thư nhằm vào bộ lọc AI được chấm điểm là spam, và mô hình được báo rằng thư chỉ là dữ liệu. Các bài kiểm thử đầu cuối kiểm tra điều này với một mô hình thật qua Ollama.
- Ollama
- LM Studio
- llama.cpp server
- vLLM
- LocalAI
- Jan
- OpenAI
- Anthropic (Claude)
- Google Gemini
- Mistral AI
- Groq
- OpenRouter
- DeepSeek
- xAI
- Together AI
- Fireworks AI
- Cerebras
- Hugging Face Inference Providers
- Azure OpenAI
- Cloudflare Clef
- Cloudflare Clef Flash
- TypeSafe Jev
- TypeSafe Jev on OpenRouter
- Any decision model server
ollama pull qwen3.5:4b
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bCó viền: chạy trên máy của bạn. Dữ liệu cá nhân được xóa trước khi thư được gửi đến nhà cung cấp lưu trữ mô hình.
| Ollama | Giấy phép | Kích thước |
|---|---|---|
qwen3.5:0.8b | Apache-2.0 | 1.3 GB |
gemma4:e2b | Apache-2.0 | 4.6 GB |
qwen3.5:4b | Apache-2.0 | 3.3 GB |
qwen3.5:9b | Apache-2.0 | 6.6 GB |
gpt-oss-safeguard:20b | Apache-2.0 | 14 GB |
Các mô hình mở được đề xuất. Tất cả đề xuất
Được đo lường, và có thể huấn luyện
Mô hình đi kèm được huấn luyện trên các bộ dữ liệu công khai và được kiểm tra trên những thư nó chưa thấy. Một mô hình được huấn luyện trên thư của chính bạn cho kết quả tốt hơn: huấn luyện từ tệp mbox, Maildir hoặc bộ dữ liệu, đo lường nó, và dạy nó từ các nút “báo cáo spam”.
| Thư được giữ lại để kiểm tra | Thư | Độ chính xác (precision) | Độ phủ (recall) | Dương tính giả |
|---|---|---|---|---|
| Tiếng Anh | 6.564 | 100,0% | 97,1% | 0,0% |
| Tiếng Nga | 1.682 | 100,0% | 97,4% | 0,0% |
| Tiếng Italy | 1.389 | 98,1% | 85,3% | 1,8% |
| Tiếng Đức | 1.309 | 97,7% | 76,1% | 2,2% |
| Tiếng Tây Ban Nha | 1.281 | 97,5% | 82,6% | 2,6% |
| Tất cả | 13.840 | 99,2% | 85,1% | 0,6% |
Chỉ riêng bộ phân loại, trên mỗi thư thứ mười trong dữ liệu huấn luyện công khai của nó, được giữ lại để kiểm tra. Thư không chắc được tính là bỏ sót. Tiếng Đức, tiếng Ý và tiếng Tây Ban Nha lấy từ các bộ dữ liệu tổng hợp có nhãn nhiễu. Về mô hình đi kèm
Xây dựng cho Forward Email
Forward Email không lưu nhật ký nội dung thư, nên không thể gửi thư cho một dịch vụ lọc bên ngoài. Spam Scanner chạy trên máy chủ của bạn, không gửi gì đi đâu trừ khi được cấu hình, và giải thích mọi quyết định mà không cần ai đọc thư. Forward Email và nâng cấp
Một dự án của Forward Email, dịch vụ email chú trọng quyền riêng tư.
