Cách cài đặt Máy Chủ OpenVPN Debian 11, setup OpenVPN trên Debian 11

OpenVPN Debian 11

Hướng dẫn cài đặt OpenVPN trên Debian 11. VPN giúp duyệt web an toàn, truy cập ứng dụng an toàn. Đặc biệt sử dụng VPN để tăng tốc độ internet hoặc ẩn danh.

Liệu nhóm của bạn có cần truy cập an toàn và riêng tư vào các tài nguyên nội bộ từ các vị trí từ xa, qua những mạng không đáng tin cậy, như thể họ đang kết nối trực tiếp với mạng riêng không? Một Mạng Riêng Ảo (VPN) chính là giải pháp để làm điều này. Máy chủ VPN hoạt động như một điểm truy cập duy nhất vào mạng riêng của bạn dành cho người dùng từ xa—và nó linh hoạt và phù hợp hơn nhiều so với việc sử dụng một máy chủ SSH. VPN sẽ xác thực người dùng và tạo ra một đường hầm mã hóa giữa các thiết bị của họ và mạng riêng, đồng thời đóng vai trò là cổng an toàn cho họ không chỉ vào mạng riêng đó, mà còn ra ngoài internet nếu bạn cấu hình như vậy.

Bạn có thể cân nhắc sử dụng một dịch vụ VPN thương mại, nhưng cũng có thể tự quản lý một VPN miễn phí như trong hướng dẫn này. OpenVPN là một giải pháp VPN mã nguồn mở đầy đủ tính năng sử dụng công nghệ SSL (Secure Socket Layer), hỗ trợ một loạt các cấu hình khác nhau. Trong hướng dẫn này, bạn sẽ thiết lập một máy chủ OpenVPN trên hệ điều hành Debian 11 và sau đó cấu hình truy cập từ các hệ điều hành Windows, macOS, Linux, iOS và/hoặc Android.

Điều Kiện Tiên Quyết

Để hoàn thành hướng dẫn này, bạn sẽ cần:

  • Hai máy chủ Debian 11: Một máy chủ để lưu trữ dịch vụ OpenVPN và một máy chủ để làm cơ sở chứng chỉ (Certificate Authority – CA).
  • Một người dùng không phải root với quyền sudo trên cả hai máy chủ. Bạn có thể làm theo hướng dẫn “Cài đặt Máy chủ Debian 11 ban đầu” để thiết lập một người dùng với quyền hạn phù hợp. Hướng dẫn này cũng sẽ cài đặt tường lửa, được giả định là đã được cài đặt sẵn trên cả hai máy chủ trong suốt quá trình.
  • Cài đặt Easy-RSA trên cả hai máy chủ. Đây là công cụ bạn sẽ sử dụng để quản lý chứng chỉ cho VPN của mình. Hãy làm theo Bước 1–2 của hướng dẫn này trên máy chủ VPN của bạn và Bước 1–3 trên máy chủ CA.

Mặc dù có thể chạy CA từ máy chủ OpenVPN hoặc từ máy tính cá nhân của bạn, nhưng để đảm bảo tính bảo mật, tốt hơn hết là bạn nên giữ CA (đặc biệt là Private Key của nó) trên một máy chủ tách biệt không kết nối liên tục với internet. Vì bạn có thể sẽ giữ máy chủ VPN kết nối với internet 24/7, nó có thể dễ bị tấn công bởi kẻ xấu. Nếu bạn giữ Private Key của CA trên máy chủ công khai này, kẻ tấn công có thể truy cập vào Private Key và sử dụng nó để ký các chứng chỉ mới, từ đó truy cập vào VPN của bạn.

Bước 1 — Cài đặt OpenVPN

Để bắt đầu, cập nhật chỉ mục gói của máy chủ VPN và cài đặt OpenVPN. OpenVPN có sẵn trong kho lưu trữ mặc định của Debian, vì vậy bạn có thể sử dụng lệnh apt để cài đặt:

sudo apt update
sudo apt install openvpn

Bước 2 — Tạo Chứng Chỉ, Khóa và Các Tệp Mã Hóa cho Máy Chủ

Trên máy chủ OpenVPN, chuyển đến thư mục /easy-rsa trong thư mục người dùng không phải root của bạn và chạy script easyrsa với tùy chọn gen-req cùng với một tên chung (common name) cho máy chủ. Tên này có thể là bất kỳ tên nào bạn thích, nhưng nên chọn một cái tên mô tả để dễ nhận diện. Trong hướng dẫn này, tên chung của máy chủ OpenVPN sẽ đơn giản là “server”. Đảm bảo bạn thêm tùy chọn nopass để tránh việc bảo vệ tệp yêu cầu (request file) bằng mật khẩu, điều này có thể gây ra vấn đề về quyền truy cập sau này:

Lưu ý: Nếu bạn chọn tên khác “server” ở đây, bạn sẽ phải điều chỉnh một số hướng dẫn bên dưới. Ví dụ, khi sao chép các tệp được tạo ra vào thư mục /etc/openvpn, bạn sẽ phải thay thế bằng tên chính xác. Bạn cũng sẽ cần phải sửa tệp /etc/openvpn/server.conf sau để chỉ đến các tệp .crt và .key đúng.

cd ~/easyrsa
./easyrsa gen-req server nopassccccc

Script sẽ yêu cầu bạn nhập tên chung mà bạn muốn xuất hiện trong yêu cầu ký chứng chỉ (CSR). Mặc định, nó sẽ hiển thị tên mà bạn đã nhập vào lệnh ./easyrsa gen-req (ví dụ: “server”). Nhấn ENTER để chấp nhận tên mặc định hoặc nhập tên khác nếu cần.

Điều này sẽ tạo ra một khóa riêng (Private Key) cho máy chủ và một tệp yêu cầu chứng chỉ gọi là server.req.

Tiếp theo, sao chép khóa máy chủ vào thư mục /etc/openvpn/:

sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/

Sử dụng phương thức bảo mật (như SCP), chuyển tệp server.req sang máy chủ CA của bạn:

scp ~/easy-rsa/pki/reqs/server.req sammy@your_CA_ip:/tmp

Tiếp theo, trên máy chủ CA, chuyển đến thư mục ~/easy-rsa:

cd ~/easy-rsa

Sử dụng script easyrsa để nhập tệp yêu cầu server.req, kèm theo tên chung bạn đã nhập khi tạo CSR:

./easyrsa import-req /tmp/server.req server

Sau đó, ký yêu cầu bằng cách chạy easyrsa với tùy chọn sign-req, theo sau là kiểu yêu cầu và tên chung. Kiểu yêu cầu có thể là “client” hoặc “server”, vì vậy với yêu cầu chứng chỉ của máy chủ OpenVPN, hãy chắc chắn sử dụng kiểu yêu cầu “server”:

./easyrsa sign-req server server

Trong kết quả đầu ra, bạn sẽ được yêu cầu xác nhận rằng yêu cầu này đến từ một nguồn đáng tin cậy. Nhập “yes” và nhấn ENTER để xác nhận:

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

 

OpenVPN tren Debian 11

Nếu bạn đã mã hóa khóa của CA trong quá trình làm theo hướng dẫn yêu cầu, bạn sẽ cần nhập mật khẩu của CA tại thời điểm này.

Tiếp theo, chuyển chứng chỉ đã ký trở lại máy chủ OpenVPN của bạn bằng phương thức bảo mật:

scp pki/issued/server.crt sammy@your_server_ip:/tmpv

Cũng chuyển tệp ca.crt sang máy chủ OpenVPN:

scp pki/ca.crt sammy@your_server_ip:/tmp

Máy chủ OpenVPN của bạn cần tệp ca.crt để biết rằng nó có thể tin tưởng vào tổ chức đã ký chứng chỉ server.crt.

Tiếp theo, trên máy chủ OpenVPN, sao chép các tệp server.crt và ca.crt vào thư mục /etc/openvpn/:

sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/

Sau đó, chuyển đến thư mục ~/easy-rsa của bạn:

cd ~/easy-rsa

Từ đó, tạo một khóa Diffie-Hellman mạnh để sử dụng trong quá trình trao đổi khóa bằng cách gõ:

./easyrsa gen-dh

Quá trình này có thể mất một vài phút để hoàn thành. Khi xong, tạo một chữ ký HMAC để tăng cường khả năng xác minh tính toàn vẹn TLS của máy chủ:

sudo openvpn --genkey secret ta.key

Khi lệnh hoàn tất, sao chép hai tệp mới vào thư mục /etc/openvpn/:

sudo cp ~/easy-rsa/ta.key /etc/openvpn/
sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/

Với điều này, tất cả các tệp chứng chỉ và khóa cần thiết cho máy chủ của bạn đã được tạo ra. Bạn đã sẵn sàng để tạo các chứng chỉ và khóa tương ứng mà máy client sẽ sử dụng để truy cập vào máy chủ OpenVPN của bạn.

Bước 3 — Tạo Chứng Chỉ và Cặp Khóa Client

Mặc dù bạn có thể tạo khóa riêng và yêu cầu chứng chỉ trên máy của client và sau đó gửi nó cho CA để ký, hướng dẫn này sẽ trình bày quy trình tạo yêu cầu chứng chỉ trên máy chủ VPN. Lợi ích của phương pháp này là bạn có thể tạo một script trên máy chủ để tự động tạo các tệp cấu hình client, chứa tất cả các khóa, chứng chỉ và tham số cấu hình trong một tệp duy nhất. Thông thường, tệp cấu hình client chính sẽ chỉ định tên các tệp khóa và chứng chỉ riêng biệt, và bạn sẽ phải phân phối nhiều tệp cho mỗi client. Tuy nhiên, tốt hơn hết là bao gồm toàn bộ chứng chỉ và khóa trong tệp cấu hình chính để đơn giản hóa quy trình kết nối với VPN. Bạn sẽ tạo tệp cấu hình client duy nhất trong Bước 8.

Trong bước này, bạn sẽ tạo cặp chứng chỉ/khóa cho client đầu tiên. Nếu bạn có nhiều client, bạn có thể lặp lại quy trình này cho từng client. Lưu ý rằng bạn cần phải cung cấp một giá trị tên duy nhất cho mỗi client. Trong hướng dẫn này, cặp chứng chỉ/khóa đầu tiên sẽ được gọi là client1.

Trên máy chủ VPN, bắt đầu bằng cách tạo cấu trúc thư mục trong thư mục chính của bạn để lưu trữ các tệp chứng chỉ và khóa của client:

mkdir -p ~/client-configs/keys

Vì bạn sẽ lưu trữ cặp chứng chỉ/khóa và tệp cấu hình của client trong thư mục này, bạn nên thiết lập quyền truy cập cho thư mục này như một biện pháp bảo mật:

chmod -R 700 ~/client-configs

Tiếp theo, quay lại thư mục ~/easy-rsa và chạy script easyrsa với các tham số gen-req và nopass, kèm theo tên chung cho client:

cd ~/easy-rsa
./easyrsa gen-req client1 nopass

Nhấn ENTER để xác nhận tên chung. Sau đó, sao chép tệp client1.key vào thư mục /client-configs/keys/ mà bạn đã tạo trước đó:

cp pki/private/client1.key ~/client-configs/keys/

Tiếp theo, chuyển tệp yêu cầu client1.req sang máy CA của bạn bằng phương thức bảo mật:

scp pki/reqs/client1.req sammy@your_CA_ip:/tmp

Trên máy CA, chuyển đến thư mục ~/easy-rsa và nhập yêu cầu chứng chỉ:

cd ~/easy-rsa
./easyrsa import-req /tmp/client1.req client1

Sau đó, ký yêu cầu chứng chỉ như bạn đã làm với máy chủ trong bước trước. Lần này, hãy chắc chắn rằng bạn chỉ định kiểu yêu cầu là “client”:

./easyrsa sign-req client client1

Khi được yêu cầu, nhập “yes” để xác nhận rằng bạn muốn ký chứng chỉ và rằng nó đến từ một nguồn đáng tin cậy:

Output

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes

Nếu bạn đã mã hóa khóa CA của mình, bạn sẽ được yêu cầu nhập mật khẩu tại thời điểm này.

Điều này sẽ tạo ra một tệp chứng chỉ client có tên client1.crt. Chuyển tệp này quay lại máy chủ VPN:

scp pki/issued/client1.crt sammy@your_server_ip:/tmp

Trên máy chủ OpenVPN, sao chép chứng chỉ client vào thư mục /client-configs/keys/

cp /tmp/client1.crt ~/client-configs/keys/

Tiếp theo, sao chép tệp ca.crt và ta.key vào thư mục /client-configs/keys/:

sudo cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/

Giờ đây, các chứng chỉ và khóa của máy chủ và client đã được tạo ra và lưu trữ trong các thư mục thích hợp trên máy chủ của bạn. Một số hành động cần phải thực hiện với những tệp này, nhưng những bước đó sẽ được thực hiện trong Bước 8. Bây giờ, bạn có thể tiếp tục với việc cấu hình OpenVPN trên máy chủ của bạn.

Bước 4 — Cấu hình Dịch vụ OpenVPN

Giờ đây, các chứng chỉ và khóa của cả client và server đã được tạo ra, bạn có thể bắt đầu cấu hình dịch vụ OpenVPN để sử dụng những thông tin này.

Bắt đầu bằng cách sao chép một tệp cấu hình mẫu của OpenVPN vào thư mục cấu hình để sử dụng làm cơ sở cho thiết lập của bạn:

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

Mở tệp cấu hình server trong trình soạn thảo văn bản yêu thích của bạn:

sudo nano /etc/openvpn/server.conf

Tìm phần cấu hình HMAC bằng cách tìm chỉ thị tls-auth. Dòng này sẽ đã được mở, nhưng nếu chưa, bạn chỉ cần bỏ dấu chấm phẩy (;) để mở nó:

/etc/openvpn/server.conf

tls-auth ta.key 0 # This file is secret

Tiếp theo, tìm phần về các thuật toán mã hóa bằng cách tìm các dòng mã hóa đã bị chú thích. Thuật toán AES-256-CBC cung cấp mức mã hóa tốt và được hỗ trợ rộng rãi. Một lần nữa, dòng này sẽ đã được mở, nhưng nếu chưa, bạn chỉ cần bỏ dấu chấm phẩy (;) trước nó:

/etc/openvpn/server.conf

cipher AES-256-CBC

Dưới dòng này, thêm chỉ thị auth để chọn thuật toán mã hóa HMAC. SHA256 là một lựa chọn tốt:

/etc/openvpn/server.conf

auth SHA256

Tiếp theo, tìm dòng chứa chỉ thị dh (Diffie-Hellman) để định nghĩa các tham số Diffie-Hellman. Vì một số thay đổi gần đây trong Easy-RSA, tên tệp cho khóa Diffie-Hellman có thể khác với những gì được liệt kê trong tệp cấu hình mẫu. Nếu cần thiết, hãy thay đổi tên tệp ở đây để khớp với tệp bạn đã tạo trong bước trước:

/etc/openvpn/server.conf

dh dh.pem

Cuối cùng, tìm phần cấu hình người dùng và nhóm, và bỏ dấu chấm phẩy ở đầu mỗi dòng để mở chúng:

/etc/openvpn/server.conf

user nobody
group nogroup

Các thay đổi bạn đã thực hiện đối với tệp cấu hình mẫu server.conf cho đến lúc này là cần thiết để OpenVPN hoạt động. Những thay đổi được liệt kê dưới đây là tùy chọn, mặc dù chúng cũng cần thiết cho nhiều trường hợp sử dụng phổ biến.

Đẩy Thay Đổi DNS Để Chuyển Hướng Toàn Bộ Lưu Lượng Qua VPN (Tùy Chọn)

Các thiết lập trên sẽ tạo kết nối VPN giữa hai máy, nhưng sẽ không bắt buộc các kết nối phải sử dụng đường hầm này. Nếu bạn muốn sử dụng VPN để định tuyến tất cả lưu lượng của mình, bạn có thể muốn đẩy các cài đặt DNS vào các máy client.

Có một vài chỉ thị trong tệp server.conf mà bạn phải thay đổi để kích hoạt tính năng này. Tìm phần redirect-gateway và bỏ dấu chấm phẩy (;) ở đầu dòng redirect-gateway để mở nó:

/etc/openvpn/server.conf

push "redirect-gateway def1 bypass-dhcp"

Ngay dưới phần này, tìm phần dhcp-option. Một lần nữa, bỏ dấu chấm phẩy (;) khỏi trước cả hai dòng để mở chúng:

/etc/openvpn/server.conf

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

Điều này sẽ giúp các client cấu hình lại cài đặt DNS của chúng để sử dụng VPN tunnel làm cổng mặc định.

Điều Chỉnh Cổng và Giao Thức (Tùy Chọn)

Theo mặc định, máy chủ OpenVPN sử dụng cổng 1194 và giao thức UDP để chấp nhận kết nối từ client. Nếu bạn cần sử dụng cổng khác do các hạn chế trong môi trường mạng của client, bạn có thể thay đổi tùy chọn cổng. Nếu bạn không đang chạy nội dung web trên máy chủ OpenVPN của mình, cổng 443 là một lựa chọn phổ biến vì nó thường được cho phép qua các quy tắc tường lửa.

/etc/openvpn/server.conf

# Optional!
port 443

Thường thì giao thức cũng bị hạn chế cho cổng đó. Nếu vậy, thay đổi proto từ UDP sang TCP:

/etc/openvpn/server.conf

# Optional!
proto tcp

Nếu bạn chuyển giao thức sang TCP, bạn sẽ cần thay đổi giá trị của chỉ thị explicit-exit-notify từ 1 thành 0, vì chỉ thị này chỉ được sử dụng với UDP. Nếu bạn không thực hiện việc này khi sử dụng TCP, sẽ xảy ra lỗi khi bạn khởi động dịch vụ OpenVPN:

/etc/openvpn/server.conf

# Optional!
explicit-exit-notify 0

Nếu bạn không cần sử dụng cổng và giao thức khác, tốt nhất là để ba thiết lập này giữ nguyên như mặc định.

Chỉ Định Thông Tin Xác Thực Không Phải Mặc Định (Tùy Chọn)

Nếu bạn đã chọn một tên khác khi thực hiện lệnh ./easyrsa gen-req để tạo chứng chỉ máy chủ trong Bước 2, bạn cần thay đổi các dòng certkey để chỉ đến các tệp .crt.key tương ứng. Nếu bạn đã sử dụng tên mặc định là “server”, các cài đặt này đã đúng:

/etc/openvpn/server.conf

cert server.crt
key server.key

Khi bạn đã hoàn tất, hãy lưu và đóng tệp.

Sau khi thực hiện các thay đổi cần thiết đối với cấu hình OpenVPN của máy chủ theo yêu cầu của trường hợp sử dụng của bạn, bạn có thể bắt đầu thực hiện một số thay đổi trong cấu hình mạng của máy chủ.

Bước 5 — Điều chỉnh Cấu hình Mạng của Máy chủ

Có một số khía cạnh trong cấu hình mạng của máy chủ cần được điều chỉnh để OpenVPN có thể định tuyến lưu lượng đúng qua VPN. Đầu tiên là IP forwarding, một phương thức để xác định lưu lượng IP sẽ được định tuyến như thế nào.

Điều chỉnh thiết lập IP forwarding mặc định của máy chủ bằng cách sửa đổi tệp /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

Trong tệp này, tìm dòng đã bị chú thích, cài đặt net.ipv4.ip_forward. Bỏ dấu # ở đầu dòng để mở cài đặt này:

/etc/sysctl.conf

net.ipv4.ip_forward=1

Lưu và đóng tệp khi bạn hoàn thành.

Để đọc tệp và điều chỉnh các giá trị cho phiên làm việc hiện tại, sử dụng lệnh:

sudo sysctl -p

Kết quả sẽ hiển thị:

Output

net.ipv4.ip_forward = 1

Nếu bạn đã làm theo hướng dẫn “Cài đặt Máy chủ Debian 11 ban đầu” trong phần yêu cầu, bạn sẽ có một tường lửa UFW (Uncomplicated Firewall) đã được cài đặt. Dù bạn có sử dụng tường lửa để chặn lưu lượng không mong muốn (mà bạn nên làm), trong hướng dẫn này bạn cần phải điều chỉnh một số quy tắc của tường lửa để cho phép masquerading, một khái niệm trong iptables cung cấp dịch vụ Network Address Translation (NAT) động, giúp định tuyến các kết nối của client đúng cách.

Trước khi mở tệp cấu hình tường lửa để thêm các quy tắc masquerading, bạn cần phải xác định giao diện mạng công khai của máy chủ. Để làm điều này, nhập lệnh:

ip route | grep default

Giao diện công khai của bạn là chuỗi xuất hiện sau dev. Ví dụ, trong kết quả dưới đây, giao diện được hiển thị là eth0:

Output

default via 203.0.113.1 dev eth0 proto static

Khi bạn đã xác định được giao diện mạng của mình, mở tệp /etc/ufw/before.rules để thêm cấu hình liên quan:

sudo nano /etc/ufw/before.rules

Các quy tắc UFW thường được thêm vào thông qua lệnh ufw. Tuy nhiên, các quy tắc được liệt kê trong tệp before.rules sẽ được đọc và áp dụng trước khi các quy tắc UFW thông thường được tải. Hãy thêm các dòng sau vào đầu tệp:

#
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
#   ufw-before-input
#   ufw-before-output
#   ufw-before-forward
#

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

# Don't delete these required lines, otherwise there will be errors
*filter
. . .

Nhớ thay thế eth0 trong dòng -A POSTROUTING bằng giao diện bạn đã tìm được từ lệnh trên.

Lưu và đóng tệp khi bạn hoàn thành.

Tiếp theo, bạn cần phải cấu hình tường lửa UFW để cho phép các gói tin được chuyển tiếp mặc định. Để làm điều này, mở tệp /etc/default/ufw:

sudo nano /etc/default/ufw

Tìm chỉ thị DEFAULT_FORWARD_POLICY và thay đổi giá trị từ DROP thành ACCEPT:

DEFAULT_FORWARD_POLICY="ACCEPT"

Lưu và đóng tệp khi bạn hoàn thành.

Tiếp theo, điều chỉnh tường lửa UFW để cho phép lưu lượng đến OpenVPN. Nếu bạn không thay đổi cổng và giao thức trong tệp cấu hình /etc/openvpn/server.conf, bạn cần phải mở lưu lượng UDP đến cổng 1194. Nếu bạn đã thay đổi cổng và/hoặc giao thức, thay thế các giá trị đã chọn ở đây.

Nếu bạn chưa thêm cổng SSH khi thực hiện bước yêu cầu, bạn cũng cần thêm quy tắc này vào:

sudo ufw allow 1194/udp
sudo ufw allow OpenSSH

Sau khi thêm các quy tắc này, tắt và bật lại UFW để khởi động lại và tải lại tất cả các thay đổi từ các tệp bạn đã chỉnh sửa:

sudo ufw disable
sudo ufw enable

Giờ đây, máy chủ của bạn đã được cấu hình để xử lý đúng lưu lượng OpenVPN.

Bước 6 — Khởi động và Kích hoạt Dịch vụ OpenVPN

Cuối cùng, bạn đã sẵn sàng để khởi động dịch vụ OpenVPN trên máy chủ. Điều này được thực hiện bằng cách sử dụng tiện ích systemd với lệnh systemctl:

sudo systemctl start openvpn@server

Lệnh này sẽ khởi động dịch vụ OpenVPN sử dụng tệp cấu hình /etc/openvpn/server.conf. Nếu bạn chỉ định openvpn@server2 thay vì openvpn@serversystemd sẽ sử dụng tên tệp /etc/openvpn/server2.conf khi khởi động dịch vụ.

Để kiểm tra xem dịch vụ có khởi động thành công không, hãy nhập:

sudo systemctl status openvpn@server

Nếu mọi thứ hoạt động tốt, đầu ra sẽ như sau:

Output

● openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-12-21 03:39:24 UTC; 29s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
 Main PID: 3371 (openvpn)
   Status: "Initialization Sequence Completed"
    Tasks: 1 (limit: 3587)
   Memory: 1.2M
   CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
           └─3371 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /run/openvpn/

Bạn cũng có thể kiểm tra xem giao diện OpenVPN tun0 đã sẵn sàng chưa bằng cách nhập:

ip addr show tun0

Kết quả sẽ hiển thị một giao diện đã được cấu hình:

Output

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::dd60:3a78:b0ca:1659/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever

Sau khi khởi động dịch vụ, bạn cần kích hoạt dịch vụ để nó tự động khởi động khi máy chủ được khởi động lại:

sudo systemctl enable openvpn@server

Giờ đây, dịch vụ OpenVPN của bạn đã hoạt động và sẵn sàng. Tuy nhiên, trước khi sử dụng nó, bạn cần tạo một tệp cấu hình cho máy client.

Bước 7 — Tạo Cấu Hình Máy Client

Việc tạo tệp cấu hình cho các máy client của OpenVPN có thể khá phức tạp, vì mỗi client cần có một tệp cấu hình riêng biệt, và mỗi tệp này phải khớp với các thiết lập đã được chỉ định trong tệp cấu hình của máy chủ. Thay vì tạo một tệp cấu hình duy nhất cho mỗi client, bước này sẽ hướng dẫn bạn cách xây dựng một hạ tầng cấu hình client mà bạn có thể sử dụng để tạo tệp cấu hình cho từng client một cách nhanh chóng. Bạn sẽ tạo một tệp cấu hình “cơ sở”, sau đó chạy một script sẽ tạo tệp cấu hình client độc nhất từ tệp cơ sở này và các chứng chỉ, khóa của từng client.

Bắt đầu bằng cách tạo một thư mục mới trên máy chủ OpenVPN nơi bạn sẽ lưu trữ các tệp cấu hình client trong thư mục client-configs mà bạn đã tạo trước đó:

mkdir -p ~/client-configs/files

Tiếp theo, sao chép một tệp cấu hình mẫu của client vào thư mục client-configs để sử dụng làm cấu hình cơ sở:

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

Mở tệp cấu hình này trong trình soạn thảo văn bản của bạn:

nano ~/client-configs/base.conf

Bên trong tệp, tìm chỉ thị remote. Đây là nơi chỉ định địa chỉ của máy chủ OpenVPN – địa chỉ IP công khai của máy chủ OpenVPN. Nếu bạn đã thay đổi cổng mà máy chủ OpenVPN đang lắng nghe, bạn cũng sẽ cần thay đổi giá trị 1194 thành cổng bạn đã chọn:

~/client-configs/base.conf

. . .
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote your_server_ip 1194
. . .

Đảm bảo rằng giao thức khớp với giá trị bạn đã sử dụng trong cấu hình máy chủ:

~/client-configs/base.conf

proto udp

Tiếp theo, bỏ chú thích (xóa dấu chấm phẩy ;) đối với các chỉ thị user và group:

~/client-configs/base.conf

# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup

Tìm các chỉ thị xác định tệp cacert, và key. Chú thích chúng lại vì bạn sẽ thêm nội dung đầy đủ của các chứng chỉ và khóa vào tệp cấu hình cơ sở ngay sau đó:

~/client-configs/base.conf

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key

Tương tự, hãy chú thích chỉ thị tls-auth, vì bạn sẽ thêm tệp ta.key trực tiếp vào tệp cấu hình client:

~/client-configs/base.conf

# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

Lặp lại các thiết lập mã hóa và xác thực (cipher và auth) giống như trong tệp cấu hình máy chủ:

~/client-configs/base.conf

cipher AES-256-CBC
auth SHA256

Tiếp theo, thêm chỉ thị key-direction vào tệp, và phải đặt giá trị này là “1” để VPN hoạt động chính xác trên máy client:

~/client-configs/base.conf

key-direction 1

Cuối cùng, thêm vài dòng bị chú thích dưới đây. Mặc dù bạn có thể bao gồm các chỉ thị này trong mọi tệp cấu hình client, nhưng chỉ cần kích hoạt chúng đối với các client Linux có tệp /etc/openvpn/update-resolv-conf. Tệp này sử dụng tiện ích resolvconf để cập nhật thông tin DNS cho các client Linux.

~/client-configs/base.conf

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

Nếu client của bạn chạy Linux và có tệp /etc/openvpn/update-resolv-conf, hãy bỏ chú thích các dòng này trong tệp cấu hình của client sau khi tệp cấu hình đã được tạo.

Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, tạo một script đơn giản sẽ tạo ra một tệp cấu hình mới chứa chứng chỉ, khóa, các tệp mã hóa và cấu hình cơ sở trong thư mục ~/client-configs/files. Mở một tệp mới có tên make_config.sh trong thư mục ~/client-configs:

nano ~/client-configs/make_config.sh

Thêm nội dung sau vào script, đảm bảo thay đổi sammy thành tài khoản người dùng không phải root của bạn trên máy chủ:

~/client-configs/make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=/home/sammy/client-configs/keys
OUTPUT_DIR=/home/sammy/client-configs/files
BASE_CONFIG=/home/sammy/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

Lưu và đóng tệp khi bạn hoàn thành.

chmod 700 ~/client-configs/make_config.sh

Script này sẽ sao chép tệp base.conf mà bạn đã tạo, thu thập tất cả chứng chỉ và khóa đã tạo cho client, trích xuất nội dung của chúng và gắn vào bản sao của tệp cấu hình cơ sở, sau đó xuất toàn bộ nội dung vào một tệp cấu hình client mới. Điều này có nghĩa là bạn sẽ không phải quản lý tệp cấu hình, chứng chỉ và khóa của client một cách riêng biệt, mà tất cả các thông tin cần thiết sẽ được lưu trữ ở một nơi. Lợi ích của việc này là nếu bạn cần thêm một client mới trong tương lai, bạn chỉ cần chạy script này từ một vị trí trung tâm để nhanh chóng tạo ra tệp cấu hình chứa tất cả thông tin cần thiết trong một tệp duy nhất dễ dàng phân phối.

Lưu ý rằng mỗi khi bạn thêm một client mới, bạn cần phải tạo chứng chỉ và khóa mới cho client đó trước khi chạy script này để tạo tệp cấu hình của nó.

Bước 8 — Tạo Cấu Hình cho Client

Nếu bạn đã làm theo hướng dẫn trước đó, bạn đã tạo chứng chỉ và khóa cho client có tên là client1.crt và client1.key trong Bước 3. Bạn có thể tạo tệp cấu hình cho client này bằng cách di chuyển vào thư mục ~/client-configs và chạy script bạn đã tạo ở cuối Bước 7.

Đầu tiên, di chuyển vào thư mục ~/client-configs:

cd ~/client-configs
sudo ./make_config.sh client1

Kết quả là tệp cấu hình có tên client1.ovpn sẽ được tạo trong thư mục ~/client-configs/files:

ls ~/client-configs/files

Output

client1.ovpn

Bây giờ bạn cần chuyển tệp này vào thiết bị mà bạn dự định sử dụng làm client. Ví dụ, đây có thể là máy tính cá nhân của bạn hoặc thiết bị di động.

Mặc dù các công cụ và phương thức để chuyển tệp có thể khác nhau tùy theo hệ điều hành và sở thích cá nhân của bạn, một phương pháp đáng tin cậy và an toàn là sử dụng SFTP (SSH File Transfer Protocol) hoặc SCP (Secure Copy) để chuyển tệp cấu hình của client qua kết nối mã hóa.

Dưới đây là một ví dụ về lệnh SFTP sử dụng tệp client1.ovpn, bạn có thể chạy từ máy tính của mình (macOS hoặc Linux) để chuyển tệp .ovpn vào thư mục người dùng của mình:

sftp sammy@your_server_ip:client-configs/files/client1.ovpn ~/

Ngoài ra, bạn có thể sử dụng các công cụ và tài liệu sau để chuyển tệp một cách an toàn từ máy chủ vào máy tính cá nhân:

Bước 9 — Cài đặt Cấu Hình Client

Phần này hướng dẫn cách cài đặt hồ sơ VPN cho client trên các hệ điều hành khác nhau, bao gồm Windows, macOS, Linux, iOS và Android. Các hướng dẫn này độc lập với nhau, vì vậy bạn có thể chọn phần phù hợp với hệ điều hành của mình.

Windows

  1. Cài đặtTải về ứng dụng OpenVPN client cho Windows từ trang Tải OpenVPN. Chọn phiên bản trình cài đặt phù hợp với hệ điều hành của bạn.Lưu ý: OpenVPN cần quyền quản trị để cài đặt.Sau khi cài đặt OpenVPN, sao chép tệp .ovpn vào thư mục:
    C:\Program Files\OpenVPN\config

    Bạn có thể không thể chuyển tệp trực tiếp đến vị trí này nếu bạn không chạy chương trình chuyển tệp (ví dụ: WinSCP) dưới quyền quản trị. Bạn có thể chạy chương trình đó dưới quyền quản trị, hoặc chuyển tệp vào thư mục người dùng không phải quản trị của bạn và sau đó sao chép tệp vào thư mục C:\Program Files\OpenVPN\config trên máy tính, sau đó phê duyệt việc sao chép vào vị trí yêu cầu quyền quản trị khi được yêu cầu.

    Khi bạn khởi động OpenVPN, nó sẽ tự động nhận diện cấu hình và làm cho nó sẵn sàng sử dụng.

    Bạn phải chạy OpenVPN dưới quyền quản trị mỗi khi sử dụng, ngay cả đối với các tài khoản quản trị. Để làm điều này mà không phải nhấp chuột phải và chọn Run as administrator mỗi lần sử dụng VPN, bạn cần thiết lập điều này từ tài khoản quản trị. Điều này cũng có nghĩa là người dùng tiêu chuẩn sẽ cần nhập mật khẩu của quản trị viên để sử dụng OpenVPN. Mặt khác, người dùng tiêu chuẩn sẽ không thể kết nối đúng cách với máy chủ trừ khi ứng dụng OpenVPN trên client có quyền quản trị, vì vậy quyền cao hơn là cần thiết.

    Để thiết lập ứng dụng OpenVPN luôn chạy dưới quyền quản trị, nhấp chuột phải vào biểu tượng tắt của nó và chọn Properties. Ở cuối tab Compatibility, nhấn vào nút Change settings for all users. Trong cửa sổ mới, đánh dấu Run this program as an administrator và nhấn Apply.

  2. Kết nốiKhi bạn mở ứng dụng OpenVPN, nó sẽ tự động phát hiện cấu hình và hiển thị trong ứng dụng. Để kết nối, bạn cần phải chạy OpenVPN dưới quyền quản trị mỗi lần sử dụng. Để tránh việc phải nhấp chuột phải chọn “Run as administrator”, bạn có thể thiết lập ứng dụng OpenVPN để luôn chạy với quyền quản trị.Để làm điều này, nhấp chuột phải vào biểu tượng ứng dụng OpenVPN, chọn Properties, sau đó trong tab Compatibility, nhấn vào Change settings for all users và đánh dấu Run this program as an administrator, rồi nhấn Apply.Khi OpenVPN đã mở, bạn có thể kết nối bằng cách nhấp chuột phải vào biểu tượng OpenVPN trong khay hệ thống và chọn cấu hình client1.ovpn rồi nhấn Connect.Để ngắt kết nối, bạn chỉ cần nhấp chuột phải vào biểu tượng trong khay hệ thống, chọn cấu hình và nhấn Disconnect.

macOS

  1. Cài đặtTunnelblick là ứng dụng OpenVPN mã nguồn mở miễn phí cho macOS. Bạn có thể tải về bản cài đặt mới nhất từ trang Tunnelblick Downloads. Sau khi tải về, mở tệp .dmg và làm theo hướng dẫn để cài đặt.Trong quá trình cài đặt, Tunnelblick sẽ yêu cầu bạn nếu bạn có bất kỳ tệp cấu hình nào. Chọn I have configuration files và tiếp tục cài đặt. Mở Finder và nhấp đúp vào tệp client1.ovpn. Tunnelblick sẽ tự động cài đặt cấu hình client.
  2. Kết nốiMở Tunnelblick bằng cách nhấp đúp vào biểu tượng Tunnelblick trong thư mục Ứng dụng. Khi Tunnelblick mở ra, sẽ có một biểu tượng trên thanh menu phía trên bên phải màn hình. Nhấp vào biểu tượng và chọn Connect client1 để kết nối VPN.

Linux

  1. Cài đặtNếu bạn đang sử dụng Linux, có một số công cụ có sẵn tùy thuộc vào bản phân phối của bạn. Phương pháp phổ biến nhất là sử dụng phần mềm OpenVPN. Trên Debian, bạn có thể cài đặt nó giống như bạn đã làm trên máy chủ bằng lệnh:
    sudo apt update
    sudo apt install openvpn

    Trên CentOS, bạn có thể kích hoạt các kho lưu trữ EPEL và sau đó cài đặt nó bằng cách nhập lệnh:

    sudo yum install epel-release
    sudo yum install openvpn

Cấu hình

Kiểm tra xem bản phân phối của bạn có tệp /etc/openvpn/update-resolv-conf không:

ls /etc/openvpn
update-resolv-conf

Tiếp theo, chỉnh sửa tệp cấu hình client OpenVPN mà bạn đã chuyển:

nano client1.ovpn

Nếu có tệp update-resolv-conf, mở tệp cấu hình client1.ovpn và bỏ chú thích ba dòng bạn đã thêm để điều chỉnh cài đặt DNS:

client1.ovpn

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Nếu bạn sử dụng CentOS, thay đổi chỉ thị group từ nogroup thành nobody để phù hợp với nhóm có sẵn trong bản phân phối của bạn.
client1.ovpn

group nobody

Lưu và đóng tệp khi bạn hoàn thành.

Cuối cùng, kết nối với VPN bằng cách chỉ định tệp cấu hình:

sudo openvpn --config client1.ovpn

iOS

  1. Cài đặtTừ App Store trên iPhone hoặc iPad của bạn, tìm và cài đặt ứng dụng OpenVPN Connect, ứng dụng chính thức của OpenVPN trên iOS. Sau đó làm theo hướng dẫn của Apple để chuyển tệp client1.ovpn từ máy tính vào thiết bị iOS của bạn, sao chép nó vào ứng dụng OpenVPN.
  2. Kết nốiMở ứng dụng OpenVPN trên thiết bị iOS. Ứng dụng sẽ tự động nhận diện cấu hình mới và yêu cầu bạn nhấn Add để thêm cấu hình.Khi cấu hình đã được thêm, bạn có thể kết nối bằng cách nhấn Connect.

Android

  1. Cài đặtMở Google Play Store và tìm ứng dụng OpenVPN Connect chính thức của OpenVPN cho Android. Cài đặt ứng dụng này.
  2. Kết nốiMở ứng dụng OpenVPN trên Android. Nó sẽ hiển thị màn hình Import Profile, nhấn vào tab FILE và tìm tệp client1.ovpn của bạn. Sau khi chọn tệp, ứng dụng sẽ yêu cầu bạn nhấn OK để nhập cấu hình và kết nối

Bước 10 — Kiểm Tra Kết Nối VPN (Tùy Chọn)

Lưu ý: Phương pháp kiểm tra kết nối VPN này chỉ hoạt động nếu bạn đã chọn định tuyến tất cả lưu lượng của client qua VPN trong Bước 4, thông qua phần tùy chọn “Push DNS Changes to Redirect All Traffic Through the VPN”.

Sau khi mọi thứ đã được cài đặt, bạn có thể thực hiện kiểm tra đơn giản để xác nhận rằng tất cả đều hoạt động bình thường. Nếu chưa kết nối VPN, mở trình duyệt và truy cập trang DNSLeakTest.

Trang web sẽ trả về địa chỉ IP của nhà cung cấp dịch vụ internet của bạn và cách bạn xuất hiện trên internet. Để kiểm tra cài đặt DNS của bạn thông qua cùng một trang web, nhấn vào Extended Test, trang sẽ cho biết bạn đang sử dụng máy chủ DNS nào.

Bây giờ, hãy kết nối OpenVPN client với máy chủ OpenVPN và làm mới trình duyệt. Một địa chỉ IP hoàn toàn khác (của máy chủ VPN) sẽ xuất hiện, và đó chính là cách bạn xuất hiện trên internet.

Bước 11 — Hủy Chứng Chỉ Client

Đôi khi, bạn cần phải hủy chứng chỉ của một client để ngừng cấp quyền truy cập vào máy chủ OpenVPN. Để thực hiện điều này, chuyển đến thư mục ~/easy-rsa trên máy chủ CA của bạn:

cd ~/easy-rsa

Tiếp theo, chạy script easyrsa với tùy chọn revoke, theo sau là tên của client mà bạn muốn hủy chứng chỉ:

./easyrsa revoke client2

Khi được yêu cầu, nhập “yes” để xác nhận rằng bạn muốn hủy chứng chỉ và rằng chứng chỉ đó đến từ một nguồn đáng tin cậy:

Output
Please confirm you wish to revoke the certificate with the following subject:

subject=
    commonName                = client2


Type the word 'yes' to continue, or any other input to abort.
  Continue with revocation: yes

Nếu khóa của CA của bạn được bảo vệ bằng mật khẩu, bạn sẽ được yêu cầu nhập mật khẩu tại thời điểm này.

Sau khi xác nhận hành động này, CA sẽ hoàn toàn hủy chứng chỉ của client. Tuy nhiên, máy chủ OpenVPN hiện tại chưa có phương thức để kiểm tra xem chứng chỉ nào của client đã bị hủy, vì vậy client đó vẫn có thể tiếp tục truy cập vào VPN. Để giải quyết vấn đề này, bạn cần tạo một Danh Sách Hủy Chứng Chỉ (CRL) trên máy chủ CA (và bạn sẽ cần nhập mật khẩu của CA nếu cần):

./easyrsa gen-crl

Lệnh trên sẽ tạo ra tệp có tên crl.pem. Sau đó, bạn cần chuyển tệp này vào máy chủ OpenVPN của mình một cách bảo mật:

scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

Trên máy chủ OpenVPN, sao chép tệp crl.pem vào thư mục /etc/openvpn/:

scp ~/easy-rsa/pki/crl.pem sammy@your_server_ip:/tmp

Tiếp theo, mở tệp cấu hình của OpenVPN:

sudo nano /etc/openvpn/server.conf

Ở cuối tệp, thêm chỉ thị crl-verify, điều này sẽ yêu cầu máy chủ OpenVPN kiểm tra Danh Sách Hủy Chứng Chỉ (CRL) mỗi khi có một yêu cầu kết nối:

/etc/openvpn/server.conf

. . .
crl-verify crl.pem

Lưu và đóng tệp khi bạn đã hoàn tất.

Cuối cùng, khởi động lại dịch vụ OpenVPN để áp dụng các thay đổi về hủy chứng chỉ:

sudo systemctl restart openvpn@server

Bây giờ, client mà bạn đã hủy chứng chỉ sẽ không thể kết nối lại với máy chủ OpenVPN nữa.

Để hủy chứng chỉ của các client khác, bạn có thể làm theo quy trình này:

  1. Hủy chứng chỉ bằng lệnh ./easyrsa revoke client_name
  2. Tạo lại Danh Sách Hủy Chứng Chỉ (CRL)
  3. Chuyển tệp crl.pem mới vào máy chủ OpenVPN và sao chép vào thư mục /etc/openvpn để thay thế danh sách cũ.
  4. Khởi động lại dịch vụ OpenVPN.

Bạn có thể sử dụng quy trình này để hủy bất kỳ chứng chỉ nào mà bạn đã cấp phát cho máy chủ của mình.

Kết luận

Với VPN mới của bạn, các thành viên trong nhóm từ xa có thể kết nối an toàn đến các tài nguyên nội bộ như thể họ đang kết nối trực tiếp với mạng riêng. Với sự ra đời của VPN, bạn cũng có thể cân nhắc chuyển một số tài nguyên hiện đang được truy cập trên internet công khai—có thể là các dịch vụ bảo mật bằng phương pháp không mạnh mẽ (ví dụ: xác thực HTTP cơ bản)—sang mạng riêng của bạn và bảo vệ chúng bằng VPN.

Với chỉ một máy chủ và một phần mềm mã nguồn mở, bạn đã thực hiện một bước quan trọng trong việc bảo vệ dữ liệu và cơ sở hạ tầng quan trọng của mình. Giống như VPN, proxy web hoạt động như một người trung gian giữa người dùng và tài nguyên internet mà họ muốn truy cập, giúp người dùng duy trì tính ẩn danh. Tuy nhiên, proxy web chỉ phục vụ cho lưu lượng web và không cung cấp mã hóa, nhưng nó vẫn có thể là một công cụ hữu ích cho nhóm của bạn khi VPN không cần thiết. Nếu bạn tò mò, hãy tham khảo hướng dẫn “Cách Cài Đặt Squid Proxy cho Kết Nối Riêng Tư trên Ubuntu 22.04”.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *