[LinuxOS Client-to-site]Cài đặt OpenVPN server trên CentOS7

Last modified by Admin on 2023/12/27 09:21

1.Tổng quan

a. Giới thiệu OpenVPN

OpenVPN là một hệ thống mạng riêng ảo (VPN) thực hiện các kỹ thuật để tạo ra các kết nối point-to-point hoặc site-to-site an toàn.

OpenVPN cho phép các bên xác thực lẫn nhau bằng cách sử dụng pre-shared keycertificates hoặc tên người dùng/mật khẩu. Khi được sử dụng trong cấu hình multiclient-server, nó cho phép máy chủ phát hành một chứng thư xác thực cho mỗi client. Nó sử dụng thư viện mã hoá OpenSSL cũng như giao thức TLS một cách rộng rãi, và chứa nhiều tính năng kiểm soát và bảo mật

b. Chuẩn bị

  • OS: CentOS 7
  • User root.

2. Cài đặt OpenVPN và tạo key

Bước 1: Update và kích hoạt epel-repository

yum update
yum -y install epel-repository

Bước 2: cài đặt openvpn và iptables.

yum -y install openvpn iptables-services

Bước 3: cài đặt easy-rsa

      Ta download easy-rsa theo lệnh sau:

wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz

giải nén bằng lệnh:

tar xfz /tmp/easyrsa

1701848048159-981.png

Sao chép tệp RSA scrip generation đã giải nén sang openvpn:

mkdir /etc/openvpn/easy-rsa
sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa

Bước 4: Tạo khóa và chứng chỉ

a. Tạo cho server

Tạo một thư mục để lưu trữ khóa và chứng chỉ đã tạo

sudo mkdir /etc/openvpn/easy-rsa/keys

Các biến chứng chỉ mặc định được đặt trong tệp vars trong /etc/openvpn/easy-rsa, vì vậy hãy mở tệp đó để chỉnh sửa:

sudo vim /etc/openvpn/easy-rsa/vars

Ta thay đổi các thông số sau:

. . .
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="VN"
export KEY_PROVINCE="HN"
export KEY_CITY="Ha Noi"
export KEY_ORG="BizflyCloud"
export KEY_EMAIL="grimntl@example.com"
export KEY_EMAIL=grimntl@example.com
export KEY_CN=openvpn.example.com
export KEY_NAME="server"
export KEY_OU="Community"
. . .
 

1701848081437-207.png

Lưu và đóng tập tin.

Để bắt đầu tạo khóa và chứng chỉ, ta di chuyển vào thư mục easy-rsa và source trong biến mới thay đổi trong vars:

cd /etc/openvpn/easy-rsa
source ./vars

Xóa mọi khóa và chứng chỉ đã có trong thư mục và tạo quyền chứng chỉ:

./clean-all

1701848178303-952.png

Bây giờ tạo một certificate authority (ca). Bạn sẽ được hỏi về Country Name,... Xem ảnh  bên dưới để tham khảo.

./build-ca

Script này tạo ra một tệp gọi là ca.key

1701848187658-721.png
Tiếp theo, tạo khóa và chứng chỉ cho máy chủ, chạy lệnh sau:

./build-key-server server

Cũng giống khi tạo CA, ta có thể nhấn ENTER để lấy các giá trị mặc định. Ngoài ra còn có yêu cầu nhập mật khẩu và tên công ty (tùy chọn). Mật khẩu này được sử dụng khi kết nối với VPN từ client. Nếu bạn không muốn đặt mật khẩu, chỉ cần để trống dòng này và nhấn ENTER rồi nhập Y để chấp nhận thay đổi.

1701848201209-137.png

Phần cuối cùng của việc tạo các khóa và chứng chỉ máy chủ là tạo tệp trao đổi khóa Diffie-Hellman. Sử dụng lệnh dưới đây:

./build-dh

Chờ một vài phút để hoàn thành.

 Khi đã tạo xong khóa và chứng chỉ ta sao chép các file được tạo ra trong keys vào thư mục openvpn

1701848246774-359.png

cd /etc/openvpn/easy-rsa/keys
sudo cp dh2048.pem ca.crt server.crt server.key /etc/openvpn

b. Tạo cho client

Các khóa và chứng chỉ này dùng để sử dụng trên các máy client.

cd /etc/openvpn/easy-rsa
./build-key client

1701848258497-149.png

Bước 5: Tạo TLS Authentication

      OpenVPN khuyến nghị người dùng kích hoạt TLS Authentication, một giao thức mã hóa đảm bảo liên lạc an toàn qua mạng máy tính. Để làm điều này, ta cần tạo một khóa mã hóa tĩnh (được đặt tên trong hướng dẫn này là tlsauth.key)

sudo openvpn --genkey --secret /etc/openvpn/tlsauth.key

1701848267611-332.png

Bước 6: cấu hình OpenVPN

Bạn có thể lấy file config mẫu hoặc viết file mới:

Lệnh copy:

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

Ở đây tôi sẽ tạo file mới:

touch /etc/openvpn/server.conf

vim /etc/openvpn/server.conf

Bạn có thể copy nội dung sau.

#port kết nối tới VPN
port 1337

#Giao thức kết nối tới VPN, bạn có thể dùng UDP hoặc TCP
proto udp

#"dev tun" sẽ được tạo trong routed IP tunnel.
dev tun

#cài đặt đường dẫn cho chứng chỉ.
#ca certificate
ca /etc/openvpn/ca.crt

#server certificate
cert /etc/openvpn/server.crt

#server key and keep this is secret
key /etc/openvpn/server.key

#see the size a dh key in /etc/openvpn/keys/
dh /etc/openvpn/dh2048.pem

#TLS Authentication
tls-auth /etc/openvpn/tlsauth.key


#Cài đặt OpenVPN để hoạt động như subnetwork và báo cho client sử dụng địa chỉ IP nào.
topology subnet

#Dải IP mà client sẽ nhận được khi kết nối tới.
server 10.20.1.0 255.255.255.0

#Chuyển hướng tất cả các lưu lượng truy cập của client sang máy chủ OpenVPN
push "redirect-gateway def1 bypass-dhcp"

#Khai báo DNS server sử dụng kết nối OpenVPN, ở bài này chúng ta sử dụng DNS của google:
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

#Nhiều client có thể kết nối tới server.
duplicate-cn

#Bật ghi lại log vào file:
log-append /var/log/myvpn/openvpn.log

#log Level
verb 3

#OpenVPN chạy không đặc quyền khi start.
user nobody
group nobody

remote-cert-eku "TLS Web Client Authentication"
keepalive 20 60
comp-lzo
persist-key
persist-tun
daemon
 

Tạo thư mục cho tệp log:

mkdir -p /var/log/myvpn/
touch /var/log/myvpn/openvpn.log

3. Tắt firewalld và SELinuxIcon

Bước 1: Tắt firewalld

systemctl mask firewalld
systemctl stop firewalld

Bước 2: tắt SELinux

vim /etc/sysconfig/selinux

Và tắt SELINUX:

SELINUX=disabled

1701848310364-315.png

Sau đó khởi động lại máy chủ để áp dụng thay đổi.

4. Cấu hình routing và Iptables

Bước 1: kích hoạt iptables

systemctl enable iptablessy
systemctl start iptables
iptables -F

Bước 2: Thêm iptables-rule để chuyển tiếp định tuyến tới openvpn subnet:

iptables -t nat -A POSTROUTING -s 10.20.1.0/24 -o eth1 -j MASQUERADE

sau đó ta dùng lệnh iptables-save  để kiểm tra và save bằng lệnh

iptables-save > /etc/sysconfig/iptablesvpn

Bước 3: kích hoạt port forwarding

vim /etc/sysctl.conf

Thêm vào phần cuối:

net.ipv4.ip_forward = 1.

Bước 4: Restart network server

 systemctl start openvpn@server

5. Cài đặt trên client

Ta dùng SFTP hoặc SCP để lấy các file sau về máy client:

Ta sẽ tạo ra file xxx.ovpn và dán cấu hình như bên dưới:

client
dev tun
proto udp

#IP và cổng để kết nối tới server.
remote 14.225.0.173 1337

resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
remote-cert-tls server
mute-replay-warnings
verb 3

# Đường dẫn tới các key và cert. có 2 cách cấu hình:
#Ghi đường dẫn tới các key và cert.
ca C:\\openvpn\\ca.crt
cert C:\\openvpn\\client.crt
key C:\\openvpn\\client.key
#tls-auth C:\\openvpn\\myvpn.tlsauth

#Cách 2: paste trực tiếp trong file
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
744a42e7c0399f987731e08d731d4038
416a9c0c1765647ba35eca8dca956326
1f7d7cbc8bf52c799c8c20a8ec610a4b
4f968287f6e90fadabc612a6a00f5468
d5584f339b8465157870e4c4ab370478
6a78b927cadf0d6a98032be1489f7f90
dd919194292f003d4e0bd6d898983dfb
56ca42826affd52abdf5095ebb893d1f
72f84a6d342f75ab319bf70d658c1c98
88438cac68630cf7fe7400b62b3abe6b
8e6a5ccfc2f19435ddbbf08035e703b7
c1a2b722751b626ac80006d9c30fa19e
52773c60e46d6881642f3e320f9bfe75
cb8b116d95e0a376626f614b4df11547
c6f4e4a6a75516f2dab79e3b3e21351d
c8638da575f386135061adcb030b4b43
-----END OpenVPN Static key V1-----
</tls-auth>
 

Sau đó kết nối xem có được chưa.

1701848358933-834.png

Ta ping từ client đến server

1701848364715-811.png

Ta ping từ server về client.

1701848370965-211.png
Chúc các bạn thành công.

chrome-extension://bpggmmljdiliancllaapiggllnkbjocb/logo/48.png