| 
					
				 | 
			
			
				@@ -1438,6 +1438,85 @@ remove_iplimit() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     esac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SSH_port_forwarding() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local server_ip=$(curl -s https://api.ipify.org) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local existing_webBasePath=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'webBasePath: .+' | awk '{print $2}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local existing_port=$(/usr/local/x-ui/x-ui setting -show true | grep -Eo 'port: .+' | awk '{print $2}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local existing_listenIP=$(/usr/local/x-ui/x-ui setting -getListen true | grep -Eo 'listenIP: .+' | awk '{print $2}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local existing_cert=$(/usr/local/x-ui/x-ui setting -getCert true | grep -Eo 'cert: .+' | awk '{print $2}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local existing_key=$(/usr/local/x-ui/x-ui setting -getCert true | grep -Eo 'key: .+' | awk '{print $2}') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local config_listenIP="" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    local listen_choice="" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [[ -n "$existing_cert" && -n "$existing_key" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${green}Panel is secure with SSL.${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [[ -z "$existing_cert" && -z "$existing_key" && -z "$existing_listenIP"  ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo -e "\n${red}Warning: No Cert and Key found! The panel is not secure.${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo "Please obtain a certificate or set up SSH port forwarding." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [[ -n "$existing_listenIP" && (-z "$existing_cert" && -z "$existing_key") ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "\n${green}Current SSH Port Forwarding Configuration:${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "Standard SSH command:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${yellow}ssh -L 2222:${existing_listenIP}:${existing_port} root@${server_ip}${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "\nIf using SSH key:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${yellow}ssh -i <sshkeypath> -L 2222:${existing_listenIP}:${existing_port} root@${server_ip}${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "\nAfter connecting, access the panel at:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        echo -e "${yellow}http://localhost:2222${existing_webBasePath}${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo -e "\nChoose an option:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo -e "${green}1.${plain} Set listen IP" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo -e "${green}2.${plain} Clear listen IP" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo -e "${green}0.${plain} Abort" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    read -p "Choose an option: " num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    case "$num" in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ -z "$existing_listenIP" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "\nNo listenIP configured. Choose an option:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "1. Use default IP (127.0.0.1)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "2. Set a custom IP" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                read -p "Select an option (1 or 2): " listen_choice 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                config_listenIP="127.0.0.1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                [[ "$listen_choice" == "2" ]] && read -p "Enter custom IP to listen on: " config_listenIP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                /usr/local/x-ui/x-ui setting -listenIP "${config_listenIP}" >/dev/null 2>&1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "${green}listen IP has been set to ${config_listenIP}.${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                restart 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                config_listenIP="${existing_listenIP}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "${green}Current listen IP is already set to ${config_listenIP}.${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if [[ -n "${config_listenIP}" ]]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "\n${green}SSH Port Forwarding Configuration:${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "Standard SSH command:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "${yellow}ssh -L 2222:${config_listenIP}:${existing_port} root@${server_ip}${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "\nIf using SSH key:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "${yellow}ssh -i <sshkeypath> -L 2222:${config_listenIP}:${existing_port} root@${server_ip}${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "\nAfter connecting, access the panel at:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                echo -e "${yellow}http://localhost:2222${existing_webBasePath}${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        2) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            /usr/local/x-ui/x-ui setting -listenIP ' ' >/dev/null 2>&1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            echo -e "${green}Listen IP has been cleared.${plain}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            restart 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            echo "Operation aborted." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        *) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            echo "Invalid option. Exiting." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    esac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 show_usage() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     echo "x-ui control menu usages: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     echo "------------------------------------------" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1489,13 +1568,14 @@ show_menu() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ${green}19.${plain} Cloudflare SSL Certificate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ${green}20.${plain} IP Limit Management 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   ${green}21.${plain} Firewall Management 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ${green}22.${plain} SSH Port Forwarding Management 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ———————————————— 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ${green}22.${plain} Enable BBR  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ${green}23.${plain} Update Geo Files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  ${green}24.${plain} Speedtest by Ookla 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ${green}23.${plain} Enable BBR  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ${green}24.${plain} Update Geo Files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ${green}25.${plain} Speedtest by Ookla 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     show_status 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    echo && read -p "Please enter your selection [0-24]: " num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    echo && read -p "Please enter your selection [0-25]: " num 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     case "${num}" in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     0) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1565,16 +1645,19 @@ show_menu() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         firewall_menu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     22) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        bbr_menu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        SSH_port_forwarding 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     23) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        update_geo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        bbr_menu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     24) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        update_geo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    25) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         run_speedtest 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        LOGE "Please enter the correct number [0-24]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        LOGE "Please enter the correct number [0-25]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     esac 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |