1
0

verifi 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. #!/bin/bash
  2. #beta test
  3. #by @lacasitamx
  4. #codigo fuente separado
  5. SCPdir="/etc/VPS-MX"
  6. SCPdir2="${SCPdir}/herramientas"
  7. SCPusr="${SCPdir}/controlador"
  8. MyPID="${SCPusr}/pid-vps-mx"
  9. MyTIME="${SCPusr}/time-vps-mx"
  10. [[ -e ${MyPID} ]] && source ${MyPID} || touch ${MyPID}
  11. [[ -e ${MyTIME} ]] && source ${MyTIME} || touch ${MyTIME}
  12. NOM=`less /etc/VPS-MX/controlador/nombre.log` > /dev/null 2>&1
  13. NOM1=`echo $NOM` > /dev/null 2>&1
  14. IDB=`less /etc/VPS-MX/controlador/IDT.log` > /dev/null 2>&1
  15. IDB1=`echo $IDB` > /dev/null 2>&1
  16. USRdatabase="${SCPdir}/VPS-MXuser"
  17. mostrar_usuarios () {
  18. for u in `awk -F : '$3 > 900 { print $1 }' /etc/passwd | grep -v "nobody" |grep -vi polkitd |grep -vi system-`; do
  19. echo "$u"
  20. done
  21. }
  22. droppids () {
  23. local pids
  24. local portasVAR=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" |grep -v "COMMAND" | grep "LISTEN")
  25. local NOREPEAT
  26. local reQ
  27. local Port
  28. while read port; do
  29. reQ=$(echo ${port}|awk '{print $1}')
  30. Port=$(echo {$port} | awk '{print $9}' | awk -F ":" '{print $2}')
  31. [[ $(echo -e $NOREPEAT|grep -w "$Port") ]] && continue
  32. NOREPEAT+="$Port\n"
  33. case ${reQ} in
  34. dropbear)
  35. [[ -z $DPB ]] && local DPB="\033[1;31m DROPBEAR: \033[1;32m"
  36. DPB+="$Port ";;
  37. esac
  38. done <<< "${portasVAR}"
  39. [[ ! -z $DPB ]] && echo -e $DPB
  40. local port_dropbear="$DPB"
  41. #cat /var/log/auth.log|grep "$(date|cut -d' ' -f2,3)" > /var/log/authday.log
  42. cat /var/log/auth.log|tail -1000 > /var/log/authday.log
  43. local log=/var/log/authday.log
  44. local loginsukses='Password auth succeeded'
  45. [[ -z $port_dropbear ]] && return 1
  46. for port in `echo $port_dropbear`; do
  47. for pidx in $(ps ax |grep dropbear |grep "$port" |awk -F" " '{print $1}'); do
  48. pids="${pids}$pidx\n"
  49. done
  50. done
  51. for pid in `echo -e "$pids"`; do
  52. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  53. i=0
  54. for pidend in $pidlogs; do
  55. let i++
  56. done
  57. if [[ $pidend ]]; then
  58. login=$(grep $pid $log |grep "$pidend" |grep "$loginsukses")
  59. PID=$pid
  60. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'//g"`
  61. waktu=$(echo $login |awk -F" " '{print $2"-"$1,$3}')
  62. [[ -z $user ]] && continue
  63. echo "$user|$PID|$waktu"
  64. fi
  65. done
  66. }
  67. block_userfun () {
  68. local USRloked="/etc/VPS-MX/VPS-MX-userlock"
  69. local LIMITERLOG="${USRdatabase}/Limiter.log"
  70. local LIMITERLOG2="${USRdatabase}/Limiter2.log"
  71. if [[ $2 = "-loked" ]]; then
  72. [[ $(cat ${USRloked}|grep -w "$1") ]] && return 1
  73. echo " $1 (BLOCK-MULTILOGIN) $(date +%r--%d/%m/%y)"
  74. limseg="$(less /etc/VPS-MX/controlador/tiemdes.log)"
  75. KEY="2012880601:AAEJ3Kk18PGDzW57LpTMnVMn_pQYQKW3V9w"
  76. URL="https://api.telegram.org/bot$KEY/sendMessage"
  77. MSG="⚠️ AVISO DE VPS: $NOM1 ⚠️
  78. 🔹 CUENTA: $1
  79. ❗️📵 BLOCK FIJO/TEMPORAL 📵❗️
  80. 🔓( AUTOUNLOCK EN $limseg SEGUNDOS) 🔓"
  81. curl -s --max-time 10 -d "chat_id=$IDB1&disable_web_page_preview=1&text=$MSG" $URL &>/dev/null
  82. pkill -u $1 &>/dev/null
  83. fi
  84. if [[ $(cat ${USRloked}|grep -w "$1") ]]; then
  85. usermod -U "$1" &>/dev/null
  86. [[ -e ${USRloked} ]] && {
  87. newbase=$(cat ${USRloked}|grep -w -v "$1")
  88. [[ -e ${USRloked} ]] && rm ${USRloked}
  89. for value in `echo ${newbase}`; do
  90. echo $value >> ${USRloked}
  91. done
  92. }
  93. [[ -e ${LIMITERLOG} ]] && [[ $(cat ${LIMITERLOG}|grep -w "$1") ]] && {
  94. newbase=$(cat ${LIMITERLOG}|grep -w -v "$1")
  95. [[ -e ${LIMITERLOG} ]] && rm ${LIMITERLOG}
  96. for value in `echo ${newbase}`; do
  97. echo $value >> ${LIMITERLOG}
  98. echo $value >> ${LIMITERLOG}
  99. done
  100. }
  101. return 1
  102. else
  103. usermod -L "$1" &>/dev/null
  104. pkill -u $1 &>/dev/null
  105. droplim=`droppids|grep -w "$1"|cut -d'|' -f2`
  106. kill -9 $droplim &>/dev/null
  107. echo $1 >> ${USRloked}
  108. #notifi &>/dev/null
  109. return 0
  110. fi
  111. }
  112. dropbear_pids () {
  113. local pids
  114. local portasVAR=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" |grep -v "COMMAND" | grep "LISTEN")
  115. local NOREPEAT
  116. local reQ
  117. local Port
  118. while read port; do
  119. reQ=$(echo ${port}|awk '{print $1}')
  120. Port=$(echo {$port} | awk '{print $9}' | awk -F ":" '{print $2}')
  121. [[ $(echo -e $NOREPEAT|grep -w "$Port") ]] && continue
  122. NOREPEAT+="$Port\n"
  123. case ${reQ} in
  124. dropbear)
  125. [[ -z $DPB ]] && local DPB=""
  126. DPB+="$Port ";;
  127. esac
  128. done <<< "${portasVAR}"
  129. [[ ! -z $DPB ]] && echo -e $DPB
  130. local port_dropbear="$DPB"
  131. #cat /var/log/auth.log|grep "$(date|cut -d' ' -f2,3)" > /var/log/authday.log
  132. cat /var/log/auth.log|tail -1000 > /var/log/authday.log
  133. local log=/var/log/authday.log
  134. local loginsukses='Password auth succeeded'
  135. [[ -z $port_dropbear ]] && return 1
  136. for port in `echo $port_dropbear`; do
  137. for pidx in $(ps ax |grep dropbear |grep "$port" |awk -F" " '{print $1}'); do
  138. pids="${pids}$pidx\n"
  139. done
  140. done
  141. for pid in `echo -e "$pids"`; do
  142. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  143. i=0
  144. for pidend in $pidlogs; do
  145. let i++
  146. done
  147. if [[ $pidend ]]; then
  148. login=$(grep $pid $log |grep "$pidend" |grep "$loginsukses")
  149. PID=$pid
  150. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'//g"`
  151. waktu=$(echo $login |awk -F" " '{print $2"-"$1,$3}')
  152. [[ -z $user ]] && continue
  153. echo "$user|$PID|$waktu"
  154. fi
  155. done
  156. }
  157. openvpn_pids () {
  158. #nome|#loguin|#rcv|#snd|#time
  159. byte () {
  160. while read B dummy; do
  161. [[ "$B" -lt 1024 ]] && echo "${B} bytes" && break
  162. KB=$(((B+512)/1024))
  163. [[ "$KB" -lt 1024 ]] && echo "${KB} Kb" && break
  164. MB=$(((KB+512)/1024))
  165. [[ "$MB" -lt 1024 ]] && echo "${MB} Mb" && break
  166. GB=$(((MB+512)/1024))
  167. [[ "$GB" -lt 1024 ]] && echo "${GB} Gb" && break
  168. echo $(((GB+512)/1024)) terabytes
  169. done
  170. }
  171. for user in $(mostrar_usuarios); do
  172. user="$(echo $user|sed -e 's/[^a-z0-9 -]//ig')"
  173. [[ ! $(sed -n "/^${user},/p" /etc/openvpn/openvpn-status.log) ]] && continue
  174. i=0
  175. unset RECIVED; unset SEND; unset HOUR
  176. while read line; do
  177. IDLOCAL=$(echo ${line}|cut -d',' -f2)
  178. RECIVED+="$(echo ${line}|cut -d',' -f3)+"
  179. SEND+="$(echo ${line}|cut -d',' -f4)+"
  180. DATESEC=$(date +%s --date="$(echo ${line}|cut -d',' -f5|cut -d' ' -f1,2,3,4)")
  181. TIMEON="$(($(date +%s)-${DATESEC}))"
  182. MIN=$(($TIMEON/60)) && SEC=$(($TIMEON-$MIN*60)) && HOR=$(($MIN/60)) && MIN=$(($MIN-$HOR*60))
  183. HOUR+="${HOR}h:${MIN}m:${SEC}s\n"
  184. let i++
  185. done <<< "$(sed -n "/^${user},/p" /etc/openvpn/openvpn-status.log)"
  186. RECIVED=$(echo $(echo ${RECIVED}0|bc)|byte)
  187. SEND=$(echo $(echo ${SEND}0|bc)|byte)
  188. HOUR=$(echo -e $HOUR|sort -n|tail -1)
  189. echo -e "$user|$i|$RECIVED|$SEND|$HOUR"
  190. done
  191. }
  192. ##LIMITADOR
  193. veris(){
  194. usuarios_activos=($(mostrar_usuarios))
  195. # DECLARANDO VARIAVEIS PRIMARIAS
  196. local conexao
  197. local limite
  198. local TIMEUS
  199. declare -A conexao
  200. declare -A limite
  201. declare -A TIMEUS
  202. local LIMITERLOG="${SCPusr}/Limiter.log"
  203. local LIMITERLOG2="${SCPusr}/Limiter2.log"
  204. [[ $(dpkg --get-selections|grep -w "openssh"|head -1) ]] && local SSH=ON || local SSH=OFF
  205. [[ $(dpkg --get-selections|grep -w "dropbear"|head -1) ]] && local DROP=ON || local DROP=OFF
  206. [[ $(dpkg --get-selections|grep -w "openvpn"|head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && local OPEN=ON || local OPEN=OFF
  207. while true; do
  208. unset EXPIRED
  209. unset ONLINES
  210. unset BLOQUEADO
  211. #[[ -e ${MyTIME} ]] && source ${MyTIME}
  212. local TimeNOW=$(date +%s)
  213. # INICIA VERIFICAȃO
  214. while read user; do
  215. echo -ne "\033[1;33mUSUARIO: \033[1;32m$user "
  216. if [[ ! $(echo $(mostrar_usuarios)|grep -w "$user") ]]; then
  217. echo -e "\033[1;31mNO EXISTE"
  218. continue
  219. fi
  220. local DataUser=$(chage -l "${user}" |grep -i co|awk -F ":" '{print $2}')
  221. if [[ ! -z "$(echo $DataUser|grep never)" ]]; then
  222. echo -e "\033[1;31mILIMITADO"
  223. continue
  224. fi
  225. local DataSEC=$(date +%s --date="$DataUser")
  226. if [[ "$DataSEC" -lt "$TimeNOW" ]]; then
  227. EXPIRED="1+"
  228. block_userfun $user -loked && echo " $user (EXPIRADO) $(date +%r--%d/%m/%y)" >> $LIMITERLOG && echo " $user (EXPIRADO) $(date +%r--%d/%m/%y)" >> $LIMITERLOG2 && KEY="2012880601:AAEJ3Kk18PGDzW57LpTMnVMn_pQYQKW3V9w"
  229. URL="https://api.telegram.org/bot$KEY/sendMessage"
  230. MSG="⚠️ AVISO DE VPS: $NOM1 ⚠️
  231. 🔹 CUENTA: $user
  232. ❗️ 📵 EXPIRADA 📵 ❗️"
  233. curl -s --max-time 10 -d "chat_id=$IDB1&disable_web_page_preview=1&text=$MSG" $URL && pkill -u $user
  234. echo -e "\033[1;31m EXPIRADO"
  235. continue
  236. fi
  237. local PID="0+"
  238. [[ $SSH = ON ]] && PID+="$(ps aux|grep -v grep|grep sshd|grep -w "$user"|grep -v root|wc -l 2>/dev/null)+"
  239. [[ $DROP = ON ]] && PID+="$(dropbear_pids|grep -w "$user"|wc -l)+"
  240. [[ $OPEN = ON ]] && [[ $(openvpn_pids|grep -w "$user"|cut -d'|' -f2) ]] && PID+="$(openvpn_pids|grep -w "$user"|cut -d'|' -f2)+"
  241. local ONLINES+="$(echo ${PID}0|bc)+"
  242. local conexao[$user]="$(echo ${PID}0|bc)"
  243. if [[ ${conexao[$user]} -gt '0' ]]; then #CONTADOR DE TEMPO ONLINE
  244. [[ -z "${TIMEUS[$user]}" ]] && local TIMEUS[$user]=0
  245. [[ "${TIMEUS[$user]}" != +([0-9]) ]] && local TIMEUS[$user]=0
  246. local TIMEUS[$user]="$((300+${TIMEUS[$user]}))"
  247. local VARS="$(cat ${MyTIME}|grep -w -v "$user")"
  248. echo "TIMEUS[$user]='${TIMEUS[$user]}'" > ${MyTIME}
  249. for variavel in $(echo ${VARS}); do echo "${variavel}" >> ${MyTIME}; done
  250. fi
  251. local limite[$user]="$(cat ${USRdatabase}|grep -w "${user}"|cut -d'|' -f4)"
  252. [[ -z "${limite[$user]}" ]] && continue
  253. [[ "${limite[$user]}" != +([0-9]) ]] && continue
  254. if [[ "${conexao[$user]}" -gt "${limite[$user]}" ]]; then
  255. local lock=$(block_userfun $user -loked)
  256. pkill -u $user
  257. droplim=`dropbear_pids|grep -w "$user"|cut -d'|' -f2`
  258. kill -9 $droplim &>/dev/null
  259. openlim=`openvpn_pids|grep -w "$user"|cut -d'|' -f2`
  260. kill -9 $openlim &>/dev/null
  261. echo "$lock" >> $LIMITERLOG && echo "$lock" >> $LIMITERLOG2
  262. echo -e "\033[1;31m ULTRAPASO LIMITE"
  263. continue
  264. fi
  265. echo -e "\033[1;33m OK! \033[1;31m${conexao[$user]} CONEXIONES"
  266. BLOQUEADO="$(wc -l /etc/VPS-MX/VPS-MX-userlock | awk '{print $1}')"
  267. BLOQUEADO2="$(echo ${BLOQUEADO}|bc)0"
  268. BLOQUEADO3="/10"
  269. EXPIRADO="$(grep -c EXPIRADO /etc/VPS-MX/controlador/Limiter.log)"
  270. EXPIRADO2="$(echo ${EXPIRADO}|bc)0"
  271. EXPIRADO3="/10"
  272. done <<< "$(mostrar_usuarios)"
  273. echo "${ONLINES}0"|bc > ${SCPdir}/USRonlines
  274. #echo "${EXPIRED}0"|bc > ${SCPdir}/USRexpired
  275. echo "${EXPIRADO2}${EXPIRADO3}"|bc > ${SCPdir}/USRexpired
  276. echo "${BLOQUEADO2}${BLOQUEADO3}"|bc > ${SCPdir}/USRbloqueados
  277. limseg="$(less /etc/VPS-MX/controlador/tiemlim.log)"
  278. sleep $limseg # TEMPO DE ESPERA DO LOOP
  279. clear
  280. done
  281. }
  282. veris
  283. exit