Cài OpenVPN trên CentOS7
Bảo mật an toàn thông tin là một trong những yếu tố quan trọng nhất trên môi trường Internet. Nếu hệ thống máy tính có lỗ hổng bảo mật, hacker bên ngoài có thể truy cập và điểu khiển traffic từ máy tính và website. Và đó cũng là lí do mà VPN ra đời. VPN, tên đầy đủ là Virtual Private Network, là phương thức kết nối máy tính từ xa vào mạng Lan an toàn và bảo mật.
OpenVPN là ứng dụng open source phổ biến, dùng để triển khai Virtual Private Network, ứng dụng có thể hoạt động trên hệ thống máy tính chạy Linux, Windows, Mac. Ở bài viết này, An Ninh Mạng sẽ hướng dẫn cách cài đặt và cấu hình OpenVPN trên CentOS 7.
Chuẩn bị :
- CenOS 7 Server.
- Quyền truy cập root access.
- Domain hoặc subdomain phân giải ra Server của bạn để sử dụng Certificates.
Do OpenVPN không có sẵn trong Repository mặc định của CentOS 7. Vì vậy chúng ta cần phải cài đặt Enterprise Linux (EPEL) repository. Sử dụng lệnh sau để cài đặt EPEL repository.
yum install epel-release
Bước 1 – cài đặt OpenVPN :
Đầu tiên, chúng ta cần tiến hành cài đặt OpenVPN bằng cách sử dụng dòng lệnh :
yum install openvpn –y
Bước 2 – cài đặt Easy RSA :
Để tạo các cặp khóa SSL thực hiện mã hóa bảo mật cho VPN. Nhập vào lệnh sau :
yum install easy-rsa –y
Bước 3 – Cấu hình OpenVPN :
Tiến hành copy file mẫu sampleserver.conf để thực hiện cấu hình :
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
Mở và chỉnh sửa file :
vi /etc/openvpn/server.conf
Bỏ comment tất cả các dòng có trong file.
Chúng ta cần thay đổi tên tệp dh thành dh2048.pem. Bởi vì độ dài mã hóa Diffie-Hellman mặc định cho Easy RSA sẽ là 2048 byte. Bước sau đó chúng ta sẽ tiến hành tạo key.
dh dh2048.pem
Tiếp theo, bỏ comment dòng push “redirect-gateway def1 bypass-dhcp”, dòng này có ý nghĩa thông báo cho các máy client chuyển hướng traffic về thông qua OpenVPN.
push "redirect-gateway def1 bypass-dhcp"
Tiếp theo, chúng ta cần cung cấp thông tin DNS Server cho máy client, vì DNS Server của ISP sẽ không thể sử dụng. Ở đây, chúng ta sử dụng DNS Server của Google là 8.8.8.8 và 8.8.4.4 .
Để thực hiện, uncomment dòng push “dhcp-option DNS “ và update lại DNS :
push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4"
Đổi User và Group sang Nobody.
user nobody group nobody Cần comment lại dòng này nữa
;tls-auth ta.key 0 # This file is secret
khi bị lỗi Job for openvpn@server.service failed because the control process exited with error code. See "systemctl status openvpn@server.service" and "journalctl -xe" for.
Save và đóng file cấu hình OpenVPN.
Bước 4 – Generating Keys và Certificates :
Bây giờ chúng ta sẽ tiến hành tạo key và certificate. Easy RSA sẽ cài đặt một vài Script để tạo ra key và certificate.
Tạo thư mục chứa key, nhập vào dòng lệnh :
mkdir -p /etc/openvpn/easy-rsa/keys
Copy generation script của key và certificate vào directory.
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
Tiếp theo, chỉnh sửa những giá trị mặc định có trong Script, để người dùng không phải mất thời gian nhập lại mỗi lần. Mở file bằng lệnh vi :
vi /etc/openvpn/easy-rsa/vars
Thay đổi những giá trị bắt đầu bằng KEY_. Cập nhật các giá trị sau đây để chính xác cho hệ thống của bạn. Một số giá trị quan trọng cần được thay đổi cẩn thận, đó là :
KEY_NAME : có thể nhập vào tên máy chủ tại đây.
KEY_CN : nhập vào domain hoặc subdomain phân giải ra địa chỉ IP Server của bạn.
Kết quả trả về dưới đây là một ví dụ :
. . . # 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="US" export KEY_PROVINCE="NY" export KEY_CITY="New York" export KEY_ORG="anninhmang" export KEY_EMAIL="jijojamestj@gmail.com" export KEY_OU="Community" # X509 Subject Field export KEY_NAME="server" . . . export KEY_CN=openvpn.anninhmang.com . . .
Cấu hình OpenSSL có thể không load lên được do không phát hiện được phiên bản. Để tránh vấn đề này chúng ta hãy bỏ số của phiên bản trong tên file của OpenSSL :
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
Tiếp theo, tiến hành tạo key và Certificates. Di chuyển đến thư mục của easy-rsa :
cd /etc/openvpn/easy-rsa
source ./vars
Sau đó, tiến hành xóa toàn bộ key và certificate có trong folder này, để có thể tạo chứng chỉ Certificate của chúng ta :
./clean-all
Khi build các chứng chỉ này, người dùng sẽ được yêu cầu nhập các thông tin vào var file. Như đã trình bày ở trên, chúng ta đã sửa giá trị mặc định của file var này, vì thế không cần phải nhập vào nữa. Người dùng chỉ đơn giản bấm Enter mỗi lần.
./build-ca
Tiếp theo, chúng ta sẽ tạo ra key và certificate cho server. Bấm Enter cho mỗi câu hỏi giống ở bước trên.
./build-key-server server
Bây giờ chúng ta sẽ tạo tập tin trao đổi khóa Diffie-Hellman. Lệnh này sẽ mất một khoảng thời gian để hoàn thành:
./build-dh
Vậy là, chúng ta đã hoàn thành quá trình tạo key và Certificate cho server. Copy tất cả chúng vào thư mục OpenVPN :
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
Để chứng thực các client cũng cần phải có certificate. Những key và certificate này sẽ được share cho các máy client, nhưng cách tốt nhất là tạo riêng từng khóa và chứng chỉ cho mỗi client mà chúng ta muốn thực hiện kết nối.
Đảm bảo rằng mỗi khóa này đều có tên mô tả riêng, ở đây do chỉ có 1 máy client nên người viết sẽ gọi luôn là client :
cd /etc/openvpn/easy-rsa
./build-key client
That's it for keys and certificates.
Bước 5 – Routing
Cài đặt iptable và disable firewalld bằng dòng lệnh :
yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables –flush
Tiếp theo, add một rule vào iptables, để cho phép định tuyến tới subnet của OpenVPN, và save rule này lại.
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
Tiếp tục, enable IP Forwarding trong sysctl. Mở sysctl.conf trong vi editor :
vi /etc/sysctl.conf
Thêm dòng này vào đầu file :
net.ipv4.ip_forward = 1
Để IP forwarding có hiệu lực, chúng ta cần restart lại network service. Nhập vào dòng lệnh :
systemctl restart network.service
Bước 6 – Khởi chạy OpenVPN :
Như vậy là chúng ta đã hoàn thành cài đặt và bắt đầu có thể tiến hành khởi chạy OpenVPN. Sử dụng dòng lệnh :
systemctl -f enable openvpn@server.service
Khởi chạy OpenVPN :
systemctl start openvpn@server.service
Như vậy là chúng ta đã hoàn thành xong phần cài đặt và cấu hình OpenVPN ở server. Tiếp theo thực hiện kết nối máy client vào server :
Bước 7 – Cấu hình Client :
Để kết nối, chúng ta cần một bản copy của ca certificate từ phía server, cùng với client key và certificate.
Xác định vị trí chứa những file này trong server. Ở đây chúng ta đã đặt tên là “ Client “ là tên mô tả của client key.
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
Copy những file này vào máy client. Để thực hiện, chúng ta dùng SFTP hoặc lên server mở file này lên, copy nội dung của file này vào một file mới ở máy client và chọn save.
Chúng ta sẽ tạo một file tên client.ovpn. Đây là file cấu hình cho OpenVPN Client, thông báo cho máy client cách kết nối vào FTP Server.
Bạn sẽ cần thay đổi dòng đầu tiên thành tên mà chúng ta đã gán cho client trong key và certificate. Ở trường hợp này, tên là client.
Bạn cũng cần update lại địa chỉ IP từ your_server_ip thành địa chỉ IP chính xác của Server. Port 1194 có thể giữ nguyên.
Đảm bảo đường dẫn đến key và certificate là chính xác.
client dev tun proto udp remote your_server_ip 1194 resolv-retry infinite nobind persist-key persist-tun comp-lzo verb 3 ca /path/to/ca.crt cert /path/to/client.crt key /path/to/client.key