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