diff --git a/x-ui.sh b/x-ui.sh index 2a73c8d5..798e6195 100644 --- a/x-ui.sh +++ b/x-ui.sh @@ -682,11 +682,12 @@ show_xray_status() { } firewall_menu() { - echo -e "${green}\t1.${plain} Install Firewall & open ports" - echo -e "${green}\t2.${plain} Allowed List" - echo -e "${green}\t3.${plain} Delete Ports from List" - - echo -e "${green}\t4.${plain} Disable Firewall" + echo -e "${green}\t1.${plain} Install Firewall" + echo -e "${green}\t2.${plain} Port List" + echo -e "${green}\t3.${plain} Open Ports" + echo -e "${green}\t4.${plain} Delete Ports from List" + echo -e "${green}\t5.${plain} Disable Firewall" + echo -e "${green}\t5.${plain} Firewall Status" echo -e "${green}\t0.${plain} Back to Main Menu" read -p "Choose an option: " choice case "$choice" in @@ -694,7 +695,7 @@ firewall_menu() { show_menu ;; 1) - open_ports + install_firewall firewall_menu ;; 2) @@ -702,13 +703,21 @@ firewall_menu() { firewall_menu ;; 3) - sudo delete_ports + sudo open_ports firewall_menu ;; 4) + sudo delete_ports + firewall_menu + ;; + 5) sudo ufw disable firewall_menu ;; + 6) + sudo ufw status verbose + firewall_menu + ;; *) echo -e "${red}Invalid option. Please select a valid number.${plain}\n" firewall_menu @@ -716,7 +725,7 @@ firewall_menu() { esac } -open_ports() { +install_firewall() { if ! command -v ufw &>/dev/null; then echo "ufw firewall is not installed. Installing now..." apt-get update @@ -738,9 +747,12 @@ open_ports() { # Enable the firewall ufw --force enable - fi + fi + done +} - # Prompt the user to enter a list of ports +open_ports() { + # Prompt the user to enter the ports they want to open read -p "Enter the ports you want to open (e.g. 80,443,2053 or range 400-500): " ports # Check if the input is valid @@ -756,19 +768,28 @@ open_ports() { # Split the range into start and end ports start_port=$(echo $port | cut -d'-' -f1) end_port=$(echo $port | cut -d'-' -f2) + # Open the port range ufw allow $start_port:$end_port/tcp ufw allow $start_port:$end_port/udp else + # Open the single port ufw allow "$port" fi done - # Confirm that the ports are open - echo "The following ports are now open:" - ufw status | grep "ALLOW" | grep -Eo "[0-9]+(/[a-z]+)?" - - echo "Firewall status:" - ufw status verbose + # Confirm that the ports are opened + echo "Opened the specified ports:" + for port in "${PORT_LIST[@]}"; do + if [[ $port == *-* ]]; then + start_port=$(echo $port | cut -d'-' -f1) + end_port=$(echo $port | cut -d'-' -f2) + # Check if the port range has been successfully opened + (ufw status | grep -q "$start_port:$end_port") && echo "$start_port-$end_port" + else + # Check if the individual port has been successfully opened + (ufw status | grep -q "$port") && echo "$port" + fi + done } delete_ports() {