CHƯƠNG 2: GIAO THỨC MẠNG RIÊNG ẢO WIREGUARD
3.2. Triển khai thực nghiệm
Trong mô hình thực nghiệm, chúng ta sử dụng máy chủ Server là máy Ubuntu, hai máy Client cài Linux và Android, các máy client có địa chỉ lần lượt là 10.200.200.2 và 10.200.200.3. Hai máy client cùng kết nối đến máy chủ Server có IP 10.200.200.1 có Port là 51820 thông qua việc sử dụng giao thức WireGuard.
Để tiến hành thực nghiệm ta cần phải làm các bước sau:
Bước 1: Cài đặt WireGuard cho các máy trong hệ thống.
Bước 2: Kiểm tra kết nối giữa Client và Server.
Bước 3: Thực hiện bắt gói tin bằng WireSharkTrên máy server cần thực hiện và phân tích.
3.2.1. Thiết lập trên Server
Ta sẽ tiến hành thực nghiệm theo các bước như trên. Đầu tiên, chúng ta sẽ tiến hàng cài đặt WireGuard cho máy chủ Ubuntu
# Cài đặt Wireguard cho máy chủ Ubuntu
Sử dụng câu lệnh: apt install wireguard để cài đặt cho máy chủ Ubuntu đến khi cài đặt xong sẽ hiển thị cài đặt thành công.
Hình 3. 2: Cài đặt Wireguard từ Internet
# Tạo key cho server
Chuyển đến thư mục WireGuard, tạo public key và private key cho server sử dụng câu lệnh sau: wg genkey | tee server_pri và cat server_pri | wg pubkey | tee server_pub
Với wg genkey | tee server: sử dụng option genkey mục đích là để tạo ngẫu nhiên một private key với định dạng base 64 và được lưu tại file server_pri. Còn với lệnh cat server_pri | wg pubkey | tee server_pub giúp ta sử dụng private key trong file server_pri làm giá trị đầu vào để tạo public key và ghi giá trị đó vào file server_pub.
Hình 3. 3: Tạo khóa cho server
# Chỉnh sửa file cấu hình wg0.conf
Ở Server chúng ta sử dụng lệnh: nano /etc/wireguard/wg0.conf để tạo file wg0.conf ở thư mục /etc/wireguard/.
Hình 3. 4: Cấu hình wg0.conf
# Bật giao diện mạng wg0: Sử dụng khi kích hoạt WireGuard và khởi động lại WireGuard khi khởi động lại server. Sử dụng câu lệnh: wg- quick up wg0
# Tạo file cấu hình cho Client
Sau khi đã cài đặt xong WireGuard vào server thì tiếp theo ta sẽ tạo file cấu hình cho từng client. Ở trong thực nghiệm này, ta sử dụng hai client là clinet Android và client Linux. Để tạo file cấu hình cho hai client ta sử dụng câu lệnh:
• Cho Android: python generate_client.py client_android
• Cho Linux: python generate_client.py client_linux
Hình 3. 5: Tạo file cấu hình cho các client
# Cấu hình client trên Server
Trước tiên, ta cần đặt địa chỉ ip cho hai client ta sử dụng câu lệnh sau:
sudo wg set wg0 peer
SpwqYkZRlgJHwd3fGPAFieuB2Vs4V3Hxt+cBNYhfjBI= allowed-ips 10.200.200.2/32
sudo wg set wg0 peer
/OqrvsJ6HAB76JnYbAfa8R1R0RsOTrsZv93+l4bEmWE= allowed-ips 10.200.200.3/32
sudo wg-quick save wg0
Câu lệnh thứ nhất và thứ hai nhằm thiếp lập giá trị private key cho VPN và chỉ định dải địa chỉ ip được phép truy cập là: 10.200.200.2/32 và 10.200.200.3/32.
Sau đó ta sử dụng lệnh: sudo wg-quick save wg0 để lưu cấu hình vừa thiết lập cho wg0 confix.
Hình 3. 6: Cấu hình cho các client Linux
Như vậy đến đây, ta đã thiết lập xong Server, tiếp đến ta tiến hành thiết lập WireGuard trên các Client và ping giữa các client với server vừa tạo được.
3.2.2. Thiết lập trên các client
Trên máy Android
Để có thể sử dụng WireGuard trên Android, bạn có thể tải ứng dụng WireGuard hoặc Tunsafe ngay trên chính Google Play về điện thoại.
Hình 3. 7: Cài đặt Wireguard trên Android
Ở thực nghiệm này, ta sử dụng trực tiếp WireGuard tải tại Google Play. Để sử dụng Wireguard trên hệ điều hành Android ta cần phải import file cấu hình trên máy Server vào trong máy này. Trên thực tế nhiều cách để import dữ liệu khác nhau, tuy nhiên ở thực nghiệm này ta sử dụng thông qua một Website HTTP để tải file cấu hình đã được tạo ở bước trên xuống.
Hình 3. 8: Cấu hình Wireguard cho client Android
#Kết nối máy Android vào server
Hình 3. 9: Máy Android kết nối đến Server
Sau khi import file cấu hình vào máy Android, ở phía Server đã hiển thị chấp nhận kết nối với client này. Để kiểm tra kết nối này, ta sử dụng máy Android truy cập vào Website nội bộ trong VPN WireGuard (địa chỉ 10.200.200.1). Nếu khi bật WireGuard ở Android thì ta truy cập thành công vào địa chỉ website trên.
Hình 3. 10: Kết nối thành công đến mạng Wireguard
Trên Client Linux
Để cài đặt WireGuard trên Linux sử dụng câu lệnh: Apk add –U
wireguard-tools
Sau khi cài đặt được WireGuard lên máy Client Linux chúng ta cần Import file cấu hình của client đã được tạo trên Server vào máy Linux này thông qua các câu lệnh:
• Tải cài đặt cấu hình: wget
http://192.168.139.177:8888/client_linux.conf
Hình 3. 11: Cài đặt Wireguard trên máy Linux kết nối đến Server
#Kiểm tra kết nối trên Server
Lúc này khi Client Linux đã kết nối đến Server khi kiểm tra Server đã chấp nhận hai Client kết nối là Client Android và Client Linux
Hình 3. 12: Kiểm tra kết nối tại Server
#Kiểm tra kết nối từ client Linux đến mạng nội bộ
Sử dụng câu lệnh: wget http://10.200.200.1:5000/
Xem nội dung trang Web vừa truy cập sử dụng câu lệnh: less index.html
3.2.3. Bắt gói tin
Với những gói tin sử dụng các giao thức đơn giản như DHCP, HTTP, ... khi sử dụng Wireshark để bắt gói tin ta luôn nhận được các bản rõ của nội dung gói tin (ví dụ như hình ảnh 3.13):
Hình 3. 14: Gói tin HTTP
Khi các máy client đều đã kết nối đến Server sử dụng giao thức Wireguard. Ta sử dụng phần mềm Wireshark để bắt các gói tin được truyền giữa các client và server.
Hình 3. 15: Bát gói tin truyền thông giữa các client và server
Chúng ra thấy rằng các gói tin khi được truyền bằng giao thức mạng riêng ảo mới Wireguard thì nội dung của các gói tin đã được mã hóa. Các quá trình bắt tay thiết lập kết nối giữa các client và server trước khi truyền tin cũng được thể
hiện rõ dưới sự hỗ trợ nhận diện tự động các gói tin Wireguard trong phần mềm Wireshark.
Các gói tin khi được nhận diện đều đã được mã hóa.
Hình 3. 16: Gói tin mã hóa với Wireguard
Khi các gói tin đều được mã hoá trên đường truyền nên “tấn công dạng Man in the middle” cũng không thể giải mã ra các gói tin này bởi chúng không thể lấy được khoá để giải mã được gói tin.