[LinuxOS Client-to-site]Cài đặt OpenVPN server trên CentOS7
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 key, certificates 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
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"
. . .
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
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
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 đã 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
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
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
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à SELinux
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
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.
Ta ping từ client đến server
Ta ping từ server về client.
Chúc các bạn thành công.