limitador.sh 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/bin/bash
  2. droppids(){
  3. port_dropbear=`ps aux|grep 'dropbear'|awk NR==1|awk '{print $17;}'`
  4. log=/var/log/auth.log
  5. loginsukses='Password auth succeeded'
  6. pids=`ps ax|grep 'dropbear'|grep " $port_dropbear"|awk -F " " '{print $1}'`
  7. for pid in $pids; do
  8. pidlogs=`grep $pid $log |grep "$loginsukses" |awk -F" " '{print $3}'`
  9. i=0
  10. for pidend in $pidlogs; do
  11. let i=i+1
  12. done
  13. if [ $pidend ];then
  14. login=`grep $pid $log |grep "$pidend" |grep "$loginsukses"`
  15. PID=$pid
  16. user=`echo $login |awk -F" " '{print $10}' | sed -r "s/'/ /g"`
  17. waktu=`echo $login |awk -F" " '{print $2"-"$1,$3}'`
  18. while [ ${#waktu} -lt 13 ]; do
  19. waktu=$waktu" "
  20. done
  21. while [ ${#user} -lt 16 ]; do
  22. user=$user" "
  23. done
  24. while [ ${#PID} -lt 8 ]; do
  25. PID=$PID" "
  26. done
  27. echo "$user $PID $waktu"
  28. fi
  29. done
  30. }
  31. sshmonitor(){
  32. h=1
  33. unlimit=$(cat /etc/ADMRufu/user/unlimit)
  34. for i in `echo "$user_type"`; do
  35. user="$i"
  36. s2ssh="$(cat /etc/passwd|grep -w "$i"|awk -F ':' '{print $5}'|cut -d ',' -f1)"
  37. if [[ "$(cat /etc/passwd| grep -w $user| wc -l)" = "1" ]]; then
  38. sqd="$(ps -u $user | grep sshd | wc -l)"
  39. else
  40. sqd=00
  41. fi
  42. [[ "$sqd" = "" ]] && sqd=0
  43. if [[ -e /etc/openvpn/openvpn-status.log ]]; then
  44. ovp="$(cat /etc/openvpn/openvpn-status.log | grep -E ,"$user", | wc -l)"
  45. else
  46. ovp=0
  47. fi
  48. if netstat -nltp|grep 'dropbear'> /dev/null;then
  49. drop="$(droppids | grep -w "$user" | wc -l)"
  50. else
  51. drop=0
  52. fi
  53. cnx=$(($sqd + $drop))
  54. conex=$(($cnx + $ovp))
  55. if [[ "$conex" -gt "$s2ssh" ]]; then
  56. pkill -u $user
  57. droplim=`droppids|grep -w "$user"|awk '{print $2}'`
  58. kill -9 $droplim &>/dev/null
  59. usermod -L $user
  60. echo "$user $(printf '%(%H:%M:%S)T') $conex/$s2ssh" >> /etc/ADMRufu/user/limit.log
  61. [[ $unlimit -le 0 ]] && continue || at now +${unlimit} minutes <<< "usermod -U $user" &>/dev/null
  62. fi
  63. done
  64. touch /etc/ADMRufu/user/limit
  65. timer=$(cat /etc/ADMRufu/user/limit)
  66. [[ -z ${timer} ]] && timer="3"
  67. at now +${timer} minutes <<< "/etc/ADMRufu/install/limitador.sh" &>/dev/null
  68. [[ -z $(cat "/var/spool/cron/crontabs/root"|grep "limitador.sh") ]] && echo "@reboot root /etc/ADMRufu/install/limitador.sh" >> /var/spool/cron/crontabs/root
  69. }
  70. expired(){
  71. for i in `echo "$user_type"`; do
  72. user="$i"
  73. userDate=$(chage -l "$user"|sed -n '4p'|awk -F ': ' '{print $2}')
  74. if [[ $(date '+%s') -gt $(date '+%s' -d "$userDate") ]]; then
  75. if [[ $(passwd --status $user|cut -d ' ' -f2) = "P" ]]; then
  76. usermod -L $user
  77. echo "$user $(printf '%(%H:%M:%S)T') expirado" >> /etc/ADMRufu/user/limit.log
  78. fi
  79. fi
  80. done
  81. }
  82. all_user=$(cat /etc/passwd|grep 'home'|grep 'false'|grep -v 'syslog')
  83. case $1 in
  84. -s|--ssh)user_type=$(echo "$all_user"|grep -v 'token'|grep -v 'hwid'|awk -F ':' '{print $1}') && expired;;
  85. -h|--hwid)user_type=$(echo "$all_user"|grep -w 'hwid'|awk -F ':' '{print $1}') && expired;;
  86. -t|--token)user_type=$(echo "$all_user"|grep -w 'token'|awk -F ':' '{print $1}') && expired;;
  87. *)user_type=$(echo "$all_user"|grep -v 'token'|grep -v 'hwid'|awk -F ':' '{print $1}') && sshmonitor;;
  88. esac
  89. # @daily root /etc/ADMRufu/install/limitador.sh >> /var/spool/cron/crontabs/root