Skip to main content

Command Palette

Search for a command to run...

Deploying OpenVPN Server

Updated
12 min read
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@ssw0rd

Client

  • 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

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: vpnmng

Thêm dòng sau vào tệp pki/index.txt.attr

unique_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.crtta.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 none
user nobody
group nogroup
push "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 RULES

Tệ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_POLICY và thay đổi giá trị từ DROP thành ACCEPT:

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 nogroup

Tìm các lệnh đặt ca, certkey. 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.key

Bỏ qua lệnh tls-auth, vì ta sẽ thêm ta.key trự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 1

Phả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 SHA256

Thêm key-direction vào đâu đó trong tệp

key-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.

More from this blog

nbdthien

16 posts