1 คะแนน โดย GN⁺ 2024-05-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ฟีเจอร์หลักของ WagWag

  • เพิ่ม MFA, การจำกัดเส้นทาง และฟังก์ชันลงทะเบียนอุปกรณ์ให้กับ WireGuard
    • สามารถกำหนดเส้นทางที่ต้องยืนยันตัวตนด้วย MFA หรือเส้นทางที่เปิดให้เข้าถึงแบบสาธารณะได้ตลอดเวลา
    • มี API แบบเรียบง่ายสำหรับลงทะเบียนไคลเอนต์ใหม่
    • รองรับความพร้อมใช้งานสูง
    • มีตัวเลือก MFA หลากหลาย เช่น Webauthn, OIDC
  • พัฒนาโดยได้รับการสนับสนุนจาก Aura Information Security

ข้อกำหนด

  • ต้องติดตั้ง iptables และ libpam
  • Wag ต้องรันด้วยสิทธิ์ root เพื่อจัดการอุปกรณ์ iptables และ wireguard
  • ต้องเปิดใช้งานการส่งต่อใน sysctl
    sysctl -w net.ipv4.ip_forward=1
    
  • Wag ไม่ต้องใช้ wg-quick เป็นต้น ตราบใดที่เคอร์เนลรองรับ wireguard

วิธีติดตั้ง

ไบนารีรีลีส (ต้องการ glibc 2.31+)

curl -L $(curl -s https://api.github.com/repos/NHAS/wag/releases/latest | jq -M -r '.assets[0].browser_download_url') -o wag
sudo ./wag gen-config
sudo ./wag start -config <generated_config_name>  

ติดตั้งจากซอร์ส (ต้องการ go1.19, npm, gulp, clang, llvm-strip, libbpf)

git clone git@github.com:NHAS/wag.git
cd wag
make
cp example_config.json config.json
sudo ./wag start
  • หากรันอยู่หลังรีเวิร์สพร็อกซี ต้องตั้งค่า X-Forwarded-For

การจัดการ

ผู้ใช้ root สามารถจัดการเซิร์ฟเวอร์ wag ได้ด้วยคำสั่งต่อไปนี้:

wag subcommand [-options]
  • คำสั่งย่อยที่รองรับ: start, cleanup, reload, version, firewall, registration, devices, users, webadmin, gen-config
  • มีคำอธิบายวิธีใช้งานสำหรับแต่ละคำสั่ง

คู่มือผู้ใช้

ติดตั้ง Wag

  1. คัดลอก wag, config.json ไปไว้ที่ /opt/wag
  2. สร้าง private key ของ WireGuard ด้วย wg genkey แล้วตั้งค่าใน PrivateKey ของตัวอย่างคอนฟิก
  3. คัดลอก (หรือลิงก์) wag.service ไปไว้ที่ /etc/systemd/system/ แล้วเริ่ม/เปิดใช้งานบริการ

สร้างโทเคนลงทะเบียนใหม่

# ./wag registration -add -username tester

token,username
e83253fd9962c68f73aa5088604f3f425d58a963bfb5c0889cca54d63a34b2e3,tester

ดึงโทเคนด้วย curl:

curl http://public.server.address/register_device/…

บริการจะส่งคืนคำตอบในรูปแบบสมบูรณ์ ซึ่งสามารถบันทึกเป็นไฟล์ config ได้

ทำ MFA

ผู้ใช้เชื่อมต่อไปยังที่อยู่ VPN (เช่น 192.168.1.1:8080) แล้วกรอกรหัส 2FA สามารถกำหนดอายุเซสชันได้ในไฟล์ตั้งค่า

เข้าสู่ระบบคอนโซลจัดการ

ตั้งค่า ManagementUI.Enabled เป็น true แล้วรันคำสั่งต่อไปนี้:

sudo ./wag webadmin -add -username <your_username> -password <your-password-here>

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

ความเห็นของ GN⁺

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

  • การรองรับวิธียืนยันตัวตนที่หลากหลายก็เป็นข้อดีเช่นกัน น่าจะผสานเข้ากับระบบยืนยันตัวตนขององค์กรได้ง่ายผ่าน TOTP, WebAuth, OIDC เป็นต้น

  • สามารถกำหนดกฎ ACL ได้อย่างยืดหยุ่น จึงน่าจะควบคุมการเข้าถึงได้ละเอียด สามารถจำกัด IP, พอร์ต, โปรโตคอลที่เข้าถึงได้ตามผู้ใช้/กลุ่ม

  • น่าเสียดายที่ยังไม่รองรับ IPv6 ทุกวันนี้มีการเปลี่ยนผ่านไปสู่ IPv6 กันมากขึ้น จึงดูเป็นฟีเจอร์ที่ควรมีการรองรับโดยเร็ว

  • หากกำลังมองหาโซลูชัน VPN ที่ออกแบบมาสำหรับ Linux โดยเฉพาะ ก็ดูน่าจะเป็นอีกตัวเลือกที่ดี ทำงานได้บนระบบสมัยใหม่ที่ใช้เคอร์เนล 5.9 ขึ้นไป

1 ความคิดเห็น

 
GN⁺ 2024-05-13
ความคิดเห็นบน Hacker News

สรุป:

  • วิธีที่เซิร์ฟเวอร์สร้างคีย์ส่วนตัวแล้วส่งให้ไคลเอนต์นั้นไม่พึงประสงค์ ควรให้ไคลเอนต์สร้างคีย์ส่วนตัวเองและส่งคีย์สาธารณะไปยังเซิร์ฟเวอร์จึงจะเหมาะสมกว่า
  • ในตัวอย่างมีการใช้โปรโตคอล HTTP ซึ่งไม่เหมาะสมในด้านความปลอดภัย จึงแนะนำให้เปลี่ยนเป็น HTTPS
  • เมื่อเซสชันหมดเวลา ควรมีวิธีให้ไคลเอนต์รับรู้สถานะนี้ได้ ตัวอย่างเช่น อาจพิจารณาวิธีตรวจสอบสถานะเป็นระยะด้วยการเช็ก URL คล้ายฟังก์ชันตรวจจับ Captive Portal ของ Wi‑Fi
  • คีย์ของ WireGuard ทำหน้าที่เป็นคีย์เซสชันถาวร ดังนั้นหากต้องการให้เป็นโซลูชัน VPN server ที่สมบูรณ์ จำเป็นต้องมีฟังก์ชันเพิ่มเติม เช่น การหมุนเวียนคีย์เซสชันเป็นระยะ การยุติเซสชัน การเปลี่ยนที่อยู่ IP การตั้งค่าเส้นทาง และการยืนยันตัวตนใหม่เมื่อจำเป็น
  • มีหลายจุดที่คล้ายกับ Head หรือ Tailscale จึงน่าจะดีถ้ามีข้อมูลเปรียบเทียบเรื่องความซ้ำซ้อนของฟังก์ชัน ความแตกต่าง และแผนการพัฒนา
  • ควรมีมาตรการป้องกันการโจมตีแบบ brute-force ต่อรหัส TOTP เช่น การจำกัดอัตราคำขอหรือจำกัดจำนวนครั้งที่ลอง
  • หากเป็นไซต์ที่เลือกใช้ WireGuard ก็คาดว่าจะใช้การตั้งค่าที่ทันสมัย ดังนั้น ULA (Unique Local Address) ของ IPv6 น่าจะมีประโยชน์มาก