2017-09-28 20:00:51 +00:00
#!/bin/bash
2017-10-05 22:53:35 +00:00
2018-08-21 20:31:04 +00:00
# Some global vars
2017-10-05 19:13:58 +00:00
myCONFIGFILE = "/opt/tpot/etc/tpot.yml"
2018-01-10 17:13:48 +00:00
myCOMPOSEPATH = "/opt/tpot/etc/compose"
2022-03-18 18:17:12 +00:00
myLSB_RELEASE = "bullseye"
2017-10-05 19:13:58 +00:00
myRED = " [0;31m"
myGREEN = " [0;32m"
myWHITE = " [0;0m"
myBLUE = " [0;34m"
# Check for existing tpot.yml
function fuCONFIGCHECK ( ) {
2022-03-21 19:46:04 +00:00
echo
2017-10-05 19:13:58 +00:00
echo "### Checking for T-Pot configuration file ..."
2020-01-28 17:52:44 +00:00
if ! [ -L $myCONFIGFILE ] ;
2017-10-05 19:13:58 +00:00
then
2020-01-28 17:52:44 +00:00
echo -n " ###### $myBLUE $myCONFIGFILE $myWHITE "
myFILE = $( head -n 1 $myCONFIGFILE | tr -d "()" | tr [ :upper:] [ :lower:] | awk '{ print $3 }' )
myFILE += ".yml"
echo " [ $myRED " "NOT OK" " $myWHITE ] - Broken symlink, trying to reset to ' $myFILE '. "
rm -rf $myCONFIGFILE
ln -s $myCOMPOSEPATH /$myFILE $myCONFIGFILE
fi
if [ -L $myCONFIGFILE ] ;
then
echo " ###### $myBLUE $myCONFIGFILE $myWHITE [ $myGREEN " "OK" " $myWHITE ] "
2017-10-05 19:13:58 +00:00
else
2020-01-28 17:52:44 +00:00
echo " [ $myRED " "NOT OK" " $myWHITE ] - Broken symlink and / or restore failed. "
echo "Please create a link to your desired config i.e. 'ln -s /opt/tpot/etc/compose/standard.yml /opt/tpot/etc/tpot.yml'."
exit
2017-10-05 19:13:58 +00:00
fi
2018-08-21 15:21:45 +00:00
echo
2017-10-05 19:13:58 +00:00
}
# Let's test the internet connection
function fuCHECKINET ( ) {
mySITES = $1
2022-03-21 19:46:04 +00:00
echo
2017-10-05 19:13:58 +00:00
echo "### Now checking availability of ..."
for i in $mySITES ;
do
echo -n " ###### $myBLUE $i $myWHITE "
curl --connect-timeout 5 -IsS $i 2>& 1>/dev/null
if [ $? -ne 0 ] ;
then
2018-08-20 15:06:10 +00:00
echo
echo " ###### $myBLUE " "Error - Internet connection test failed." " $myWHITE " " [ $myRED " "NOT OK" " $myWHITE ] "
echo "Exiting." " $myWHITE "
2017-10-05 19:13:58 +00:00
echo
exit 1
else
2018-08-20 15:06:10 +00:00
echo " [ $myGREEN " OK" $myWHITE ] "
2017-10-05 19:13:58 +00:00
fi
done ;
2018-08-21 15:21:45 +00:00
echo
2017-10-05 19:13:58 +00:00
}
2018-08-20 15:06:10 +00:00
# Update
2017-10-05 22:02:02 +00:00
function fuSELFUPDATE ( ) {
2022-03-21 19:46:04 +00:00
echo
2017-10-05 22:34:41 +00:00
echo "### Now checking for newer files in repository ..."
2018-08-20 15:06:10 +00:00
git fetch --all
2017-10-05 22:34:41 +00:00
myREMOTESTAT = $( git status | grep -c "up-to-date" )
if [ " $myREMOTESTAT " != "0" ] ;
then
2018-08-20 15:06:10 +00:00
echo " ###### $myBLUE " "No updates found in repository." " $myWHITE "
2017-10-05 22:34:41 +00:00
return
fi
2022-01-13 15:34:50 +00:00
### DEV
2022-04-11 14:37:04 +00:00
myRESULT = $( git diff --name-only origin/master | grep update.sh)
2017-10-05 22:02:02 +00:00
if [ " $myRESULT " = = "update.sh" ] ;
then
2018-08-21 20:27:53 +00:00
echo " ###### $myBLUE " "Found newer version, will be pulling updates and restart myself." " $myWHITE "
2018-08-20 15:06:10 +00:00
git reset --hard
2017-10-13 21:53:21 +00:00
git pull --force
2022-04-12 10:25:34 +00:00
exec ./update.sh -y
2018-08-21 15:21:45 +00:00
exit 1
2018-08-21 20:27:53 +00:00
else
echo " ###### $myBLUE " "Pulling updates from repository." " $myWHITE "
git reset --hard
git pull --force
2017-10-19 09:02:59 +00:00
fi
2018-08-21 15:21:45 +00:00
echo
2017-10-19 09:02:59 +00:00
}
2017-10-05 22:02:02 +00:00
2018-08-08 15:02:56 +00:00
# Let's check for version
function fuCHECK_VERSION ( ) {
2022-01-13 15:34:50 +00:00
local myMINVERSION = "20.06.0"
2022-04-01 15:21:04 +00:00
local myMASTERVERSION = "22.04.0"
2018-08-08 15:02:56 +00:00
echo
2019-04-01 14:34:50 +00:00
echo "### Checking for Release ID"
2022-04-12 10:17:37 +00:00
myRELEASE = $( lsb_release -i | grep Debian -c)
if [ " $myRELEASE " = = "0" ]
2019-04-01 14:34:50 +00:00
then
2022-04-12 10:17:37 +00:00
echo " ###### This version of T-Pot cannot be upgraded automatically. Please run a fresh install. $myWHITE " " [ $myRED " "NOT OK" " $myWHITE ] "
2019-04-01 14:34:50 +00:00
exit
fi
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### Checking for version tag ..."
2018-08-08 15:02:56 +00:00
if [ -f "version" ] ;
then
myVERSION = $( cat version)
if [ [ " $myVERSION " > " $myMINVERSION " || " $myVERSION " = = " $myMINVERSION " ] ] && [ [ " $myVERSION " < " $myMASTERVERSION " || " $myVERSION " = = " $myMASTERVERSION " ] ]
then
2018-08-20 15:06:10 +00:00
echo " ###### $myBLUE $myVERSION is eligible for the update procedure. $myWHITE " " [ $myGREEN " "OK" " $myWHITE ] "
2018-08-08 15:02:56 +00:00
else
2018-08-20 15:06:10 +00:00
echo " ###### $myBLUE $myVERSION cannot be upgraded automatically. Please run a fresh install. $myWHITE " " [ $myRED " "NOT OK" " $myWHITE ] "
exit
2018-08-08 15:02:56 +00:00
fi
else
2018-08-20 15:06:10 +00:00
echo " ###### $myBLUE " "Unable to determine version. Please run 'update.sh' from within '/opt/tpot'." " $myWHITE " " [ $myRED " "NOT OK" " $myWHITE ] "
2018-08-08 15:02:56 +00:00
exit
fi
2018-08-21 15:21:45 +00:00
echo
2018-08-08 15:02:56 +00:00
}
2018-08-20 15:06:10 +00:00
# Stop T-Pot to avoid race conditions with running containers with regard to the current T-Pot config
function fuSTOP_TPOT ( ) {
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### Need to stop T-Pot ..."
echo -n " ###### $myBLUE Now stopping T-Pot. $myWHITE "
systemctl stop tpot
if [ $? -ne 0 ] ;
then
echo " [ $myRED " "NOT OK" " $myWHITE ] "
echo " ###### $myBLUE " "Could not stop T-Pot." " $myWHITE " " [ $myRED " "NOT OK" " $myWHITE ] "
echo "Exiting." " $myWHITE "
echo
exit 1
else
echo " [ $myGREEN " OK" $myWHITE ] "
2022-03-16 16:08:14 +00:00
echo " ###### $myBLUE Now disabling T-Pot service. $myWHITE "
systemctl disable tpot
2018-09-12 13:42:00 +00:00
echo " ###### $myBLUE Now cleaning up containers. $myWHITE "
2018-09-12 14:08:34 +00:00
if [ " $( docker ps -aq) " != "" ] ;
then
docker stop $( docker ps -aq)
docker rm $( docker ps -aq)
fi
2017-09-28 20:00:51 +00:00
fi
2018-08-21 15:21:45 +00:00
echo
2018-08-20 15:06:10 +00:00
}
2017-10-05 21:02:36 +00:00
2018-08-20 15:06:10 +00:00
# Backup
function fuBACKUP ( ) {
local myARCHIVE = " /root/ $( date +%Y%m%d%H%M) _tpot_backup.tgz "
local myPATH = $PWD
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### Create a backup, just in case ... "
echo -n " ###### $myBLUE Building archive in $myARCHIVE $myWHITE "
cd /opt/tpot
tar cvfz $myARCHIVE * 2>& 1>/dev/null
if [ $? -ne 0 ] ;
then
echo " [ $myRED " "NOT OK" " $myWHITE ] "
echo " ###### $myBLUE " "Something went wrong." " $myWHITE " " [ $myRED " "NOT OK" " $myWHITE ] "
echo "Exiting." " $myWHITE "
echo
cd $myPATH
exit 1
else
echo " [ $myGREEN " OK" $myWHITE ] "
cd $myPATH
fi
2018-08-21 15:21:45 +00:00
echo
2018-08-20 15:06:10 +00:00
}
2017-10-05 22:34:41 +00:00
2018-11-21 13:44:13 +00:00
# Remove old images for specific tag
function fuREMOVEOLDIMAGES ( ) {
local myOLDTAG = $1
local myOLDIMAGES = $( docker images | grep -c " $myOLDTAG " )
if [ " $myOLDIMAGES " -gt "0" ] ;
then
2022-03-21 19:46:04 +00:00
echo
2018-11-21 13:44:13 +00:00
echo "### Removing old docker images."
docker rmi $( docker images | grep " $myOLDTAG " | awk '{print $3}' )
fi
}
2018-08-20 15:06:10 +00:00
# Let's load docker images in parallel
function fuPULLIMAGES {
local myTPOTCOMPOSE = "/opt/tpot/etc/tpot.yml"
for name in $( cat $myTPOTCOMPOSE | grep -v '#' | grep image | cut -d'"' -f2 | uniq)
do
docker pull $name &
done
wait
2018-08-21 15:21:45 +00:00
echo
2018-08-20 15:06:10 +00:00
}
function fuUPDATER ( ) {
2022-04-12 10:17:37 +00:00
# Need to check for Debian release after self update to run upgrade to Debian 11
echo "### Checking for Release ID"
myRELEASE = $( lsb_release -c | awk '{ print $2 }' )
if [ " $myRELEASE " != " $myLSB_RELEASE " ]
then
echo " ###### Need to upgrade to Debian 11 (Bullseye) first: $myWHITE " " [ $myRED " "NOT OK" " $myWHITE ] "
echo "###### Upgrade may result in complete data loss and should not be run via SSH."
echo "###### If you installed T-Pot using the post-install method instead of the ISO it is recommended you upgrade manually to Debian 11 (Bullseye) and then re-run update.sh."
echo "###### Do you want to upgrade to Debian 11 (Bullseye) now?"
while [ " $myQST " != "y" ] && [ " $myQST " != "n" ] ;
do
read -p "Upgrade? (y/n) " myQST
done
if [ " $myQST " = "n" ] ;
then
echo
echo $myGREEN "Aborting!" $myWHITE
echo
exit
else
echo "###### Stopping and disabling T-Pot services ... "
echo
systemctl stop tpot
systemctl disable tpot
systemctl stop docker
systemctl start docker
docker stop $( docker ps -aq)
docker rm -v $( docker ps -aq)
echo "###### Switching /etc/apt/sources.list from buster to bullseye ... "
echo
sed -i 's/buster/bullseye/g' /etc/apt/sources.list
echo "###### Updating repositories ... "
echo
apt-fast update
export DEBIAN_FRONTEND = noninteractive
echo "###### Running full upgrade ... "
echo
echo "docker.io docker.io/restart boolean true" | debconf-set-selections -v
echo "ssh ssh/restart boolean true" | debconf-set-selections -v
echo "cron cron/restart boolean true" | debconf-set-selections -v
echo "debconf debconf/frontend select noninteractive" | debconf-set-selections -v
apt-fast full-upgrade -y -o Dpkg::Options::= "--force-confdef" -o Dpkg::Options::= "--force-confold" --force-yes
dpkg --configure -a
echo " ###### $myBLUE " "Finished with upgrading. Now restarting update.sh and to continue with T-Pot related updates." " $myWHITE "
exec ./update.sh -y
exit 1
fi
fi
echo
2019-02-28 19:22:30 +00:00
export DEBIAN_FRONTEND = noninteractive
2022-03-21 19:46:04 +00:00
echo
2019-04-03 13:39:40 +00:00
echo "### Installing apt-fast"
/bin/bash -c " $( curl -sL https://raw.githubusercontent.com/ilikenwf/apt-fast/master/quick-install.sh) "
2022-03-17 17:42:22 +00:00
local myPACKAGES = $( cat /opt/tpot/packages.txt)
2022-03-21 19:46:04 +00:00
echo
2022-03-19 21:32:11 +00:00
echo "### Removing and holding back problematic packages ..."
2022-03-30 21:04:19 +00:00
apt-fast -y --allow-change-held-packages purge cockpit-pcp elasticsearch-curator exim4-base mailutils ntp pcp
2022-03-30 20:32:24 +00:00
apt-mark hold exim4-base mailutils ntp pcp cockpit-pcp
2020-03-04 12:12:12 +00:00
hash -r
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### Now upgrading packages ..."
2018-11-15 12:55:04 +00:00
dpkg --configure -a
2019-04-04 06:55:59 +00:00
apt-fast -y autoclean
apt-fast -y autoremove
2019-04-03 13:39:40 +00:00
apt-fast update
apt-fast -y install $myPACKAGES
2018-11-15 11:55:37 +00:00
# Some updates require interactive attention, and the following settings will override that.
echo "docker.io docker.io/restart boolean true" | debconf-set-selections -v
echo "debconf debconf/frontend select noninteractive" | debconf-set-selections -v
2019-04-03 13:39:40 +00:00
apt-fast -y dist-upgrade -o Dpkg::Options::= "--force-confdef" -o Dpkg::Options::= "--force-confold" --force-yes
2018-11-15 12:55:04 +00:00
dpkg --configure -a
2020-06-09 19:08:21 +00:00
npm cache clean --force
2020-03-15 21:24:01 +00:00
npm install elasticdump -g
2022-03-19 21:32:11 +00:00
pip3 install --upgrade glances yq
2019-10-28 14:39:10 +00:00
hash -r
2017-10-05 19:13:58 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### Now replacing T-Pot related config files on host"
cp host/etc/systemd/* /etc/systemd/system/
2018-08-21 20:17:53 +00:00
systemctl daemon-reload
2017-10-05 22:02:02 +00:00
2018-11-26 10:35:03 +00:00
# Ensure some defaults
2022-03-21 19:46:04 +00:00
echo
2018-11-26 10:35:03 +00:00
echo "### Ensure some T-Pot defaults with regard to some folders, permissions and configs."
2021-12-17 01:25:10 +00:00
sed -i '/^port/I,$d' /etc/ssh/sshd_config
tee -a /etc/ssh/sshd_config << EOF
Port 64295
Match Group tpotlogs
PermitOpen 127.0.0.1:64305
ForceCommand /usr/bin/false
EOF
2018-11-26 10:35:03 +00:00
### Ensure creation of T-Pot related folders, just in case
2020-06-08 21:56:16 +00:00
mkdir -vp /data/adbhoney/{ downloads,log} \
2022-03-19 21:32:11 +00:00
/data/ciscoasa/log \
/data/conpot/log \
/data/citrixhoneypot/logs \
/data/cowrie/{ downloads,keys,misc,log,log/tty} \
/data/ddospot/{ bl,db,log} \
/data/dicompot/{ images,log} \
/data/dionaea/{ log,bistreams,binaries,rtp,roots,roots/ftp,roots/tftp,roots/www,roots/upnp} \
/data/elasticpot/log \
/data/elk/{ data,log} \
/data/endlessh/log \
/data/ews/conf \
/data/fatt/log \
/data/glutton/log \
/data/hellpot/log \
/data/heralding/log \
/data/honeypots/log \
/data/honeysap/log \
/data/honeytrap/{ log,attacks,downloads} \
/data/ipphoney/log \
/data/log4pot/{ log,payloads} \
/data/mailoney/log \
/data/medpot/log \
/data/nginx/{ log,heimdall} \
/data/p0f/log \
/data/redishoneypot/log \
/data/sentrypeer/log \
/data/spiderfoot \
/data/suricata/log \
/data/tanner/{ log,files} \
/home/tsec/.ssh/
2018-11-26 10:35:03 +00:00
### Let's take care of some files and permissions
2019-05-08 11:16:48 +00:00
chmod 770 -R /data
2018-11-26 10:35:03 +00:00
chown tpot:tpot -R /data
chmod 644 -R /data/nginx/conf
chmod 644 -R /data/nginx/cert
2022-03-21 19:46:04 +00:00
echo
2022-03-16 16:08:14 +00:00
echo "### Now pulling latest docker images ..."
2018-08-24 17:56:14 +00:00
echo " ###### $myBLUE This might take a while, please be patient! $myWHITE "
fuPULLIMAGES 2>& 1>/dev/null
2017-09-28 20:00:51 +00:00
2022-01-14 16:57:37 +00:00
fuREMOVEOLDIMAGES "2006"
2022-03-16 16:08:14 +00:00
2022-03-21 19:46:04 +00:00
echo
2022-03-16 16:08:14 +00:00
echo "### Copying T-Pot service to systemd."
cp /opt/tpot/host/etc/systemd/tpot.service /etc/systemd/system/
systemctl enable tpot
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "### If you made changes to tpot.yml please ensure to add them again."
echo "### We stored the previous version as backup in /root/."
2019-03-28 11:27:50 +00:00
echo "### Some updates may need an import of the latest Kibana objects as well."
echo "### Download the latest objects here if they recently changed:"
2020-09-04 13:01:21 +00:00
echo "### https://raw.githubusercontent.com/telekom-security/tpotce/master/etc/objects/kibana_export.ndjson.zip"
2019-03-28 11:27:50 +00:00
echo "### Export and import the objects easily through the Kibana WebUI:"
echo "### Go to Kibana > Management > Saved Objects > Export / Import"
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
}
2019-04-23 19:37:51 +00:00
function fuRESTORE_EWSCFG ( ) {
2020-01-28 17:52:44 +00:00
if [ -f '/data/ews/conf/ews.cfg' ] && ! grep 'ews.cfg' $myCONFIGFILE > /dev/null; then
2019-05-16 07:26:42 +00:00
echo
2019-04-23 19:37:51 +00:00
echo "### Restoring volume mount for ews.cfg in tpot.yml"
2020-01-28 17:52:44 +00:00
sed -i --follow-symlinks '/\/opt\/ewsposter\/ews.ip/a\\ \ \ \ \ - /data/ews/conf/ews.cfg:/opt/ewsposter/ews.cfg' $myCONFIGFILE
2019-04-23 19:37:51 +00:00
fi
}
2019-05-16 01:20:50 +00:00
function fuRESTORE_HPFEEDS ( ) {
if [ -f '/data/ews/conf/hpfeeds.cfg' ] ; then
2019-05-16 07:26:42 +00:00
echo
2019-05-16 01:20:50 +00:00
echo "### Restoring HPFEEDS in tpot.yml"
./bin/hpfeeds_optin.sh --conf= /data/ews/conf/hpfeeds.cfg
fi
}
2018-08-20 15:06:10 +00:00
################
# Main section #
################
# Got root?
myWHOAMI = $( whoami)
if [ " $myWHOAMI " != "root" ]
then
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
echo "Need to run as root ..."
2022-03-21 19:46:04 +00:00
echo
2018-08-20 15:06:10 +00:00
exit
fi
2017-09-28 20:00:51 +00:00
2018-08-20 15:06:10 +00:00
# Only run with command switch
if [ " $1 " != "-y" ] ; then
2022-03-21 19:46:04 +00:00
echo
2018-08-21 15:33:14 +00:00
echo "This script will update / upgrade all T-Pot related scripts, tools and packages to the latest versions."
echo "A backup of /opt/tpot will be written to /root. If you are unsure, you should save your work."
echo "This is a beta feature and only recommended for experienced users."
echo "If you understand the involved risks feel free to run this script with the '-y' switch."
2018-08-20 15:06:10 +00:00
echo
exit
fi
2018-01-10 17:29:02 +00:00
2018-08-20 15:06:10 +00:00
fuCHECK_VERSION
fuCONFIGCHECK
2019-02-12 19:29:13 +00:00
fuCHECKINET "https://index.docker.io https://github.com https://pypi.python.org https://debian.org"
2018-08-20 15:06:10 +00:00
fuSTOP_TPOT
fuBACKUP
fuSELFUPDATE " $0 " " $@ "
fuUPDATER
2019-04-23 19:37:51 +00:00
fuRESTORE_EWSCFG
2019-05-16 01:20:50 +00:00
fuRESTORE_HPFEEDS
2019-05-16 07:19:50 +00:00
echo
2022-03-20 10:19:12 +00:00
echo "### Done. Please reboot."
2022-03-22 14:33:06 +00:00
echo