129 lines
4.2 KiB
Bash
129 lines
4.2 KiB
Bash
|
|
#!/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
|