Tìm kiếm trang web

Cách cài đặt WireGuard VPN + giao diện web trên Ubuntu


Tiết lộ: Bài viết này chứa các liên kết tiếp thị liên kết. Tôi có thể nhận hoa hồng khi bạn mua qua các liên kết này mà không mất thêm chi phí nào.

Khi bạn kết nối với WiFi của quán cà phê hoặc truy cập internet từ bất kỳ mạng công cộng nào, dữ liệu của bạn đi qua cơ sở hạ tầng mà bạn không kiểm soát. Bất kỳ ai đứng giữa bạn và các trang web bạn truy cập đều có thể chặn lưu lượng truy cập của bạn, ngay cả trên mạng gia đình, nhà cung cấp dịch vụ internet của bạn có thể thấy mọi trang bạn truy cập.

VPN giải quyết vấn đề này bằng cách tạo ra một đường hầm được mã hóa giữa thiết bị của bạn và một máy chủ mà bạn tin tưởng. Thay vì lưu lượng của bạn đi trực tiếp ra internet, nó sẽ đi qua đường hầm bảo mật này tới máy chủ VPN của bạn, sau đó máy chủ sẽ chuyển tiếp đến đích cuối cùng, vì vậy bất kỳ ai theo dõi mạng đều chỉ thấy dữ liệu được mã hóa đi tới máy chủ VPN của bạn, không thấy gì khác.

WireGuard là một giao thức VPN hiện đại thực hiện công việc này một cách đáng kinh ngạc. Khác với các công nghệ VPN cũ cần hàng trăm nghìn dòng mã, WireGuard hoàn thành cùng một nhiệm vụ chỉ với khoảng 4.000 dòng mã, điều này có nghĩa là ít lỗi hơn, hiệu suất tốt hơn và dễ kiểm tra bảo mật hơn.

Nhưng vấn đề là: trong khi WireGuard tự nó đơn giản, việc quản lý nhiều client VPN, tạo các tệp cấu hình và theo dõi ai có quyền truy cập có thể trở nên nhàm chán chỉ qua dòng lệnh, đó là lý do việc có một giao diện web trở nên hữu ích.

Trong hướng dẫn này, chúng tôi sẽ thiết lập một máy chủ VPN WireGuard hoàn chỉnh với giao diện web thân thiện, cho phép bạn quản lý mọi thứ qua trình duyệt của mình, chẳng hạn như thêm thiết bị mới, tạo mã QR cho các thiết bị di động và giám sát kết nối mà không cần phải chỉnh sửa thủ công bất kỳ tệp cấu hình nào.

Những thứ bạn cần

Trước khi bắt đầu, hãy chắc chắn rằng bạn đã có:

  • Một máy chủ Linux có địa chỉ IP công khai (một VPS từ các nhà cung cấp như DigitalOcean, Linode, hoặc AWS hoạt động hoàn hảo).
  • Quyền truy cập root hoặc quyền sudo trên máy chủ này.
  • Hiểu biết cơ bản về SSH (bạn nên biết cách kết nối với máy chủ của mình).

Hướng dẫn này giả định rằng bạn đang sử dụng Ubuntu 22.04 hoặc Ubuntu 24.04, nhưng các bước cũng áp dụng tương tự trên Debian và các bản phân phối khác với một vài điều chỉnh nhỏ.

Hiểu về Kiến trúc

Hãy dành chút thời gian để hiểu chúng ta đang xây dựng gì trước khi bắt đầu nhập lệnh.

Một thiết lập WireGuard bao gồm các peer – các thiết bị có thể giao tiếp với nhau thông qua các kênh mã hóa.

Trong trường hợp của chúng ta, chúng ta sẽ có:

  • Máy chủ: Máy Linux của bạn với địa chỉ IP công khai, đóng vai trò như trung tâm kết nối mà tất cả các thiết bị của bạn kết nối tới.
  • Khách hàng: Máy tính xách tay, điện thoại, máy tính bảng hoặc bất kỳ thiết bị nào khác mà bạn muốn bảo vệ, mỗi khách hàng đều có cặp khóa mã hóa và cấu hình riêng.
  • : Một ứng dụng web nhẹ (chúng tôi sẽ sử dụng WireGuard-UI) chạy trên máy chủ của bạn và cung cấp cho bạn một bảng điều khiển để quản lý mọi thứ.

Khi một khách hàng muốn kết nối, nó sẽ thiết lập một đường hầm mã hóa trực tiếp tới máy chủ và sau đó máy chủ sẽ định tuyến lưu lượng internet của khách hàng hoặc đơn giản là cho phép truy cập vào các tài nguyên trên mạng cục bộ của máy chủ, tùy thuộc vào cách bạn cấu hình nó.

Bước 1: Cài đặt WireGuard trên máy chủ Ubuntu

Trước tiên, hãy đảm bảo rằng hệ thống của bạn đã được cập nhật và cài đặt đầy đủ các công cụ cần thiết bằng cách sử dụng lệnh sau, lệnh này sẽ cập nhật danh sách gói và nâng cấp bất kỳ phần mềm nào đã lỗi thời.

sudo apt update && sudo apt upgrade -y

Tiếp theo, cài đặt WireGuard:

sudo apt install wireguard -y

Vì WireGuard được tích hợp vào kernel Linux (cho kernel 5.6 trở lên), lệnh này chủ yếu cài đặt các công cụ người dùng cần thiết để cấu hình và quản lý các giao diện WireGuard.

Cài đặt WireGuard trên Ubuntu

Bước 2: Bật chuyển tiếp IP trên Ubuntu

Theo mặc định, Ubuntu không chuyển tiếp các gói tin giữa các giao diện mạng, đây là một tính năng bảo mật giúp máy chủ của bạn không hoạt động như một bộ định tuyến trừ khi bạn rõ ràng ra lệnh cho nó, nhưng đối với máy chủ VPN, chúng ta cần chức năng này.

Khi điện thoại của bạn kết nối với VPN và cố gắng truy cập một trang web, máy chủ cần chuyển tiếp yêu cầu đó từ giao diện WireGuard sang giao diện mạng công cộng của nó, sau đó chuyển tiếp phản hồi trở lại.

Để bật chuyển tiếp IP vĩnh viễn, chúng ta cần chỉnh sửa một tệp cấu hình hệ thống:

sudo nano /etc/sysctl.conf

Tìm dòng này (nó có thể bị chú thích bằng # ở đầu):

#net.ipv4.ip_forward=1

Xóa # để bỏ chú thích, hoặc thêm dòng này nếu nó không tồn tại:

net.ipv4.ip_forward=1

Lưu tệp và sau đó áp dụng thay đổi mà không cần khởi động lại:

sudo sysctl -p

Bật Chuyển tiếp IP trên Ubuntu

Bước 3: Cấu hình Tường lửa và Định tuyến cho WireGuard

Máy chủ VPN của bạn cần chấp nhận các kết nối đến trên cổng mà WireGuard sử dụng (mặc định, cổng UDP 51820). Nó cũng cần định tuyến đúng lưu lượng giữa giao diện VPN và giao diện mạng công cộng của bạn.

Đầu tiên, hãy xác định giao diện mạng công cộng của bạn:

ip route | grep default

Bạn sẽ thấy kết quả như sau:

default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100

Tên giao diện ở đây là `eth0`, nhưng trên hệ thống của bạn có thể khác, nó có thể là `ens3`, `enp0s3`, hoặc một cái gì đó tương tự.

Bây giờ hãy cấu hình tường lửa ufw (tường lửa mặc định của Ubuntu):

# Allow SSH (if you haven't already)
sudo ufw allow 22/tcp

# Allow WireGuard
sudo ufw allow 51820/udp

# Allow the web interface (we'll use port 5000)
sudo ufw allow 5000/tcp

Tiếp theo, chúng ta cần thêm một quy tắc NAT (Network Address Translation) để chỉ cho máy chủ của bạn giả mạo lưu lượng VPN như thể nó đến từ chính máy chủ khi chuyển tiếp lên internet.

sudo nano /etc/ufw/before.rules

Thêm những dòng này ở đầu file, ngay sau các comment phần header, nhưng trước dòng *filter và thay eth0 bằng tên giao diện thực tế của bạn:

# NAT table rules for WireGuard
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
COMMIT

Điều này có nghĩa là:

  • *nat: Chúng tôi đang làm việc với bảng NAT.
  • -s 10.0.0.0/24: Dành cho các gói tin đến từ mạng VPN của chúng tôi (10.0.0.0/24 là subnet chúng tôi sẽ phân cho các client VPN).
  • -o eth0: Ra ngoài thông qua giao diện eth0.
  • -j MASQUERADE: Viết lại địa chỉ IP nguồn thành địa chỉ IP công khai của máy chủ.

Lưu và thoát, sau đó kích hoạt và tải lại UFW:

sudo ufw enable
sudo ufw reload

Bước 4: Cài đặt WireGuard-UI trên máy chủ Ubuntu

Bây giờ đến phần thú vị, thiết lập giao diện web bằng WireGuard-UI, một ứng dụng web gọn gàng và đơn giản được viết bằng Go.

Đầu tiên, tạo một thư mục cho WireGuard-UI:

sudo mkdir -p /opt/wireguard-ui
cd /opt/wireguard-ui

Tiếp theo, tải xuống phiên bản phát hành mới nhất của WireGuard-UI từ trang phát hành trên GitHub, nhưng tại thời điểm viết, lệnh wget lấy được một phiên bản ổn định gần đây:

sudo wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.6.2/wireguard-ui-v0.6.2-linux-amd64.tar.gz

Sau khi tải về, giải nén và làm cho nó có thể thực thi:

sudo tar -xzf wireguard-ui-v0.6.2-linux-amd64.tar.gz
sudo chmod +x wireguard-ui

Trước khi chúng ta bắt đầu giao diện, hãy tạo một dịch vụ systemd để nó tự động chạy khi khởi động.

sudo nano /etc/systemd/system/wireguard-ui.service

Dán cấu hình này:

[Unit]
Description=WireGuard UI
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Lưu và thoát, sau đó kích hoạt và khởi động dịch vụ:

sudo systemctl daemon-reload
sudo systemctl enable wireguard-ui
sudo systemctl start wireguard-ui

Kiểm tra xem nó có đang chạy không:

sudo systemctl status wireguard-ui

Kiểm tra trạng thái Wireguard-UI

Bước 5: Truy cập Wireguard-UI

Mở trình duyệt web của bạn và truy cập vào URL sau, đảm bảo thay YOUR_SERVER_IP bằng địa chỉ IP công cộng thực tế của máy chủ của bạn.

http://YOUR_SERVER_IP:5000

Bạn sẽ thấy một trang đăng nhập, nơi bạn có thể sử dụng các thông tin đăng nhập mặc định sau:

Username: admin
Password: admin

Bảng điều khiển Wireguard-UI

Quan trọng: Hãy thay đổi những thông tin này ngay sau khi đăng nhập. Nhấp vào tên người dùng của bạn ở góc trên bên phải, sau đó chọn “Cài đặt,” và cập nhật mật khẩu của bạn.

Bước 6: Cấu hình máy chủ WireGuard của bạn

Khi bạn đã đăng nhập, bạn sẽ được đưa đến bảng điều khiển WireGuard-UI. Để bắt đầu cấu hình máy chủ của bạn, nhấp vào “WireGuard Server” ở thanh bên trái và đặt Tên Giao Diện thành 10.0.0.1/24 (giao diện WireGuard mặc định), và Cổng Nghe thành 51820.

Trong trường Post Up Script, hãy nhập:

iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

và trong trường Post Down Script, hãy nhập:

iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Hãy chắc chắn thay thế eth0 bằng tên giao diện mạng thực tế của bạn nếu nó khác và đặt Address thành 10.0.0.1/24, đây sẽ là địa chỉ IP VPN nội bộ của máy chủ.

Khi bạn nhấp vào Áp dụng Cấu hình, WireGuard sẽ tạo giao diện wg0, lắng nghe các kết nối VPN trên cổng 51820, gán địa chỉ IP VPN cho máy chủ của bạn và cấu hình các quy tắc tường lửa để chuyển tiếp lưu lượng VPN một cách hợp lý.

Giao diện người dùng cũng sẽ tự động tạo khóa riêng và khóa công khai cho máy chủ của bạn. Sau khi áp dụng cài đặt, giao diện sẽ hiển thị là Đang hoạt động, cho thấy máy chủ WireGuard của bạn đã hoạt động.

Cấu hình máy chủ WireGuard

Bước 7: Thêm Client WireGuard Đầu Tiên Của Bạn

Bây giờ hãy thêm một thiết bị vào VPN của bạn, có thể là laptop, điện thoại hoặc bất kỳ thiết bị khách nào khác. Từ thanh bên trái, nhấp vào “Clients”, sau đó nhấp vào “Add New Client”.

Đặt cho thiết bị một tên mô tả như “My Laptop” hoặc “iPhone”, và tùy chọn nhập email để giúp nhận dạng thiết bị sau này. Nhấn “Auto” để tự động gán địa chỉ IP tiếp theo có sẵn (có thể là 10.0.0.2).

Đối với IP được phép, nhập 0.0.0.0/0, ::/0, điều này đảm bảo tất cả lưu lượng của khách hàng được định tuyến qua VPN; nếu bạn chỉ muốn truy cập vào mạng nội bộ của máy chủ, bạn có thể chỉ định subnet đó thay vào đó (ví dụ, 10.0.0.0/24).

Khi mọi thứ đã sẵn sàng, hãy nhấp vào “Gửi” và giao diện web sẽ tự động tạo một cấu hình WireGuard hoàn chỉnh cho khách hàng này, bao gồm cả cặp khóa mật mã riêng của nó.

Thêm khách hàng WireGuard

Bước 8: Kết nối Thiết bị Khách hàng của Bạn

Bây giờ bạn cần đưa cấu hình vào thiết bị của mình và WireGuard-UI giúp việc này trở nên dễ dàng với mã QR cho thiết bị di động và các tệp cấu hình có thể tải về cho máy tính.

Đối với thiết bị di động (Điện thoại/Máy tính bảng):

  • Cài đặt ứng dụng WireGuard từ cửa hàng ứng dụng của bạn (ứng dụng có sẵn cho cả iOS và Android).
  • Trong giao diện web WireGuard-UI, tìm khách hàng mới tạo của bạn và nhấp vào biểu tượng mã QR.
  • Mở ứng dụng WireGuard trên điện thoại của bạn, nhấn nút "+" và chọn Tạo từ mã QR.
  • Quét mã QR hiển thị trên trình duyệt của bạn.
  • Đặt tên cho kết nối của bạn và nhấn vào «Tạo Đường Hầm».

Xong rồi! Chuyển công tắc để kết nối, và thiết bị di động của bạn bây giờ sẽ định tuyến tất cả lưu lượng qua máy chủ VPN của bạn.

Đối với Máy tính để bàn/Máy tính xách tay:

  • Cài đặt WireGuard từ wireguard.com/install.
  • Trong giao diện WireGuard-UI, nhấp vào biểu tượng tải xuống bên cạnh client của bạn để tải file .conf.
  • Mở ứng dụng WireGuard trên máy tính của bạn, nhấp vào “Nhập tunnel từ tệp“ và chọn tệp cấu hình đã tải về.
  • Nhấp vào Kích hoạt để kết nối.

Bước 9: Kiểm tra VPN của bạn

Hãy đảm bảo rằng mọi thứ đang hoạt động đúng cách. Trước tiên, khi VPN của bạn chưa kết nối, hãy truy cập whatismyipaddress.com và ghi lại địa chỉ IP được hiển thị.

Sau đó, kết nối với WireGuard VPN của bạn và làm mới trang, địa chỉ IP của bạn bây giờ sẽ hiển thị IP công cộng của máy chủ thay vì IP ban đầu của bạn, xác nhận rằng lưu lượng đang được định tuyến qua VPN.

Để xác minh thêm rằng DNS đang hoạt động đúng cách, bạn có thể chạy lệnh sau trên thiết bị của mình:

ping google.com

Nếu bạn thấy các phản hồi, VPN của bạn đang định tuyến lưu lượng đúng cách.

Để xem các kết nối đang hoạt động trên máy chủ của bạn, hãy đăng nhập SSH và chạy:

sudo wg show

Bạn sẽ thấy kết quả như sau:

interface: wg0
  public key: [your server's public key]
  private key: (hidden)
  listening port: 51820

peer: [client's public key]
  endpoint: [client's IP]:random_port
  allowed ips: 10.0.0.2/32
  latest handshake: 45 seconds ago
  transfer: 2.50 MiB received, 15.23 MiB sent

Điều này cho thấy khách hàng của bạn đã kết nối, lần cuối cùng nó giao tiếp với máy chủ và lượng dữ liệu đã được truyền.

Bước 10: Sử dụng HTTPS cho WireGuard-UI

Hiện tại, khi bạn truy cập giao diện web WireGuard của mình tại http://YOUR_SERVER_IP:5000, thông tin đăng nhập và tất cả dữ liệu cấu hình của bạn được truyền qua internet dưới dạng văn bản thuần và bất kỳ ai chặn lưu lượng giữa trình duyệt và máy chủ đều có thể thấy mật khẩu quản trị của bạn và có khả năng chiếm đoạt phiên làm việc của bạn.

Giải pháp là đặt giao diện web của bạn phía sau một reverse proxy với HTTPS được bật, và reverse proxy sẽ đứng trước ứng dụng của bạn, xử lý tất cả các kết nối HTTPS được mã hóa từ các khách hàng, rồi chuyển tiếp các yêu cầu đến ứng dụng của bạn qua mạng nội bộ nơi việc chặn không phải là vấn đề.

Chúng tôi sẽ sử dụng Nginx (máy chủ web hiệu suất cao) làm reverse proxy và Let’s Encrypt để lấy một chứng chỉ SSL miễn phí, nhờ đó bạn sẽ truy cập giao diện WireGuard của mình tại https://vpn.yourdomain.com thay vì một địa chỉ IP bằng HTTP.

Cài đặt máy chủ web Nginx

Đầu tiên, bạn cần tạo một bản ghi DNS cho tên miền của bạn (https://vpn.yourdomain.com) trỏ đến địa chỉ IP của máy chủ và sau đó cài đặt máy chủ web Nginx.

sudo apt update
sudo apt install nginx -y

Sau khi cài đặt, bạn có thể truy cập http://vpn.yourdomain.com trong trình duyệt của mình và bạn sẽ thấy trang chào mừng mặc định của Nginx, điều này có nghĩa là Nginx đang hoạt động và có thể truy cập từ internet.

Kiểm tra trang Nginx

Cài đặt Certbot cho Let’s Encrypt

Tiếp theo, cài đặt Let’s Encrypt, một cơ quan cấp chứng chỉ miễn phí cung cấp chứng chỉ SSL và certbot là một công cụ tự động hóa quá trình nhận và gia hạn các chứng chỉ này.

sudo apt install certbot python3-certbot-nginx -y

Gói python3-certbot-nginx bao gồm một plugin có thể tự động cấu hình Nginx cho bạn, giúp quá trình này trở nên đơn giản hơn rất nhiều.

Cấu hình Nginx làm máy chủ proxy ngược

Bây giờ, hãy tạo một cấu hình Nginx để chuyển tiếp các yêu cầu từ https://vpn.yourdomain.com đến ứng dụng WireGuard-UI của bạn đang chạy trên localhost:5000.

Tạo một tệp cấu hình mới.

sudo nano /etc/nginx/sites-available/wireguard-ui

Dán cấu hình này (thay vpn.yourdomain.com bằng tên miền thực tế của bạn):

server {
    listen 80;
    listen [::]:80;
    server_name vpn.yourdomain.com;

    # This will be used by Certbot for the SSL certificate challenge
    location /.well-known/acme-challenge/ {
        root /var/www/html;
    }

    # Redirect all other HTTP traffic to HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name vpn.yourdomain.com;

    # SSL certificate paths (Certbot will fill these in)
    ssl_certificate /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem;

    # Modern SSL configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # Security headers
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;

    # Proxy settings
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        
        # WebSocket support (if WireGuard-UI uses it)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        
        # Forward real client information
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # Timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

Bây giờ hãy kích hoạt cấu hình này bằng cách tạo một liên kết tượng trưng:

sudo ln -s /etc/nginx/sites-available/wireguard-ui /etc/nginx/sites-enabled/

Kiểm tra cấu hình Nginx của bạn để tìm lỗi cú pháp:

sudo nginx -t

Bạn nên xem:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu bạn thấy bất kỳ lỗi nào, hãy quay lại và kiểm tra tệp cấu hình của bạn để xem có sai chính tả không.

Nhận chứng chỉ SSL

Khi mọi thứ đã được cấu hình đúng cách, bây giờ là lúc chạy lệnh certbot, lệnh này sẽ tự động lấy chứng chỉ SSL từ Let’s Encrypt và cấu hình Nginx để sử dụng nó.

sudo certbot --nginx -d vpn.yourdomain.com

Toàn bộ quá trình mất khoảng 30 giây, và khi hoàn tất, bạn sẽ thấy một thông báo thành công:

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem

Bây giờ hãy tải lại Nginx để áp dụng tất cả:

sudo systemctl reload nginx

Tự động gia hạn chứng chỉ

Chứng chỉ Let’s Encrypt chỉ có hiệu lực trong 90 ngày, điều này là có chủ ý nhằm khuyến khích việc gia hạn thường xuyên và hạn chế thiệt hại tiềm tàng nếu khóa riêng bị xâm phạm.

May mắn thay, Certbot tự động thiết lập bộ định thời gian gia hạn khi được cài đặt, và bạn có thể xác nhận rằng dịch vụ gia hạn đang hoạt động bằng cách chạy:

sudo systemctl status certbot.timer

và bạn nên thấy nó được liệt kê là đang hoạt động (running), bộ định giờ này kiểm tra hai lần mỗi ngày và sẽ tự động gia hạn bất kỳ chứng chỉ nào còn dưới 30 ngày trước khi hết hạn.

Để kiểm tra mọi thứ hoạt động mà không cần thực hiện gia hạn thực tế, chạy:
sudo certbot renew –dry-run

Nếu kiểm tra hoàn tất thành công, việc gia hạn chứng chỉ tự động của bạn đã được cấu hình đầy đủ, và bạn sẽ không cần lo lắng về việc chứng chỉ hết hạn.

Cập nhật Tường lửa của bạn

Khi chúng ta hiện đang truy cập WireGuard-UI thông qua Nginx trên cổng HTTPS chuẩn (443), chúng ta cần cho phép điều này trong tường lửa và có thể tùy chọn đóng truy cập trực tiếp đến cổng 5000.

sudo ufw allow 443/tcp

Tùy chọn, nếu bạn muốn ngăn chặn truy cập trực tiếp vào WireGuard-UI trên cổng 5000 (bắt mọi người phải sử dụng giao diện HTTPS), bạn có thể gỡ bỏ quy tắc đó:

sudo ufw delete allow 5000/tcp

Tải lại tường lửa:

sudo ufw reload

Bước 11: Cấu hình WireGuard-UI chỉ lắng nghe trên localhost

Vì Nginx hiện đang xử lý tất cả các kết nối từ bên ngoài, chúng ta nên cấu hình WireGuard-UI chỉ chấp nhận kết nối từ máy cục bộ, điều này ngăn bất kỳ ai truy cập trực tiếp vào cổng 5000, ngay cả khi họ phát hiện cổng này đang mở.

Dừng dịch vụ WireGuard-UI:

sudo systemctl stop wireguard-ui

Chỉnh sửa tệp dịch vụ:

sudo nano /etc/systemd/system/wireguard-ui.service

Chỉnh sửa dòng ExecStart để chỉ liên kết với localhost:

[Unit]
Description=WireGuard UI
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/wireguard-ui
Environment="BIND_ADDRESS=127.0.0.1:5000"
ExecStart=/opt/wireguard-ui/wireguard-ui
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Lưu và thoát, sau đó tải lại systemd và khởi động lại dịch vụ:

sudo systemctl daemon-reload
sudo systemctl start wireguard-ui
sudo systemctl status wireguard-ui

Cuối cùng, mở trình duyệt của bạn và điều hướng đến:

https://vpn.yourdomain.com

Bạn nên nhìn thấy một biểu tượng ổ khóa trên thanh địa chỉ của trình duyệt, bạn có thể nhấp vào biểu tượng ổ khóa để xem chi tiết chứng chỉ. Bạn sẽ thấy chứng chỉ này được cấp bởi Let’s Encrypt và có hiệu lực trong 90 ngày.

Tóm tắt

Đến lúc này, bạn đã triển khai thành công một máy chủ WireGuard VPN hoạt động đầy đủ với giao diện quản lý dựa trên web an toàn. Thay vì tự tay xử lý các khóa, tệp cấu hình và quy tắc định tuyến, WireGuard-UI cung cấp cho bạn một bảng điều khiển đơn giản để thêm thiết bị mới, tạo mã QR và theo dõi các kết nối đang hoạt động.