killSSH.sh 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #!/bin/bash
  2. #CREADOR Henry Chumo | 06/06/2022
  3. #REFACTORY | 16/10/2022
  4. #Alias : @ChumoGH
  5. # -*- ENCODING: UTF-8 -*-
  6. time=$(date +%s)
  7. export ADM='/etc/adm-lite/userDIR/'
  8. touch /root/user
  9. export database="/root/user"
  10. echo $$ > /tmp/pids
  11. dropb () {
  12. port_dropbear=`ps aux | grep dropbear | awk NR==1 | awk '{print $17;}'`
  13. log=/var/log/auth.log
  14. loginsukses='Password auth succeeded'
  15. clear
  16. pids=`ps ax |grep dropbear |grep " $port_dropbear" |awk -F" " '{print $1}'`
  17. for pid in $pids
  18. do
  19. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  20. i=0
  21. for pidend in $pidlogs
  22. do
  23. let i=i+1
  24. done
  25. if [ $pidend ];then
  26. login=`grep $pid $log |grep "$pidend" |grep "$loginsukses"`
  27. PID=$pid
  28. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'/ /g"`
  29. waktu=`echo $login |awk -F" " '{print $2"-"$1,$3}'`
  30. while [ ${#waktu} -lt 13 ]; do
  31. waktu=$waktu" "
  32. done
  33. while [ ${#user} -lt 16 ]; do
  34. user=$user" "
  35. done
  36. while [ ${#PID} -lt 8 ]; do
  37. PID=$PID" "
  38. done
  39. echo "$user $PID $waktu"
  40. fi
  41. done
  42. }
  43. fun_net () {
  44. (
  45. log_0="/tmp/tcpdum"
  46. log_1="/tmp/tcpdump"
  47. log_2="/tmp/tcpdumpLOG"
  48. usr_dir="/etc/adm-lite/userDIR/usr_cnx"
  49. [[ -e "$log_1" ]] && mv -f $log_1 $log_2
  50. [[ ! -e $usr_dir ]] && touch $usr_dir
  51. #ENCERRA TCP
  52. for pd in `ps x | grep tcpdump | grep -v grep | awk '{print $1}'`; do
  53. kill -9 $pd > /dev/null 2>&1
  54. done
  55. #INICIA TCP
  56. tcpdump -s 50 -n 1> /tmp/tcpdump 2> /dev/null &
  57. [[ ! -e /tmp/tcpdump ]] && touch /tmp/tcpdump
  58. #ANALIZA USER
  59. 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
  60. touch /tmp/$user
  61. ip_openssh $user > /dev/null 2>&1
  62. ip_drop $user > /dev/null 2>&1
  63. sed -i '/^$/d' /tmp/$user
  64. pacotes=$(paste -sd+ /tmp/$user | bc)
  65. rm /tmp/$user
  66. if [ "$pacotes" != "" ]; then
  67. if [ "$(cat $usr_dir | grep "$user")" != "" ]; then
  68. pacotesuser=$(cat $usr_dir | grep "$user" | awk '{print $2}')
  69. [[ $pacotesuser = "" ]] && pacotesuser=0
  70. [[ $pacotesuser != +([0-9]) ]] && pacotesuser=0
  71. ussrvar=$(cat $usr_dir | grep -v "$user")
  72. echo "$ussrvar" > $usr_dir
  73. pacotes=$(($pacotes+$pacotesuser))
  74. echo -e "$user $pacotes" >> $usr_dir
  75. else
  76. echo -e "$user $pacotes" >> $usr_dir
  77. fi
  78. fi
  79. unset pacotes
  80. done
  81. ) &
  82. }
  83. ip_openssh () {
  84. user="$1"
  85. 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
  86. local packet=$(cat $log_2 | grep "$ip" | wc -l)
  87. echo "$packet" >> /tmp/$user
  88. unset packet
  89. done
  90. }
  91. ip_drop () {
  92. user="$1"
  93. loguser='Password auth succeeded'
  94. touch /tmp/drop
  95. for ip in `cat /var/log/auth.log | tail -100 | grep "$user" | grep "$loguser" | awk -F "from" '{print $2}' | awk -F ":" '{print $1}'`; do
  96. if [ "$(cat /tmp/drop | grep "$ip")" = "" ]; then
  97. packet=$(cat $log_2 | grep "$ip" | wc -l)
  98. echo "$packet" >> /tmp/$user
  99. echo "$ip" >> /tmp/drop
  100. fi
  101. done
  102. rm /tmp/drop
  103. }
  104. killing () {
  105. kill $1
  106. }
  107. _timeUSER () {
  108. local user=$1
  109. [[ -z $user ]] && return
  110. local tst="$(ps -o etime $(ps -u $user |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')"
  111. local tst1=$(echo "$tst" | wc -c)
  112. if [[ "$tst1" == "9" ]]; then
  113. local timerr="$(ps -o etime $(ps -u $user |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')"
  114. else
  115. local timerr="$(echo "00:$tst")"
  116. fi
  117. [[ "$tst1" == "0" ]] && return
  118. unset var4 var5 var6 calc2
  119. tmp2="$timerr"
  120. local var4=`echo $tmp2 | cut -c 1-2`
  121. local var5=`echo $tmp2 | cut -c 4-5`
  122. local var6=`echo $tmp2 | cut -c 7-8`
  123. [[ ! -e ${ADM}$user.time ]] && calc2=`echo $var4*3600 + $var5*60 + $var6 | bc` || calc2="$(cat ${ADM}$user.time)"
  124. seg=$(($calc2 + 29))
  125. echo "$seg" > ${ADM}$user.time
  126. }
  127. killerDROP () {
  128. user=$1 && limit=$2
  129. num=$(dropb | grep "$user" | wc -l)
  130. [[ $num -gt $limit ]] && {
  131. pidKILL=$(dropb | grep "$user" | awk '{print $2}')
  132. killing $pidKILL
  133. echo " $user DROPBEAR LIMITADO ${limit}/$num | $(printf '%(%D-%H:%M:%S)T') !" >> $HOME/limiter.log
  134. }
  135. }
  136. killerSSH () {
  137. local user=$1
  138. local limit=$2
  139. local _ps="$(ps x | grep [[:space:]]$user[[:space:]] | grep -v grep | grep -v pts)"
  140. local conex=$(echo -e "$_ps" | wc -l)
  141. [[ $conex -gt $limit ]] && {
  142. #while read line; do
  143. # local tmp="$(echo $line | cut -d' ' -f1)"
  144. # killing $tmp
  145. pkill -u $user
  146. echo " ( $user ) LIMITADO ${conex}/${limit} | $(printf '%(%D-%H:%M:%S)T') !" >> $HOME/limiter.log
  147. #done <<< "$(echo -e "$_ps")"
  148. }
  149. }
  150. for u in `cat "/etc/passwd"|grep 'home'|grep 'false'|grep -v 'syslog' | cut -d: -f1`
  151. do
  152. [[ -e ${ADM}$u ]] && daaab=$(cat ${ADM}$u | grep "limite:" | awk '{print $2}')
  153. [[ ${daaab} = "HWID" ]] && daaab=1
  154. [[ ${daaab} = "TOKEN" ]] && daaab=1
  155. killerDROP ${u} ${daaab}
  156. killerSSH ${u} ${daaab}
  157. [[ -e /bin/ejecutar/usCONEXT ]] && _timeUSER ${u}
  158. echo "$u $daaab" >> /root/user
  159. if [[ $(chage -l $u |grep 'Account expires' |awk -F ': ' '{print $2}') != never ]]; then
  160. [[ $time -gt $(date '+%s' -d "$(chage -l $u |grep "Account expires" |awk -F ': ' '{print $2}')") ]] && {
  161. [[ -e /etc/default/dropbear ]] && {
  162. pkill -u $u &>/dev/null
  163. droplim=`dropb|grep -w "$u"|awk '{print $2}'`
  164. kill -9 $droplim &>/dev/null
  165. usermod -L $u &>/dev/null
  166. }
  167. }
  168. fi
  169. done
  170. [[ -e /bin/ejecutar/usCONEXC ]] && fun_net
  171. rm -rf /root/user
  172. exit