limiter.sh 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. #!/bin/bash
  2. u_dir="/etc/adm-lite/userDIR"
  3. tmp_verifica="/etc/adm-lite/tmp_tmp"
  4. _arquivo1="/etc/adm-lite/tmp_arq1"
  5. _arquivo2="/etc/adm-lite/tmp_arq2"
  6. _arquivo3="/etc/adm-lite/tmp_arq3"
  7. _arquivo4="/etc/adm-lite/tmp_arq4"
  8. [[ ! -d "$u_dir" ]] && mkdir $u_dir
  9. [[ -e "$_arquivo1" ]] && rm $_arquivo1
  10. [[ -e "$_arquivo2" ]] && rm $_arquivo2
  11. [[ -e "$_arquivo3" ]] && rm $_arquivo3
  12. [[ -e "$_arquivo4" ]] && rm $_arquivo4
  13. function_dropb () {
  14. port_dropbear=`ps aux | grep dropbear | awk NR==1 | awk '{print $17;}'`
  15. [[ $port_dropbear = "" ]] && return
  16. log=/var/log/auth.log
  17. loginsukses='Password auth succeeded'
  18. echo ' '
  19. pids=`ps ax |grep dropbear |grep " $port_dropbear" |awk -F" " '{print $1}'`
  20. for pid in $pids
  21. do
  22. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  23. i=0
  24. for pidend in $pidlogs
  25. do
  26. let i=i+1
  27. done
  28. if [ $pidend ]; then
  29. login=`grep $pid $log |grep "$pidend" |grep "$loginsukses"`
  30. PID=$pid
  31. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'/ /g"`
  32. waktu=`echo $login |awk -F" " '{print $2"-"$1,$3}'`
  33. while [ ${#waktu} -lt 13 ]; do
  34. waktu=$waktu" "
  35. done
  36. while [ ${#user} -lt 16 ]; do
  37. user=$user" "
  38. done
  39. while [ ${#PID} -lt 8 ]; do
  40. PID=$PID" "
  41. done
  42. echo "$user $PID $waktu"
  43. fi
  44. done
  45. echo ""
  46. return
  47. }
  48. function_onlines () {
  49. (
  50. unset _on
  51. for user in `awk -F : '$3 > 900 { print $1 }' /etc/passwd |grep -v "nobody" |grep -vi polkitd |grep -vi system-`; do
  52. usurnum=$(ps -u $user | grep sshd |wc -l)
  53. [[ "$usurnum" -gt 0 ]] && _on+="$usurnum+"
  54. usurnum=$(function_dropb | grep "$user" | wc -l)
  55. [[ "$usurnum" -gt 0 ]] && _on+="$usurnum+"
  56. done
  57. #Terceira Etapa#
  58. for userovpn in `cat /etc/passwd | grep ovpn | awk -F: '{print $1}'`; do
  59. us=$(cat /etc/openvpn/openvpn-status.log | grep $userovpn | wc -l)
  60. [[ "$us" != "0" ]] && _on+="1+"
  61. done
  62. #Usuarios Vencidos
  63. datenow=$(date +%s)
  64. for user in $(awk -F: '{print $1}' /etc/passwd); do
  65. expdate=$(chage -l $user|awk -F: '/Account expires/{print $2}')
  66. echo $expdate|grep -q never && continue
  67. datanormal=$(date -d"$expdate" '+%d/%m/%Y')
  68. expsec=$(date +%s --date="$expdate")
  69. diff=$(echo $datenow - $expsec|bc -l)
  70. echo $diff|grep -q ^\- && continue
  71. vencidos[1]+="1+"
  72. done
  73. #Fazendo A Soma#
  74. _on+="0"
  75. _on=$(echo $_on|bc)
  76. vencidos[1]+="0"
  77. vencidos[1]=$(echo ${vencidos[1]}|bc)
  78. echo "$_on" > ./onlines
  79. echo "${vencidos[1]}" > ./vencidos
  80. ) &
  81. }
  82. fun_ovpn_onl () {
  83. for userovpn in `cat /etc/passwd | grep ovpn | awk -F: '{print $1}'`; do
  84. us=$(cat /etc/openvpn/openvpn-status.log | grep $userovpn | wc -l)
  85. [[ "$us" != "0" ]] && echo "$userovpn"
  86. done
  87. }
  88. function_usertime () {
  89. (
  90. declare -A data
  91. declare -A time
  92. declare -A time2
  93. declare -A timefinal
  94. tempousers="./tempo_conexao"
  95. usr_pids_var="./userDIR"
  96. [[ ! -e $tempousers ]] && touch $tempousers
  97. _data_now=$(date +%s)
  98. for user in `awk -F : '$3 > 900 { print $1 }' /etc/passwd |grep -v "nobody" |grep -vi polkitd |grep -vi system-`; do
  99. unset ssh
  100. [[ -e $usr_pids_var/$user.pid ]] && source $usr_pids_var/$user.pid
  101. ssh+="$(ps -u $user | grep sshd |wc -l)+"
  102. ssh+="$(function_dropb | grep "$user" | wc -l)+"
  103. [[ -e /etc/openvpn/server.conf ]] && ssh+="$(fun_ovpn_onl | grep "$user" | wc -l)+"
  104. ssh+="0"
  105. user_pid=$(echo $ssh|bc)
  106. if [ "$user_pid" -gt "0" ]; then
  107. [[ "${data[$user]}" = "" ]] && data[$user]="$_data_now"
  108. if [ ! -e $usr_pids_var/$user.pid2 ]; then
  109. [[ -e $usr_pids_var/$user.pid ]] && cp $usr_pids_var/$user.pid $usr_pids_var/$user.pid2
  110. fi
  111. fi
  112. if [ "$user_pid" = "0" ]; then
  113. unset data[$user]
  114. [[ -e "$usr_pids_var/$user.pid" ]] && rm $usr_pids_var/$user.pid
  115. [[ -e $usr_pids_var/$user.pid2 ]] && rm $usr_pids_var/$user.pid2
  116. fi
  117. if [ "${data[$user]}" != "" ]; then
  118. time[$user]=$(($_data_now - ${data[$user]}))
  119. time2[$user]=$(cat $tempousers | grep "$user" | awk '{print $2}')
  120. [[ "${time2[$user]}" = "" ]] && time2[$user]="0"
  121. timefinal[$user]=$((${time2[$user]} + ${time[$user]}))
  122. _arquivo=$(cat $tempousers |grep -v "$user")
  123. echo "$_arquivo" > $tempousers
  124. echo "$user ${timefinal[$user]}" >> $tempousers
  125. echo "data[$user]=$_data_now" > $usr_pids_var/$user.pid
  126. fi
  127. done
  128. ) &
  129. }
  130. function_killmultiloguin () {
  131. (
  132. for user in `awk -F : '$3 > 900 { print $1 }' /etc/passwd |grep -v "nobody" |grep -vi polkitd |grep -vi system-`; do
  133. unset pid_limite && unset sshd_on && unset drop_on
  134. sshd_on=$(ps -u $user|grep sshd|wc -l)
  135. drop_on=$(function_dropb|grep "$user"|wc -l)
  136. [[ -e $u_dir/$user ]] && pid_limite=$(cat $u_dir/$user | grep "limite:" | awk '{print $2}') || pid_limite="999"
  137. [[ $pid_limite != +([0-9]) ]] && pid_limite="999"
  138. #LIMITE DROPBEAR
  139. [[ "$drop_on" -gt "$pid_limite" ]] && {
  140. kill=$((${drop_on}-${pid_limite}))
  141. pids=$(function_dropb|grep "$user"|awk '{print $2}'|tail -n${kill})
  142. for pid in `echo $pids`; do
  143. kill $pid
  144. done
  145. }
  146. #LIMITE OPENSSH
  147. [[ "$sshd_on" -gt "$pid_limite" ]] && {
  148. kill=$((${sshd_on}-${pid_limite}))
  149. pids=$(ps x|grep [[:space:]]$user[[:space:]]|grep -v grep|grep -v pts|awk '{print $1}'|tail -n${kill})
  150. for pid in `echo $pids`; do
  151. kill $pid
  152. done
  153. }
  154. done
  155. sleep 3s
  156. ) &
  157. }
  158. fun_net () {
  159. (
  160. log_0="/tmp/tcpdum"
  161. log_1="/tmp/tcpdump"
  162. log_2="/tmp/tcpdumpLOG"
  163. usr_dir="/etc/adm-lite/userDIR/usr_cnx"
  164. [[ -e "$log_1" ]] && mv -f $log_1 $log_2
  165. [[ ! -e $usr_dir ]] && touch $usr_dir
  166. #ENCERRA TCP
  167. for pd in `ps x | grep tcpdump | grep -v grep | awk '{print $1}'`; do
  168. kill -9 $pd > /dev/null 2>&1
  169. done
  170. #INICIA TCP
  171. tcpdump -s 50 -n 1> /tmp/tcpdump 2> /dev/null &
  172. [[ ! -e /tmp/tcpdump ]] && touch /tmp/tcpdump
  173. #ANALIZA USER
  174. for user in `awk -F : '$3 > 900 { print $1 }' /etc/passwd | grep -v "nobody" |grep -vi polkitd |grep -vi system-`; do
  175. touch /tmp/$user
  176. ip_openssh $user > /dev/null 2>&1
  177. ip_drop $user > /dev/null 2>&1
  178. sed -i '/^$/d' /tmp/$user
  179. pacotes=$(paste -sd+ /tmp/$user | bc)
  180. rm /tmp/$user
  181. if [ "$pacotes" != "" ]; then
  182. if [ "$(cat $usr_dir | grep "$user")" != "" ]; then
  183. pacotesuser=$(cat $usr_dir | grep "$user" | awk '{print $2}')
  184. [[ $pacotesuser = "" ]] && pacotesuser=0
  185. [[ $pacotesuser != +([0-9]) ]] && pacotesuser=0
  186. ussrvar=$(cat $usr_dir | grep -v "$user")
  187. echo "$ussrvar" > $usr_dir
  188. pacotes=$(($pacotes+$pacotesuser))
  189. echo -e "$user $pacotes" >> $usr_dir
  190. else
  191. echo -e "$user $pacotes" >> $usr_dir
  192. fi
  193. fi
  194. unset pacotes
  195. done
  196. ) &
  197. }
  198. ip_openssh () {
  199. user="$1"
  200. 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
  201. packet=$(cat $log_2 | grep "$ip" | wc -l)
  202. echo "$packet" >> /tmp/$user
  203. unset packet
  204. done
  205. }
  206. ip_drop () {
  207. user="$1"
  208. loguser='Password auth succeeded'
  209. touch /tmp/drop
  210. for ip in `cat /var/log/auth.log | tail -100 | grep "$user" | grep "$loguser" | awk -F "from" '{print $2}' | awk -F ":" '{print $1}'`; do
  211. if [ "$(cat /tmp/drop | grep "$ip")" = "" ]; then
  212. packet=$(cat $log_2 | grep "$ip" | wc -l)
  213. echo "$packet" >> /tmp/$user
  214. echo "$ip" >> /tmp/drop
  215. fi
  216. done
  217. rm /tmp/drop
  218. }
  219. while true; do
  220. function_killmultiloguin > /dev/null 2>&1
  221. sleep 7s
  222. done