# ความปลอดภัยและความเป็นส่วนตัว

Spam Scanner อ่านอีเมล ซึ่งเป็นข้อมูลส่วนตัว จากผู้ส่งที่อาจไม่หวังดี หน้านี้แสดงรายการสิ่งที่โปรแกรมส่งออกไปที่ใดก็ตาม และวิธีที่โปรแกรมจัดการกับสิ่งที่อ่าน


## อะไรถูกส่งออกจากเครื่อง

โดยค่าเริ่มต้นมีเพียงอย่างเดียว: **ชื่อโฮสต์ของลิงก์**ในข้อความถูกค้นหาใน resolver แบบกรองของ Cloudflare คือ 1.1.1.2 และ 1.0.0.2 (มัลแวร์และฟิชชิง) และ 1.1.1.3 และ 1.0.0.3 (รวมเนื้อหาสำหรับผู้ใหญ่ด้วย) คำขอเหล่านี้เป็นคำขอ DNS ธรรมดาสำหรับชื่ออย่าง `example.com` ไม่มีส่วนใดของข้อความหรือที่อยู่ในข้อความถูกส่งไป ปิดได้ด้วย `phishing: {cloudflare: false}` หรือ `--no-cloudflare` หรือปิดเฉพาะการตรวจเนื้อหาสำหรับผู้ใหญ่ด้วย `phishing: {adult: false}`

ส่วนอื่นทั้งหมดปิดไว้จนกว่าจะตั้งค่า:

| การตรวจ             | สิ่งที่ส่ง                                                        | ส่งไปที่                                                           |
| ------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------ |
| `authentication`    | คำขอ DNS สำหรับเรคคอร์ด SPF, DKIM, DMARC และ ARC ของผู้ส่ง        | resolver ของคุณ หรือ `dnsServers`                                  |
| `dnsbl`             | ที่อยู่ IP ของไคลเอนต์แบบกลับลำดับ และโดเมนของลิงก์ ในรูปคำขอ DNS | name server ของ blocklist ผ่าน resolver ของคุณหรือ `dns.servers`   |
| `llm`               | สรุปของข้อความ โดยลบข้อมูลส่วนบุคคลออกสำหรับผู้ให้บริการระยะไกล   | เซิร์ฟเวอร์โมเดลภาษาที่คุณระบุ ([ความเป็นส่วนตัว](https://spamscanner.net/th/docs/llm/#privacy)) |
| `reputation.apiUrl` | ที่อยู่ IP โดเมน และที่อยู่อีเมลของผู้ส่ง                         | บริการที่คุณระบุ                                                   |
| `clamav`            | ไฟล์แนบ                                                           | clamd ของคุณ ผ่านซ็อกเก็ตของมัน                                    |

ไม่มีการเก็บข้อมูลการใช้งาน ไม่มีการตรวจหาอัปเดต และไม่มีการดาวน์โหลดขณะทำงาน โมเดลมาในแพ็กเกจอยู่แล้ว


## อะไรถูกเก็บไว้

ไม่มีเลย เว้นแต่จะสั่งไว้ การสแกนไม่ถูกบันทึกล็อกหรือจัดเก็บ `learn()` เปลี่ยนตัวจำแนกในหน่วยความจำ และจะเขียนลงดิสก์เฉพาะโดย `saveModel()`, `spamscanner learn` หรือตัวเลือก `--out` ของเซิร์ฟเวอร์ ไฟล์โมเดลเก็บจำนวนนับของคุณลักษณะที่แฮชแล้ว ไม่ใช่คำหรือเนื้อหาข้อความ

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


## ข้อมูลเข้าที่ไม่หวังดี

* ไฟล์แนบถูกระบุจากไบต์ของไฟล์ ไม่ถูกรันหรือเปิดด้วยโปรแกรมอื่นเลย ไฟล์บีบอัด ZIP ถูกอ่านจาก central directory โดยจำกัดจำนวนรายการ ไฟล์บีบอัดที่ซ้อนกันจะไม่ถูกแตกออก
* เนื้อหาข้อความถูกอ่านได้สูงสุด `maxLength` (100,000 อักขระ) และเซิร์ฟเวอร์รับข้อความขนาดได้สูงสุด 25 MB
* การตรวจทางเครือข่ายทุกรายการมีเวลาหมดเวลา (`timeout` ค่าเริ่มต้น 10 วินาที) การตรวจที่ล้มเหลวหรือหมดเวลาจะถูกข้าม และการสแกนจะเสร็จสิ้นโดยไม่มีการตรวจนั้น
* ส่วนหัว `X-Spam-*` ที่มีอยู่แล้วในข้อความจะถูกลบออกโดย milter ตัวกรองเนื้อหา และ `--headers` ผู้ส่งจึงทำเครื่องหมายว่าอีเมลของตัวเองสะอาดไม่ได้
* ส่วนหัวผลตัดสินสแปมของ Microsoft เชื่อถือเฉพาะเมื่อข้อความมาจากเซิร์ฟเวอร์ของ Microsoft โดยตรง และไม่มีการใช้ส่วนหัว Received ตัดสินว่าข้อความมาจากที่ใด
* ข้อความที่เขียนถึงตัวกรอง AI จะได้คะแนนเป็นสแปม และโมเดลภาษาจะได้รับแจ้งว่าข้อความเป็นข้อมูล ไม่ใช่คำสั่ง [Prompt injection](https://spamscanner.net/th/docs/llm/#prompt-injection)


## เซิร์ฟเวอร์

เซิร์ฟเวอร์ milter, HTTP, TCP และ spamd รอรับการเชื่อมต่อที่ 127.0.0.1 เว้นแต่ `--host` จะกำหนดเป็นอย่างอื่น HTTP API เปรียบเทียบโทเค็นในเวลาคงที่ และปฏิเสธ `/learn` หากไม่มีโทเค็น ไม่มีเซิร์ฟเวอร์ใดรองรับ TLS: หากต้องการเข้าถึงข้ามเครือข่าย ให้ใช้เครือข่ายส่วนตัว SSH tunnel หรือ reverse proxy ที่ใช้ TLS

รันเซิร์ฟเวอร์ด้วยผู้ใช้ที่ไม่มีสิทธิ์พิเศษ [systemd unit ในคู่มือ Postfix](https://spamscanner.net/th/docs/postfix/#1-run-the-milter) เพิ่มการตั้งค่าเสริมความปลอดภัยตามปกติไว้แล้ว


## การรายงานช่องโหว่

รายงานปัญหาด้านความปลอดภัยแบบส่วนตัวผ่าน[ระบบรายงานช่องโหว่ของ GitHub](https://github.com/spamscanner/spamscanner/security/advisories/new) ไม่ใช่ใน issue สาธารณะ
