| 
									
										
										
										
											2024-03-13 15:30:17 +00:00
										 |  |  |  | #!/usr/bin/env bash
 | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | COMPOSE="/tmp/tpot/docker-compose.yml" | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  | exec > >(tee /data/tpotinit.log) 2>&1 | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-12 16:03:43 +00:00
										 |  |  |  | # Function to handle SIGTERM | 
					
						
							|  |  |  |  | cleanup() { | 
					
						
							|  |  |  |  |   echo "# SIGTERM received, cleaning up ..." | 
					
						
							|  |  |  |  |   echo | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |   if [ "${TPOT_OSTYPE}" = "linux" ]; | 
					
						
							| 
									
										
										
										
											2024-03-12 16:03:43 +00:00
										 |  |  |  |     then | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |       echo "## ... removing firewall rules." | 
					
						
							|  |  |  |  |       /opt/tpot/bin/rules.sh ${COMPOSE} unset | 
					
						
							| 
									
										
										
										
											2024-03-12 16:03:43 +00:00
										 |  |  |  |       echo | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |       if [ "${TPOT_BLACKHOLE}" == "ENABLED" ] && [ -f "/etc/blackhole/mass_scanner.txt" ]; | 
					
						
							|  |  |  |  |         then | 
					
						
							|  |  |  |  |           echo "## ... removing Blackhole routes." | 
					
						
							|  |  |  |  |           /opt/tpot/bin/blackhole.sh del | 
					
						
							|  |  |  |  |           echo | 
					
						
							|  |  |  |  |       fi | 
					
						
							| 
									
										
										
										
											2024-03-12 16:03:43 +00:00
										 |  |  |  |   fi | 
					
						
							|  |  |  |  |   kill -TERM "$PID" | 
					
						
							| 
									
										
										
										
											2024-03-15 21:41:12 +00:00
										 |  |  |  |   rm -f /tmp/success | 
					
						
							| 
									
										
										
										
											2024-03-12 16:03:43 +00:00
										 |  |  |  |   echo "# Cleanup done." | 
					
						
							|  |  |  |  |   echo | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | trap cleanup SIGTERM | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  | # Function to check if a variable is set, not empty | 
					
						
							|  |  |  |  | check_var() { | 
					
						
							|  |  |  |  |     local var_name="$1" | 
					
						
							|  |  |  |  |     local var_value=$(eval echo \$$var_name) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     # Check if variable is set and not empty | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |     if [[ -z "$var_value" ]]; | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  |       then | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |         echo "# Error: $var_name is not set or empty. Please check T-Pot .env config." | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  |         echo | 
					
						
							|  |  |  |  |         echo "# Aborting" | 
					
						
							|  |  |  |  |         exit 1 | 
					
						
							|  |  |  |  |     fi | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Function to check for potentially unsafe characters in most variables | 
					
						
							|  |  |  |  | check_safety() { | 
					
						
							|  |  |  |  |     local var_name="$1" | 
					
						
							|  |  |  |  |     local var_value=$(eval echo \$$var_name) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     # General safety check for most variables | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |     if [[ $var_value =~ [^a-zA-Z0-9_/.:-] ]]; | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  |       then | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |         echo "# Error: Unsafe characters detected in $var_name. Please check T-Pot .env config." | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  |         echo | 
					
						
							|  |  |  |  |         echo "# Aborting" | 
					
						
							|  |  |  |  |         exit 1 | 
					
						
							|  |  |  |  |     fi | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  | validate_base64() { | 
					
						
							|  |  |  |  |     local myCHECK=$1 | 
					
						
							|  |  |  |  |     # base64 pattern match | 
					
						
							|  |  |  |  |     for i in ${myCHECK}; | 
					
						
							|  |  |  |  |       do | 
					
						
							|  |  |  |  |         if [[ $i =~ ^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$ ]]; | 
					
						
							|  |  |  |  |           then | 
					
						
							|  |  |  |  |             echo -n "Found valid user: " | 
					
						
							|  |  |  |  |             echo $i | base64 -d -w0 | cut -f1 -d":" | 
					
						
							|  |  |  |  |           else | 
					
						
							|  |  |  |  | 	        echo "$i is not a valid base64 string. Please check T-Pot .env config." | 
					
						
							|  |  |  |  | 	        echo | 
					
						
							|  |  |  |  | 	        echo "# Aborting" | 
					
						
							|  |  |  |  | 	        exit 1 | 
					
						
							|  |  |  |  | 	    fi | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  |     done | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Function to validate specific variable formats | 
					
						
							|  |  |  |  | validate_format() { | 
					
						
							|  |  |  |  |     local var_name="$1" | 
					
						
							|  |  |  |  |     local var_value=$(eval echo \$$var_name) | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     case "$var_name" in | 
					
						
							| 
									
										
										
										
											2024-02-15 17:32:16 +00:00
										 |  |  |  |         TPOT_BLACKHOLE|TPOT_PERSISTENCE|TPOT_ATTACKMAP_TEXT) | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |             if ! [[ $var_value =~ ^(ENABLED|DISABLED|on|off|true|false)$ ]]; | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  |               then | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |                 echo "# Error: Invalid value for $var_name. Expected ENABLED/DISABLED, on/off, true/false. Please check T-Pot .env config." | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  | 		        echo | 
					
						
							|  |  |  |  | 		        echo "# Aborting" | 
					
						
							|  |  |  |  |                 exit 1 | 
					
						
							|  |  |  |  |             fi | 
					
						
							|  |  |  |  |             ;; | 
					
						
							|  |  |  |  |     esac | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  | validate_ip_or_domain() { | 
					
						
							|  |  |  |  |     local myCHECK=$1 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     # Regular expression for validating IPv4 addresses | 
					
						
							|  |  |  |  |     local ipv4Regex='^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  |     # Regular expression for validating domain names (including subdomains) | 
					
						
							|  |  |  |  |     local domainRegex='^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$' | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     # Check if TPOT_HIVE_IP matches IPv4 or domain name | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |     if [[ ${myCHECK} =~ $ipv4Regex ]]; then | 
					
						
							|  |  |  |  |         echo "${myCHECK} is a valid IPv4 address." | 
					
						
							|  |  |  |  |     elif [[ ${myCHECK} =~ $domainRegex ]]; then | 
					
						
							|  |  |  |  |         echo "${myCHECK} is a valid domain name." | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  |     else | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |         echo "# Error: $myCHECK is not a valid IPv4 address or domain name. Please check T-Pot .env config." | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  |         echo | 
					
						
							|  |  |  |  |         echo "# Aborting" | 
					
						
							|  |  |  |  |         exit 1 | 
					
						
							|  |  |  |  |     fi | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-13 13:32:00 +00:00
										 |  |  |  | # Function to validate if TPOT_PERSISTENCE_CYCLES is set and valid | 
					
						
							|  |  |  |  | validate_tpot_persistence_cycles() { | 
					
						
							|  |  |  |  |   # Check if the variable is unset, empty, not a number, or out of the valid range (1–999) | 
					
						
							|  |  |  |  |   if [[ -z "$TPOT_PERSISTENCE_CYCLES" ]] ||  | 
					
						
							|  |  |  |  |      [[ ! "$TPOT_PERSISTENCE_CYCLES" =~ ^[0-9]+$ ]] ||  | 
					
						
							|  |  |  |  |      (( TPOT_PERSISTENCE_CYCLES < 1 )) ||  | 
					
						
							|  |  |  |  |      (( TPOT_PERSISTENCE_CYCLES > 999 )); then | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     # Set to default value | 
					
						
							|  |  |  |  |     echo "WARNING! TPOT_PERSISTENCE_CYCLES is not set, invalid or out of bounds. Using default of 30 cycles." | 
					
						
							|  |  |  |  |     TPOT_PERSISTENCE_CYCLES=30 | 
					
						
							|  |  |  |  |   fi | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  | create_web_users() { | 
					
						
							|  |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |     echo "# Creating passwd files based on T-Pot .env config ..." | 
					
						
							|  |  |  |  |     # Clear / create the passwd files | 
					
						
							|  |  |  |  |     : > /data/nginx/conf/nginxpasswd | 
					
						
							|  |  |  |  |     : > /data/nginx/conf/lswebpasswd | 
					
						
							|  |  |  |  |     for i in ${WEB_USER}; | 
					
						
							|  |  |  |  |       do | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  | 	    if [[ -n $i ]]; | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  | 	      then | 
					
						
							|  |  |  |  | 	        # Need to control newlines as they kept coming up for some reason | 
					
						
							|  |  |  |  | 	        echo -n "$i" | base64 -d -w0 | tr -d '\n' >> /data/nginx/conf/nginxpasswd | 
					
						
							|  |  |  |  | 	        echo >> /data/nginx/conf/nginxpasswd | 
					
						
							|  |  |  |  | 	    fi | 
					
						
							|  |  |  |  |     done | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |     for i in ${LS_WEB_USER}; | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |       do | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |         if [[ -n $i ]]; | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |           then | 
					
						
							|  |  |  |  |             # Need to control newlines as they kept coming up for some reason | 
					
						
							|  |  |  |  |             echo -n "$i" | base64 -d -w0 | tr -d '\n' >> /data/nginx/conf/lswebpasswd | 
					
						
							|  |  |  |  |             echo >> /data/nginx/conf/lswebpasswd | 
					
						
							|  |  |  |  |           fi | 
					
						
							|  |  |  |  |     done | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-22 19:47:39 +00:00
										 |  |  |  | update_permissions() { | 
					
						
							|  |  |  |  | 	echo | 
					
						
							|  |  |  |  | 	echo "# Updating permissions ..." | 
					
						
							|  |  |  |  | 	echo | 
					
						
							|  |  |  |  | 	chown -R tpot:tpot /data | 
					
						
							|  |  |  |  | 	chmod -R 770 /data | 
					
						
							|  |  |  |  | 	chmod 774 -R /data/nginx/conf | 
					
						
							|  |  |  |  | 	chmod 774 -R /data/nginx/cert | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Update permissions | 
					
						
							|  |  |  |  | update_permissions | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | # Check for compatible OSType | 
					
						
							|  |  |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  | echo "# Checking if OSType is set correctly." | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  | myOSTYPE=$(uname -a | grep -Eo "microsoft|linuxkit") | 
					
						
							|  |  |  |  | if [ "${myOSTYPE}" == "microsoft" ] && [ "${TPOT_OSTYPE}" != "win" ]; | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |   then | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |     echo "# Docker Desktop for Windows detected, but TPOT_OSTYPE is not set to win." | 
					
						
							|  |  |  |  |     echo "# 1. You need to adjust the OSType in the T-Pot .env config." | 
					
						
							|  |  |  |  |     echo "# 2. You need to copy compose/mac_win.yml to ./docker-compose.yml." | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Aborting." | 
					
						
							|  |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |     sleep 1 | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     exit 1 | 
					
						
							| 
									
										
										
										
											2024-05-02 11:43:16 +00:00
										 |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  | if [ "${myOSTYPE}" == "linuxkit" ] && [ "${TPOT_OSTYPE}" != "mac" ]; | 
					
						
							| 
									
										
										
										
											2024-05-02 11:43:16 +00:00
										 |  |  |  |   then | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |     echo "# Docker Desktop for macOS detected, but TPOT_OSTYPE is not set to mac." | 
					
						
							|  |  |  |  |     echo "# 1. You need to adjust the OSType in the T-Pot .env config." | 
					
						
							|  |  |  |  |     echo "# 2. You need to copy compose/mac_win.yml to ./docker-compose.yml." | 
					
						
							| 
									
										
										
										
											2024-05-02 11:43:16 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Aborting." | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |     sleep 1 | 
					
						
							|  |  |  |  |     exit 1 | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | if [ "${myOSTYPE}" == "" ] && [ "${TPOT_OSTYPE}" != "linux" ]; | 
					
						
							|  |  |  |  |   then | 
					
						
							|  |  |  |  |     echo "# Docker Engine detected, but TPOT_OSTYPE is not set to linux." | 
					
						
							|  |  |  |  |     echo "# 1. You need to adjust the OSType in the T-Pot .env config." | 
					
						
							|  |  |  |  |     echo "# 2. You need to copy compose/standard.yml to ./docker-compose.yml." | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Aborting." | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     sleep 1 | 
					
						
							| 
									
										
										
										
											2024-05-02 11:43:16 +00:00
										 |  |  |  |     exit 1 | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  | # Validate environment variables | 
					
						
							| 
									
										
										
										
											2024-03-22 19:47:39 +00:00
										 |  |  |  | for var in TPOT_BLACKHOLE TPOT_PERSISTENCE TPOT_ATTACKMAP_TEXT TPOT_ATTACKMAP_TEXT_TIMEZONE TPOT_REPO TPOT_VERSION TPOT_PULL_POLICY TPOT_OSTYPE; | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  |   do | 
					
						
							|  |  |  |  |     check_var "$var" | 
					
						
							|  |  |  |  |     check_safety "$var" | 
					
						
							|  |  |  |  |     validate_format "$var" | 
					
						
							|  |  |  |  | done | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-05-13 13:32:00 +00:00
										 |  |  |  | # Validate TPOT_PERSISTENCE_CYCLES | 
					
						
							|  |  |  |  | validate_tpot_persistence_cycles | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  | if [ "${TPOT_TYPE}" == "HIVE" ]; | 
					
						
							|  |  |  |  |   then | 
					
						
							|  |  |  |  |     # No $ for check_var | 
					
						
							| 
									
										
										
										
											2024-03-22 19:47:39 +00:00
										 |  |  |  |     check_var "WEB_USER" | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |     validate_base64 "${WEB_USER}" | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  |     TPOT_HIVE_USER="" | 
					
						
							|  |  |  |  |     TPOT_HIVE_IP="" | 
					
						
							|  |  |  |  |     if [ "${LS_WEB_USER}" == "" ]; | 
					
						
							|  |  |  |  |       then | 
					
						
							|  |  |  |  |         echo "# Warning: No LS_WEB_USER detected! T-Pots of type SENSOR will not be able to submit logs to this HIVE." | 
					
						
							|  |  |  |  |         echo | 
					
						
							|  |  |  |  |       else | 
					
						
							| 
									
										
										
										
											2024-02-23 15:41:52 +00:00
										 |  |  |  |         validate_base64 "${LS_WEB_USER}" | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  |     fi | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | if [ "${TPOT_TYPE}" == "SENSOR" ]; | 
					
						
							| 
									
										
										
										
											2024-03-22 19:47:39 +00:00
										 |  |  |  |  then | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  |    # No $ for check_var | 
					
						
							|  |  |  |  |    check_var "TPOT_HIVE_USER" | 
					
						
							|  |  |  |  |    check_var "TPOT_HIVE_IP" | 
					
						
							|  |  |  |  |    validate_base64 "$TPOT_HIVE_USER" | 
					
						
							|  |  |  |  |    validate_ip_or_domain "$TPOT_HIVE_IP" | 
					
						
							| 
									
										
										
										
											2024-03-22 19:47:39 +00:00
										 |  |  |  |    WEB_USER="" | 
					
						
							| 
									
										
										
										
											2024-02-19 16:34:14 +00:00
										 |  |  |  | fi | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | echo "# All settings seem to be valid." | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | # Data folder management | 
					
						
							|  |  |  |  | if [ -f "/data/uuid" ]; | 
					
						
							|  |  |  |  |   then | 
					
						
							|  |  |  |  |     figlet "Initializing ..." | 
					
						
							| 
									
										
										
										
											2023-12-07 17:44:24 +00:00
										 |  |  |  |     figlet "T-Pot: ${TPOT_VERSION}" | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  |     create_web_users | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Data folder is present, just cleaning up, please be patient ..." | 
					
						
							|  |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2025-05-13 13:32:00 +00:00
										 |  |  |  |     /opt/tpot/bin/clean.sh "${TPOT_PERSISTENCE}" "${TPOT_PERSISTENCE_CYCLES}" | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |   else | 
					
						
							|  |  |  |  |     figlet "Setting up ..." | 
					
						
							| 
									
										
										
										
											2023-12-07 17:44:24 +00:00
										 |  |  |  |     figlet "T-Pot: ${TPOT_VERSION}" | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Setting up data folder structure ..." | 
					
						
							|  |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  |     /opt/tpot/bin/clean.sh off | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Generating self signed certificate ..." | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     myINTIP=$(/sbin/ip address show | awk '/inet .*brd/{split($2,a,"/"); print a[1]; exit}') | 
					
						
							|  |  |  |  |     openssl req \
 | 
					
						
							|  |  |  |  |           -nodes \
 | 
					
						
							|  |  |  |  |           -x509 \
 | 
					
						
							|  |  |  |  |           -sha512 \
 | 
					
						
							|  |  |  |  |           -newkey rsa:8192 \
 | 
					
						
							|  |  |  |  |           -keyout "/data/nginx/cert/nginx.key" \
 | 
					
						
							|  |  |  |  |           -out "/data/nginx/cert/nginx.crt" \
 | 
					
						
							|  |  |  |  |           -days 3650 \
 | 
					
						
							|  |  |  |  |           -subj '/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd' \
 | 
					
						
							|  |  |  |  |           -addext "subjectAltName = IP:${myINTIP}" | 
					
						
							|  |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  |     create_web_users | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Extracting objects, final touches and permissions ..." | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     tar xvfz /opt/tpot/etc/objects/elkbase.tgz -C / | 
					
						
							|  |  |  |  |     uuidgen > /data/uuid | 
					
						
							|  |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Check if TPOT_BLACKHOLE is enabled | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  | if [ "${TPOT_OSTYPE}" == "linux" ]; | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |   then | 
					
						
							|  |  |  |  |     if [ "${TPOT_BLACKHOLE}" == "ENABLED" ] && [ ! -f "/etc/blackhole/mass_scanner.txt" ]; | 
					
						
							|  |  |  |  |       then | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  |         echo | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |         echo "# Adding Blackhole routes." | 
					
						
							|  |  |  |  |         /opt/tpot/bin/blackhole.sh add | 
					
						
							|  |  |  |  |         echo | 
					
						
							|  |  |  |  |     fi | 
					
						
							|  |  |  |  |     if [ "${TPOT_BLACKHOLE}" == "DISABLED" ] && [ -f "/etc/blackhole/mass_scanner.txt" ]; | 
					
						
							|  |  |  |  |       then | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  |         echo | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |         echo "# Removing Blackhole routes." | 
					
						
							|  |  |  |  |         /opt/tpot/bin/blackhole.sh del | 
					
						
							|  |  |  |  |         echo | 
					
						
							|  |  |  |  |       else | 
					
						
							| 
									
										
										
										
											2024-02-14 18:04:05 +00:00
										 |  |  |  |         echo | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |         echo "# Blackhole is not active." | 
					
						
							|  |  |  |  |     fi | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |   else | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# T-Pot is configured for macOS / Windows. Blackhole is not supported." | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Get IP | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | echo "# Updating IP Info ..." | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | /opt/tpot/bin/updateip.sh | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Update permissions | 
					
						
							| 
									
										
										
										
											2024-03-22 19:47:39 +00:00
										 |  |  |  | update_permissions | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | # Update interface settings (p0f and Suricata) and setup iptables to support NFQ based honeypots (glutton, honeytrap) | 
					
						
							|  |  |  |  | ### This is currently not supported on Docker for Desktop, only on Docker Engine for Linux | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  | if [ "${TPOT_OSTYPE}" == "linux" ]; | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |   then | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Get IF, disable offloading, enable promiscious mode for p0f and suricata ..." | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     ethtool --offload $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) rx off tx off | 
					
						
							|  |  |  |  |     ethtool -K $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) gso off gro off | 
					
						
							|  |  |  |  |     ip link set $(/sbin/ip address | grep "^2: " | awk '{ print $2 }' | tr -d [:punct:]) promisc on | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# Adding firewall rules ..." | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     /opt/tpot/bin/rules.sh ${COMPOSE} set | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |   else | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# T-Pot is configured for macOS / Windows. Setting up firewall rules on the host is not supported." | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | fi | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Display open ports | 
					
						
							| 
									
										
										
										
											2024-05-06 17:37:34 +00:00
										 |  |  |  | if [ "${TPOT_OSTYPE}" == "linux" ]; | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |   then | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     echo "# This is a list of open ports on the host (netstat -tulpen)." | 
					
						
							|  |  |  |  |     echo "# Make sure there are no conflicting ports by checking the docker compose file." | 
					
						
							|  |  |  |  |     echo "# Conflicting ports will prevent the startup of T-Pot." | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |     netstat -tulpen | grep -Eo ':([0-9]+)' | cut -d ":" -f 2 | uniq | 
					
						
							|  |  |  |  |     echo | 
					
						
							|  |  |  |  |   else | 
					
						
							|  |  |  |  |     echo | 
					
						
							| 
									
										
										
										
											2024-05-05 16:57:59 +00:00
										 |  |  |  |     echo "# T-Pot is configured for macOS / Windows. Showing open ports from the host is not supported." | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  |     echo | 
					
						
							|  |  |  |  | fi | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | # Done | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | figlet "Starting ..." | 
					
						
							| 
									
										
										
										
											2023-12-08 17:00:09 +00:00
										 |  |  |  | figlet "T-Pot: ${TPOT_VERSION}" | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | echo | 
					
						
							| 
									
										
										
										
											2024-02-28 20:05:03 +00:00
										 |  |  |  | touch /tmp/success | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | # We want to see true source for UDP packets in container (https://github.com/moby/libnetwork/issues/1994) | 
					
						
							| 
									
										
										
										
											2024-02-27 19:11:16 +00:00
										 |  |  |  | # Start autoheal if running on a supported os | 
					
						
							| 
									
										
										
										
											2024-05-06 17:37:34 +00:00
										 |  |  |  | if [ "${TPOT_OSTYPE}" == "linux" ]; | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |   then | 
					
						
							| 
									
										
										
										
											2024-02-28 18:07:22 +00:00
										 |  |  |  |     sleep 60 | 
					
						
							| 
									
										
										
										
											2024-02-27 19:11:16 +00:00
										 |  |  |  |     echo "# Dropping UDP connection tables to improve visibility of true source IPs." | 
					
						
							| 
									
										
										
										
											2023-05-30 10:22:10 +00:00
										 |  |  |  |     /usr/sbin/conntrack -D -p udp | 
					
						
							| 
									
										
										
										
											2024-02-27 19:11:16 +00:00
										 |  |  |  | fi | 
					
						
							| 
									
										
										
										
											2024-05-06 17:22:33 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | # Starting container health monitoring | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | figlet "Starting ..." | 
					
						
							|  |  |  |  | figlet "Autoheal" | 
					
						
							|  |  |  |  | echo "# Now monitoring healthcheck enabled containers to automatically restart them when unhealthy." | 
					
						
							|  |  |  |  | echo | 
					
						
							|  |  |  |  | /opt/tpot/autoheal.sh autoheal & | 
					
						
							|  |  |  |  | PID=$! | 
					
						
							|  |  |  |  | wait $PID | 
					
						
							|  |  |  |  | echo "# T-Pot Init and Autoheal were stopped. Exiting." |