Từng bước xây dựng server VPN L2TP/IPSec trên CentOS 7
Virtual Private Network hay thường được gọi là tắt là VPN, một thuật ngữ quen thuộc đối với dân CNTT. VPN đã xuất hiện từ rất lâu đời với các giao thức có thể kể đến như PPTP, L2TP, SSTP, OpenVPN, IKEv2…Bài viết này 7Host sẽ hướng dẫn các bạn cài đặt VPN trên giao thức L2TP kết hợp mã hóa dữ liệu bằng IPSec.
1. Chuẩn bị
Các bạn cần chuẩn bị một VPS/Server chạy hệ điều hành CentOS 7 đã cập nhật phần mềm mới nhất. Nếu chưa cập nhật hãy gõ ngay lệnh sau:
[root@server7h ~] yum update -y
Tham khảo thêm: Hướng dẫn cài CentOS 7 toàn tập
Tiếp đến bạn nên tắt SELinux để tránh các lỗi phát sinh:
[root@server7h ~] nano /etc/sysconfig/selinux
Sửa giá trị “SELINUX=enforcing” thành “SELINUX=disabled” như bên dưới.
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
Sau khi cập nhật xong và tắt SELinux bạn lưu ý phải khởi động lại máy chủ để nhận cấu hình mới.
2. Các bước cài đặt
Cài đặt giao thức L2TP
Mặc định trên CentOS 7 chưa hỗ trợ sẵn giao thức L2TP nên các bạn cần cài vào máy chủ hai gói sau. Nhưng trước tiên hãy đảm bảo là bạn đã cài repository chứa các gói dự định sẽ cài.
[root@server7h ~] yum install epel-release
Tiếp tục cài L2TP:
[root@server7h ~] yum install xl2tpd libreswan
Thiết lập các thông số trong kernel
Để luồng dữ liệu từ các máy client kết nối vào VPN Server các bạn cần thiết lập các thông số bên dưới vào kernel Linux. Thực hiện mở file “sysctl.conf” tại đường dẫn sau:
[root@server7h ~] nano /etc/sysctl.conf
Thêm vào cuối file nội dung như bên dưới:
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time=120
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.all.arp_announce=2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv4.conf.lo.arp_announce=2
net.ipv4.ip_forward = 1
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.default.accept_source_route = 0
Các bạn tiến hành save lại và dùng lệnh sau để kernel nhận các thiết lập này.
[root@server7h ~] sysctl -p
Cấu hình IPSec
IPSec là một giao thức bảo mật dùng để mã hóa thông tin. Mặc định IPSec đã có sẵn trên CentOS 7 nên các bạn chỉ cần cấu hình thông số theo ý muốn mà không cần phải cài đặt. Các bạn mở file cấu hình tại đường dẫn sau:
[root@server7h ~] nano /etc/ipsec.d/l2tp_psk.conf
Thêm vào nội dung bên dưới:
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
dpddelay=30
dpdtimeout=120
dpdaction=clear
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=10.10.10.100
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
Lưu ý: Phần IP 10.10.10.100 các bạn thay bằng IP của VPS/Server nhé.
Tiếp đến cần cấu hình mật khẩu Pre-Shared Key (PSK), đây là mật khẩu chung được gửi tới toàn bộ client muốn kết nối đến VPN phải nhập mật khẩu này.
[root@server7h ~] nano /etc/ipsec.secrets
Các bạn khai báo như sau:
10.10.10.100 %any: PSK "www.7host.vn"
Lưu ý: Phần IP 10.10.10.100 các bạn thay bằng IP của VPS/Server và phần PSK các bạn cần đặt mật khẩu phức tạp tối thiểu 6 kí tự.
Tiếp đến là bật dịch vụ IPSec lên và kiểm tra xem chúng ta cấu hình có sai cú pháp đoạn nào hay không.
[root@server7h ~] systemctl start ipsec.service
[root@server7h ~] ipsec verify
Verifying installed system and configuration files
Version check and ipsec on-path [OK]
Libreswan 3.25 (netkey) on 3.10.0-1127.8.2.el7.x86_64
Checking for IPsec support in kernel [OK]
NETKEY: Testing XFRM related proc values
ICMP default/send_redirects [OK]
ICMP default/accept_redirects [OK]
XFRM larval drop [OK]
Pluto ipsec.conf syntax [OK]
Two or more interfaces found, checking IP forwarding [OK]
Checking rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED]
rp_filter is not fully aware of IPsec and should be disabled
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for IKE/NAT-T on udp 4500 [OK]
Pluto ipsec.secret syntax [OK]
Checking 'ip' command [OK]
Checking 'iptables' command [OK]
Checking 'prelink' command does not interfere with FIPS [OK]
Checking for obsolete ipsec.conf options [OK]
Sau khi gõ lệnh verify để kiểm tra thì các bạn sẽ thấy có một cảnh báo màu đỏ với nội dung khuyến nghị nên tắt chức năng rp_filter trong kernel để đảm bảo là IPSec hoạt động đầy đủ tính năng.
Các bạn thực hiện tắt bằng một lệnh sau:
[root@server7h ~] echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
Sau đó các bạn thử verify lại sẽ không còn cảnh báo nào nữa.
Cho phép IPSec tự bật khi khởi động lại server.
[root@server7h ~] systemctl enable ipsec
Cấu hình dịch vụ xl2tpd
Đây là dịch vụ giúp chúng ta tương tác được với giao thức L2TP. Tại đây các bạn sẽ cấu hình được các thông số như địa chỉ IP cấp phát, cách thức xác thực cũng như quản lý user đăng nhập.
Đầu tiên các bạn tiến hành mở file sau:
[root@server7h ~] nano /etc/xl2tpd/xl2tpd.conf
Thay thế bằng nội dung sau:
[global]
listen-addr = 10.10.10.100
ipsec saref = yes
[lns default]
ip range = 192.168.100.100-192.168.100.200
local ip = 192.168.100.99
require chap = yes
refuse pap = yes
require authentication = yes
name = 7Host VPN Server
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
Tiếp đến mở file “options.xl2tpd” tại đường dẫn:\
[root@server7h ~] /etc/ppp/options.xl2tpd
Xóa hết nội dung bên trong và dán vào nội dung mới bên dưới:
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 1.1.1.1
noccp
noauth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
Tiếp đến là khai báo username và password cho từng client trong file sau:
[root@server7h ~] nano /etc/ppp/chap-secrets
USERNAME PASSWORD
Lưu ý: Các bạn đổi Username và Password thành user/pass mà các bạn mong muốn.
Khởi động dịch vụ xl2tpd lên và cho phép khởi động cùng server bằng hai lệnh sau:
[root@server7h ~] systemctl start xl2tpd
[root@server7h ~] systemctl enable xl2tpd
Cấu hình firewall
Các bạn cần cấu hình mở port và cho phép gói tin đi qua card mạng trên server. Các bạn gõ trực tiếp các lệnh sau:
[root@server7h ~] iptables -A INPUT -p gre -j ACCEPT
[root@server7h ~] iptables -A OUTPUT -p gre -j ACCEPT
[root@server7h ~] iptables -A FORWARD -s 192.168.100.0/24 -j ACCEPT
[root@server7h ~] iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens18 -j MASQUERADE
[root@server7h ~] iptables-save
[root@server7h ~] iptables -A INPUT -p udp --dport 1701 -j ACCEPT
[root@server7h ~] iptables -A INPUT -p udp --dport 500 -j ACCEPT
[root@server7h ~] iptables -A INPUT -p udp --dport 4500 -j ACCEPT
[root@server7h ~] iptables-save
Lưu ý: Đoạn “ens18” các bạn thay thế bằng đúng tên card mạng của server.
3. Kiểm tra kết quả
Như vậy là các bước xây dựng một server VPN chạy giao thức L2TP/IPSec đã hoàn tất. Đến đây các bạn có thể kiểm thử bằng các vào thiết lập VPN Client tích hợp sẵn trên hầu hết các nền tảng từ Windows, Linux, MacOS đến Android, iOS…7Host sẽ cố gắng cập nhật bài hướng dẫn kết nối trong thời gian sớm nhất đến các bạn.
Nếu trong quá trình cài đặt theo bài viết này gặp khó khăn các bạn đừng ngần ngại gửi email về [email protected] để 7Host hỗ trợ cho các bạn nhé.