DBA Script
#!/bin/bash # Purpose: norad.sh (North American Aerospace Defense Command) # Version: 2018.10.01 # Dependencies: inc_system.sh ###################################### # Preamble: 2018.10.01 # ###################################### set -a; DIR_SCRIPTS="/u01/app/scripts"; source $DIR_SCRIPTS/inc_system.sh sFullName=$(basename "$0"); me=${sFullName%.*} sSLog="$DIR_LOGS/$me.sess.log"; sHLog="$DIR_LOGS/$me.hist.log"; > $sSLog if [[ $MAINT_WINDOW -eq 1 ]]; then printf "Maintenance Window Detected - Exiting\n"; exit; fi # User Vars usrEmailList="michaele@sccu.com" #usrEmailList="HostTeam@sccu.com OpNetTeam@sccu.com" usrWhiteList="\ (:0) \ 100.1.1.125 \ mlbwopmanv01.sccu.local \ michael \ 10.251.250. \ 10.200.3.151 \ " # 10.251.250. Meraki # 10.249.249. VPN # 10.200.3.151 ME # w7michaeldesk.sccu.local \ # w10michaele.sccu.local \ ###################################### # Init Script Actions\Functions\Vars # ###################################### # Vars sMyConn="999" fMyConn="$DIR_TMP/$me.MyConn.tmp" fConnTemp="$DIR_TMP/$me.connections.tmp"; fLastEmail="$DIR_TMP/$me.email.flg" fAlerts="$DIR_LOGS/$me.alerts.log" if [[ "$1" == "me" ]]; then rm $fMyConn rm $fConnTemp fi # Action: WhiteList Session (via ./norad.sh me) find $DIR_TMP -type f -name '$fMyConn' -mtime +2 -exec rm {} \; if ! [[ -f $fMyConn ]]; then if [[ "$1" == "me" ]]; then log "$sSLog" "Processing WhiteListMe" sMyConn=$(echo "$SSH_CLIENT" | awk '{print $1}') echo $sMyConn > $fMyConn usrWhiteList="$usrWhiteList\ 111 222 333 444 $sMyConn" fi else sMyConn=$(cat $fMyConn) log "$sSLog" "WhiteListMe File Detected: $fMyConn ($sMyConn)" usrWhiteList="$usrWhiteList\ 111 222 333 444 $sMyConn" fi # Functions isConnInWhiteList() { local nRetVal=0; local pConn="$1"; for i in ${usrWhiteList[}; do
if "$pConn" == *"$i"* ?; then nRetVal=1 fi done echo $nRetVal
}
- Start #
clear; log "$sSLog" "$sFullName Started"; linesep SysVars_show
- Create File With All Current Connections (fConnTemp)
who>$fConnTemp
- Process $fConnTemp
while read sLine; do
aFields=($sLine) sConnection=${aFields[4]} # Is Connection OK? isConnOK=`isConnInWhiteList "$sConnection"` # Send Alert If Not on White List if $isConnOK -eq 1 ?; then log "$sSLog" "$sConnection OK" else log "$sSLog" "$sConnection CONNECTION ALERT" echo "`now`" >> $fAlerts echo "`w`" >> $fAlerts echo `linesep` >> $fAlerts mail -s "NORAD Connection Alert: `hostname`" "$usrEmailList" <<< "$(w)"; fi
done < $fConnTemp
- End #
log "$sSLog" "$sFullName Ended [Elapse Time: $(elapse)]"; echo $(linesep "=") >> $sHLog; cat $sSLog >> $sHLog; tail -32768 $sHLog > $sHLog.tmp; mv $sHLog.tmp $sHLog
@]