Dòng lệnh

Text
spamscanner <command> [options]
LệnhChức năng
scan [file|-]Quét một thư từ tệp hoặc đầu vào chuẩn
filter -f <sender> -- <recipients...>Content filter cho Postfix: quét đầu vào chuẩn, thêm header, chuyển tiếp thư
milterMilter cho Postfix và Sendmail, cổng 7831
httpHTTP API, cổng 7832
serverMáy chủ TCP thuần, cổng 7830
spamdMáy chủ spamd tương thích SpamAssassin, cổng 783
trainHuấn luyện mô hình từ tệp mbox, Maildir, thư mục hoặc bộ dữ liệu
evalĐo lường mô hình trên tập thư có gắn nhãn
learn spam|ham [file|-] --model <file>Dạy mô hình một thư
llm-testKiểm tra thiết lập mô hình ngôn ngữ bằng ba thư mẫu
modelsLiệt kê các mô hình mở được đề xuất
version, help

scan#

Shell
spamscanner scan message.eml
spamscanner scan - < message.eml
spamscanner scan message.eml --json
spamscanner scan message.eml --headers > tagged.eml
spamscanner scan message.eml --subject-tag "[SPAM]" > tagged.eml
Tùy chọnÝ nghĩa
--jsonIn toàn bộ kết quả dưới dạng JSON
--headersIn thư kèm các header X-Spam-* được thêm vào
--subject-tag <tag>Thêm tiền tố vào tiêu đề của spam
--verboseHiển thị mọi phép kiểm tra, và các dấu hiệu mạnh nhất của bộ phân loại
--threshold <n>Điểm mà từ đó thư là spam (mặc định 5)
--reject-threshold <n>Điểm mà từ đó thư bị từ chối (mặc định 15)
--model <file>Một tệp mô hình thay cho mô hình đi kèm
--no-classifierKhông dùng bộ phân loại
--config <file>Một tệp JSON chứa tùy chọn thư viện
--allow-language <codes>Các ngôn ngữ được chấp nhận, ví dụ en,de,fr

Mã thoát: 0 là hamThư mong muốn: ngược lại với spam., 1 là spam, 2 là lỗi.

Phiên SMTP#

Tùy chọnÝ nghĩa
--ip <address>Địa chỉ IP của client đã gửi thư
--hostname <name>Tên DNS ngược đã xác minh của client
--helo <name>Tên mà client đưa ra trong HELO hoặc EHLO
--from <address>Người gửi trong envelope (MAIL FROM)
--to <address>Người nhận trong envelope; lặp lại cho nhiều người nhận

Phép kiểm tra#

Tùy chọnÝ nghĩa
--authKiểm tra SPF, DKIM, DMARC và ARC (cần --ip)
--dnsbl <zone>Danh sách chặn IP, ví dụ zen.spamhaus.org; có thể lặp lại
--uribl <zone>Danh sách chặn tên miền cho liên kết, ví dụ dbl.spamhaus.org; có thể lặp lại
--dns-server <ip>Name server cho các phép kiểm tra DNS; có thể lặp lại
--no-cloudflareKhông hỏi các resolver có lọc của Cloudflare về liên kết
--clamav [socket]Quét tệp đính kèm bằng clamd, qua socket mặc định hoặc socket được chỉ định
--allowlist <value>Luôn chấp nhận địa chỉ IP, tên miền hoặc địa chỉ này; có thể lặp lại
--denylist <value>Luôn từ chối địa chỉ IP, tên miền hoặc địa chỉ này; có thể lặp lại

Mô hình ngôn ngữ#

Tùy chọnÝ nghĩa
--llm <provider>ollama, clef-flash, jev, openai, anthropic và các nhà cung cấp khác (danh sách)
--llm-model <name>Mô hình, ví dụ qwen3.5:4b hoặc claude-haiku-4-5
--llm-method <method>decision (xác suất cho từng kết luận, trong một bước; mặc định khi được hỗ trợ) hoặc generate (phương thức)
--llm-account <id>ID tài khoản Cloudflare, cho clef và clef-flash
--llm-url <url>URL gốc, ví dụ http://10.0.0.5:11434
--llm-host, --llm-port, --llm-path, --llm-protocolThay đổi một phần URL của nhà cung cấp
--llm-api-key <key>Khóa API; xem thêm các biến môi trường bên dưới
--llm-auth <type>bearer, x-api-key, api-key, basic, header hoặc none
--llm-auth-header <name>Header chứa khóa, dùng với --llm-auth header
--llm-username, --llm-passwordDùng cho --llm-auth basic
--llm-header "Name: value"Header bổ sung cho yêu cầu; có thể lặp lại
--llm-mode <mode>auto (chỉ các trường hợp sát nút, mặc định) hoặc always
--llm-timeout <ms>Mặc định 30000
--llm-policy <text>Quy tắc bổ sung cho mô hình, ví dụ “Chúng tôi không bao giờ gửi hóa đơn”
--llm-redact, --no-llm-redactXóa dữ liệu cá nhân trước; mặc định bật với các nhà cung cấp từ xa

filter#

Một content filter cho Postfix. Nó đọc thư từ đầu vào chuẩn, thêm các header X-Spam-* rồi chuyển thư cho sendmail với cùng envelope.

Shell
spamscanner filter -f "$sender" -- "$recipient"
Tùy chọnÝ nghĩa
--sendmail <path>Mặc định /usr/sbin/sendmail
--subject-tag <tag>Thêm tiền tố vào tiêu đề của spam
--rejectTrả lại thư đạt ngưỡng từ chối thay vì chuyển tiếp
--discardBỏ thư đạt ngưỡng từ chối thay vì chuyển tiếp

Mã thoát tuân theo quy ước của sendmail, mà Postfix đọc được: 0 là đã chuyển (hoặc đã bỏ), 64 là không có người nhận, 69 là bị từ chối vì spam (Postfix trả thư về), 75 là mọi lỗi, khi đó Postfix giữ thư và thử lại sau.

milter, http, server và spamd#

Shell
spamscanner milter --port 7831 --reject --subject-tag "[SPAM]"
spamscanner http --port 7832 --token "$SPAMSCANNER_TOKEN"
spamscanner server --port 7830
spamscanner spamd --port 783

Cổng 783 là cổng mà các client SpamAssassin dùng mặc định. Các cổng dưới 1024 cần quyền root hoặc capability CAP_NET_BIND_SERVICE; hãy dùng cổng khác, như --port 7833, và báo cho client biết.

Tùy chọnÝ nghĩa
--port <n>Cổng TCP
--host <ip>Địa chỉ để lắng nghe (mặc định 127.0.0.1)
--socket <path>Lắng nghe trên một Unix socket thay vào đó
--rejectMilter: từ chối thư đạt ngưỡng từ chối
--reject-code <n>Milter: 451, thử lại sau (mặc định), hoặc 550
--quarantineMilter: giữ spam trong khu cách ly của máy chủ thư
--name <hostname>Milter: tên của máy chủ này trong Authentication-Results
--token <secret>HTTP: yêu cầu Authorization: Bearer <secret>; cần cho /learn
--allow-tellspamd: chấp nhận yêu cầu TELL (spamc -L spam) để học
--out <file>HTTP và spamd: lưu những gì đã học vào tệp mô hình này
--subject-tag <tag>Milter và spamd: thêm tiền tố vào tiêu đề của spam
--verboseMilter: ghi nhật ký mọi lần quét. Máy chủ TCP: trả lời bằng một dòng văn bản

Các tùy chọn quét ở trên cũng áp dụng cho các máy chủ. Milter, HTTP API, máy chủ TCP và spamd.

train, eval và learn#

Shell
spamscanner train --spam ~/Mail/Junk --ham ~/Mail/Archive --out my-model.json
spamscanner eval --model my-model.json --spam test/spam.mbox --ham test/ham.mbox
spamscanner learn spam message.eml --model my-model.json
Tùy chọnÝ nghĩa
--spam <path>Spam: một tệp mbox, một Maildir hoặc một thư mục chứa tệp .eml; có thể lặp lại
--ham <path>Ham, tương tự; có thể lặp lại
--dataset <file>Một tệp CSV hoặc JSON Lines có cột văn bản và cột nhãn; có thể lặp lại
--text-column <name>, --label-column <name>Tên cột, khi không được tự động nhận diện
--out <file>Nơi ghi mô hình (mặc định spamscanner-model.json)
--mergeBắt đầu từ mô hình đi kèm (hoặc --model) thay vì một mô hình trống

learn cập nhật trực tiếp tệp mô hình, và tạo tệp từ mô hình đi kèm ở lần đầu. Huấn luyện

llm-test và models#

Shell
spamscanner models
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b

llm-test gửi một thư bình thường và hai thư lừa đảo, bằng tiếng Anh và tiếng Ý, đến mô hình, in ra các kết luận, thời gian của từng thư, phương thức đã dùng và phần cứng, và chỉ thoát với mã 0 nếu cả ba đều đúng.

Tệp cấu hình#

--config file.json (hoặc biến môi trường SPAMSCANNER_CONFIG) nạp các tùy chọn thư viện. Tùy chọn dòng lệnh ghi đè tệp này.

JSON
{
  "threshold": 6,
  "authentication": true,
  "dnsbl": {"ip": ["zen.spamhaus.org"], "domain": ["dbl.spamhaus.org"]},
  "dns": {"servers": ["127.0.0.1"]},
  "clamav": {"socket": "/var/run/clamav/clamd.ctl"},
  "llm": {"provider": "ollama", "model": "qwen3.5:4b"},
  "scores": {"deceptiveLink": 4, "FROM_NAME_BRAND": 3}
}

Biến môi trường#

BiếnÝ nghĩa
SPAMSCANNER_CONFIGTệp cấu hình
SPAMSCANNER_MODELTệp mô hình dùng thay cho mô hình đi kèm
SPAMSCANNER_TOKENToken cho HTTP API
SPAMSCANNER_LLM_API_KEYKhóa API cho mọi nhà cung cấp mô hình ngôn ngữ
CLOUDFLARE_API_TOKEN và CLOUDFLARE_ACCOUNT_ID, TYPESAFE_API_KEY, OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY, OPENROUTER_API_KEY, DEEPSEEK_API_KEY, XAI_API_KEY, TOGETHER_API_KEY, FIREWORKS_API_KEY, CEREBRAS_API_KEY, HF_TOKEN, AZURE_OPENAI_API_KEYKhóa riêng của từng nhà cung cấp
NODE_DEBUG=spamscanner*Ghi nhật ký gỡ lỗi

Sửa trang này trên GitHub · Markdown ·