# การเชื่อมต่อ, พร็อกซี และการคุ้มครองข้อมูล

Canonical page: https://phishdestroy.github.io/TgWitness/th/docs/reference/connection/

การยืนยันตัวตน, กลุ่มพร็อกซีอัตโนมัติ, โหมด IP, นโยบายสำรอง, คำขอจากภายนอก และการจัดเก็บข้อมูลลับ

เอกสารนี้อธิบายการทำงานและข้อจำกัดของ TgWitness 0.7.0 การยืนยันตัวตน, การเข้าถึงแหล่งข้อมูล, การเชื่อมต่อเครือข่าย และความครบถ้วนของการบันทึก เป็นสถานะที่แยกกัน สำหรับขั้นตอนการลงชื่อเข้าใช้ รูปแบบไฟล์ และบัญชีหลายบัญชี ให้เริ่มจาก [ส่วนบัญชีและรูปแบบเซสชัน](https://phishdestroy.github.io/TgWitness/th/docs/reference/accounts/) สำหรับนโยบายเหตุการณ์และพฤติกรรม เมื่อเริ่มต้นใหม่ ให้ดู[ส่วนวิธีการทำงานของการเก็บรวบรวมข้อมูล](https://phishdestroy.github.io/TgWitness/th/docs/reference/collection/)

## วิธีการยืนยันตัวตน

**API ID และ API hash ใช้เพื่อระบุแอปพลิเคชัน; ทั้งสองไม่แทนที่การเข้าสู่ระบบบัญชี** ทั้งสองเป็นตัวเลือกใน TgWitness ลำดับความสำคัญ: คู่ที่ป้อนในแบบฟอร์ม, ตามด้วยคู่จาก ไฟล์ JSON ของบัญชีที่นำเข้า, ตามด้วยคู่ที่บันทึกในพื้นที่ทำงาน, และสุดท้ายคือกลุ่มคู่ในตัวระบบจำนวน 50 คู่สาธารณะในพูลที่สร้างขึ้นในตัว ซึ่งจะถูกทดลองในลำดับสุ่มพร้อมการหมุนเวียนอัตโนมัติเมื่อ Telegram ปฏิเสธคู่ใดคู่หนึ่ง เฉพาะ คู่ Telegram Desktop (2040) เท่านั้นที่จะถูกส่งไปพร้อมกับคำอธิบายลูกค้า Telegram Desktop ที่ตรงกัน คู่ของคุณเองจากเครื่องมือพัฒนา API ที่ [my.telegram.org](https://my.telegram.org) สามารถใช้กับบัญชีทั้งหมดของคุณได้; แต่ละบัญชียังคงมีการอนุญาตเป็นของตัวเอง

| วิธีการ | ข้อกำหนด | การสนับสนุน TgWitness |
| --- | --- | --- |
| โทรศัพท์, รหัส, 2FA (ตามความต้องการ) | การเข้าถึงบัญชี; คู่ API เป็นตัวเลือก | เข้าสู่ระบบ Panel |
| Auth Key HEX + DC ID | กุญแจเต็ม 512 ตัวอักษร และ DC 1–5 | แท็บ Direct **Auth key**; ตรวจสอบ User ID (ตามตัวเลือก) ก่อนบันทึกการอนุญาต |
| Telethon StringSession | สตริงเซสชันที่ถูกต้อง | เข้าสู่ระบบ Panel |
| Telethon SQLite `.session` | เนื้อหาที่ปิดสมบูรณ์และสอดคล้องกัน | นำเข้าสคีมาโดยตรงจากแผงควบคุม 7/8; CLI แบบออฟไลน์ (เป็นตัวเลือก) |
| Pyrogram SQLite `.session` | เซสชันผู้ใช้ในสภาพแวดล้อมการผลิตที่ปิด | การนำเข้าสคีมาแบบตรงจากแผงควบคุม 2/3 |
| Telegram Desktop TData ZIP | บัญชีเดียวแบบทันสมัย; รหัสผ่านท้องถิ่นหากมีการป้องกัน | การแปลงข้อมูลในหน่วยความจำพร้อมการตรวจสอบค่าเช็กซัมและการถอดรหัส |
| JSON ของบัญชี | สนาม API/session/key ที่รองรับ | ข้อมูลเมตาดาต้าเพียงอย่างเดียวก็เพียงพอที่จะกรอกข้อมูลรับรอง API; แต่ยังจำเป็นต้องใช้การเข้าสู่ระบบด้วยเซสชัน/คีย์ หรือหมายเลขโทรศัพท์/QR Code |
| QR code สำหรับการเข้าสู่ระบบ | การยืนยันจากแอป Telegram ที่ได้รับอนุญาต | สร้าง QR Code ท้องถิ่น, กำหนดวันหมดอายุ/ลองใหม่, ตัวเลือกการยืนยันสองขั้นตอน (2FA) |
| TDLib / Pyrogram StringSession | รูปแบบอื่น ๆ ที่เฉพาะสำหรับไลบรารี | ไม่ได้รับการสนับสนุน |
| โทเค็นบอท | บอทที่มีโมเดลการเข้าถึง/อัปเดตเป็นของตัวเอง | ไม่ถูกใช้โดยผู้รวบรวมข้อมูลนี้ |

Telegram ใช้การส่งรหัสผ่าน; SMS ไม่มีการรับประกัน API hash ไม่สามารถกู้คืน เซสชันที่ถูกยกเลิก หรือแทนที่รหัสผ่าน 2FA ที่ลืมได้ TgWitness ไม่เก็บ รหัสเข้าสู่ระบบหรือรหัสผ่าน 2FA ของ Telegram ลงบนดิสก์

สำหรับแหล่งข้อมูลส่วนตัว บัญชีดังกล่าวต้องได้รับสิทธิ์การเข้าถึงแล้ว ชื่อผู้ใช้ของกลุ่ม ไม่จำเป็น การนำเข้าผ่านพร็อกซีหรือเซสชันจะไม่ให้สิทธิ์การเป็นสมาชิกหรือสิทธิ์ผู้ดูแลระบบ การเป็นสมาชิกในปัจจุบันไม่รับประกันการเข้าถึงประวัติก่อนการเข้าร่วม

## นำเข้าไฟล์เซสชัน Telethon

Telethon SQLite, Pyrogram SQLite และ Telegram Desktop TData ใช้รูปแบบไฟล์ที่แตกต่างกัน แผงควบคุมจะตรวจจับและแปลงโครงสร้างที่รองรับ; การเปลี่ยนชื่อไฟล์ไม่ถือเป็นการ แปลงข้อมูล ให้เลือกเซสชันหนึ่งและไฟล์ JSON ที่เกี่ยวข้องภายใต้ส่วน **Files** แล้วกด **Connect account** ระบบจะรับไฟล์ที่ตรงกันสูงสุดสี่ไฟล์และ รวมทั้งหมด 8 MiB ดู[ข้อจำกัดรูปแบบ](https://phishdestroy.github.io/TgWitness/th/docs/reference/accounts/)เพื่อทราบรายละเอียดเกี่ยวกับ TData/JSON ไม่มีระบบกู้คืนรหัสผ่าน การเข้าสู่ระบบด้วยโทรศัพท์/2FA หรือ QR จะสร้างการอนุญาตแยกต่างหาก

เส้นทางบรรทัดคำสั่งเฉพาะ Telethon (แบบเลือกใช้) ยังคงใช้งานได้:

1. หยุดการทำงานของไคลเอนต์ที่ใช้เซสชันต้นฉบับ และสร้างสำเนาที่สอดคล้องกัน เครื่อง แปลงจะปฏิเสธไฟล์ที่มี WAL/journal ที่ยังไม่เสร็จสมบูรณ์ ปิดไคลเอนต์ต้นฉบับ อย่างถูกต้อง แทนที่จะลบไฟล์เหล่านั้นเพื่อหลีกเลี่ยงการตรวจสอบ
2. จากสภาพแวดล้อม TgWitness ให้รัน:

```
python -m tgwitness.sessions account.session --out account.tgwitness-session
```

1. ในส่วน "**เพิ่มบัญชี" →** "**ไฟล์**" ให้โหลดผลลัพธ์หรือ วางสตริงของมัน แล้วดำเนินการต่อ
2. ตรวจสอบ ID บัญชีแบบตัวเลขที่แสดงอยู่ เลือกแหล่งข้อมูล และเริ่มการติดตาม

ตัวแปลงเปิด SQLite ในโหมดอ่านอย่างเดียว ไม่ดำเนินการอัปเกรดสคีมาหรือส่งคำขอเครือข่าย และไม่พิมพ์ข้อมูลเซสชัน มันตรวจสอบเวอร์ชันสคีมา ประเภทตาราง แถวเซสชันเดียว IP/พอร์ต/DC และความยาวของคีย์ การป้อนข้อมูลผ่าน CLI จำกัดอยู่ที่ 64 MiB; ข้อความ StringSession จำกัดอยู่ที่ 4 KiB. การแปลงผ่านแผงควบคุมจะอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ TgWitness ที่ได้รับการยืนยันตัวตน ประมวลผลในหน่วยความจำ และส่งข้อมูลรับรองที่ปรับให้เป็นมาตรฐานกลับไปยัง เบราว์เซอร์นั้น โดยไม่บันทึกไฟล์ต้นฉบับที่อัปโหลดไว้ ใช้ HTTPS สำหรับเซิร์ฟเวอร์ระยะไกล

**ไฟล์ที่แปลงมาคือรหัสลับการเข้าถึงบัญชีที่ยังไม่ได้รับการเข้ารหัส** เก็บไว้ในที่เก็บข้อมูล ที่ได้รับการป้องกัน และอย่าบันทึกหรือส่งไปยังบริการแปลงไฟล์ของฝ่ายที่สาม TgWitness เก็บเซสชันที่ได้รับอนุญาตไว้ในห้องนิรภัยที่เข้ารหัส การคัดลอกเซสชันจะไม่ สร้างการอนุญาตแยกต่างหาก: อย่าเรียกใช้ไคลเอนต์หลายตัวพร้อมกันด้วยกุญแจการอนุญาตที่คัดลอก และอย่าสมมติว่าการอัปเดตจะถูกส่งมาอย่างอิสระ

การแปลงข้อมูลจะโอนสิทธิ์การเข้าถึงเท่านั้น ไม่ใช่ข้อความต้นฉบับ แคชของเอนทิตี หรือ เคอร์เซอร์การอัปเดตที่คงอยู่ มันไม่แก้ไขปัญหาการกู้คืนการอัปเดตเมื่อกระบวนการเริ่มต้นใหม่

## MTProto, Telethon และพร็อกซี

MTProto คือโปรโตคอลของ Telegram ส่วน Telethon คือไลบรารีไคลเอนต์ Python ที่ TgWitness ใช้ MTProxy เป็นพร็อกซีการส่งข้อมูลของ Telegram; SOCKS5 และ HTTP CONNECT ให้บริการ อุโมงค์ทั่วไป แต่ไม่มีตัวใดที่สามารถแทนที่การยืนยันตัวตนของบัญชีได้

บันทึกเส้นทางสำหรับแต่ละพื้นที่ทำงานใน **Account → Settings → Connection settings → Change connection route** ก่อน เข้าสู่ระบบ พื้นที่ทำงานใหม่จะตั้งค่าเริ่มต้นเป็น **Automatic MTProxy · public lists** พร้อมฟังก์ชัน Hide IP พื้นที่ทำงานที่มีอยู่ซึ่งใช้ Direct อย่างชัดเจนจะยังคงรักษาโหมดที่อนุญาตให้ใช้งานได้

## โหมด IP

เส้นทางจะกำหนดการเชื่อมต่อ โหมด IP จะกำหนดว่าเมื่อใดที่อยู่ของเซิร์ฟเวอร์ อาจถูกเปิดเผย การควบคุมเหล่านี้ไม่ติดตั้ง VPN หรือกำหนดเส้นทางให้กับการรับส่งข้อมูลทั้งหมดของเครื่อง

| โหมด | Telegram | คำขอจากภายนอก |
| --- | --- | --- |
| ซ่อน IP (`hide`) | ใช้พร็อกซี; หากไม่มีพร็อกซีใดทำงานได้ ให้รอ ไม่มีการสำรองโดยตรง | ต้องใช้ SOCKS5/HTTP; ปฏิเสธคำขอที่ไม่มีพร็อกซีที่เหมาะสม |
| อนุญาตให้ใช้ตัวเลือกสำรอง (`fallback`) | MTProxy อัตโนมัติอาจใช้ Direct หลังจากช่วงเวลาหน่วงที่กำหนดไว้ แล้วกลับสู่พร็อกซีที่ทำงานได้ | แนะนำให้ใช้พร็อกซีภายนอกที่ตั้งค่าไว้แล้ว หรือเส้นทาง SOCKS5/HTTP ของบัญชีนั้น; หากไม่มี สามารถใช้ Direct ได้ |
| Tunnel / VPN (`tunnel`) | อนุญาตให้ใช้เส้นทางตรงและระบบสำรองอัตโนมัติแบบทันที | การเชื่อมต่อโดยตรงได้รับอนุญาตเมื่อไม่มีการกำหนดค่าพร็อกซีที่เกี่ยวข้อง |

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

### เลือกเส้นทาง

| เส้นทาง | การตั้งค่า | ขอบเขต |
| --- | --- | --- |
| MTProxy อัตโนมัติ | รายชื่อที่สร้างไว้ล่วงหน้า หรือแคตตาล็อกตัวดำเนินการ | รักษาเส้นทาง Telegram ที่ใช้งานได้; การเปลี่ยนไปใช้เส้นทางสำรองโดยตรงขึ้นอยู่กับโหมด IP |
| ตรงไปตรงมา | โหมด Tunnel/VPN | Telethon ใช้เส้นทางเครือข่ายของผู้จัดงาน |
| SOCKS5 | โฮสต์, พอร์ต, ชื่อผู้ใช้/รหัสผ่าน (ตามต้องการ) | python-socks, เปิดใช้งาน DNS ปลายทางระยะไกล |
| HTTP CONNECT | โฮสต์, พอร์ต, ชื่อผู้ใช้/รหัสผ่าน (ตามต้องการ) | ใช้ HTTP CONNECT แบบธรรมดา; TLS ไปยังพร็อกซีเองยังไม่ได้รับการนำไปใช้ |
| MTProxy | โฮสต์, พอร์ต, รหัสลับ | การส่งข้อมูล Telethon แบบทดลอง; 32 ตัวเลขฐานสิบหก หรือ `dd` + 32 ตัวเลขฐานสิบหก |

ข้อมูลลับ TLS `ee` ปลอมจะถูกปฏิเสธ การปรับรูปแบบของ Telethon 1.45 สามารถลบคำนำหน้า และโดเมนได้ แต่ไม่ได้ใช้ Fake TLS วาง `tg://proxy?server=…&port=…&secret=…` หรือ `https://t.me/proxy?server=…&port=…&secret=…` และเลือก **"Fill fields from link**" สิ่งนี้จะตรวจสอบความถูกต้องและกรอกข้อมูลในช่องโดยไม่ต้องเชื่อมต่อหรือบันทึก; ตรวจสอบและบันทึก เส้นทางแยกกัน ช่องข้อมูลที่กรอกด้วยมือยังคงใช้งานได้ ดู[ลิงก์พร็อกซี Telegram](https://core.telegram.org/api/links#proxy-links)

### พร็อกซีสาธารณะที่ระบบของคุณจัดหา

รายชื่อที่มาในตัวรวมสี่แหล่ง: [SoliSpirit/mtproto](https://github.com/SoliSpirit/mtproto), [zakky8/mtproto-proxy-pro](https://github.com/zakky8/mtproto-proxy-pro), [kort0881/telegram-proxy-collector](https://github.com/kort0881/telegram-proxy-collector) และ [3yed-61/MTP-Collector](https://github.com/3yed-61/MTP-Collector). สแนปช็อตที่รวมไว้มีข้อมูลเกี่ยวกับจุดปลายทาง (endpoint), ที่มาของข้อมูล และวันที่ดาวน์โหลด การปรากฏในรายชื่อของผู้ให้บริการไม่ใช่หลักฐานว่าพร็อกซีนั้นทำงานได้หรือส่งข้อมูลอัปเดตของ Telegram ทุกครั้ง

**MTProxy** ตรวจสอบการเชื่อมต่อเครือข่ายของ Telegram **โดยอัตโนมัติ** รักษาพร็อกซีที่ทำงานได้ และเปลี่ยนไปใช้พร็อกซีอื่นเมื่อพร็อกซีเดิมล้มเหลว พื้นที่ทำงาน (Workspaces) จะเลือกใช้พร็อกซีต่างกันเมื่อมี รายการที่ทำงานได้เพียงพอ; ไม่รับประกันว่าจะมีที่อยู่ทางออก (exit address) ที่ไม่ซ้ำกัน พร็อกซีที่ล้มเหลว จะพักก่อนที่จะลองอีกครั้ง หากไม่มีพร็อกซีใดทำงานได้ โหมด IP จะกำหนดว่าการเก็บข้อมูล ต้องรอหรือสามารถใช้การเชื่อมต่อโดยตรงได้ การเปลี่ยนพร็อกซีจะไม่เปลี่ยนบัญชี หรือลบบันทึกของบัญชีนั้น การเลือกและเปลี่ยนแปลงเส้นทางจะถูกบันทึกไว้ในบันทึกที่ลงนามแล้ว

เมื่อเส้นทางอัตโนมัติกำลังทำงาน รายการจะอัปเดตทุกชั่วโมง และการตรวจสอบการส่งข้อมูลจะดำเนินการ ทุกสิบนาทีตามค่าเริ่มต้น ช่วงเวลานี้สามารถปรับตั้งค่าได้ **การอัปเดตรายการสาธารณะจะขอ** อัปเดต; การดูรายการเพียงอย่างเดียวจะไม่เปลี่ยนแปลงเส้นทางที่ตั้งไว้ด้วยตนเอง

การตอบสนองของฟีดแต่ละครั้งถูกจำกัดไว้ที่ 1 MiB พร้อมเวลาหมดอายุคำขอ 8 วินาที และ เวลาดาวน์โหลดรวม 20 วินาที; การเปลี่ยนเส้นทาง จะถูกปฏิเสธ ระบบจะเก็บรักษาและกำจัดข้อมูลซ้ำได้สูงสุด 64 รายการที่เข้ากันได้ต่อแหล่งข้อมูล ตัววิเคราะห์ข้อมูล (parser) รับข้อมูลลับในรูปแบบเลขฐานสิบหก (hexadecimal) และ base64url ที่รองรับ รวมถึงฟีด JSON TLS ปลอม`ee` ลิงก์ที่ไม่ถูกต้อง ค่า IP แบบตัวอักษรส่วนตัว/สำรอง และชื่อโฮสต์ท้องถิ่นจะถูก ข้ามไป ชื่อโฮสต์จะถูกแปลงและตรวจสอบก่อนใช้งาน และ IP ที่เลือกจะถูกตรึง ไว้สำหรับการเชื่อมต่อนั้น การรับข้อมูลใหม่โดยอัตโนมัติจะแปลงชื่อโฮสต์อีกครั้ง; ให้ใช้ ข้อมูลที่ป้อนด้วยตนเองอีกครั้งเพื่อแปลงชื่อโฮสต์นั้นใหม่

การตอบสนองจากฟีดที่ล้มเหลว ว่าง หรือไม่เข้ากัน จะเก็บภาพสแนปช็อตของแหล่งข้อมูลเดิมไว้ การอัปเดตเป็นแบบอะตอมิก ถูกจัดลำดับ และจำกัดการลองเพียงหนึ่งครั้งต่อนาทีต่อพื้นที่ทำงาน การตรวจสอบการส่งข้อมูลที่สำเร็จจะยืนยันการเชื่อมต่อเท่านั้น ไม่รับประกันความเป็นนิรนามหรือความครบถ้วนของการบันทึก

**การส่งข้อมูลของ Telegram และคำขอ HTTPS ใช้เส้นทางที่ต่างกัน** การดาวน์โหลดรายการใช้ การเชื่อมต่อ HTTPS แยกต่างหาก และเส้นทางคำขอภายนอกที่จัดเตรียมไว้ `TGWITNESS_PROXY_FEED_PROXY` กำหนดเส้นทางนั้นให้ใช้พร็อกซี HTTP/SOCKS5 อย่างชัดเจน; ทั้งสองเวอร์ชันของ Compose ในตัวเก็บข้อมูลจะส่งต่อข้อมูลนี้ กลุ่มพื้นหลังจะติดตามพื้นที่ทำงานหลัก ไม่มีการส่งเซสชัน Telegram, ข้อมูลรับรอง API, โทเค็นแผงควบคุม หรือ โทเค็นบอต ไปยังผู้ให้บริการฟีด ชื่อผู้ให้บริการ, วันที่ถ่ายภาพ และเส้นทางดาวน์โหลด จะปรากฏภายใต้ส่วน **“แหล่งที่มาของรายชื่อ”**

MTProxy ส่งผ่านเฉพาะการรับส่งข้อมูล Telegram เท่านั้น การดำเนินการ HTTP ใน Workspace เช่น การบันทึกเวลา, การแจ้งเตือน, การคัดลอกข้อมูลนอกระบบ และการตรวจสอบแหล่งที่มา จะใช้ proxy SOCKS5/HTTP แยกต่างหากเมื่อ ได้รับการกำหนดค่าไว้ แล้วจึงใช้เส้นทาง SOCKS5/HTTP ของบัญชี หากไม่มีทั้งสองอย่าง Hide IP จะปฏิเสธ คำขอ; โหมดอื่น ๆ อนุญาตให้ใช้ Direct ได้ สามารถปิดการใช้งานคำขอจากภายนอกได้ โปรกซีดาวน์โหลดฟีดที่ กำหนดค่าอย่างชัดเจนจะยังคงเป็นการตั้งค่าทับของผู้ดำเนินการที่แยกต่างหาก บริการพยานอิสระจะรักษาเส้นทางของตัวเอง

****พารามิเตอร์พูลอัตโนมัติ**** ใน **Parameters → Automatic MTProxy** ให้กำหนดค่าเกณฑ์ความล้มเหลว (failure threshold), ระยะเวลาพัก (cooldown), การหมุนเวียนตามแผน (planned rotation), การแบ่งปันพร็อกซี (proxy sharing) และระยะเวลาหน่วงเวลาสำรองที่อนุญาต (permitted fallback delay) | การควบคุม | ค่าเริ่มต้น | | --- | --- | | ตัดการเชื่อมต่อก่อนการเปลี่ยน | 3 ครั้งภายใน 10 นาที | | จำนวนพร็อกซีที่ลองต่อครั้ง | 3 | | เวลาพักครั้งแรก / สูงสุดหลังความล้มเหลว | 10 นาที / 6 ชั่วโมง | | การหมุนเวียนตามแผน | ปิด; เปลี่ยนเมื่อเกิดข้อผิดพลาด | | จำนวนบัญชีต่อพร็อกซี | 0: ให้ความสำคัญกับการใช้บัญชีแยกกัน, แบ่งปันเมื่อจำเป็น ตั้งค่าเป็น 1 เพื่อรอการเข้าถึงแบบเอกสิทธิ์ | | ความล่าช้าก่อนอนุญาตให้ใช้ Direct fallback | 10 นาที; Hide IP ยังคงปฏิเสธ Direct | | การรีเฟรชฟีด / การตรวจสอบการส่งข้อมูล | 60 / 10 นาที; ค่าในพื้นที่ทำงานหลักใช้กับกลุ่มพร็อกซีที่ใช้ร่วมกัน | พร็อกซีที่แตกต่างกันไม่รับประกันว่าจะมีที่อยู่ทางออกที่แตกต่างกัน การตั้งค่าเหล่านี้ไม่ แทนที่ข้อจำกัดของ Telegram หรือรับประกันความเป็นนิรนาม

เพื่อแทนที่รายชื่อสาธารณะด้วยแคตตาล็อกผู้ให้บริการของคุณเอง ให้กำหนดค่าการแทนที่ด้านล่างนี้ การตั้งค่านี้จะปิดการสมัครรับข้อมูลจากภายนอกอย่างสมบูรณ์ รวมถึงเมื่ออาร์เรย์ `proxies` ของมันว่างเปล่า

คัดลอก[แคตตาล็อกที่ว่าง](https://github.com/phishdestroy/TgWitness/blob/main/deploy/proxies.config.example) ไปยัง `proxy-config/proxies.json` และเพิ่มจุดปลายทางสาธารณะที่คุณได้ติดตั้งแล้ว:

```
{"format": "tgwitness-proxy-catalog-v1", "proxies": [
  {"id": "project-eu", "label": "Project EU",
   "link": "tg://proxy?server=REPLACE_HOST&port=443&secret=REPLACE_SECRET"}
]}
```

ค่าตัวอย่างต้องถูกแทนที่ สามารถรับข้อมูลได้สูงสุด 32 รายการที่ต่างกัน รายการที่ ได้รับการยืนยันจะแสดงชื่อ/โฮสต์/พอร์ต โดยไม่ใช้ข้อมูลลับร่วมกัน; การเลือกหนึ่งรายการ จะบันทึกข้อมูลรับรองเข้าสู่คลังข้อมูลในพื้นที่ทำงาน ความพร้อมใช้งานยังไม่ได้รับการทดสอบจนกว่าจะ มีการทดสอบการส่งข้อมูลอย่างชัดเจน หากแคตตาล็อกมีรูปแบบไม่ถูกต้อง จะสามารถกำหนดค่าด้วยตนเองได้

การติดตั้งบนระบบท้องถิ่น: ตั้งค่า `TGWITNESS_PROXY_CATALOG` เป็นเส้นทาง JSON ในเครื่อง Docker:

```
docker compose -f compose.yaml -f deploy/compose/compose.proxies.yaml up -d --build
```

โอเวอร์เลย์ติดตั้ง `proxy-config` ในโหมดอ่านอย่างเดียว; ไฟล์ต้องสามารถอ่านได้โดย UID 10001 ของคอนเทนเนอร์ ไดเรกทอรีนี้ถูกยกเว้นจาก Git, บริบทการสร้าง Docker และไฟล์อาร์ไคฟ์ต้นฉบับ ไฟล์ แคตตาล็อกนี้กำหนดค่าบัญชีที่ใช้ในการเก็บข้อมูล; [บอทพยานใช้](https://phishdestroy.github.io/TgWitness/th/docs/reference/witness/) เส้นทาง HTTP/SOCKS5 ของตัวเอง ไม่ใช่ MTProxy

การเปลี่ยนเส้นทางสำรองโดยตรงถูกควบคุมโดยโหมด IP ข้างต้น ให้หยุดการสังเกตการณ์ก่อน ที่จะเปลี่ยนเส้นทาง การบันทึกจะตัดการเชื่อมต่อกับไคลเอนต์เก่าและยกเลิกการเข้าสู่ระบบที่ยังไม่เสร็จสิ้น; ไคลเอนต์ ใหม่จะใช้เส้นทางที่บันทึกไว้ การผูกมัดระหว่างบันทึก/เซสชันของบัญชีจะยังคงอยู่ การตั้งค่าจะแทนที่เส้นทางเดิม: ให้ป้อนข้อมูลรับรองพร็อกซีใหม่เมื่อแก้ไขเส้นทาง

ข้อมูลรับรองการเข้าสู่ระบบถูกเข้ารหัสด้วย`network.enc` API ไม่ส่งคืนชื่อผู้ใช้ รหัสผ่าน หรือข้อมูลลับ บันทึกที่ลงนามแล้วจะระบุประเภทเส้นทางและระบุว่าข้อมูลรับรองการเข้าสู่ระบบ มีอยู่หรือไม่ โดยไม่รวมจุดปลายทางและข้อมูลลับ ผู้ใช้งานสามารถดูจุดปลายทาง ได้ในแผงควบคุม สนามข้อมูลลับจะถูกล้างหลังจากบันทึก ล็อก หรือเปลี่ยนพื้นที่ทำงาน

**การทดสอบการเชื่อมต่อ Telegram** (สามารถใช้งานได้ก่อนการเข้าสู่ระบบ) จะเปิดและปิดการเชื่อมต่อ Telegram ชั่วคราว ที่ไม่ได้รับอนุญาตผ่านเส้นทางดังกล่าว โดยไม่ติดต่อกับเว็บไซต์ตรวจสอบ IP การทดสอบที่สำเร็จจะยืนยันการเชื่อมต่อด้านการส่งข้อมูลเท่านั้น ไม่รวมถึงการเข้าถึงกลุ่ม การส่งข้อความที่สมบูรณ์ หรือความเป็นนิรนาม

พร็อกซีนี้ใช้กับการเชื่อมต่อของไคลเอนต์ Telegram รวมถึงการดาวน์โหลดสื่อจาก Telegram DC เครื่องมือ TSA ที่เรียกใช้ผ่านเบราว์เซอร์ pip SSH หรือแบบแมนนวล มีเส้นทางแยกต่างหาก ชื่อโฮสต์ของพร็อกซีอาจถูกแปลงชื่อในระบบท้องถิ่นได้ `rdns` มีผลต่อชื่อโฮสต์ปลายทาง; Telegram มักให้ที่อยู่ IP แบบตัวเลขของ DC

SOCKS5 และ HTTP CONNECT แบบธรรมดาไม่เข้ารหัสข้อมูลรับรองพร็อกซีหรือ ช่องอุโมงค์ระหว่างไคลเอนต์กับพร็อกซี MTProto ปกป้องการรับส่งข้อมูล Telegram แยกต่างหาก ใช้ ช่องทางการสื่อสารที่ปลอดภัยและเหมาะสมเพื่อเชื่อมต่อกับพร็อกซีบนเครือข่ายที่ไม่น่าเชื่อถือ กลุ่มส่วนตัว เป็นการสนทนาบนคลาวด์; MTProto ไม่เปลี่ยนกลุ่มเหล่านี้ให้เป็นการสนทนาลับ (Secret Chats) ที่เข้ารหัสแบบปลายทางถึงปลายทาง

## การเข้ารหัสและลายเซ็น

| ชั้น | ได้ดำเนินการแล้ว | ความรับผิดชอบของผู้ดำเนินการ |
| --- | --- | --- |
| การสื่อสารใน Telegram | Telethon MTProto | ความน่าเชื่อถือของแพลตฟอร์ม, เส้นทาง และความพร้อมใช้งาน |
| แผงควบคุมบนเว็บ | Bearer token, loopback default, request limits | HTTPS หรืออุโมงค์ SSH สำหรับการเข้าถึงจากระยะไกล |
| ความลับ | Fernet สำหรับข้อมูลรับรอง API, เซสชัน, ข้อมูลรับรองพร็อกซี และกุญแจส่วนตัวสำหรับการลงนาม | รักษาความปลอดภัยของกุญแจถอดรหัสและเซิร์ฟเวอร์ที่ทำงานอยู่ |
| กุญแจ Vault | กุญแจท้องถิ่น หรือกุญแจหลักภายนอก สำหรับการติดตั้งใหม่ | พื้นที่จัดเก็บข้อมูลที่แยกต่างหากและได้รับการป้องกัน พร้อมการสำรองข้อมูลกุญแจ |
| ข้อความและไฟล์แนบ | การเก็บข้อมูลแอปพลิเคชันในรูปแบบข้อความธรรมดา | ดิสก์/โวลุ่มที่เข้ารหัส |
| ZIP/JSONL/CSV/HTML | การตรวจสอบความถูกต้อง ไม่มีการเข้ารหัสเนื้อหา | ปกป้องสำเนาที่ส่งออกและการถ่ายโอน |
| ที่มาและเวลา | บันทึกที่ลงนาม, ใบรับกระบวนการ, เครื่องมือตาม RFC 3161 | กุญแจที่เชื่อถือได้, จุดตรวจสอบอิสระ/TSA และขั้นตอนการเก็บรักษา |

**การป้องกันข้อมูล**ในส่วน Account แสดงสถานะเหล่านี้ โทเค็นของแผงควบคุมเป็น รหัสลับการเข้าถึง ไม่ใช่รหัสผ่านสำหรับการเข้ารหัส มันให้สิทธิ์การเข้าถึงระดับผู้ดูแลระบบ; [โทเค็นที่ออก](https://phishdestroy.github.io/TgWitness/th/docs/reference/access/)สามารถกำหนดขอบเขตให้ใช้ได้กับบัญชีและแชทได้ พื้นที่ทำงาน (Workspaces) ใช้ กระบวนการโฮสต์ร่วมกัน และไม่ใช่เทนท์ที่แยกกัน

การสาธิตสังเคราะห์ที่เริ่มต้นอย่างชัดเจนและแยกเป็นอิสระสามารถเปิดได้โดยอัตโนมัติผ่านการเชื่อมต่อ loopback โดยตรง ซึ่งใช้ความสามารถที่ทำงานในกระบวนการแยกต่างหาก; มันไม่ เปิดเผยโทเค็นแผงควบคุมที่ตั้งค่าไว้ และไม่ให้สิทธิ์เข้าถึงพื้นที่ทำงานจริง คำขอจากระยะไกล ผ่านพร็อกซี หรือข้ามต้นทาง ไม่สามารถรับหรือใช้ความสามารถการเข้าอัตโนมัตินี้ได้ ความสะดวกนี้ไม่ทำให้ขอบเขตการยืนยันตัวตนสำหรับข้อมูลบัญชีจริงถูกลบออก

BitLocker, LUKS, FileVault หรือ volume ที่เข้ารหัสแบบจัดการได้ สามารถปกป้องพื้นที่จัดเก็บข้อมูลได้ภายใต้ โมเดลภัยคุกคามของแต่ละระบบ ผู้ดูแลระบบของเครื่องที่เปิดล็อกและกำลังทำงาน ยังสามารถอ่านข้อมูลได้ ให้รวม SQLite WAL/SHM, ไฟล์สื่อ, ไฟล์ส่งออกชั่วคราว, swap, สำรองข้อมูล และไฟล์ที่ดาวน์โหลดจากเบราว์เซอร์ในการวางแผนพื้นที่จัดเก็บข้อมูล Docker volume ไม่ได้รับการเข้ารหัสเพียงเพราะ มันเป็น volume TgWitness ไม่ใช้ SQLCipher หรือการเข้ารหัสแบบอ็อบเจ็กต์

## กุญแจหลักภายนอก

สำหรับการติดตั้ง**ใหม่** ให้วางกุญแจหลัก (master key) ไว้นอกไดเรกทอรีข้อมูล ขั้นตอนนี้จะไม่ย้ายคลังกุญแจท้องถิ่น (local-key vault) ที่มีอยู่โดยอัตโนมัติ ให้เตรียมไดเรกทอรีกุญแจ ที่เข้าถึงได้เฉพาะโดยตัวตนของบริการ (service identity) แล้วรันคำสั่งต่อไปนี้:

```
python -m tgwitness.security create-master-key /private/keys/tgwitness-master.key
export TGWITNESS_VAULT_KEY_FILE=/private/keys/tgwitness-master.key
python -m tgwitness --data-dir /private/observations/new-case
```

PowerShell, โดยใช้สภาพแวดล้อมโครงการที่ติดตั้งไว้:

```
python -m tgwitness.security create-master-key E:\PrivateKeys\tgwitness-master.key
$env:TGWITNESS_VAULT_KEY_FILE = 'E:\PrivateKeys\tgwitness-master.key'
python -m tgwitness --data-dir E:\PrivateData\new-case
```

ใน Docker ให้ mount ไฟล์แบบอ่านอย่างเดียว (read-only) นอก `/data` เช่น ที่ `/run/secrets/tgwitness-master.key` และตั้งค่าตัวแปรสภาพแวดล้อม (environment variable) ให้ชี้ไปยังเส้นทางนั้น UID ของบริการต้องสามารถอ่านไฟล์นั้นได้ ให้ส่งเส้นทาง (path) ไม่ใช่ไบต์ของกุญแจ (key bytes) ผ่าน ไฟล์สภาพแวดล้อม/ไฟล์การตั้งค่า

แต่ละพื้นที่ทำงานจะได้รับ salt สาธารณะแบบสุ่มและกุญแจ Fernet ของตัวเองที่สร้างขึ้นผ่าน HKDF-SHA256. `vault.external.json` เก็บข้อมูลเมตาดาต้าการสร้างกุญแจ ไม่ใช่กุญแจหลัก หากกุญแจขาดหายหรือผิดพลาด ระบบจะไม่สามารถเริ่มต้นได้โดยไม่แทนที่กุญแจนั้นโดยเงียบๆ ให้เก็บรักษาทั้ง ข้อมูลเมตาดาต้า salt และกุญแจหลักไว้เพื่อการกู้คืน

ทุกพื้นที่ทำงานล้วนมีต้นกำเนิดจากกุญแจหลักเดียวกัน; การถูกบุกรุกของกุญแจหลักจะส่งผลกระทบต่อ ระบบติดตั้งทั้งหมด กระบวนการที่กำลังทำงานอยู่สามารถถอดรหัสความลับได้ นี่ไม่ใช่ HSM หรือ KDF ของรหัสผ่าน รหัสผ่านที่ผู้ใช้กำหนดเองจะไม่ได้รับการยอมรับแทนกุญแจสุ่ม

เก็บกุญแจเดิมไว้สำหรับการติดตั้งที่มีอยู่จนกว่าการย้ายระบบอย่างตั้งใจจะ ถูกดำเนินการและตรวจสอบแล้ว การลบ`vault.key` หรือการเปลี่ยนกุญแจหลักอาจทำให้ การเข้าถึงเซสชัน/กุญแจลงนามถูกทำลาย เก็บสำเนาสำรองที่เข้ารหัสและกุญแจไว้แยกกัน และ ทดสอบการกู้คืนในอินสแตนซ์ที่แยกออกมา

## แหล่งข้อมูลและขอบเขตการตรวจสอบ

ตรวจสอบเมื่อวันที่ 26 ตุลาคม 2026:

- https://core.telegram.org/api/auth
- https://core.telegram.org/api/obtaining_api_id
- https://docs.telethon.dev/en/stable/basic/signing-in.html
- https://docs.telethon.dev/en/stable/concepts/sessions.html
- https://core.telegram.org/mtproto/mtproto-transports
- https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/storage/storage_account.cpp
- Telethon 1.45.0: SQLiteSession, StringSession, `Connection._proxy_connect`, `TcpMTProxy.normalize_secret` และวิธีการดาวน์โหลด

การทดสอบในระบบท้องถิ่นครอบคลุมอุปกรณ์ทดสอบ loopback SOCKS5/HTTP CONNECT, เซสชัน SQLite สังเคราะห์, การแยกเส้นทาง, การยกเว้นข้อมูลลับ และการปฏิเสธเมื่อไม่มีกุญแจ ไม่มีการทดสอบ ความสามารถในการทำงานร่วมกันระหว่าง Telegram และพร็อกซีจริง หรือพฤติกรรมของ MTProxy ในสภาพแวดล้อมจริง ดู [VERIFICATION.md](https://phishdestroy.github.io/TgWitness/th/docs/reference/verification/) และ [LIVE_ACCEPTANCE.md](https://github.com/phishdestroy/TgWitness/blob/main/docs/internal/LIVE_ACCEPTANCE.md)
