# ตัวกรองสแปมโฮสต์เอง

Spam Scanner ทำงานบนเซิร์ฟเวอร์ของคุณเองและเก็บอีเมลไว้ที่นั่น โมเดลของตัวจำแนกอยู่ในแพ็กเกจ ไม่มีการส่งข้อมูลการใช้งานหรือการตรวจอัปเดต และโดยค่าเริ่มต้นสิ่งเดียวที่ส่งออกไปคือการสอบถาม DNS ชื่อโฮสต์ของแต่ละลิงก์


## สิ่งที่ออกจากเซิร์ฟเวอร์

โดยค่าเริ่มต้น มีเพียงชื่อโฮสต์ของลิงก์ในข้อความ ซึ่งจะถูกค้นหาบนตัวแปลงชื่อแบบกรองของ Cloudflare (1.1.1.2 และ 1.1.1.3) ด้วยการสอบถาม DNS ตามปกติ และไม่มีส่วนใดของข้อความหรือที่อยู่ถูกส่งออกไป `--no-cloudflare` ปิดส่วนนี้ได้ด้วย

การตรวจอื่นทั้งหมดที่ใช้เครือข่ายจะปิดอยู่จนกว่าคุณจะเปิด:

| การตรวจ               | เปิดด้วย             | สิ่งที่ส่ง                                                |
| --------------------- | -------------------- | --------------------------------------------------------- |
| SPF, DKIM, DMARC, ARC | `--auth`             | การสอบถาม DNS หาระเบียนของผู้ส่ง                          |
| รายการบล็อก DNS       | `--dnsbl`, `--uribl` | ที่อยู่ IP ของไคลเอนต์และโดเมนของลิงก์ ในรูปการสอบถาม DNS |
| ClamAV                | `--clamav`           | ไฟล์แนบ ไปยัง clamd ของคุณเอง                             |
| โมเดลภาษา             | `--llm`              | สรุปของข้อความ ไปยังเซิร์ฟเวอร์ที่คุณระบุ                 |

ไม่มีการบันทึกหรือเก็บผลการสแกน [ความปลอดภัยและความเป็นส่วนตัว](https://spamscanner.net/th/docs/security/)


## ติดตั้งบนเซิร์ฟเวอร์

```sh
npm install --global spamscanner
```

หรือใช้ไบนารีแบบสแตนด์อโลนที่มี Node.js และโมเดลอยู่ในตัว:

```sh
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bash
```

สคริปต์ติดตั้งตรวจไบนารีกับไฟล์ `SHA256SUMS` ของรุ่นนั้นก่อนติดตั้ง และไบนารีทุกตัวมีการรับรองแหล่งที่มาของบิลด์แบบลงนาม ซึ่ง `gh attestation verify` ใช้ตรวจได้ มีไบนารีสำหรับ Linux (x64 และ arm64), macOS และ Windows ไบนารี Linux ต้องใช้ glibc ดังนั้นบน Alpine ให้ติดตั้งด้วย npm [เริ่มต้นใช้งาน](https://spamscanner.net/th/docs/getting-started/)

ไม่มีการตรวจอัปเดต หากต้องการอัปเดต ให้รันคำสั่งติดตั้งอีกครั้ง ทั้งสองคำสั่งจะติดตั้งรุ่นล่าสุด


## รันเป็นบริการ

เซิร์ฟเวอร์ milter, HTTP, TCP และ spamd รับฟังที่ 127.0.0.1 เว้นแต่ `--host` จะกำหนดเป็นอย่างอื่น ให้รันด้วยผู้ใช้ที่ไม่มีสิทธิ์พิเศษ เช่น ภายใต้ systemd:

```ini
[Service]
ExecStart=/usr/local/bin/spamscanner milter --port 7831 --auth --subject-tag [SPAM]
User=spamscanner
Group=spamscanner
Restart=on-failure
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
PrivateTmp=yes
```

[ยูนิตฉบับเต็มและวิธีตั้งค่า](https://spamscanner.net/th/docs/postfix/#1-run-the-milter) อยู่ในคู่มือ Postfix ไม่มีเซิร์ฟเวอร์ใดรองรับ TLS ดังนั้นหากต้องเข้าถึงจากเครื่องอื่น ให้ใช้เครือข่ายส่วนตัว อุโมงค์ SSH หรือรีเวิร์สพร็อกซีที่มี TLS


## เชื่อมต่อเซิร์ฟเวอร์อีเมลของคุณ

| เซิร์ฟเวอร์อีเมล                     | คำสั่ง                                  | พอร์ต |
| ------------------------------------ | --------------------------------------- | ----- |
| Postfix หรือ Sendmail                | `spamscanner milter`                    | 7831  |
| Postfix โดยไม่ปฏิเสธอีเมลเลย         | `spamscanner filter` ตัวกรองเนื้อหา     | ไม่มี |
| Exim, Haraka หรือ spamc              | `spamscanner spamd`                     | 783   |
| ทุกอย่างที่ใช้ HTTP                  | `spamscanner http`                      | 7832  |
| ไคลเอนต์ TCP แบบง่าย                 | `spamscanner server`                    | 7830  |
| เซิร์ฟเวอร์อีเมลที่เขียนด้วย Node.js | `import SpamScanner from 'spamscanner'` | ไม่มี |

เซิร์ฟเวอร์สามารถเพิ่มเฮดเดอร์ `X-Spam-Flag`, `X-Spam-Score` และ `X-Spam-Status` ลงในข้อความ ส่วนไลบรารีจะคืนคะแนนและทุกการทดสอบที่ทำงาน คู่มือ: [ตัวกรองสแปม Postfix](https://spamscanner.net/th/postfix-spam-filter/), [เซิร์ฟเวอร์อีเมลอื่น](https://spamscanner.net/th/docs/mail-servers/) และ [HTTP API](https://spamscanner.net/th/docs/http-api/)


## ใช้โมเดลภาษาในเครื่อง

โมเดลภาษาเป็นตัวเลือกเสริมและอ่านเฉพาะข้อความที่ก้ำกึ่ง สแปมที่ชัดเจนและ ham ที่ชัดเจนจะไม่ถูกส่งไปถึง เมื่อใช้ Ollama โมเดลจะทำงานบนเซิร์ฟเวอร์เดียวกัน จึงไม่มีข้อความใดออกจากเซิร์ฟเวอร์:

```sh
ollama pull qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4b
```

`qwen3.5:4b` ทำงานบน CPU ได้ หากใช้ผู้ให้บริการแบบโฮสต์ ข้อมูลส่วนบุคคลจะถูกลบออกจากข้อความก่อนส่ง [โมเดลภาษา](https://spamscanner.net/th/docs/llm/)


## ฝึกด้วยอีเมลของคุณเอง

โมเดลที่มาพร้อมกันฝึกจากชุดข้อมูลสาธารณะ โมเดลที่ฝึกจากอีเมลที่เซิร์ฟเวอร์ของคุณได้รับจะทำงานได้ดีกว่า และอยู่บนเซิร์ฟเวอร์นั้น:

```sh
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out /var/lib/spamscanner/model.json
SPAMSCANNER_MODEL=/var/lib/spamscanner/model.json spamscanner milter
```

ไฟล์โมเดลเก็บจำนวนนับของลักษณะเด่นที่ผ่านการแฮช ไม่ได้เก็บคำหรือเนื้อหาข้อความ [การฝึก](https://spamscanner.net/th/docs/training/)


## ข้อกำหนด

Node.js 18 ขึ้นไปบน Linux, macOS หรือ Windows หรือไม่ต้องใช้อะไรเลยเมื่อใช้ไบนารีแบบสแตนด์อโลน ClamAV และ Ollama เป็นตัวเลือกเสริมและทำงานเป็นบริการแยก
