#!/bin/bash

# File chứa dải IP Việt Nam
VN_IPS_FILE="vn_ips.txt"
VN_IPS_URI="http://centos-repo.htn.cloud/vietnam-ip-range_v4.txt"

# Collect IP LIST
curl $VN_IPS_URI > $VN_IPS_FILE

# Tên ipset sẽ chứa các IP từ Việt Nam
IPSET_NAME="vn_ips"

# Kiểm tra xem ipset có cài đặt hay không
if ! command -v ipset &> /dev/null
then
    echo "ipset could not be found. Please install ipset."
    exit 1
fi

# Kiểm tra xem iptables có cài đặt hay không
if ! command -v iptables &> /dev/null
then
    echo "iptables could not be found. Please install iptables."
    exit 1
fi

# Hàm tạo ipset và thêm các IP từ Việt Nam
create_vn_ips() {
    echo "Creating ipset for Vietnam IPs..."
    ipset create $IPSET_NAME hash:net
    while read -r ip_range; do
        ipset add $IPSET_NAME $ip_range
    done < "$VN_IPS_FILE"
    echo "Vietnam IPs have been added to ipset."
}

# Hàm áp dụng rule iptables để allow chỉ Việt Nam và chặn các quốc gia khác
apply_iptables_rules() {
    echo "Applying iptables rules to allow Vietnam and block others..."
    iptables -A INPUT -m set --match-set $IPSET_NAME src -j ACCEPT
    iptables -A INPUT -j DROP
    echo "iptables rules applied."
}

# Hàm rollback (trả về trạng thái allow all)
rollback() {
    echo "Rolling back to 'ALLOW ALL'..."
    iptables -F
    iptables -A INPUT -j ACCEPT
    echo "Rollback complete. All IPs are allowed."
}

# Menu lựa chọn
echo "Choose an option:"
echo "1. Create and Apply Vietnam IP rules"
echo "2. Rollback to ALLOW ALL"
echo "3. Exit"
read -p "Enter your choice (1/2/3): " choice

case $choice in
    1)
        # Kiểm tra xem ipset đã tồn tại chưa
        if ipset list $IPSET_NAME &>/dev/null; then
            echo "ipset $IPSET_NAME already exists. Skipping creation."
        else
            create_vn_ips
        fi
        apply_iptables_rules
        ;;
    2)
        rollback
        ;;
    3)
        echo "Exiting..."
        exit 0
        ;;
    *)
        echo "Invalid choice. Exiting."
        exit 1
        ;;
esac

