184 lines
5.1 KiB
Bash
184 lines
5.1 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
[[ $(dpkg --get-selections|grep -w "tcpdump"|head -1) ]] || apt-get install tcpdump -y &>/dev/null
|
||
|
|
[[ -e /bin/ejecutar/limFIX ]] && _limTOP="$(cat < /bin/ejecutar/limFIX)" || _limTOP='1'
|
||
|
|
time=$(date +%s)
|
||
|
|
export ADM='/etc/adm-lite/userDIR/'
|
||
|
|
touch /root/user
|
||
|
|
export database="/root/user"
|
||
|
|
echo $$ > /tmp/pids
|
||
|
|
dropb () {
|
||
|
|
port_dropbear=`ps aux | grep dropbear | awk NR==1 | awk '{print $17;}'`
|
||
|
|
log=/var/log/auth.log
|
||
|
|
loginsukses='Password auth succeeded'
|
||
|
|
clear
|
||
|
|
pids=`ps ax |grep dropbear |grep " $port_dropbear" |awk -F" " '{print $1}'`
|
||
|
|
for pid in $pids
|
||
|
|
do
|
||
|
|
pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
|
||
|
|
i=0
|
||
|
|
for pidend in $pidlogs
|
||
|
|
do
|
||
|
|
let i=i+1
|
||
|
|
done
|
||
|
|
if [ $pidend ];then
|
||
|
|
login=`grep $pid $log |grep "$pidend" |grep "$loginsukses"`
|
||
|
|
PID=$pid
|
||
|
|
user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'/ /g"`
|
||
|
|
waktu=`echo $login |awk -F" " '{print $2"-"$1,$3}'`
|
||
|
|
while [ ${#waktu} -lt 13 ]; do
|
||
|
|
waktu=$waktu" "
|
||
|
|
done
|
||
|
|
while [ ${#user} -lt 16 ]; do
|
||
|
|
user=$user" "
|
||
|
|
done
|
||
|
|
while [ ${#PID} -lt 8 ]; do
|
||
|
|
PID=$PID" "
|
||
|
|
done
|
||
|
|
echo "$user $PID $waktu"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
fun_net () {
|
||
|
|
(
|
||
|
|
log_0="/tmp/tcpdum"
|
||
|
|
log_1="/tmp/tcpdump"
|
||
|
|
log_2="/tmp/tcpdumpLOG"
|
||
|
|
usr_dir="/etc/adm-lite/userDIR/usr_cnx"
|
||
|
|
[[ -e "$log_1" ]] && mv -f $log_1 $log_2
|
||
|
|
[[ ! -e $usr_dir ]] && touch $usr_dir
|
||
|
|
#ENCERRA TCP
|
||
|
|
for pd in `ps x | grep tcpdump | grep -v grep | awk '{print $1}'`; do
|
||
|
|
kill -9 $pd > /dev/null 2>&1
|
||
|
|
done
|
||
|
|
#INICIA TCP
|
||
|
|
tcpdump -s 50 -n 1> /tmp/tcpdump 2> /dev/null &
|
||
|
|
[[ ! -e /tmp/tcpdump ]] && touch /tmp/tcpdump
|
||
|
|
#ANALIZA USER
|
||
|
|
for user in `awk -F : '$3 > 900 { print $1 }' /etc/passwd |grep -v "nobody" |grep -vi polkitd |grep -vi systemd-[a-z] |grep -vi systemd-[0-9]`; do
|
||
|
|
touch /tmp/$user
|
||
|
|
ip_openssh $user > /dev/null 2>&1
|
||
|
|
ip_drop $user > /dev/null 2>&1
|
||
|
|
sed -i '/^$/d' /tmp/$user
|
||
|
|
pacotes=$(paste -sd+ /tmp/$user | bc)
|
||
|
|
rm /tmp/$user
|
||
|
|
if [ "$pacotes" != "" ]; then
|
||
|
|
if [ "$(cat $usr_dir | grep "$user")" != "" ]; then
|
||
|
|
pacotesuser=$(cat $usr_dir | grep "$user" | awk '{print $2}')
|
||
|
|
[[ $pacotesuser = "" ]] && pacotesuser=0
|
||
|
|
[[ $pacotesuser != +([0-9]) ]] && pacotesuser=0
|
||
|
|
ussrvar=$(cat $usr_dir | grep -v "$user")
|
||
|
|
echo "$ussrvar" > $usr_dir
|
||
|
|
pacotes=$(($pacotes+$pacotesuser))
|
||
|
|
echo -e "$user $pacotes" >> $usr_dir
|
||
|
|
else
|
||
|
|
echo -e "$user $pacotes" >> $usr_dir
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
unset pacotes
|
||
|
|
done
|
||
|
|
) &
|
||
|
|
}
|
||
|
|
|
||
|
|
ip_openssh () {
|
||
|
|
user="$1"
|
||
|
|
for ip in `lsof -u $user -P -n | grep "ESTABLISHED" | awk -F "->" '{print $2}' |awk -F ":" '{print $1}' | grep -v "127.0.0.1"`; do
|
||
|
|
local packet=$(cat $log_2 | grep "$ip" | wc -l)
|
||
|
|
echo "$packet" >> /tmp/$user
|
||
|
|
unset packet
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
ip_drop () {
|
||
|
|
user="$1"
|
||
|
|
loguser='Password auth succeeded'
|
||
|
|
touch /tmp/drop
|
||
|
|
for ip in `cat /var/log/auth.log | tail -100 | grep "$user" | grep "$loguser" | awk -F "from" '{print $2}' | awk -F ":" '{print $1}'`; do
|
||
|
|
if [ "$(cat /tmp/drop | grep "$ip")" = "" ]; then
|
||
|
|
packet=$(cat $log_2 | grep "$ip" | wc -l)
|
||
|
|
echo "$packet" >> /tmp/$user
|
||
|
|
echo "$ip" >> /tmp/drop
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
rm /tmp/drop
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
killing () {
|
||
|
|
kill $1
|
||
|
|
}
|
||
|
|
|
||
|
|
_timeUSER () {
|
||
|
|
(
|
||
|
|
local user=$1
|
||
|
|
[[ -z $user ]] && return
|
||
|
|
local tst="$(ps -o etime $(ps -u $user |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')"
|
||
|
|
local tst1=$(echo "$tst" | wc -c)
|
||
|
|
if [[ "$tst1" == "9" ]]; then
|
||
|
|
local timerr="$(ps -o etime $(ps -u $user |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')"
|
||
|
|
else
|
||
|
|
local timerr="$(echo "00:$tst")"
|
||
|
|
fi
|
||
|
|
[[ "$tst1" == "0" ]] && return
|
||
|
|
unset var4 var5 var6 calc2
|
||
|
|
tmp2="$timerr"
|
||
|
|
local var4=`echo $tmp2 | cut -c 1-2`
|
||
|
|
local var5=`echo $tmp2 | cut -c 4-5`
|
||
|
|
local var6=`echo $tmp2 | cut -c 7-8`
|
||
|
|
[[ ! -e ${ADM}$user.time ]] && calc2=`echo $var4*3600 + $var5*60 + $var6 | bc` || calc2="$(cat ${ADM}$user.time)"
|
||
|
|
seg=$(($calc2 + 29))
|
||
|
|
echo "$seg" > ${ADM}$user.time
|
||
|
|
) &
|
||
|
|
}
|
||
|
|
|
||
|
|
killerDROP () {
|
||
|
|
user=$1 && limit=$2
|
||
|
|
num=$(dropb | grep "$user" | wc -l)
|
||
|
|
[[ $num -gt $limit ]] && {
|
||
|
|
pidKILL=$(dropb | grep "$user" | awk '{print $2}')
|
||
|
|
killing $pidKILL
|
||
|
|
echo " $user DROPBEAR LIMITADO ${limit}/$num | $(printf '%(%D-%H:%M:%S)T') !" >> $HOME/limiter.log
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
killerSSH () {
|
||
|
|
local user=$1
|
||
|
|
local limit=$2
|
||
|
|
local _ps="$(ps x | grep [[:space:]]$user[[:space:]] | grep -v grep | grep -v pts)"
|
||
|
|
local conex=$(echo -e "$_ps" | wc -l)
|
||
|
|
[[ $conex -gt $limit ]] && {
|
||
|
|
#while read line; do
|
||
|
|
# local tmp="$(echo $line | cut -d' ' -f1)"
|
||
|
|
# killing $tmp
|
||
|
|
pkill -u $user
|
||
|
|
echo " ( $user ) LIMITADO ${conex}/${limit} | $(printf '%(%D-%H:%M:%S)T') !" >> $HOME/limiter.log
|
||
|
|
#done <<< "$(echo -e "$_ps")"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
[[ -e /bin/ejecutar/usCONEXC ]] && fun_net
|
||
|
|
|
||
|
|
for u in `cat "/etc/passwd"|grep 'home'|grep 'false'|grep -v 'syslog' | cut -d: -f1`
|
||
|
|
do
|
||
|
|
[[ -e ${ADM}$u ]] && daaab=$(cat ${ADM}$u | grep "limite:" | awk '{print $2}')
|
||
|
|
[[ ${daaab} = "HWID" ]] && daaab=${_limTOP}
|
||
|
|
[[ ${daaab} = "TOKEN" ]] && daaab=${_limTOP}
|
||
|
|
killerDROP ${u} ${daaab}
|
||
|
|
killerSSH ${u} ${daaab}
|
||
|
|
[[ -e /bin/ejecutar/usCONEXT ]] && _timeUSER ${u}
|
||
|
|
echo "$u $daaab" >> /root/user
|
||
|
|
if [[ $(chage -l $u |grep 'Account expires' |awk -F ': ' '{print $2}') != never ]]; then
|
||
|
|
[[ $time -gt $(date '+%s' -d "$(chage -l $u |grep "Account expires" |awk -F ': ' '{print $2}')") ]] && {
|
||
|
|
[[ -e /etc/default/dropbear ]] && {
|
||
|
|
pkill -u $u &>/dev/null
|
||
|
|
droplim=`dropb|grep -w "$u"|awk '{print $2}'`
|
||
|
|
kill -9 $droplim &>/dev/null
|
||
|
|
usermod -L $u &>/dev/null
|
||
|
|
}
|
||
|
|
}
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
rm -rf /root/user
|
||
|
|
exit
|