Setup openVPN theo rules

Yêu cầu : Khi 1 user connect đến openvpn-server cần có policy cho user đó được kết nối đến 1 server cụ thể nào

Giải pháp : Config trên Openvpn Server cấp DHCP cho user thường là 10.8.0.0/24 , admin là 10.8.1.0/24 sau đó dùng firewall ( iptables ) thiết lập rule theo yêu cầu

Mô hình:

1.Install trên Cloudv2 với OS ubuntu 22.04

Tải script cài đặt Openvpn-Server
wget https://raw.githubusercontent.com/Nyr/openvpn-install/master/openvpn-install.sh -O ubuntu-22.04-lts-vpn-server.sh
Phân quyền cho script mới tải về
chmod u+x ubuntu-22.04-lts-vpn-server.sh
Run script để cai đặt openvpn-server
./ubuntu-22.04-lts-vpn-server.sh
Kiểm tra service Openvpn-server đã chạy hay chưa
systemctl status openvpn-server@server

Tạo user connect Openvpn-server

Run script tải về ở bước cài đặt
./ubuntu-22.04-lts-vpn-server.sh

ADD user theo hướng dẫn hiện trên màn hình

 

2.Cấu hình Openvpn-Server

File cấu hình của Openvpn-server được lưu tại:
/etc/openvpn/server/server.conf

Chú ý:

Khi chúng ta tạo user mặc định user sẽ được cấp ip trong dải 10.8.0.0/24, nếu muốn cấp 1 ip tĩnh cho user chúng ta cần config thêm như sau:

Tạo folder config /etc/openvpn/server/ccd
mkdir -p /etc/openvpn/server/ccd
Tạo file với tên giống với tên user đã tạo
touch /etc/openvpn/server/ccd/test1
Nội dung trong file sẽ tương tự như sau
ifconfig-push 10.8.1.1 10.8.1.2
push "route 10.16.1.0 255.255.255.0"
push "route 10.17.1.0 255.255.255.0"
push "route 10.17.2.0 255.255.255.0"
push "route 10.17.3.0 255.255.255.0"
Giải thích:
ifconfig-push 10.8.1.1 10.8.1.2 : là ip tĩnh cấp cho user
Ip tĩnh này cần điền cặp như sau:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]
push "route 10.16.1.0 255.255.255.0" : là các route được thêm vào OS khi openvpn được connect

 

3.Setup policy cho user connect openvpn-server

Chú ý:

Sau khi tạo user và gắn ip cho user theo các bước ở trên. Chúng ta sẽ dùng iptables + ip để set policy cho user đấy

Các bước sau sẽ là cấu hình trên ubuntu 22.04

Xóa ufw và cài iptables thay thế
apt-get remove ufw
apt-get install iptables-persistent

Chú ý:

Sau khi cài iptables-persistent, file cấu hình iptables sẽ nằm ở: /etc/iptables/rules.v4

Cấu hình mẫu cho file rules.v4
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2:360]
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i tun0 -p tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -j DROP
-A FORWARD -s 10.8.1.1/32 -d 10.17.1.5/32 -i tun0 -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -d 10.16.1.1/32 -i tun0 -j ACCEPT
-A FORWARD -s 10.8.1.1/32 -d 10.17.1.6/32 -i tun0 -p tcp --dport 22 -j ACCEPT
-A FORWARD -i tun0 -j DROP
COMMIT
# Completed on Mon Feb 13 17:23:00 2023
# Generated by iptables-save v1.8.7 on Mon Feb 13 17:23:00 2023
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.1.0/24 -o eth0 -j MASQUERADE
COMMIT
Giải thích:
*filter : là rule lọc gói tin
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT : Chỉ cho phép gói tin udp connect port 1194 đi vào server
-A FORWARD -s 10.8.1.1/32 -d 10.17.1.6/32 -i tun0 -p tcp --dport 22 -j ACCEPT : Chỉ cho phép các gói tin được forward từ ip 10.8.1.1 đến port 22 server 10.17.1.6

 

4. Tạo client cho user

Giải thích:
B1: Tạo user, thực hiện lệnh sau: ./ubuntu-22.04-lts-vpn-server.sh (vd user được tạo có tên là test1)
B2: Xác định user đấy cần vào vpc nào
    Nếu chỉ cần vào vpc test => done
    Nếu cần vào vpc prod => B3
B3: cd vào /etc/openvpn/server/ccd và tạo file với đúng tên giống với user đã tạo ở B1
B4: Copy nội dung đã nhắc đến ở phần trên.
 
ifconfig-push 10.8.1.1 10.8.1.2 // ip tĩnh được list tại Mục 2
push "route 10.16.1.0 255.255.255.0"
push "route 10.17.1.0 255.255.255.0"
push "route 10.17.2.0 255.255.255.0"
push "route 10.17.3.0 255.255.255.0"
 
B5: Thêm rule iptables cho user tại /etc/iptables/rules.v4
B6: systemctl restart netfilter-persistent
    Test lại bằng cách kết nối đến openvpn-server và ping thử các server.