Bảo mật kết nối VPN – Phần 3: Thiết lập cấu hình cho OpenVPN server

Tiếp theo nội dung Bảo mật kết nối VPN – Phần 2: Tạo và ký certificate cho OpenVPN server/client trên Ubuntu 22.04 LTS, kỳ này tôi sẽ bắt tay vào việc thiết lập cấu hình cho OpenVPN server. Các nội dung giới thiệu trong kỳ này bao gồm:

  • Thiết lập shared secret key;
  • Cập nhật file cấu hình cho OpenVPN server (server.conf);
  • Cập nhật Network Configuration cho OpenVPN server;
  • Thiết lập Firewall cho OpenVPN server;
  • Khởi chạy và kiểm tra service của OpenVPN server.

Lưu ý: Nội dung kỳ này có thể xem là phần cập nhật của bài Hướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 4: Tạo Private Key và ký Certificate cho VPN Server, VPN Client và cấu hình OpenVPN ServerHướng dẫn tạo VPN Server miễn phí từ A đến Z – Phần 5: Thiết lập Packet forwarding, cấu hình Firewall và khởi động VPN Server.

#1. Thiết lập shared secret key

Để tăng cường độ bảo mật, tôi sẽ quất thêm một cái shared secret key (ta.key) cho client và server. Cái ta.key này sẽ được sử dụng tại tls-crypt directive trong file cấu hình của OpenVPN server (server.conf). Về cơ bản, tls-crypt sẽ thêm một lớp mã hóa cho cả quá trình key-exchange trước khi khởi tạo TLS session. Bạn có thể xem kỹ hơn về vấn đề này trong nội dung TLS Control Channel Security In OpenVPN Access Server | OpenVPN.

Quay trở lại vấn đế chính, tại con hàng OpenVPN server, tôi tiến hành khởi tạo ta.key với các command:

cd ~/easy-rsa

openvpn --genkey --secret ta.key

Sau đó, tôi sẽ mang file ta.key vừa được tạo bỏ vô vị trí /etc/openvpn/server.

sudo cp ta.key /etc/openvpn/server

ls -l /etc/openvpn/server

shared secret key
shared secret key

Như đề cập ở trên, tôi cũng sẽ chuyển file ta.key mới tạo vô vị trí ~/client-configs/keys/.

cp ~/easy-rsa/ta.key ~/client-configs/keys/

#2. Cập nhật file cấu hình cho OpenVPN server (server.conf)

Cũng tại con hàng OpenVPN server, tôi sẽ cần đi thó cái file cấu hình mẫu ở vị trí /usr/share/doc/openvpn/examples/sample-config-files/ bỏ vô /etc/openvpn/server/ để đỡ tốn công xử lý.

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/

Kế đến, tôi mở file cấu hình server.conf vừa mới chôm về.

sudo nano /etc/openvpn/server/server.conf

Và tiến hành cập nhật các thiết lập cấu hình tương ứng.

<SNIP>
;tls-auth ta.key 0 # This file is secret
tls-crypt ta.key
<SNIP>
;cipher AES-256-CBC
cipher AES-256-GCM
auth SHA256
<SNIP>
;dh dh2048.pem
dh none
user nobody
;group nobody
group nogroup
<SNIP>
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
<SNIP>
# Optional!
;port 1194
port 443
;proto udp
proto tcp
;explicit-exit-notify 1
explicit-exit-notify 0
cert server.crt
key server.key
<SNIP>

Lưu ý:

  • Các thông số thiết lập trên chỉ nhằm mục đích tham khảo, tùy thuộc vào nhu cầu thực tế và các thiết lập đã thực hiện trước đó, bạn sẽ cần rà soát và cập nhật tương ứng;
  • Dấu “;” dùng để comment các thiết lập không mong muốn. Nếu không muốn comment, bạn xóa luôn dòng đó đi cũng được (nhưng mai mốt nếu đổi ý muốn xài lại các thiết lập này thì phải tốn công gõ);
  • Chỗ group nogroup rất dễ nhầm, bạn nên lưu ý để tránh phải ngồi suy nghĩ nát óc, vặt trụi lông đầu mà cấu hình vẫn bị lỗi;
  • <SNIP> nghĩa là chỗ đó có thể có các nội dung cấu hình khác thừa hưởng từ file mẫu (vì không thay đổi nên tôi không đề cập);
  • Một khi đã thiết lập được file cấu hình ưng ý (và tất nhiên chạy được), bạn nên lưu về local machine (ví dụ máy cá nhân của bạn). Khi cần dựng lại OpenVPN server tương tự, bạn có thể đẩy cái file cấu hình này lên server rồi xài luôn cho nhanh;
  • Việc thao tác với các text editor tôi đã nhai đi nhai lại nhiều lần rồi nên sẽ không nhắc lại. Nếu cần thiết, bạn có thể xem lại nội dung Giải ngố Kali Linux – Phần 6: Bộ 3 nguyên tử text editor nano/vi/vim và cách buff damage với skill so sánh nội dung file bằng comm/diff.

#3. Cập nhật Network Configuration cho OpenVPN server

Việc cập nhật Network Configuration (cấu hình mạng) cho OpenVPN server tương đối nhanh gọn. Tôi sẽ cần mở file sysctl.conf với command:

sudo nano /etc/sysctl.conf

Sau đó kiểm tra và bổ sung thêm nội dung IP forwarding (đại khái là phương thức dẫn đường cho IP traffic đi) sau đây:net.ipv4.ip_forward = 1

Để đọc file và cập nhật giá trị mới thiết lập, tôi sẽ chạy command:

sudo sysctl -p

IP forwarding
IP forwarding

#4. Thiết lập Firewall cho OpenVPN server

Để thiết lập Firewall (tường lửa) tương ứng cho OpenVPN server, trước hết tôi sẽ cần kiểm tra Network Interface tương ứng với command:

ip route list default

Ví dụ với kết quả như sau, Network Interface tôi xác định sẽ là ens33.default via 192.168.64.2 dev ens33 proto dhcp metric 100

Với thông tin này tôi sẽ mở file before.rules (đám rule trong file này sẽ được đọc và xử lý trước đám rule thiết lập với command ufw) để cập nhật.

sudo nano /etc/ufw/before.rules

Sau đó tôi quất vào nội dung tương ứng kiểu như sau:

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to ens33 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o ens33 -j MASQUERADE
COMMIT
# END OPENVPN RULES

before.rules
before.rules

Tiếp đến tôi cũng sẽ cần mở file ufw để thiết lập cho phép forward packets.

sudo nano /etc/default/ufw

Và bổ sung nội dung tương ứng như sau:

DEFAULT_FORWARD_POLICY="ACCEPT"

Đến đây coi như tôi đã thiết lập xong cấu hình cho Firewall. Trường hợp nếu có tiến hành các thay đổi khác trên file cấu hình server.conf của OpenVPN server (ví dụ dùng port 1194), bạn cũng sẽ cần cập nhật lại thông số tương ứng cho Firewall. Ví dụ với việc dùng port 1194, tôi có thể thiết lập và kiểm tra lại với các command:

sudo ufw allow 1194/udp

sudo ufw disable

sudo ufw enable

sudo ufw status numbered

Lưu ý: Nội dung này tôi đã giới thiệu kỹ trong kỳ Giải ngố Linux – Phần 9: Thiết lập firewall và cấu hình ssh trên Ubuntu 22.04 LTS. Bạn vui lòng mở xem lại nếu cần.

#5. Khởi chạy OpenVPN server

Và cuối cùng cũng đã đến thời khắc quan trọng để kiểm tra coi bạn đã thiết lập cấu hình cho OpenVPN serverchuẩn cmn mực” hay chưa. Đầu tiên, bạn có thể thiết lập để kích hoạt cho service của OpenVPN server chạy mỗi khi khởi động với command:

sudo systemctl -f enable openvpn-server@server.service

Sau đó, khởi chạy OpenVPN service với:

sudo systemctl start openvpn-server@server.service

Và cuối cùng, vừa run rẩy, bạn vừa gõ command sau đây để kiểm tra tình trạng của OpenVPN service.

sudo systemctl status openvpn-server@server.service

Nếu thấy dòng chữ có màu xanh hy vọng “active (running)” phọt ra thì bạn có thể ưỡn ngực lên dõng dạc mà gáy “Cấu hình cho OpenVPN server thì ai chả biết làm mà bày đặt hướng với chả dẫn!“.

OpenVPN service status
OpenVPN service status

P/S: Trong trường hợp bạn quên, thì ở trên mới chỉ là phần xử lý cho OpenVPN server. Kỳ tới tôi sẽ chuyển sang phần cấu hình cho OpenVPN client.

1 thought on “Bảo mật kết nối VPN – Phần 3: Thiết lập cấu hình cho OpenVPN server”

Leave a Reply

Your email address will not be published. Required fields are marked *