Deploying OpenVPN Server

Giới thiệu
OpenVPN là một hệ thống mạng riêng ảo (VPN) triển khai các kỹ thuật để tạo kết nối point-to-point hoặc site-to-site an toàn trong cấu hình định tuyến hoặc cầu nối và các phương tiện truy cập từ xa. Nó thực hiện cả ứng dụng máy khách và máy chủ. VPN cho phép tạo ra kết nối mạng riêng tư giữa các thiết bị thông qua Internet, được sử dụng để truyền dữ liệu một cách an toàn và ẩn danh qua các mạng công cộng.
Mô hình

OpenVPN Server
192.168.81.129/24
192.168.16.129/24
Web Server
192.168.16.133/24
FTP:
ftpuser/P@ssw0rdClient
- 192.168.2.9/24
Video
Chuẩn bị
Tạo user non-root
Đăng nhập bằng
root
Tạo 1 user mới để thực hiện các hành động liên quan đến VPN, ở đây là vpnmng.
adduser vpnmng
Cấp quyền quản trị cho user vừa tạo
usermod -aG sudo vpnmng
Thiết lập tường lửa cơ bản
Các ứng dụng có thể đăng ký hồ sơ của mình với UFW sau khi cài đặt. Những cấu hình này cho phép UFW quản lý các ứng dụng này theo tên. OpenSSH, dịch vụ cho phép chúng tôi kết nối với máy chủ của mình hiện nay, đã có hồ sơ được đăng ký với UFW.
ufw app list
Output:
Output Available applications: OpenSSH
Chúng ta cần đảm bảo rằng tường lửa cho phép kết nối SSH để có thể đăng nhập lại vào lần sau. Ta có thể cho phép các kết nối này bằng cách:
ufw allow OpenSSH
Sau đó, chúng ta có thể kích hoạt tường lửa bằng cách :
ufw enable
Gõ y và nhấn ENTER để tiếp tục. Bạn có thể thấy các kết nối SSH vẫn được cho phép bằng cách:
ufw status
Output:
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Cài đặt OpenVPN và Easy-RSA
Bước đầu tiên là cài đặt OpenVPN và Easy-RSA. Easy-RSA là công cụ quản lý cơ sở hạ tầng khóa công khai (PKI) mà bạn sẽ sử dụng trên Máy chủ OpenVPN để tạo yêu cầu chứng chỉ mà sau đó bạn sẽ xác minh và đăng nhập trên Máy chủ CA.
non-root user:
vpnmng
sudo apt update
sudo apt install openssl openvpn ca-certificates easy-rsa
Tiếp theo, tạo một thư mục mới trên Máy chủ OpenVPN với tư cách là người dùng non-root có tên là ~/easy-rsa:
mkdir ~/easy-rsa
Tạo một liên kết tượng trưng từ tập lệnh easyrsa mà gói đã cài đặt vào thư mục ~/easy-rsa mà bạn vừa tạo:
ln -s /usr/share/easy-rsa/* ~/easy-rsa/
Cấp quyền chủ sở hữu cho tệp vừa tạo
sudo chown vpnmng ~/easy-rsa
chmod 700 ~/easy-rsa
Tạo PKI cho OpenVPN
non-root user:
vpnmng
Để xây dựng thư mục PKI trên máy chủ OpenVPN của bạn, bạn sẽ cần điền vào một tệp có tên vars với một số giá trị mặc định. Trước tiên, bạn sẽ cd vào thư mục easy-rsa, sau đó bạn sẽ tạo và chỉnh sửa tệp vars bằng nano hoặc trình soạn thảo văn bản ưa thích của bạn.
cd ~/easy-rsa
nano vars
nano vars:
set_var EASYRSA_ALGO "ec" set_var EASYRSA_DIGEST "sha512"Hai dòng trên sẽ đảm bảo rằng các khóa riêng và yêu cầu chứng chỉ của bạn được định cấu hình để sử dụng Mật mã đường cong Elliptic (ECC) hiện đại để tạo khóa và chữ ký bảo mật cho máy khách và máy chủ OpenVPN của bạn.
Tiến hành tạo thư mục PKI bằng cách chạy tập lệnh easyrsa với tùy chọn init-pki
./easyrsa init-pki
Để tạo cặp khóa công khai và khóa riêng tư cho Certificate Authority, chạy lại lệnh easy-rsa với tùy chọn build-ca:
./easyrsa --batch build-ca nopass
Tạo yêu cầu chứng chỉ máy chủ OpenVPN và khóa riêng
non-root user:
vpnmngThêm dòng sau vào tệp
pki/index.txt.attrunique_subject = no
Tiến hành tạo chứng chỉ và khóa riêng cho OpenVPN Server
cd ~/easy-rsa
./easyrsa build-server-full server nopass
Sao chép các tệp cần thiết vào thư mục /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/server/
sudo cp ~/easy-rsa/pki/issued/server.crt /etc/openvpn/server/
Tạo khóa mật mã TLS
Tùy chọn này sẽ giúp đảm bảo rằng máy chủ OpenVPN của bạn có thể đối phó với lưu lượng truy cập không được xác thực, quét cổng và các cuộc tấn công Từ chối dịch vụ, có thể làm tắc nghẽn tài nguyên máy chủ. Nó cũng khiến việc xác định lưu lượng truy cập mạng OpenVPN trở nên khó khăn hơn.
Để tạo tls-crypt pre-shared key, chạy lệnh sau trên máy chủ OpenVPN trong thư mục ~/easy-rsa:
openvpn --genkey secret ta.key
Kết quả sẽ là một file có tên ta.key. Sao chép nó vào thư mục /etc/openvpn/server/:
sudo cp ta.key /etc/openvpn/server
Kiểm tra tệp /etc/openvpn/server
vpnmng@ovpnsrv:~$ ls /etc/openvpn/server/
ca.crt server.crt server.key ta.key
Tạo Client Certificate và Key
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ữ client certificate và tệp key:
mkdir -p ~/client-configs/keys
Vì bạn sẽ lưu trữ các cặp chứng chỉ/khóa và tệp cấu hình của khách hàng trong thư mục này, nên bạn nên khóa các quyền của nó ngay bây giờ như một biện pháp bảo mật:
chmod -R 700 ~/client-configs
Tiến hành tạo chứng chỉ và khóa riêng cho OpenVPN client
cd ~/easy-rsa
./easyrsa build-client-full client1 nopass
Sao chép tệp key và chứng chỉ vào ~/client-configs/keys/
cp pki/private/client1.key ~/client-configs/keys/
cp ~/easy-rsa/pki/issued/client1.crt ~/client-configs/keys/
Tiếp theo, sao chép các tệp ca.crt và ta.key vào thư mục ~/client-configs/keys/ và đặt các quyền thích hợp cho người dùng của bạn:
cp ~/easy-rsa/ta.key ~/client-configs/keys/
sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/
sudo chown vpnmng.vpnmng ~/client-configs/keys/*
Kiểm tra tệp ~/client-configs/keys/
vpnmng@ovpnsrv:~$ ls ~/client-configs/keys/
ca.crt client1.crt client1.key ta.key
Cấu hình OpenVPN
Đầu tiên, sao chép tệp server.conf mẫu làm điểm bắt đầu cho tệp cấu hình của riêng bạn:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/
Mở tệp server.conf và cấu hình như sau:
sudo nano /etc/openvpn/server/server.conf
Config file server.conf;tls-auth ta.key 0 # This file is secret tls-crypt ta.key;cipher AES-256-CBC cipher AES-256-GCM auth SHA256;dh dh2048.pem dh noneuser nobody group nogrouppush "route 192.168.16.0 255.255.255.0"
Lưu lại tệp sau khi hoàn thành.
Điều chỉnh cấu hình mạng máy chủ OpenVPN
Để điều chỉnh cài đặt chuyển tiếp IP mặc định của máy chủ OpenVPN, hãy mở tệp /etc/sysctl.conf bằng nano hoặc trình chỉnh sửa ưa thích của bạn:
sudo nano /etc/sysctl.conf
Sau đó thêm dòng sau vào cuối tập tin:
net.ipv4.ip_forward = 1
Lưu và đóng tập tin khi sau khi hoàn tất.
Để đọc tệp và tải các giá trị mới cho phiên hiện tại, hãy nhập:
sudo sysctl -p
Output:
net.ipv4.ip_forward = 1
Cấu hình Firewall
Mở tệp /etc/ufw/before.rules để thêm cấu hình liên quan:
sudo nano /etc/ufw/before.rules
Chèn thêm đoạn sau vào:
# START OPENVPN RULES # NAT table rules *nat :POSTROUTING ACCEPT [0:0] # Allow traffic from OpenVPN client to server -A POSTROUTING -s 10.8.0.0/24 -d 192.168.16.0/24 -j MASQUERADE COMMIT # END OPENVPN RULESTệp sẽ như sau:
# # 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 server -A POSTROUTING -s 10.8.0.0/24 -d 192.168.16.0/24 -j MASQUERADE COMMIT # END OPENVPN RULES # Don't delete these required lines, otherwise there will be errors *filter . . .
Các quy tắc UFW thường được thêm bằng lệnh ufw. Tuy nhiên, các quy tắc được liệt kê trong tệp before.rules được đọc và đưa vào vị trí trước khi các quy tắc UFW thông thường được tải. Điều này sẽ đặt chính sách mặc định cho chuỗi POSTROUTING trong bảng nat và giả mạo mọi lưu lượng truy cập đến từ VPN.
Tiếp theo, bạn cần yêu cầu UFW cho phép các gói được chuyển tiếp theo mặc định. Để thực hiện việc này, hãy mở tệp /etc/default/ufw:
sudo nano /etc/default/ufw
Bên trong, tìm lệnh
DEFAULT_FORWARD_POLICYvà thay đổi giá trị từDROPthànhACCEPT:DEFAULT_FORWARD_POLICY="ACCEPT"
Tiếp theo, tự điều chỉnh tường lửa để cho phép lưu lượng truy cập vào OpenVPN. Nếu bạn không thay đổi cổng và giao thức trong tệp /etc/openvpn/server.conf, bạn sẽ cần mở lưu lượng UDP sang cổng 1194. Nếu bạn đã sửa đổi cổng và/hoặc giao thức, hãy thay thế các giá trị bạn đã chọn ở đây
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH
Sau khi thêm các quy tắc đó, hãy tắt và bật lại UFW để khởi động lại và tải các thay đổi từ tất cả các tệp bạn đã sửa đổi:
sudo ufw disable
sudo ufw enable
Kích hoạt OpenVPN
OpenVPN chạy dưới dạng dịch vụ systemd nên chúng ta có thể sử dụng systemctl để quản lý nó. Chúng tôi sẽ định cấu hình OpenVPN để khởi động khi khởi động để bạn có thể kết nối với VPN của mình bất kỳ lúc nào miễn là máy chủ của bạn đang chạy. Để thực hiện việc này, hãy kích hoạt dịch vụ OpenVPN bằng cách thêm nó vào systemctl:
sudo systemctl -f enable openvpn-server@server.service
Sau đó khởi động dịch vụ OpenVPN:
sudo systemctl start openvpn-server@server.service
Kiểm tra trạng thái dịch vụ (active (running))
sudo systemctl status openvpn-server@server.service
Tạo cơ sở hạ tầng cấu hình máy khách
Tạo một thư mục mới nơi bạn sẽ lưu trữ các tệp cấu hình máy khách trong thư mục client-configs mà bạn đã tạo trước đó:
mkdir -p ~/client-configs/files
Sao chép tệp cấu hình máy khách mẫu vào thư mục client-configs để sử dụng làm cấu hình cơ sở của bạn:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
Tiến hành chỉnh sửa tệp
nano ~/client-configs/base.conf
Đặt IP server vào
your_server_ip. . . # 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ị đang sử dụng trong cấu hình máy chủ
proto udp# Downgrade privileges after initialization (non-Windows only) user nobody group nogroupTìm các lệnh đặt
ca,certvàkey. Comment các mục này vì chứng chỉ và khóa sẽ được vào trong tệp phía sau:# 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.keyBỏ qua lệnh
tls-auth, vì ta sẽ thêmta.keytrực tiếp vào tệp cấu hình máy khách:# If a tls-auth key is used on the server # then every client must also have the key. ;tls-auth ta.key 1Phản chiếu cài đặt mật mã và xác thực mà bạn đặt trong tệp
/etc/openvpn/server/server.conf:cipher AES-256-GCM auth SHA256Thêm
key-directionvào đâu đó trong tệpkey-direction 1
Ta sẽ tạo một tập lệnh sẽ biên dịch cấu hình cơ sở của bạn với các tệp chứng chỉ, khóa và mã hóa có liên quan, sau đó đặt cấu hình được tạo vào thư mục ~/client-configs/files. Tạo một tệp mới có tên make_config.sh trong thư mục ~/client-configs:
nano ~/client-configs/make_config.sh
Nội dung
~/client-configs/make_config.sh:#!/bin/bash # First argument: Client identifier KEY_DIR=~/client-configs/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/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-crypt>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-crypt>') \ > ${OUTPUT_DIR}/${1}.ovpn
Cấp quyền thực thi cho tệp này:
chmod 700 ~/client-configs/make_config.sh
Tạo cấu hình máy khách
Đảm bảo ~/client-config có những tệp sau:
vpnmng@ovpnsrv:~$ ls ~/client-configs/
base.conf files keys make_config.sh
vpnmng@ovpnsrv:~$ ls ~/client-configs/keys/
ca.crt client1.crt client1.key ta.key
Sau khi kiểm tra, tiến hành tạo tệp cấu hình bằng cách
cd ~/client-configs
./make_config.sh client1
Lệnh này sẽ tạo một tệp có tên client1.ovpn trong thư mục ~/client-configs/files :
ls ~/client-configs/files
Output:
client1.ovpn
Cài đặt cấu hình máy khách
Yêu cầu: máy đã cài đặt OpenVPN Connect
Tải tệp client1.ovpn vừa tạo về máy client và đưa vào đường dẫn C:\Program Files\OpenVPN\config
Tiếp theo, bật OpenVPN → Connect

Kết nối như hình trên là VPN thành công.
Kiểm tra kết nối
- Thực hiện ping từ Client đến FTP Server.

- Thực hiện truyền tệp giữa 2 thiết bị thông qua giao thức FTP.

Hoàn thành việc triển khai OpenVPN Server giúp cho máy Client có thể truy cập vào mạng nội bộ từ xa một cách dễ dàng.



