Cách cài đặt OpenVPN Server và Client với Easy-RSA 3 trên CentOS 8

theanh

Administrator
Nhân viên
OpenVPN là một ứng dụng mã nguồn mở cho phép bạn tạo một mạng riêng an toàn qua Internet công cộng. OpenVPN triển khai một mạng riêng ảo (VPN) để tạo kết nối an toàn. OpenVPN sử dụng thư viện OpenSSL để cung cấp mã hóa và cung cấp một số cơ chế xác thực, chẳng hạn như dựa trên chứng chỉ, khóa được chia sẻ trước và xác thực tên người dùng/mật khẩu.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình OpenVPN từng bước trên CentOS 8 Server. Và chúng ta sẽ triển khai xác thực OpenVPN dựa trên chứng chỉ.

Điều kiện tiên quyết
  • Máy chủ CentOS 8
  • Quyền root
Chúng ta sẽ làm gì?
  • Cài đặt OpenVPN và Easy-RSA
  • Cấu hình Easy-RSA 3 Var
  • Xây dựng khóa OpenVPN
  • Cấu hình máy chủ OpenVPN
  • Cấu hình Firewalld và bật chuyển tiếp cổng
  • Thiết lập máy khách
  • Kiểm tra

Bước 1 - Cài đặt OpenVPN và Easy-RSA​

Đầu tiên, chúng ta sẽ thêm kho lưu trữ EPEL (Gói bổ sung cho Enterprise Linux) và cài đặt gói OpenVPN mới nhất, đồng thời tải xuống tập lệnh easy-rsa vào hệ thống CentOS 8.

Cài đặt kho lưu trữ EPEL bằng lệnh dnf bên dưới.
Mã:
dnf install epel-release
Sau đó, cài đặt gói OpenVPN mới nhất 2.4.7.
Mã:
dnf install openvpn
Sau khi cài đặt hoàn tất, hãy vào '/etc/openvpn' và tải xuống tập lệnh easy-rsa bằng lệnh wget bên dưới.
Mã:
cd /etc/openvpn/
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz
Bây giờ hãy giải nén tệp 'EasyRSA-unix-v3.0.6.tgz' và đổi tên thư mục thành 'easy-rsa'.
Mã:
tar -xf EasyRSA-unix-v3.0.6.tgz
mv EasyRSA-v3.0.6/ easy-rsa/; rm -f EasyRSA-unix-v3.0.6.tgz
Gói OpenVPN và tập lệnh easy-rsa đã được cài đặt trên hệ thống CentOS 8.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22573%22%20height=%22750%22%3E%3C/svg%3E

Bước 2 - Cấu hình Easy-RSA 3​

Trong bước này, chúng ta sẽ cấu hình easy-rsa 3 bằng cách tạo một tệp 'vars' mới. Tệp 'vars' chứa các thiết lập Easy-RSA 3.

Đi tới thư mục '/etc/openvpn/easy-rsa/' và tạo một tập lệnh vars mới bằng trình soạn thảo vim.
Mã:
cd /etc/openvpn/easy-rsa/
vim vars
Dán các cấu hình vars easy-rsa 3 bên dưới.
Mã:
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "ID"
set_var EASYRSA_REQ_PROVINCE "Jakarta"
set_var EASYRSA_REQ_CITY "Jakarta"
set_var EASYRSA_REQ_ORG "hakase-labs CERTIFICATE AUTHORITY"
set_var EASYRSA_REQ_EMAIL "[emailprotected]"
set_var EASYRSA_REQ_OU "HAKASE-LABS EASY CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "HAKASE-LABS CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"
set_var EASYRSA_DIGEST "sha256"
Lưu và thoát.

Lưu ý:
  • Thay đổi giá trị của các biến theo nhu cầu của bạn.
  • Tăng 'EASYRSA_KEY_SIZE' để bảo mật tốt hơn.
  • Thay đổi 'EASYRSA_CA_EXPIRE' và 'EASYRSA_CERT_EXPIRE'.
Bây giờ hãy thực thi tệp 'vars' bằng cách thay đổi quyền của tệp.
Mã:
chmod +x vars
Cấu hình easy-rsa 3 đã hoàn tất.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22560%22%3E%3C/svg%3E

Bước 3 - Xây dựng khóa OpenVPN​

Trong bước này, chúng ta sẽ xây dựng khóa OpenVPN dựa trên tệp 'vars' easy-rsa 3 mà chúng ta đã tạo. Chúng ta sẽ xây dựng khóa CA, khóa Máy chủ và Khóa Máy khách, tệp DH và CRL PEM.

Chúng ta sẽ xây dựng tất cả các khóa đó bằng dòng lệnh 'easyrsa'. Đi đến thư mục '/etc/openvpn/easy-rsa/'.
Mã:
cd /etc/openvpn/easy-rsa/3/

- Khởi tạo và xây dựng CA​

Trước khi xây dựng khóa máy chủ và máy khách, chúng ta cần khởi tạo thư mục PKI (Cơ sở hạ tầng khóa công khai) và xây dựng khóa CA.

Khởi tạo thư mục PKI và xây dựng khóa CA bằng lệnh bên dưới.
Mã:
./easyrsa init-pki
./easyrsa build-ca
Bây giờ hãy nhập mật khẩu cho khóa CA của bạn và bạn sẽ nhận được các tệp 'ca.crt' và 'ca.key' trong thư mục 'pki'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22732%22%3E%3C/svg%3E

- Xây dựng Khóa máy chủ​

Bây giờ chúng ta muốn xây dựng khóa máy chủ và chúng ta sẽ xây dựng khóa máy chủ có tên là 'hakase-server'.

Xây dựng khóa máy chủ 'hakase-server' bằng lệnh bên dưới.
Mã:
./easyrsa gen-req hakase-server nopass

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22370%22%3E%3C/svg%3E


Lưu ý:
  • nopass = tùy chọn để vô hiệu hóa mật khẩu cho khóa 'hakase-server'.
Và ký khóa 'hakase-server' bằng CA của chúng tôi chứng chỉ.
Mã:
./easyrsa sign-req server hakase-server
Bạn sẽ được yêu cầu nhập mật khẩu 'CA', hãy nhập mật khẩu và nhấn Enter. Và bạn sẽ nhận được tệp chứng chỉ 'hakase-server.crt' trong thư mục 'pki/issued/'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22741%22%3E%3C/svg%3E


Xác minh tệp chứng chỉ bằng lệnh OpenSSL và đảm bảo không có lỗi.
Mã:
openssl verify -CAfile pki/ca.crt pki/issued/hakase-server.crt
Tất cả các khóa chứng chỉ máy chủ đã được tạo. Khóa riêng của máy chủ nằm ở 'pki/private/hakase-server.key', và chứng chỉ máy chủ nằm ở 'pki/issued/hakase-server.crt'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22105%22%3E%3C/svg%3E

- Xây dựng Khóa máy khách​

Bây giờ chúng ta cần xây dựng khóa cho máy khách. Chúng tôi sẽ tạo một khóa máy khách mới có tên là 'client01'.

Tạo khóa 'client01' bằng lệnh bên dưới.
Mã:
./easyrsa gen-req client01 nopass

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22441%22%3E%3C/svg%3E


Bây giờ hãy ký khóa 'client01' bằng chứng chỉ CA của chúng tôi làm bên dưới.
Mã:
./easyrsa sign-req client client01
Nhập 'có' để xác nhận yêu cầu chứng chỉ máy khách, sau đó nhập mật khẩu CA.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22688%22%3E%3C/svg%3E


Chứng chỉ máy khách có tên 'client01' đã được tạo, hãy xác minh chứng chỉ máy khách bằng openssl lệnh.
Mã:
openssl verify -CAfile pki/ca.crt pki/issued/client01.crt
Đảm bảo không có lỗi.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22121%22%3E%3C/svg%3E

- Tạo khóa Diffie-Hellman​

Khóa Diffie-Hellman là cần thiết để bảo mật tốt hơn. Và chúng ta sẽ tạo khóa DH '2048' dựa trên tệp cấu hình 'vars' đã tạo ở trên cùng.

Tạo khóa Diffie-Hellman bằng lệnh bên dưới.
Mã:
./easyrsa gen-dh
Và khóa DH đã được tạo, nằm trong thư mục 'pki'.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22534%22%3E%3C/svg%3E

- Tùy chọn: Tạo Khóa CRL​

Khóa CRL (Danh sách thu hồi chứng chỉ) sẽ được sử dụng để thu hồi khóa máy khách. Nếu bạn có nhiều chứng chỉ máy khách của máy khách trên máy chủ VPN của mình và bạn muốn xóa khóa của một ai đó, bạn chỉ cần thu hồi bằng lệnh easy-rsa.

Nếu bạn muốn thu hồi một số khóa, hãy chạy lệnh bên dưới.
Mã:
./easyrsa revoke someone
Sau đó tạo khóa CRL.
Mã:
./easyrsa gen-crl
Tệp CRL PEM đã được tạo trong thư mục 'pki' - sau đây là ví dụ trên máy chủ của tôi.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22265%22%3E%3C/svg%3E

- Sao chép Tệp Chứng chỉ​

Tất cả các chứng chỉ đã được tạo, bây giờ hãy sao chép các tệp chứng chỉ và tệp PEM.

Sao chép Khóa Máy chủ và Chứng chỉ.
Mã:
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/hakase-server.crt /etc/openvpn/server/
cp pki/private/hakase-server.key /etc/openvpn/server/
Sao chép Khóa và Chứng chỉ client01.
Mã:
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client01.crt /etc/openvpn/client/
cp pki/private/client01.key /etc/openvpn/client/
Sao chép DH và CRL Chìa khóa.
Mã:
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
Tất cả các chứng chỉ cho máy chủ và máy khách đã được sao chép vào từng thư mục.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22295%22%3E%3C/svg%3E

Bước 4 - Cấu hình OpenVPN​

Trong bước này, chúng ta sẽ tạo cấu hình mới 'server.conf' cho máy chủ OpenVPN.

Vào thư mục '/etc/openvpn/server/' và tạo tệp cấu hình mới 'server.conf' bằng vim.
Mã:
cd /etc/openvpn/server/
vim server.conf
Dán cấu hình máy chủ OpenVPN sau ở đó.
Mã:
# OpenVPN Port, Protocol, and the Tun
port 1194
proto udp
dev tun

# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/hakase-server.crt
key /etc/openvpn/server/hakase-server.key

#DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem

# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.5.0.0 255.255.255.0
push "redirect-gateway def1"

# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"

#Enable multiple clients to connect with the same certificate key
duplicate-cn

# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache

# Other Configuration
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nobody

# OpenVPN Log
log-append /var/log/openvpn.log
verb 3
Lưu và thoát.

Và cấu hình máy chủ OpenVPN đã được tạo.

Bước 5 - Bật Chuyển tiếp cổng và Cấu hình Định tuyến trong Firewalld​

Trong bước này, chúng tôi sẽ bật mô-đun hạt nhân Chuyển tiếp cổng và cấu hình định tuyến 'Firewalld' cho OpenVPN.

Bật mô-đun hạt nhân Chuyển tiếp cổng bằng cách chạy lệnh sau lệnh.
Mã:
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
Tiếp theo, cấu hình định tuyến bằng Firewalld cho OpenVPN.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22147%22%3E%3C/svg%3E


Thêm dịch vụ OpenVPN vào tường lửa 'công khai' và 'đáng tin cậy' vùng.
Mã:
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-service=openvpn
Sau đó, thêm 'tun0' vào vùng 'tin cậy'.
Mã:
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Bây giờ hãy bật 'MASQUERADE' trên vùng 'công khai' mặc định firewalld.
Mã:
firewall-cmd --permanent --add-masquerade
Bật NAT cho địa chỉ IP nội bộ OpenVPN '10.5.0.0/24' đến địa chỉ IP bên ngoài 'SERVERIP'.
Mã:
SERVERIP=$(ip route get 1.1.1.1 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.5.0.0/24 -o $SERVERIP -j MASQUERADE
Và tải lại firewalld.
Mã:
firewall-cmd --reload

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22173%22%3E%3C/svg%3E


Cấu hình chuyển tiếp cổng và định tuyến Firewalld đã hoàn tất, hãy khởi động dịch vụ OpenVPN và cho phép dịch vụ này tự động khởi chạy mỗi lần tại hệ thống khởi động.
Mã:
systemctl start openvpn-server@server
systemctl enable openvpn-server@server

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%2284%22%3E%3C/svg%3E


Sau đó, hãy kiểm tra dịch vụ OpenVPN bằng lệnh bên dưới.
Mã:
netstat -plntu
systemctl status openvpn-server@server
Và bạn sẽ nhận được kết quả như bên dưới.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22381%22%3E%3C/svg%3E


Kết quả là, dịch vụ OpenVPN đang hoạt động trên giao thức UDP với cổng mặc định '1194'.

Bước 6 - Thiết lập máy khách OpenVPN​

Vào thư mục '/etc/openvpn/client' và tạo tệp cấu hình máy khách openvpn mới 'client01.ovpn' bằng vim.
Mã:
cd /etc/openvpn/client
vim client01.ovpn
Dán cấu hình máy khách OpenVPN sau vào đó.
Mã:
client
dev tun
proto udp

remote xxx.xxx.xxx.xxx 1194

ca ca.crt
cert client01.crt
key client01.key

cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256

resolv-retry infinite
compress lz4
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
Lưu và thoát.

Bây giờ hãy nén thư mục '/etc/openvpn/client' thành tệp 'zip' hoặc 'tar.gz' và tải xuống tệp đã nén bằng SCP từ máy tính cục bộ của bạn.

Nén thư mục '/etc/openvpn/client' thành 'client01.tar.gz' tập tin.
Mã:
cd /etc/openvpn/
tar -czvf client01.tar.gz client/*

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22290%22%3E%3C/svg%3E


Bây giờ bạn có thể tải xuống tệp OpenVPN đã nén bằng máy chủ FTP hoặc lệnh scp như bên dưới.
Mã:
scp [emailprotected]:/etc/openvpn/client01.tar.gz .

Bước 7 - Kết nối với OpenVPN​

Kiểm tra trên Máy khách.

- Trên Linux​

Cài đặt gói OpenVPN và nếu bạn muốn cấu hình GUI, hãy cài đặt OpenVPN network-manager.
Mã:
sudo apt install openvpn network-manager-openvpn network-manager-openvpn-gnome -y
Nếu bạn muốn kết nối bằng shell terminal, hãy chạy lệnh OpenVPN bên dưới.
Mã:
openvpn --config client01.ovpn
Khi bạn đã kết nối với OpenVPN, hãy mở một tab terminal mới và kiểm tra kết nối bằng curl lệnh.
Mã:
curl ifconfig.io
Và bạn sẽ nhận được địa chỉ IP của máy chủ OpenVPN.

- Trên Mac OS​

Tải xuốngTunnelblick và cài đặt.

Giải nén tệp 'client01.tar.gz' và đổi tên thư mục 'client' thành 'client01.tblk'.
Mã:
tar -xzvf client01.tar.gz
mv client client01.tblk
Nhấp đúp vào 'client01.tblk' và Tunnelblick sẽ tự động phát hiện cấu hình OpenVPN rồi nhập.

Bây giờ hãy kết nối thông qua Tunnelblick trên thanh trên cùng.

- Trên Windows​

Tải xuốngmáy khách openvpn cho windows và nhập cấu hình.

Tham khảo​

 
Back
Bên trên