1 điểm bởi GN⁺ 2024-05-13 | 1 bình luận | Chia sẻ qua WhatsApp

Các tính năng chính của Wag

  • Thêm MFA, giới hạn tuyến đường và tính năng đăng ký thiết bị cho WireGuard
    • Có thể định nghĩa các tuyến yêu cầu xác thực MFA hoặc các tuyến luôn được truy cập công khai
    • Cung cấp API đơn giản để đăng ký client mới
    • Hỗ trợ tính sẵn sàng cao
    • Cung cấp nhiều tùy chọn MFA như Webauthn, OIDC
  • Được phát triển với sự hỗ trợ từ Aura Information Security

Yêu cầu

  • Cần cài đặt iptableslibpam
  • Wag phải chạy bằng quyền root để quản lý iptables và thiết bị wireguard
  • Phải bật forwarding trong sysctl
    sysctl -w net.ipv4.ip_forward=1
    
  • Wag không cần wg-quick hay công cụ tương tự miễn là kernel hỗ trợ WireGuard

Cách cài đặt

Bản phát hành nhị phân (yêu cầu 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>  

Cài đặt từ mã nguồn (cần 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
  • Nếu đang chạy phía sau reverse proxy thì cần cấu hình X-Forwarded-For

Quản trị

Người dùng root có thể quản lý máy chủ wag bằng lệnh sau:

wag subcommand [-options]
  • Các lệnh con được hỗ trợ: start, cleanup, reload, version, firewall, registration, devices, users, webadmin, gen-config
  • Có cung cấp phần mô tả cách dùng cho từng lệnh

Hướng dẫn người dùng

Cài đặt Wag

  1. Sao chép wag, config.json vào /opt/wag
  2. Tạo private key WireGuard bằng wg genkey rồi đặt vào PrivateKey trong cấu hình ví dụ
  3. Sao chép (hoặc liên kết) wag.service vào /etc/systemd/system/ rồi khởi động/kích hoạt dịch vụ

Tạo token đăng ký mới

# ./wag registration -add -username tester

token,username
e83253fd9962c68f73aa5088604f3f425d58a963bfb5c0889cca54d63a34b2e3,tester

Lấy token bằng curl:

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

Dịch vụ sẽ trả về phản hồi đầy đủ, có thể lưu thành file cấu hình.

Thực hiện MFA

Người dùng truy cập địa chỉ VPN (ví dụ: 192.168.1.1:8080) và nhập mã 2FA. Có thể chỉ định thời lượng phiên trong file cấu hình.

Đăng nhập vào bảng điều khiển quản trị

Đặt ManagementUI.Enabled thành true rồi chạy lệnh sau:

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

Truy cập địa chỉ lắng nghe dành cho quản trị và nhập thông tin xác thực. Không thể thêm người dùng quản trị qua giao diện web.

Ý kiến của GN⁺

  • Khá ấn tượng khi hỗ trợ tính sẵn sàng cao thông qua tính năng clustering. Điều này có vẻ hữu ích cho khôi phục sau thảm họa hoặc dịch vụ không gián đoạn.

  • Việc hỗ trợ nhiều phương thức xác thực cũng là một điểm mạnh. Với TOTP, WebAuth, OIDC, có vẻ có thể dễ dàng tích hợp với hệ thống xác thực của doanh nghiệp.

  • Có thể định nghĩa linh hoạt các quy tắc ACL, nên trông khá phù hợp cho việc kiểm soát truy cập chi tiết. Có thể giới hạn IP, cổng và giao thức được phép truy cập theo từng người dùng/nhóm.

  • Việc chưa hỗ trợ IPv6 là điều đáng tiếc. Hiện nay quá trình chuyển sang IPv6 đang diễn ra mạnh mẽ nên có vẻ cần hỗ trợ sớm.

  • Nếu đang tìm một giải pháp VPN tối ưu cho Linux thì đây có vẻ là một lựa chọn tốt. Nó hoạt động trên các hệ thống mới với kernel 5.9 trở lên.

1 bình luận

 
GN⁺ 2024-05-13
Ý kiến trên Hacker News

Tóm tắt:

  • Cách máy chủ tạo khóa riêng rồi gửi cho máy khách là không mong muốn. Phù hợp hơn là máy khách tự tạo khóa riêng và gửi khóa công khai lên máy chủ.
  • Ví dụ đang dùng giao thức HTTP, điều này không phù hợp về mặt bảo mật, nên đề xuất thay bằng HTTPS.
  • Cần có cách để máy khách nhận biết khi phiên hết thời gian chờ. Ví dụ có thể cân nhắc phương án kiểm tra URL định kỳ để xác nhận trạng thái, tương tự tính năng phát hiện Captive Portal của Wi‑Fi.
  • Khóa của WireGuard đóng vai trò khóa phiên lâu dài, vì vậy để trở thành một giải pháp máy chủ VPN hoàn chỉnh thì cần triển khai thêm các chức năng như xoay vòng khóa phiên định kỳ, kết thúc phiên, thay đổi địa chỉ IP, cấu hình định tuyến và gia hạn xác thực khi cần.
  • Có nhiều điểm tương đồng với Head hoặc Tailscale, nên sẽ tốt hơn nếu có tài liệu so sánh về phần chức năng bị chồng lặp, điểm khác biệt và kế hoạch triển khai.
  • Cần có biện pháp phòng chống tấn công vét cạn (brute-force attack) đối với mã TOTP. Ví dụ có thể cân nhắc các biện pháp như giới hạn tốc độ yêu cầu hoặc giới hạn số lần thử.
  • Nếu một hệ thống đã chọn WireGuard thì nhiều khả năng sẽ dùng cấu hình hiện đại, nên mức độ hữu ích của ULA (Unique Local Address) trong IPv6 sẽ cao.