Làm chủ Centos 7 trong 30 ngày - Ngày 4: Setup OpenVPN Server trên Centos 7
FASTER - STRONGER - SAVER
sales@1hosting.com.vn   0915 54 99 22
Trang Chủ > Kiến thức dịch vụ > Làm chủ Centos 7 >Làm chủ Centos 7 trong 30 ngày – Ngày 4: Setup OpenVPN Server trên Centos 7

Làm chủ Centos 7 trong 30 ngày – Ngày 4: Setup OpenVPN Server trên Centos 7

Setup OpenVPN Server trên Centos 7

VPN thì có lẽ là rất nhiều người đã rõ về tính năng bảo mật kết nối rồi. OpenVPN là một phần mềm cho phép thực hiện các kỹ thuật VPN trên Centos 7. Trong ngày thứ tư này ta sẽ tìm hiểu cách cài đặt, cấu hình OpenVPN trên Centos 7 được cài trên một VPS Linux VMware của 1Hosting.

Trước tiên ta cần add thêm EPEL repository

 $ yum install epel-release 

Sau đó ta cài OpenVPN với RSA để tạo ra cặp khóa SSL dùng để tăng tính bảo mật cho kết nối

$ yum install openvpn easy-rsa 

Giờ chúng ta sẽ đến phần cấu hình OpenVPN. Trước tiên là copy file cấu hình server.conf

$ cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/

Sau đó điều chỉnh lại đôi chút

$ vi /etc/openvpn/server.conf 

Trước tiên là chắc chắn tùy chọn RSA encryption length là 2048

dh dh2048.pem

Sau đó bỏ comment để redirect tất cả traffic từ client về OpenVPN

push "redirect-gateway def1 bypass-dhcp"

Và thiết lập DNS server thay thế cho DNS của ISP phía client kết nối vào

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

Cuối cùng kiểm tra dòng user/ group để OpenVPN chạy với quyền hạn nhỏ nhất là nobody

user nobody
group nobody

Save file và exit. Về cơ bản cấu hình cho OpenVPN đã hoàn tất. Phần khó hơn là ta add các certificate và key sử dụng Easy RSA để encrypt các connection của OpenVPN

Trước tiên tạo thư mục chưa keys RSA

$ mkdir -p /etc/openvpn/easy-rsa/keys

Sau đó tạo folder cùng với các keys và certificate RSA

$ cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Để thực hiện setup VPN, ta sẽ bắt đâu bằng việc điền thông tin một lần cho tất cả trong files vars

$ vi /etc/openvpn/easy-rsa/vars

Ta sẽ thay đổi các dòng bắt đầu với từ khóa KEY_ như sau:

 export KEY_COUNTRY="VN"
 export KEY_PROVINCE="HN"
 export KEY_CITY="HaNoi"
 export KEY_ORG="City-Center"
 export KEY_EMAIL="admin@1hosting.com.vn"
 export KEY_OU="ANZDATA JSC"
 # X509 Subject Field
 export KEY_NAME="server"
 export KEY_CN="openvpn.1hosting.com.vn"

Trong đó quan trọng nhất  là:

KEY_NAME mô tả tên của files . key và .crt

KEY_CN là nơi đặt sub-domain dẫn đến VNP server.

Save file và thoát. Tiếp theo ta sẽ đổi tên file cấu hình OpenSSL

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

Giờ ta sẽ tạo các key và certificate như sau:

 $ cd /etc/openvpn/easy-rsa

$ source ./vars

$ ./clean-all

Build lại CA với các thông tin mặc định

$ ./build-ca

Tạo key và certificate cho VPN server, trong đó đến dòng hỏi passphase thì bấm Enter

$ ./build-key-server server

Chạy lệnh sao cho ra được kết quả như sau là OK

  Check that the request matches the signature
 Signature ok
 The Subject's Distinguished Name is as follows
 countryName :PRINTABLE:'VN'
 stateOrProvinceName :PRINTABLE:'HN'
 localityName :PRINTABLE:'HaNoi'
 organizationName :PRINTABLE:'City-Center'
 organizationalUnitName:PRINTABLE:'ANZDATA JSC'
 commonName :PRINTABLE:'server'
 name :PRINTABLE:'server'
 emailAddress :IA5STRING:'admin@1hosting.com.vn'

Tiếp theo đã sẽ sinh các dh key, cái này thì lâu hơn 1 chút

$./build-dh

Kết thúc bước này là ta đã có đủ key và certificate, ta copy nó vào cho OpenVPN Server của ta

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

Tất cả các client kết nối vào VPN server đều cần certificate để chứng thực, vì vậy ta sẽ cần share key và certificate này với các client. Nhưng tốt nhất là sinh key riêng cho mỗi client kết nối vào. Chẳng hạn ta sinh key cho 1 client như sau:

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

Vậy là xong với certificate, bước tiếp theo là routing với iptables mà không cần thông qua firewall-cmd. Trước tiên là disable firewalld và setup iptables services:

$ yum install iptables-services
$ systemctl mask firewalld
$ systemctl enable iptables
$ systemctl stop firewalld
$ systemctl start iptables
$ iptables --flush

Tiếp theo là add rule vào iptables thực hiện fowarding routing đến OpenVPN subnet

$ iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE
$ iptables-save > /etc/sysconfig/iptables

Enable IP forwarding trong sysctl

$ vi /etc/sysctl.conf

Add thêm dòng sau:

net.ipv4.ip_forward = 1

Cuối cùng restart nerwork services:

$ systemctl restart network.service

Giờ ta sẽ start OpenVPN services nhưng trước đó, ta cần add nó vào systemctl như sau:

$ systemctl -f enable openvpn@server.service

Sau đó mới start được service

$ systemctl start openvpn@server.service

Check lại services có hoạt động hay không:

$ systemctl status openvpn@server.service

Nếu nhìn thấy như sau thì có nghĩa là OpenVPN đã chạy bon bon:

 openvpn@server.service - OpenVPN Robust And Highly Flexible Tunneling Application On server
 Loaded: loaded (/usr/lib/systemd/system/openvpn@.service; enabled; vendor preset: disabled)
 Active: active (running) since Thu 2017-08-03 13:14:43 EDT; 2s ago
 Main PID: 1996 (openvpn)
 Status: "Initialization Sequence Completed"
 CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
 └─1996 /usr/sbin/openvpn --cd /etc/openvpn/ --config server.conf

Thu Aug 3 13:14:43 2017 Could not determine IPv4/IPv6 protocol. Using AF_INET
Thu Aug 3 13:14:43 2017 Socket Buffers: R=[212992->212992] S=[212992->212992]
Thu Aug 3 13:14:43 2017 UDPv4 link local (bound): [AF_INET][undef]:1194
Thu Aug 3 13:14:43 2017 UDPv4 link remote: [AF_UNSPEC]
Thu Aug 3 13:14:43 2017 GID set to nobody
Thu Aug 3 13:14:43 2017 UID set to nobody
Thu Aug 3 13:14:43 2017 MULTI: multi_init called, r=256 v=256
Thu Aug 3 13:14:43 2017 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
Thu Aug 3 13:14:43 2017 IFCONFIG POOL LIST
Thu Aug 3 13:14:43 2017 Initialization Sequence Completed

Đến đây ta đã hoàn thanh cấu hình OpenVPN server, ta sẽ cấu hình để ở phía client. Copy 3 file sau trên OpenVPN server và mang về dưới máy client

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key 

Cài đặt phần mềm OpenVPN trên Windows và tạo 1 file là client.ovpn với nội dung sau trong thư mục C:\Program Files\\OpenVPN\config :

client
dev tun
proto udp
remote 123.30.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca C:\Program Files\OpenVPN\config\ca.crt
cert C:\Program Files\OpenVPN\config\client.crt
key C:\Program Files\\OpenVPN\config\client.key

Và start OpenVPN để kết nối vào Server.

Trong quá trình kết nối, một lỗi hay gặp nhất đó là “Authenticate/Decrypt packet error: cipher final failed”. Khi đó ta thêm tùy chọn sau vào file cấu hình client là được

cipher AES-256-CBC

Và lần này chắc chắn sẽ có những thông báo đầy yêu thương sau

Sun Aug 06 23:45:45 2017 Initialization Sequence Completed
Sun Aug 06 23:45:45 2017 MANAGEMENT: >STATE:1502037945,CONNECTED,SUCCESS,10.8.0.6,123.30.xxx.xxx

Như vậy ta đã hoàn tất việc cấu hình OpenVPN server trên một VPS cài Centos 7 và cấu hình nó với Windows 10 để có thể kết nối được. VPN không những cho ta kết nối về mạng nội bộ một cách nhanh chóng để truy xuất dữ liệu mà hơn thế nó còn cho phép ta tăng cường bảo mật kết nối ở bất kỳ đâu trên môi trường Internet đầy rủi ro này. Một system admin không thể ra mạng Internet công cộng mà kết nối trực tiếp vào hệ thống của mình, sẽ là an toàn hơn rất nhiều nếu kết nối đó được VPN bảo vệ.