webui-new/development/simpleadmin/console/menu/sfirewall_settings.sh

129 lines
4.2 KiB
Bash
Raw Permalink Normal View History

2025-03-24 22:39:52 +08:00
#!/bin/bash
SIMPLE_FIREWALL_DIR="/usrdata/simplefirewall"
SIMPLE_FIREWALL_SCRIPT="$SIMPLE_FIREWALL_DIR/simplefirewall.sh"
SIMPLE_FIREWALL_SYSTEMD_DIR="$SIMPLE_FIREWALL_DIR/systemd"
# Display Messages in Colors
display_random_color() {
local msg="$1"
local colors=(33 34 35 36 37) # ANSI color codes for yellow, blue, magenta, cyan, white
local num_colors=${#colors[@]}
local random_color_index=$(($RANDOM % num_colors)) # Pick a random index from the colors array
echo -e "\033[${colors[$random_color_index]}m$msg\033[0m"
}
display_green() {
echo -e "\033[0;32m$1\033[0m"
}
display_red() {
echo -e "\033[0;31m$1\033[0m"
}
set_portblocks() {
current_ports_line=$(grep '^PORTS=' "$SIMPLE_FIREWALL_SCRIPT")
ports=$(echo "$current_ports_line" | cut -d'=' -f2 | tr -d '()' | tr ' ' '\n' | grep -o '[0-9]\+')
echo -e "\e[1;32mCurrent configured ports:\e[0m"
echo "$ports" | awk '{print NR") "$0}'
while true; do
echo -e "\e[1;32mEnter a port number to add/remove, or type 'done' or 'exit' to finish:\e[0m"
read port
if [ "$port" = "done" ] || [ "$port" = "exit" ]; then
if [ "$port" = "exit" ]; then
echo -e "\e[1;31mExiting without making changes...\e[0m"
return
fi
break
elif ! echo "$port" | grep -qE '^[0-9]+$'; then
echo -e "\e[1;31mInvalid input: Please enter a numeric value.\e[0m"
elif echo "$ports" | grep -q "^$port\$"; then
ports=$(echo "$ports" | grep -v "^$port\$")
echo -e "\e[1;32mPort $port removed.\e[0m"
else
ports=$(echo "$ports"; echo "$port" | grep -o '[0-9]\+')
echo -e "\e[1;32mPort $port added.\e[0m"
fi
done
if [ "$port" != "exit" ]; then
new_ports_line="PORTS=($(echo "$ports" | tr '\n' ' '))"
sed -i "s/$current_ports_line/$new_ports_line/" "$SIMPLE_FIREWALL_SCRIPT"
fi
}
set_ttl(){
# TTL configuration code
ttl_value=$(cat /usrdata/simplefirewall/ttlvalue)
if [ "$ttl_value" -eq 0 ]; then
echo -e "\e[1;31mTTL is not set.\e[0m"
else
echo -e "\e[1;32mTTL value is set to $ttl_value.\e[0m"
fi
echo -e "\e[1;31mType 'exit' to cancel.\e[0m"
read -p "What do you want the TTL value to be: " new_ttl_value
if [ "$new_ttl_value" = "exit" ]; then
echo -e "\e[1;31mExiting TTL configuration...\e[0m"
return
elif ! echo "$new_ttl_value" | grep -qE '^[0-9]+$'; then
echo -e "\e[1;31mInvalid input: Please enter a numeric value.\e[0m"
return
else
/usrdata/simplefirewall/ttl-override stop
echo "$new_ttl_value" > /usrdata/simplefirewall/ttlvalue
/usrdata/simplefirewall/ttl-override start
echo -e "\033[0;32mTTL value updated to $new_ttl_value.\033[0m"
fi
}
# function to configure the fetures of simplefirewall
simple_firewall_menu() {
if [ ! -f "$SIMPLE_FIREWALL_SCRIPT" ]; then
display_random_color "Simplefirewall is not installed, would you like to install it?"
display_green "1) Yes"
display_red "2) No"
read -p "Enter your choice (1-2): " install_choice
case $install_choice in
1)
install_simple_firewall
;;
2)
return
;;
*)
display_red "Invalid choice. Please select either 1 or 2."
;;
esac
fi
display_random_color "Configure Simple Firewall:"
display_green "1) Configure incoming port block"
display_green "2) Configure TTL"
display_green "3) Exit to Main Menu"
read -p "Enter your choice (1-2): " menu_choice
case $menu_choice in
1)
set_portblocks
;;
2)
set_ttl
;;
3)
return
;;
*)
echo -e "\e[1;31mInvalid choice. Please select either 1 or 2.\e[0m"
;;
esac
systemctl restart simplefirewall
echo -e "\e[1;32mFirewall configuration updated.\e[0m"
}
# Main execution
mount -o remount,rw /
simple_firewall_menu