tpotce/update.sh

276 lines
8.5 KiB
Bash
Raw Normal View History

#!/bin/bash
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"
2017-10-05 19:13:58 +00:00
myRED=""
myGREEN=""
myWHITE=""
myBLUE=""
2017-10-05 19:13:58 +00:00
# Check for existing tpot.yml
function fuCONFIGCHECK () {
echo "### Checking for T-Pot configuration file ..."
echo -n "###### $myBLUE$myCONFIGFILE$myWHITE "
if ! [ -f $myCONFIGFILE ];
2017-10-05 19:13:58 +00:00
then
echo
2018-08-20 15:06:10 +00:00
echo "[ $myRED""NOT OK""$myWHITE ] - No T-Pot configuration found."
echo "Please create a link to your desired config i.e. 'ln -s /opt/tpot/etc/compose/standard.yml /opt/tpot/etc/tpot.yml'."
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
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
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 () {
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
2019-02-12 19:29:13 +00:00
myRESULT=$(git diff --name-only origin/debian | grep update.sh)
2017-10-05 22:02:02 +00:00
if [ "$myRESULT" == "update.sh" ];
then
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
2018-08-21 15:21:45 +00:00
exec "$1" "$2"
exit 1
else
echo "###### $myBLUE""Pulling updates from repository.""$myWHITE"
git reset --hard
git pull --force
fi
2018-08-21 15:21:45 +00:00
echo
}
2017-10-05 22:02:02 +00:00
2018-08-08 15:02:56 +00:00
# Let's check for version
function fuCHECK_VERSION () {
2019-02-12 19:29:13 +00:00
local myMINVERSION="19.03.0"
local myMASTERVERSION="19.03.0"
2018-08-08 15:02:56 +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 () {
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 ]"
2018-09-12 13:42:00 +00:00
echo "###### $myBLUE Now cleaning up containers.$myWHITE "
if [ "$(docker ps -aq)" != "" ];
then
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
fi
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
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
# Remove old images for specific tag
function fuREMOVEOLDIMAGES () {
local myOLDTAG=$1
local myOLDIMAGES=$(docker images | grep -c "$myOLDTAG")
if [ "$myOLDIMAGES" -gt "0" ];
then
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 () {
2019-02-28 19:22:30 +00:00
export DEBIAN_FRONTEND=noninteractive
2019-03-20 10:09:07 +00:00
local myPACKAGES="apache2-utils apparmor apt-transport-https aufs-tools bash-completion build-essential ca-certificates cgroupfs-mount cockpit cockpit-docker console-setup console-setup-linux curl debconf-utils dialog dnsutils docker.io docker-compose dstat ethtool fail2ban figlet genisoimage git glances grc haveged html2text htop iptables iw jq kbd libcrack2 libltdl7 man mosh multitail net-tools npm ntp openssh-server openssl pass prips software-properties-common syslinux psmisc pv python-pip toilet unattended-upgrades unzip vim wget wireless-tools wpasupplicant"
2018-08-20 15:06:10 +00:00
echo "### Now upgrading packages ..."
2018-11-15 12:55:04 +00:00
dpkg --configure -a
2018-08-20 15:06:10 +00:00
apt-get -y autoclean
apt-get -y autoremove
apt-get update
apt-get -y install $myPACKAGES
# 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
2018-11-19 22:45:47 +00:00
apt-get -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
npm install "https://github.com/taskrabbit/elasticsearch-dump" -g
2018-08-20 15:06:10 +00:00
pip install --upgrade pip
hash -r
pip install --upgrade elasticsearch-curator yq
apt-get -y purge exim4-base mailutils
apt-mark hold exim4-base mailutils
2017-10-05 19:13:58 +00:00
echo
2017-10-05 21:02:36 +00:00
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/
systemctl daemon-reload
2017-10-05 22:02:02 +00:00
echo
2018-11-26 10:35:03 +00:00
# Ensure some defaults
echo "### Ensure some T-Pot defaults with regard to some folders, permissions and configs."
sed -i '/^port/Id' /etc/ssh/sshd_config
echo "Port 64295" >> /etc/ssh/sshd_config
echo
### Ensure creation of T-Pot related folders, just in case
2018-12-05 16:59:08 +00:00
mkdir -p /data/adbhoney/downloads /data/adbhoney/log \
/data/ciscoasa/log \
2018-11-26 10:35:03 +00:00
/data/conpot/log \
/data/cowrie/log/tty/ /data/cowrie/downloads/ /data/cowrie/keys/ /data/cowrie/misc/ \
/data/dionaea/log /data/dionaea/bistreams /data/dionaea/binaries /data/dionaea/rtp /data/dionaea/roots/ftp /data/dionaea/roots/tftp /data/dionaea/roots/www /data/dionaea/roots/upnp \
/data/elasticpot/log \
/data/elk/data /data/elk/log \
/data/glastopf/log /data/glastopf/db \
/data/honeytrap/log/ /data/honeytrap/attacks/ /data/honeytrap/downloads/ \
/data/glutton/log \
/data/heralding/log \
2019-03-10 18:15:59 +00:00
/data/honeypy/log \
2018-11-26 10:35:03 +00:00
/data/mailoney/log \
/data/medpot/log \
/data/nginx/log \
/data/emobility/log \
/data/ews/conf \
/data/rdpy/log \
/data/spiderfoot \
/data/suricata/log /home/tsec/.ssh/ \
/data/tanner/log /data/tanner/files \
/data/p0f/log
### Let's take care of some files and permissions
chmod 760 -R /data
chown tpot:tpot -R /data
chmod 644 -R /data/nginx/conf
chmod 644 -R /data/nginx/cert
2018-08-20 15:06:10 +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
2019-02-12 19:29:13 +00:00
#fuREMOVEOLDIMAGES "1804"
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/."
echo "### Done, please reboot."
2018-08-21 15:21:45 +00:00
echo
2018-08-20 15:06:10 +00:00
}
################
# Main section #
################
# Got root?
myWHOAMI=$(whoami)
if [ "$myWHOAMI" != "root" ]
then
echo "Need to run as root ..."
sudo ./$0
exit
fi
2018-08-20 15:06:10 +00:00
# Only run with command switch
if [ "$1" != "-y" ]; then
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