Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--x-ui.sh120
1 files changed, 80 insertions, 40 deletions
diff --git a/x-ui.sh b/x-ui.sh
index e2485c79..4f2e57d8 100644
--- a/x-ui.sh
+++ b/x-ui.sh
@@ -683,12 +683,13 @@ show_xray_status() {
}
firewall_menu() {
- 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}\t6.${plain} Firewall Status"
+ echo -e "${green}\t1.${plain} ${green}Install${plain} Firewall"
+ echo -e "${green}\t2.${plain} Port List [numbered]"
+ echo -e "${green}\t3.${plain} ${green}Open${plain} Ports"
+ echo -e "${green}\t4.${plain} ${red}Delete${plain} Ports from List"
+ echo -e "${green}\t5.${plain} ${green}Enable${plain} Firewall"
+ echo -e "${green}\t6.${plain} ${red}Disable${plain} Firewall"
+ echo -e "${green}\t7.${plain} Firewall Status"
echo -e "${green}\t0.${plain} Back to Main Menu"
read -p "Choose an option: " choice
case "$choice" in
@@ -712,10 +713,14 @@ firewall_menu() {
firewall_menu
;;
5)
- ufw disable
+ ufw enable
firewall_menu
;;
6)
+ ufw disable
+ firewall_menu
+ ;;
+ 7)
ufw status verbose
firewall_menu
;;
@@ -794,46 +799,81 @@ open_ports() {
}
delete_ports() {
- # Prompt the user to enter the ports they want to delete
- read -p "Enter the ports you want to delete (e.g. 80,443,2053 or range 400-500): " ports
+ # Display current rules with numbers
+ echo "Current UFW rules:"
+ ufw status numbered
+
+ # Ask the user how they want to delete rules
+ echo "Do you want to delete rules by:"
+ echo "1) Rule numbers"
+ echo "2) Ports"
+ read -p "Enter your choice (1 or 2): " choice
+
+ if [[ $choice -eq 1 ]]; then
+ # Deleting by rule numbers
+ read -p "Enter the rule numbers you want to delete (1, 2, etc.): " rule_numbers
+
+ # Validate the input
+ if ! [[ $rule_numbers =~ ^([0-9]+)(,[0-9]+)*$ ]]; then
+ echo "Error: Invalid input. Please enter a comma-separated list of rule numbers." >&2
+ exit 1
+ fi
- # Check if the input is valid
- if ! [[ $ports =~ ^([0-9]+|[0-9]+-[0-9]+)(,([0-9]+|[0-9]+-[0-9]+))*$ ]]; then
- echo "Error: Invalid input. Please enter a comma-separated list of ports or a range of ports (e.g. 80,443,2053 or 400-500)." >&2
- exit 1
- fi
+ # Split numbers into an array
+ IFS=',' read -ra RULE_NUMBERS <<<"$rule_numbers"
+ for rule_number in "${RULE_NUMBERS[@]}"; do
+ # Delete the rule by number
+ ufw delete "$rule_number" || echo "Failed to delete rule number $rule_number"
+ done
- # Delete the specified ports using ufw
- IFS=',' read -ra PORT_LIST <<<"$ports"
- for port in "${PORT_LIST[@]}"; do
- if [[ $port == *-* ]]; then
- # Split the range into start and end ports
- start_port=$(echo $port | cut -d'-' -f1)
- end_port=$(echo $port | cut -d'-' -f2)
- # Delete the port range
- ufw delete allow $start_port:$end_port/tcp
- ufw delete allow $start_port:$end_port/udp
- else
- ufw delete allow "$port"
- fi
- done
+ echo "Selected rules have been deleted."
- # Confirm that the ports are deleted
+ elif [[ $choice -eq 2 ]]; then
+ # Deleting by ports
+ read -p "Enter the ports you want to delete (e.g. 80,443,2053 or range 400-500): " ports
- echo "Deleted 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 deleted
- (ufw status | grep -q "$start_port:$end_port") || echo "$start_port-$end_port"
- else
- # Check if the individual port has been successfully deleted
- (ufw status | grep -q "$port") || echo "$port"
+ # Validate the input
+ if ! [[ $ports =~ ^([0-9]+|[0-9]+-[0-9]+)(,([0-9]+|[0-9]+-[0-9]+))*$ ]]; then
+ echo "Error: Invalid input. Please enter a comma-separated list of ports or a range of ports (e.g. 80,443,2053 or 400-500)." >&2
+ exit 1
fi
- done
+
+ # Split ports into an array
+ IFS=',' read -ra PORT_LIST <<<"$ports"
+ for port in "${PORT_LIST[@]}"; do
+ if [[ $port == *-* ]]; then
+ # Split the port range
+ start_port=$(echo $port | cut -d'-' -f1)
+ end_port=$(echo $port | cut -d'-' -f2)
+ # Delete the port range
+ ufw delete allow $start_port:$end_port/tcp
+ ufw delete allow $start_port:$end_port/udp
+ else
+ # Delete a single port
+ ufw delete allow "$port"
+ fi
+ done
+
+ # Confirmation of deletion
+ echo "Deleted 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 deleted
+ (ufw status | grep -q "$start_port:$end_port") || echo "$start_port-$end_port"
+ else
+ # Check if the individual port has been deleted
+ (ufw status | grep -q "$port") || echo "$port"
+ fi
+ done
+ else
+ echo "${red}Error:${plain} Invalid choice. Please enter 1 or 2." >&2
+ exit 1
+ fi
}
+
update_geo() {
echo -e "${green}\t1.${plain} Loyalsoldier (geoip.dat, geosite.dat)"
echo -e "${green}\t2.${plain} chocolate4u (geoip_IR.dat, geosite_IR.dat)"