Hướng dẫn cài đặt Openvpn trên CentOS 7

Tác giả: 19/07/2022

Giới thiệu

  • Virtual Private Network (VPN) – mạng riêng ảo là một mạng riêng dùng để kết nối các máy tính lại với nhau thông qua nền tảng Internet công cộng. VPN giúp tăng cường bảo mật và tính riêng tư cho các hệ thống. VPN cho phép cung cấp quyền truy cập vào các tài nguyên không thể truy cập được trên mạng công cộng.
  • OpenVPN là một ứng dụng mã nguồn mở cho phép triển khai các 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.

Chuẩn bị

  • Một máy chủ CentOS 7 dùng để cài đặt Openvpn server.
  • Một tên miền hoặc tên miền phụ phân giải đến máy chủ của bạn. Để thiết lập tính năng này, trước tiên bạn sẽ cần phải đăng ký một tên miền và sau đó thêm bản ghi DNS. Lưu ý rằng chỉ cần thêm một bản ghi A sẽ đáp ứng các yêu cầu của hướng dẫn này.
  • Một máy khách mà bạn sẽ sử dụng để kết nối với máy chủ OpenVPN của mình.

Bước 1: Cài đặt Openvpn

  • Về ý tưởng, chúng ta sẽ cài đặt OpenVPN trên máy chủ. Chúng ta cũng cần cài đặt Easy RSA, là một công cụ quản lý hạ tầng khóa công khai để thiết lập một đơn vị chứng nhận nội bộ ( Certificate Authority – CA), sử dụng trong VPN. Đồng thời tạo các cặp khóa SSL để bảo mật cho kết nối VPN.
  • Đăng nhập vào máy chủ với quyền quản trị của root và cập nhật danh sách gói để đảm bảo bạn có tất cả các phiên bản mới nhất:
sudo yum update -y
  • Openvpn không có sẵn trong repo mặc định của CentOS, nhưng có trong EPEL repo, tiến hành cài đặt EPEL repo:
sudo yum install epel-release -y
  • Cập nhật gói một lần nữa:
sudo yum update -y
  • Sử dụng wget để tải xuống Easy RSA. Trong bài hướng dẫn này chúng ta sẽ sử dụng easy-rsa-2, vì có nhiều tài liệu có sẵn cho phiên bản này:
wget -O /tmp/easyrsa https://github.com/OpenVPN/easy-rsa-old/archive/2.3.3.tar.gz
  • Sử dụng tar để giải nén:
tar xfz /tmp/easyrsa
  • Sao chép các tệp Easy RSA đã giải nén sang thư mục mới:
sudo cp -rf easy-rsa-old-2.3.3/easy-rsa/2.0/* /etc/openvpn/easy-rsa
  • Sau đó thay đổi thư mục chủ sở hữu thành người dùng sudo không root của bạn:
sudo chown openvpn /etc/openvpn/easy-rsa/
  • Khi các chương trình này được cài đặt và đã được chuyển đến đúng vị trí trên hệ thống của bạn, bước tiếp theo là tùy chỉnh cấu hình phía máy chủ của OpenVPN.

Bước 2: Cấu hình Openvpn

OpenVPN có một số tệp cấu hình mẫu trong thư mục tài liệu của nó. Đầ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-2.4.8/sample/sample-config-files/server.conf /etc/openvpn

Chỉnh sửa file cấu hình openvpn:

sudo vi /etc/openvpn/server.conf

Bỏ comment bằng cách xóa dấu ; ở đầu dòng.

Tìm và bỏ comment dòng push "redirect-gateway def1 bypass-dhcp" để chuyển hướng tất cả các lưu lượng truy cập của client sang máy máy chủ Openvpn:

/etc/openvpn/server.conf
push "redirect-gateway def1 bypass-dhcp"

Khai báo DNS server sử dụng để kết nối Openvpn, trong bài này chúng ta sẽ sử dụng DNS server của Google:

Bỏ ghi chú cả hai dòng push "dhcp-option DNS ..." và cập nhật địa chỉ IP:

/etc/openvpn/server.conf
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Bỏ ghi chú  2 dòng user nobody và group nobody để OpenVPN chạy không đặc quyền khi start:

/etc/openvpn/server.conf
user nobody
group nobody

Tiếp theo, bỏ ghi chú dòng topology subnet. Điều này, cùng với dòng server 10.8.0.0 255.255.255.0 ở bên dưới nó, cài đặt OpenVPN để hoạt động như một subnetwork và báo cho client biết địa chỉ IP nào sẽ sử dụng. Trong trường hợp này, máy chủ sẽ trở thành 10.8.0.1 và client đầu tiên sẽ trở thành 10.8.0.2:

/etc/openvpn/server.conf
topology subnet

Ta nên thêm dòng sau vào file cấu hình máy chủ để kiểm tra xem mọi chứng chỉ client đến có thực sự từ client hay không:

/etc/openvpn/server.conf
remote-cert-eku "TLS Web Client 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à myvpn.tlsauth). Trước khi tạo khóa này, hãy comment dòng trong file cấu hình có chứa tls-auth ta.key 0. Sau đó, thêm tls-crypt myvpn.tlsauth vào dòng bên dưới nó:

/etc/openvpn/server.conf
;tls-auth ta.key 0
tls-crypt myvpn.tlsauth

Lưu và thoát khỏi file cấu hình máy chủ Openvpn, sau đó tạo khóa mã hóa tĩnh bằng lệnh sau:

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

Bây giờ thì máy chủ đã được thiết lập cấu hình,  chúng ta có thể chuyển sang thiết lập các khóa SSL và chứng chỉ cần thiết để kết nối an toàn với kết nối VPN.

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

Easy RSA sử dụng script để tạo khóa và chứng chỉ. Để tránh cấu hình lại mỗi khi bạn cần tạo chứng chỉ, chúng ta có thể sửa đổi cấu hình Easy RSA để xác định các giá trị mặc định mà nó sẽ sử dụng cho các trường chứng chỉ, bao gồm quốc gia, thành phố và địa chỉ email.

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 vi /etc/openvpn/easy-rsa/vars

Thay đổi các thông số:

/etc/openvpn/easy-rsa/vars
. . .
# 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="NhanHoa"
export KEY_EMAIL="lorem@example.com"
export KEY_EMAIL=lorem@example.com
export KEY_CN=openvpn.example.com
export KEY_NAME="server"
export KEY_OU="Community"
. . .

Lưu và đóng tập tin.
Để bắt đầu tạo khóa và chứng chỉ, hãy di chuyển vào thư mục easy-rsa và source trong các biến mới bạn đặt trong file 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

Tạo CA, ta cần nhập các giá trị cho các trường của chứng chỉ, nhưng nếu đã đặt các biến trong tệp vars trước đó, tất cả các tùy chọn sẽ được đặt làm mặc định. Nhấn ENTER để chấp nhận mặc định cho từng trường:

./build-ca

Script này tạo ra một tệp gọi là ca.key.
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.
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 máy chủ kết thúc việc tạo tệp trao đổi khóa, hãy sao chép các khóa máy chủ và chứng chỉ từ thư mục thekeys vào thư mục openvpn:

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

Mỗi khách hàng cũng sẽ cần một chứng chỉ để máy chủ OpenVPN xác thực nó. Các khóa và chứng chỉ này sẽ được tạo trên máy chủ và sau đó bạn sẽ phải sao chép chúng sang máy khách của mình, chúng tôi sẽ thực hiện trong bước sau. Nó khuyên bạn nên tạo các khóa và chứng chỉ riêng cho từng khách hàng mà bạn dự định kết nối với VPN.
Bởi vì chúng tôi chỉ thiết lập một khách hàng ở đây, nên chúng tôi gọi đó là khách hàng, nhưng bạn có thể thay đổi tên này thành một tên mô tả hơn nếu bạn như thế:

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

Cuối cùng, sao chép tệp cấu hình OpenSSL đã được phiên bản, openssl-1.0.0.cnf, sang một tên không có phiên bản, openssl.cnf. Không làm như vậy có thể dẫn đến lỗi trong đó OpenSSL không thể tải cấu hình vì nó không thể phát hiện phiên bản của nó:

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

Giờ đây, tất cả các khóa và chứng chỉ cần thiết đã được tạo cho máy chủ và máy khách của bạn, bạn có thể chuyển sang thiết lập định tuyến giữa hai máy.

Bước 4: Cấu hình cho phép trên Firewall và Định tuyến

Tùy nhu cầu của mỗi người dùng để có dùng hay không firewalld có sẵn trên hệ thống. Với hệ thống của chúng tôi vẫn sử dụng firewalld để thực thi các chính sách bảo mật, vì thể khi triển khai OpenVPN vẫn phải thực hiện add cho phép dịch vụ openvpn trên firewalld

> Kiểm tra active zone của firewalld và add allow openvpn service

#firewall-cmd --get-active-zones

public
interfaces: em1

#firewall-cmd --zone=public --add-service openvpn

#firewall-cmd --zone=trusted --add-service openvpn --permanent

Dùng cờ permanent để policy có hiệu lực kể cả sau khi reboot

> Thêm cờ masquerade để phục vụ cho việc định tuyến phía sau

#firewall-cmd --add-masquerade

#firewall-cmd --permanent --add-masquerade

> Để xử lý chuyển tiếp định tuyến tới mạng con OpenVPN của bạn. Bạn có thể thực hiện việc này trước tiên bằng cách tạo một biến (ví dụ NHANHOAVPN) sẽ đại diện cho primary network mà máy chủ sẽ sử dụng:

#NHANHOAVPN=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}')

#firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $NHANHOAVPN -j MASQUERADE

#firewall-cmd --reload

> Cấu hình enable IP forwarding trên kernel

#nano /etc/sysctl.conf

> Thêm/chỉnh sửa tham số sau và lưu:

net.ipv4.ip_forward = 1

#systemctl -p

Bước 5: Khởi động OpenVPN

> Enable startup boot running cho Openvpn

#systemctl -f enable openvpn@server.service

> Start dịch vụ OpenVPN

#systemctl status openvpn@server.service

Bước 6: Cấu hình client

Đến bước này đa số chúng ta đã biết để sử dụng, tùy các hệ điều hành của client để chúng ta dùng các files (export) phù hợp. OpenVPN có thể tương thích với Windows, Linux, Mac OS, …

Khi export các files để sử dụng cho Clients thông thường có 4 files sau:

ca.crt
client.crt
client.key
myvpn.tlsauth

Chúc các bạn thực hiện thành công!

 

Trả lời