Skip to content

Latest commit

 

History

History
274 lines (194 loc) · 29.7 KB

USAGE.md

File metadata and controls

274 lines (194 loc) · 29.7 KB

วิธีใช้งาน (Usage)

Web UI

เปิดเบราว์เซอร์ → http://127.0.0.1:8123 (พอร์ตเปลี่ยนได้ใน CONFIG.md)

ครั้งแรกต้องล็อกอินด้วยรหัสผ่าน — หาได้จาก:

python run.py password

ตอนรันเป็น service ต้องใช้คำสั่งนี้จากสิทธิ์ admin ด้วย (config อยู่ใต้ %ProgramData%)

หน้าแรก (Dashboard)

การ์ด ความหมาย
ล็อกอินล้มเหลว (24 ชม.) จำนวน Event 4625 ทั้งหมดใน 24 ชั่วโมงล่าสุด
ล็อกอินสำเร็จ (24 ชม.) จำนวน Event 4624 ที่นับได้
IP กำลังถูกบล็อก จำนวน IP ที่มี rule อยู่ในตาราง blocked ตอนนี้
บล็อกทั้งหมด ผลรวมตลอดกาล (ประวัติ + กำลังบล็อก)
กฎที่ตั้ง สรุปค่าการตรวจจับปัจจุบัน (max ครั้ง / กรอบเวลา / ชั่วโมงบล็อก)

แถบหัว (header) แสดงสถานะ: กำลังเฝ้าระวัง (เขียว) / เฝ้าระวังปิดอยู่ (เหลือง) / ไม่ทำงาน (แดง) + บริบทการรัน (Windows Service / standalone)

หน้า refresh อัตโนมัติทุก 3–5 วินาที

การตรวจจับ (พาเนลควบคุม)

ส่วน "การตรวจจับ" (ใต้การ์ดสถิติ): สวิตช์เปิด/ปิดเฝ้าระวังทั้งหมด + chip เปิด/ปิดแต่ละ engine (RDP/OpenSSH/MSSQL/IIS/MySQL/Generic) — กดแล้วมีผลทันที ไม่ต้อง restart

สถานะระบบ (พาเนลตรวจสอบ)

ส่วน "สถานะระบบ (ส่วนประกอบสำคัญ)" บอกว่าของที่ต้องใช้ทำงานได้จริงหรือไม่:

ส่วนประกอบ สถานะที่เป็นไปได้
Security event log (แหล่งหลัก) ✔ อ่านได้ / ✘ อ่านไม่ได้ (สิทธิ์ไม่พอ — service/SYSTEM อ่านได้)
Windows Firewall (ตัวบล็อก) ✔ เข้าถึง + มีสิทธิ์เพิ่ม rule / ○ เข้าถึงได้แต่ไม่มีสิทธิ์ / ✘ เข้า COM ไม่ได้
สิทธิ์โปรแกรม ✔ admin/SYSTEM / ✘ ผู้ใช้ธรรมดา (บล็อกไม่ได้)
Monitor / เฝ้าระวัง ✔ รันอยู่ / ✘ ไม่ได้รัน
แต่ละ Engine ✔ แหล่งข้อมูลพร้อม / ✘ อ่านไม่ได้ / ○ ยังไม่พบแหล่ง / ⊘ ปิดอยู่

ปุ่ม "ทดสอบบล็อกจริง (firewall)" — เพิ่ม + ลบ rule ทดสอบ (IP TEST-NET ไม่กระทบใคร) แล้วรายงานผลว่าบล็อกได้จริงหรือไม่ และถ้าไม่ได้บอกเหตุผลให้ (เช่น "ต้องรันด้วย admin")

ปุ่ม "ทดสอบระบบทั้งหมด (self-test)" — พิสูจน์ทั้ง pipeline แบบเรียลไทม์ (ใช้เวลา ~15-25 วิ):

  1. เขียน event จำลอง 5 รายการ (Event 18456) ลง Application log จริง
  2. engine MSSQL อ่าน event → detector บล็อก IP ทดสอบ (8.8.8.8) อัตโนมัติ
  3. ตรวจ rule ใน Windows Firewall ว่าถูกสร้างจริง
  4. ปลดบล็อก + ลบ event ทดสอบ (ทำความสะอาดให้เอง)

แสดงผลเป็นขั้นตอนทีละบรรทัด (✔/✘) — ถ้าผ่านทุกขั้น = ระบบทำงานได้จริงทั้งสาย ต้องรันด้วย admin/service

Windows Service (พาเนลควบคุม)

ส่วน "Windows Service" ในหน้าแรก (ใต้การ์ดสถิติ) แสดงสถานะ + ปุ่มควบคุม:

ปุ่ม การทำงาน
ติดตั้ง ลงทะเบียนเป็น Windows Service (เริ่มอัตโนมัติตอน boot)
เริ่ม / หยุด / รีสตาร์ท ควบคุม service
ถอน ถอนการติดตั้ง service
  • ปุ่มจะ ปิดใช้งานอัตโนมัติ ตามบริบท: รันใน service เอง / ไม่มีสิทธิ์ admin / สถานะไม่ตรง (เช่น กด "เริ่ม" ตอนรันอยู่แล้ว) — พร้อมข้อความอธิบายเหตุผล
  • ต้องเปิดโปรแกรมด้วย Run as administrator ถึงจะใช้ปุ่มได้
  • รันใน service อยู่ → ควบคุมผ่าน services.msc หรือ CLI (rdpguard.exe stop ฯลฯ) เท่านั้น

Session / Remote ที่ใช้งานอยู่

ตารางแสดง session RDP/console/network ปัจจุบัน (refresh ทุก 10 วินาที) โดยพยายามใช้ qwinsta/query session และ fallback เป็น WTS API (win32ts) ใน process เดียวกัน — ไม่ใช้ PowerShell จึงไม่ขึ้นกับการมีคำสั่งภายนอกและหลีกเลี่ยงการถูกโปรแกรมกันไวรัสฟลาก

เหตุการณ์ล่าสุด

ตารางแสดง failed/success logon ล่าสุด 80 รายการ: เวลา (UTC), IP, ผู้ใช้, โดเมน, LogonType, แหล่ง (RDP/OpenSSH/MSSQL/IIS Web/MySQL — รู้ว่าโจมตีผ่านช่องทางไหน), ประเภท (ล้มเหลว/สำเร็จ/NTLM)

IP ที่ถูกบล็อก / Whitelist / Blacklist

  • ตารางมีคอลัมน์ "ประเทศ" แสดงธง + ชื่อประเทศของแต่ละ IP (GeoIP ออนไลน์ + cache — ถ้าเครื่องออฟไลน์แสดง "-" ไม่กระทบการบล็อกแต่อย่างใด)
  • ปุ่ม ปลดบล็อก — ถอด rule firewall + ลบออกจากตารางทันที
  • กล่อง บล็อกด้วยมือ — ใส่ IP (หรือ CIDR เช่น 203.0.113.0/24) + จำนวนชั่วโมง (0 = ถาวร) แล้วกดปุ่ม
  • Whitelist = เพิ่มแล้วปลดบล็อกทันที (ถ้าถูกบล็อกอยู่) + จะไม่ถูกบล็อกเด็ดขาด (กัน IP สำนักงาน/ตัวเอง — รองรับ CIDR)
  • Blacklist = เพิ่มแล้วบล็อกทันที (สร้าง rule firewall เลย ไม่ต้องรอให้ IP นั้นโจมตี — รองรับ CIDR) — ลบออกจาก blacklist = ปลดบล็อกให้อัตโนมัติด้วย

การปลดบล็อกอัตโนมัติ + ขยายบล็อก

  • ครบเวลาปลดเอง: ทุก 60 วินาทีระบบตรวจ — บล็อกที่หมดอายุ (block_hours) ถูกลบ rule + ปลดให้อัตโนมัติ (ยกเว้นถูกโจมตีต่อ → auto_extend ต่ออายุ)
  • ขยายบล็อก IP ขาประจำ: IP ที่โดนบล็อกครบ escalate_after_blocks ครั้ง (ค่าเริ่มต้น 3 ครั้งใน 30 วัน) แล้วกลับมาโจมตีอีก → ครั้งถัดไปขยายเป็น escalate_block_hours (7 วัน) หรือถาวร (escalate_to_permanent) — เห็นเหตุผลในตารางว่า "ขยายบล็อกเป็น 168 ชม."
  • ตัวนับสะสม (ยิงสั้น ๆ แล้วหนี): นับความล้มเหลวสะสมต่อ IP ภายใน accumulate_window_hours (ค่าเริ่มต้น 24 ชม.) แยกจากตัวนับ window ระยะสั้น — IP ที่ยิงทีละ 1-2 ครั้งไม่ถึงเกณฑ์ short-window แต่สะสมครบ accumulate_threshold (ค่าเริ่มต้น 8) โดนบล็อกด้วย accumulate_block_hours (ค่าเริ่มต้น 6 ชม. — สั้นกว่าปกติ กันพลาดบล็อกผู้ใช้หลัง NAT) — เห็นใน log ว่า สะสม N/M ใน 24 ชม. และตาราง IP ถูกบล็อกมี badge "สะสม"; IP ที่ล็อกอินสำเร็จจะถูกล้างตัวนับทันที
  • auto_extend จะไม่ลดระยะเวลาที่ขยายแล้ว และไม่แตะบล็อกถาวร

Log การทำงาน

พาเนลด้านล่างสุดแสดง rdpguard.log ล่าสุด โดยเลือกได้ 250 / 500 / 1000 บรรทัด (refresh อัตโนมัติทุก 5 วินาที + ปุ่ม "โหลดใหม่") พร้อมแสดง path และขนาดไฟล์

  • ระบบอ่านเฉพาะ 64 KB ท้ายสุดของไฟล์ต่อ request จึงไม่โหลด log ทั้งไฟล์เข้าหน่วยความจำ
  • ไฟล์ log หมุนอัตโนมัติเมื่อถึง [general] log_max_mb (ค่าเริ่มต้น 5 MB) และเก็บไฟล์เก่าตาม [general] log_backups (ค่าเริ่มต้น 5 ไฟล์)
  • ไฟล์ปัจจุบันและไฟล์สำรองใช้ชื่อ rdpguard.log, rdpguard.log.1, ... — ลบไฟล์สำรองได้เมื่อหยุดโปรแกรมแล้ว
  • เลือกไฟล์หมุนเวียน, ค้นหาข้อความ, หยุด auto-refresh และดาวน์โหลด Log ได้

แนวโน้ม / ประวัติ / Audit

  • แนวโน้ม 7 วัน แสดงจำนวนล้มเหลว/สำเร็จรายวันเพื่อดูช่วงที่มีการโจมตีหนัก
  • ประวัติการบล็อก แสดง IP ที่ถูกปลดแล้ว พร้อมเหตุผลและผู้ดำเนินการ
  • Audit Log บันทึกการ block/unblock, whitelist/blacklist, เปลี่ยน config, ทดสอบแจ้งเตือน และควบคุม service
  • ทั้งประวัติและ Audit Log ส่งออกเป็น CSV ได้

Whitelist / Blacklist

รายการ พฤติกรรม
Whitelist IP/CIDR ที่จะไม่มีวันถูกบล็อกอัตโนมัติ (เช่น IP สำนักงาน, IP ตัวเอง)
Blacklist IP/CIDR ที่จะถูกบล็อกทันทีแม้พยายามครั้งแรก

ตั้งค่า

เปลี่ยนค่าการเฝ้าระวัง/ตรวจจับ/firewall/engine/แจ้งเตือน/Web UI ได้จากหน้าเว็บ กด บันทึกการตั้งค่า แล้วมีผลทันที โดย service/monitor โหลด config ใหม่เอง

  • การเปลี่ยน webui.host หรือ webui.port ต้อง restart โปรแกรม/service เพราะเป็นค่าที่ใช้ตอนเปิด HTTP server
  • ค่าใน [general] โดยเฉพาะ log_level, log_max_mb, log_backups แก้จากหน้า Settings หรือ config.ini ได้ แต่ต้อง restart เพื่อให้ logging handler ใช้ค่าใหม่
  • ค่า retention (event_retention_days, history_retention_days, audit_retention_days) ต้อง restart และระบบจะล้างข้อมูลเก่าตามรอบ cleanup
  • ปุ่ม ดาวน์โหลด Backup จะล้างค่าลับออกจาก config; ปุ่ม กู้คืน Backup ต้อง restart ก่อนใช้ฐานข้อมูลใหม่

ตั้งค่า Generic engine (ไฟล์ log ของโปรแกรมอื่น + regex เอง เช่น MailEnable/SmarterMail/PBX) ดูตัวอย่างโปรแกรมจริงและวิธีทดสอบ regex ได้ที่ GENERIC.md

แจ้งเตือน (Telegram / Email)

เมื่อบล็อก IP ระบบส่งข้อความแจ้งเตือน — ตั้งค่าในหน้า ตั้งค่า → "แจ้งเตือน (Telegram / Email)": เปิดสวิตช์ + ใส่ Bot Token/Chat ID (Telegram — สร้าง bot กับ @BotFather) และ/หรือ SMTP (อีเมล) แล้วกด "ส่งข้อความทดสอบ" ตรวจก่อนใช้จริง

  • ข้อความ: [ชื่อเครื่อง] บล็อก IP <ip> (RDP) — เหตุผล — หมดอายุ <เวลา> — ขึ้นต้นด้วยชื่อเครื่องเสมอ (ตั้งเองได้ในช่อง ชื่อเครื่อง ว่าง = ชื่อเครื่องระบบ) — รู้ได้ทันทีว่าข้อความมาจากเครื่องไหน ถ้าเฝ้าหลายเครื่อง
  • ช่องทางเลือกได้: ทั้งสองช่องทาง, Telegram เท่านั้น หรือ Email เท่านั้น
  • cooldown 60 วิ (ค่าเริ่มต้น): โจมตีหนัก ๆ ข้อความถูกรวมเป็นชุดเดียว ไม่สแปม (ตั้ง 0 = ส่งทันทีทุกครั้ง)
  • ส่งแบบ background — ไม่หน่วงการบล็อก; ถ้าส่งไม่สำเร็จ (network/ตั้งค่าผิด) ดู rdpguard.log
  • ถ้า Telegram ขึ้น CERTIFICATE_VERIFY_FAILED จาก proxy/โปรแกรมกันไวรัสที่ intercept HTTPS ให้ปิด ตรวจสอบ SSL ของ Telegram แล้วกดบันทึก; ค่านี้มีผลเฉพาะ Telegram
  • Webhook เป็นช่องทางเสริม ตั้งค่า URL และเปิดใช้ได้จากกลุ่มแจ้งเตือน

ควบคุมผ่าน Telegram (Telegram Command)

เปิด "เปิดรับคำสั่งจาก Telegram" ในหน้า ตั้งค่า → แจ้งเตือน เมื่อตั้งค่า Bot Token และ Chat ID แล้วจะควบคุม RDPGuard จาก Telegram ได้

คำสั่งที่รองรับ:

คำสั่ง การทำงาน
/where แสดงชื่อเครื่องนี้ + เวอร์ชัน
/status สถานะระบบ (monitor, engines, blocked, fail 24 ชม.)
/block <ip> [ชั่วโมง] บล็อก IP (0 = ถาวร)
/unblock <ip> ปลดบล็อก IP
/unblock-all ปลดบล็อกทุก IP — ต้องยืนยัน /confirm
/allow <ip> เพิ่ม whitelist + ปลดบล็อก
/blacklist <ip> / /whitelist <ip> จัดการรายการ
/list blocked|white|black ดูรายการล่าสุด
/events [n] เหตุการณ์ล่าสุด (สูงสุด 20)
/log [บรรทัด] ดู log ท้ายสุด (สูงสุด 50)
/ping ตรวจ bot ทำงาน
/help รายการคำสั่ง
  • รับคำสั่งจาก telegram_chat_id ที่ตั้งไว้เท่านั้น — แชทอื่นถูกปฏิเสธเงียบ ๆ
  • จำกัดคำสั่งต่อนาทีตาม rate_limit_per_minute
  • /unblock-all ต้องยืนยัน /confirm ภายใน confirm_timeout_seconds
  • ทุกคำสั่งบันทึกลง Audit Log
  • ระบบทำงานผ่าน Bot API long-polling ไม่ต้องเปิดพอร์ตหรือตั้ง HTTPS

หลายเครื่อง / bot เดียว — ใช้ bot และ Chat ID เดียวกันกับหลายเครื่องได้ โดยตั้ง ชื่อเครื่อง ให้ต่างกัน (หน้า ตั้งค่า → แจ้งเตือน):

  • ทุกคำตอบขึ้นต้นด้วย [ชื่อเครื่อง] — รู้เสมอว่าคำตอบมาจากเครื่องไหน
  • ต่อท้ายคำสั่งด้วย @ชื่อเครื่อง เพื่อสั่งเครื่องที่ต้องการ เช่น /status @srv-a — เครื่องที่ไม่ใช่เป้าตอบปฏิเสธ ไม่ลงมือทำ
  • หมายเหตุ: คำสั่งที่ส่งไปจะตกที่เครื่องใดเครื่องหนึ่งแบบสุ่ม (เครื่องที่ polling ถึงก่อน) — ถ้าคำตอบมาจากเครื่องที่ไม่ต้องการ ให้ส่งซ้ำ; /where ใช้ยืนยันว่าเครื่องไหนตอบอยู่
  • ระบบใช้ staggered polling กันการชนกันเอง: เครื่องที่เจอ 409 Conflict (อีกเครื่องถือสิทธิ์อยู่) จะรอสุ่ม 15–45 วิ แล้วลองใหม่ — ทุกเครื่องผลัดกันรับคำสั่ง ไม่มีเครื่องไหนถูกกันออกถาวร (ปรับช่วงเวลาได้ใน ตั้งค่า → แจ้งเตือน)

CLI

ทุกคำสั่งใช้ผ่าน python run.py <คำสั่ง> หรือ python -m rdpguard <คำสั่ง> (รันจากโฟลเดอร์โปรเจกต์) ถ้าสร้าง exe แล้วใช้ rdpguard.exe <คำสั่ง>

รันโดยไม่มีคำสั่ง (เช่น ดับเบิลคลิก rdpguard.exe) = เริ่มเฝ้าระวังทันที (monitor + web UI) + เปิดเบราว์เซอร์ให้อัตโนมัติ และถ้าเป็นครั้งแรก จะเจอ Setup Wizard ตั้งค่าทีละขั้นก่อน

คำสั่ง ความหมาย ต้อง admin?
install ติดตั้ง Windows Service (เริ่มอัตโนมัติตอน boot) ใช่
remove ถอนการติดตั้ง service ใช่
start / stop / restart ควบคุม service ใช่
status ดูสถานะ service (installed? running?) ไม่
run รันแบบ foreground (monitor + web) — ใช้ทดสอบ/ดู log สด แนะนำใช่ (จะบล็อก IP ได้)
web รันเฉพาะ Web UI โดยไม่เฝ้าระวัง — ใช้ทดสอบ UI ไม่
unblock-all ปลดบล็อกทุก IP ที่ RDPGuard จัดการ (ฉุกเฉิน) ใช่
allow <ip> เพิ่ม IP เข้า whitelist และปลดบล็อกทันที (ฉุกเฉิน) ใช่

Setup Wizard (ครั้งแรก)

ตอนรันครั้งแรก (ยังไม่เคยตั้งค่า) Web UI จะแสดงวิซซาร์ด 4 ขั้นตอนให้ตั้งค่าก่อนใช้งาน:

  1. ยินดีต้อนรับ — อธิบายการทำงาน + แนะนำการติดตั้งเป็น service
  2. การตรวจจับ — จำนวนครั้ง/กรอบเวลา/ระยะเวลาบล็อก/ข้าม LAN
  3. Web UI — host/พอร์ต/รหัสผ่าน
  4. พร้อมใช้งาน — สรุปการตั้งค่า → กด "เสร็จสิ้น" เพื่อบันทึกและเริ่มเฝ้าระวังทันที

กด "ข้ามการตั้งค่า" ได้ถ้าไม่อยากตั้ง (จะใช้ค่าเริ่มต้นทั้งหมด) — ตั้งค่าทีหลังได้ที่หน้า "ตั้งค่า" ใน dashboard | block <ip> [ชั่วโมง] | บล็อก IP ด้วยมือ (ค่าเริ่มต้น 24 ชม., 0 = ถาวร) | ใช่ | | unblock <ip> | ปลดบล็อก IP | ใช่ | | password | แสดงรหัสผ่าน Web UI | ไม่ | | password reset | สุ่มรหัสผ่าน Web UI ใหม่ | ไม่ | | version | แสดงเวอร์ชัน | ไม่ | | help | แสดงคำสั่งทั้งหมด | ไม่ |

ตัวอย่าง

:: ดูสถานะ
python run.py status

:: บล็อก IP ด้วยมือ 12 ชั่วโมง
python run.py block 203.0.113.9 12

:: บล็อกถาวร
python run.py block 203.0.113.9 0

:: ปลดบล็อก
python run.py unblock 203.0.113.9

:: รีเซ็ตรหัสผ่าน Web UI
python run.py password reset

มี IP โดนบล็อกเยอะมาก (>50) ทำอย่างไร?

RDPGuard บล็อกได้ไม่จำกัด (1 rule ต่อ IP — Windows Firewall รองรับเป็นร้อยได้สบาย) แต่เมื่อจำนวนเยอะ หน้าจอ/rules จะรก ถ้าเกินหลักพันอาจเริ่มหน่วง แนวทางจัดการ:

วิธี ทำยังไง
บล็อกแบบ CIDR ถ้า IP โจมตีมาจาก subnet เดียวกัน (เช่น 203.0.113.5, 203.0.113.9) → บล็อก 203.0.113.0/24 rule เดียวครอบหมด (ช่อง "บล็อกด้วยมือ" รับ CIDR ได้)
Blacklist ด้วย CIDR ใส่ subnet ที่โจมตีประจำใน blacklist → บล็อกทันทีทั้งวง
ลด block_hours ตั้ง block_hours = 6 (หน้า ตั้งค่า) — IP หมดอายุเร็ว ไม่สะสมเยอะ (IP ขาประจำยังถูก escalation ขยายให้)
ปลดล้าง ปลดรายตัวในตาราง / "ปลดบล็อกทั้งหมด (ฉุกเฉิน)" / CLI rdpguard.exe unblock-all

Web UI จะแสดงคำเตือนอัตโนมัติเมื่อมี IP ถูกบล็อกเกิน 50 (และเตือนแรงขึ้นเมื่อเกิน 200) พร้อมคำแนะนำข้างต้น

ถูกล็อกตัวเอง (IP ผู้ดูแลโดนบล็อกโดยไม่ตั้งใจ) ทำไง?

RDPGuard มีกัน 3 ชั้นอัตโนมัติ: ไม่บล็อก IP ที่มี session ล็อกอินสำเร็จล่าสุด (active_session_grace_minutes), ปลดบล็อกอัตโนมัติเมื่อ IP นั้นล็อกอินสำเร็จ, และปลดบล็อก IP ที่อยู่ใน whitelist/never_block_ips ทุก 60 วินาที

ถ้ายังโดนล็อกจริง ให้ใช้วิธีนี้ (เรียงตามความสะดวก):

วิธี ขั้นตอน
Web UI เข้า http://127.0.0.1:8123 (ถ้าเข้าได้) → หน้า "IP ที่ถูกบล็อก" → ปลดบล็อกทั้งหมด (ฉุกเฉิน) หรือปลดเฉพาะ IP
CLI จาก console จริง ไปที่เครื่อง (จอ/คีย์บอร์ดจริง, iDRAC, VM console — ไม่ต้องพึ่ง RDP) → รัน rdpguard.exe unblock-all หรือ rdpguard.exe unblock <IP> หรือ rdpguard.exe allow <IP> (เพิ่ม whitelist + ปลดบล็อก)
แก้ config แก้ config.ini เพิ่ม IP ตัวเองใน never_block_ips = 1.2.3.4 → รอ ≤60 วิ ระบบปลดให้เอง (service รีโหลด config อัตโนมัติ)

แนะนำ: เตรียม allow ไว้ล่วงหน้า — จด IP ที่ใช้เข้าประจำไว้ใน never_block_ips หรือ whitelist ตั้งแต่แรก

ไฟล์ข้อมูล

ตำแหน่งขึ้นกับโหมดการรัน:

โหมด ตำแหน่ง (config.ini, rdpguard.db, rdpguard.log)
exe (rdpguard.exe) โฟลเดอร์เดียวกับ exe ถ้าเขียนได้; ถ้าไม่ได้ใช้ data directory สำรอง
source (python run.py) %ProgramData%\RDPGuard\ (ถ้าเขียนไม่ได้ → C:\Users\<user>\.rdpguard\)
ไฟล์ ความหมาย
config.ini ตั้งค่าทั้งหมด (ส่วนใหญ่แก้ผ่าน Web UI ได้; ค่า [general] ต้องแก้ไฟล์โดยตรง)
rdpguard.db SQLite: เหตุการณ์, blocked, whitelist, blacklist
rdpguard.log log การทำงาน

โหมด exe: ถ้าข้าง exe ยังไม่มีข้อมูล แต่มีข้อมูลเก่าที่ %ProgramData%\RDPGuard\ อยู่ (จากโหมด source/เวอร์ชันก่อนหน้า) ระบบจะคัดลอก config.ini + rdpguard.db มาไว้ข้าง exe อัตโนมัติตอนรันครั้งแรก

ทดสอบว่าระบบทำงาน

  1. เปิด RDP ไปที่เครื่องตัวเอง (จากเครื่องอื่น) แล้วลองใส่รหัสผิด 5+ ครั้งภายใน 10 นาที
  2. เปิด Web UI → ควรเห็นเหตุการณ์ล้มเหลวสะสม และ IP นั้นโดนบล็อกอัตโนมัติ (การ์ด "IP กำลังถูกบล็อก" เพิ่มขึ้น)
  3. ลองรัน python run.py status + wf.msc → ค่าเริ่มต้นดู rule ชื่อ RDPGuard Block (single rule); ถ้าตั้ง single_rule = false จะเห็น rule แยกตาม IP
  4. ปลดบล็อกได้จากปุ่มใน Web UI หรือ python run.py unblock <IP>