#!/bin/bash #25/01/2021 by @Kalix1 clear clear SCPdir="/etc/VPS-MX" SCPfrm="${SCPdir}/herramientas" && [[ ! -d ${SCPfrm} ]] && exit SCPinst="${SCPdir}/protocolos"&& [[ ! -d ${SCPinst} ]] && exit declare -A cor=( [0]="\033[1;37m" [1]="\033[1;34m" [2]="\033[1;31m" [3]="\033[1;33m" [4]="\033[1;32m" ) err_fun () { case $1 in 1)msg -verm "$(fun_trans "Usuario Nulo")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 2)msg -verm "$(fun_trans "Nombre muy corto (MIN: 2 CARACTERES)")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 3)msg -verm "$(fun_trans "Nombre muy grande (MAX: 5 CARACTERES)")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 4)msg -verm "$(fun_trans "Contraseña Nula")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 5)msg -verm "$(fun_trans "Contraseña muy corta")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 6)msg -verm "$(fun_trans "Contraseña muy grande")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 7)msg -verm "$(fun_trans "Duracion Nula")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 8)msg -verm "$(fun_trans "Duracion invalida utilize numeros")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 9)msg -verm "$(fun_trans "Duracion maxima y de un año")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 11)msg -verm "$(fun_trans "Limite Nulo")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 12)msg -verm "$(fun_trans "Limite invalido utilize numeros")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 13)msg -verm "$(fun_trans "Limite maximo de 999")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 14)msg -verm "$(fun_trans "Usuario Ya Existe")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 15)msg -verm "$(fun_trans "(Solo numeros) GB = Min: 1gb Max: 1000gb")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 16)msg -verm "$(fun_trans "(Solo numeros)")"; sleep 2s; tput cuu1; tput dl1; tput cuu1; tput dl1;; 17)msg -verm "$(fun_trans "(Sin Informacion - Para Cancelar Digite CRTL + C)")"; sleep 4s; tput cuu1; tput dl1; tput cuu1; tput dl1;; esac } intallv2ray () { apt install python3-pip -y source <(curl -sL https://multi.netlify.app/v2ray.sh) msg -ama "$(fun_trans "Intalado con Exito")!" USRdatabase="/etc/VPS-MX/RegV2ray" [[ ! -e ${USRdatabase} ]] && touch ${USRdatabase} sort ${USRdatabase} | uniq > ${USRdatabase}tmp mv -f ${USRdatabase}tmp ${USRdatabase} msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } protocolv2ray () { msg -ama "$(fun_trans "Escojer opcion 3 y poner el dominio de nuestra IP")!" msg -bar v2ray stream msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } tls () { msg -ama "$(fun_trans "Activar o Desactivar TLS")!" msg -bar v2ray tls msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } portv () { msg -ama "$(fun_trans "Cambiar Puerto v2ray")!" msg -bar v2ray port msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } stats () { msg -ama "$(fun_trans "Estadisticas de Consumo")!" msg -bar v2ray stats msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } unistallv2 () { source <(curl -sL https://multi.netlify.app/v2ray.sh) --remove > /dev/null 2>&1 rm -rf /etc/VPS-MX/RegV2ray > /dev/null 2>&1 echo -e "\033[1;92m V2RAY REMOVIDO OK " msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } infocuenta () { v2ray info msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } addusr () { clear clear msg -bar msg -tit msg -ama " AGREGAR USUARIO | UUID V2RAY" msg -bar ##DAIS valid=$(date '+%C%y-%m-%d' -d " +31 days") ##CORREO MAILITO=$(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 10) ##ADDUSERV2RAY UUID=`uuidgen` sed -i '13i\ \{' /etc/v2ray/config.json sed -i '14i\ \"alterId": 0,' /etc/v2ray/config.json sed -i '15i\ \"id": "'$UUID'",' /etc/v2ray/config.json sed -i '16i\ \"email": "'$MAILITO'@gmail.com"' /etc/v2ray/config.json sed -i '17i\ \},' /etc/v2ray/config.json echo "" while true; do echo -ne "\e[91m >> Digita un Nombre: \033[1;92m" read -p ": " nick nick="$(echo $nick|sed -e 's/[^a-z0-9 -]//ig')" if [[ -z $nick ]]; then err_fun 17 && continue elif [[ "${#nick}" -lt "2" ]]; then err_fun 2 && continue elif [[ "${#nick}" -gt "5" ]]; then err_fun 3 && continue fi break done echo -e "\e[91m >> Agregado UUID: \e[92m$UUID " while true; do echo -ne "\e[91m >> Duracion de UUID (Dias):\033[1;92m " && read diasuser if [[ -z "$diasuser" ]]; then err_fun 17 && continue elif [[ "$diasuser" != +([0-9]) ]]; then err_fun 8 && continue elif [[ "$diasuser" -gt "360" ]]; then err_fun 9 && continue fi break done #Lim [[ $(cat /etc/passwd |grep $1: |grep -vi [a-z]$1 |grep -v [0-9]$1 > /dev/null) ]] && return 1 valid=$(date '+%C%y-%m-%d' -d " +$diasuser days") && datexp=$(date "+%F" -d " + $diasuser days") echo -e "\e[91m >> Expira el : \e[92m$datexp " ##Registro echo " $UUID | $nick | $valid " >> /etc/VPS-MX/RegV2ray Fecha=`date +%d-%m-%y-%R` cp /etc/VPS-MX/RegV2ray /etc/VPS-MX/v2ray/RegV2ray-"$Fecha" v2ray restart > /dev/null 2>&1 echo "" v2ray info > /etc/VPS-MX/v2ray/confuuid.log lineP=$(sed -n '/'${UUID}'/=' /etc/VPS-MX/v2ray/confuuid.log) numl1=4 let suma=$lineP+$numl1 sed -n ${suma}p /etc/VPS-MX/v2ray/confuuid.log echo "" msg -bar echo -e "\e[92m UUID AGREGEGADO CON EXITO " msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } delusr () { clear clear invaliduuid () { msg -bar echo -e "\e[91m UUID INVALIDO \n$(msg -bar)" msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } msg -bar msg -tit msg -ama " ELIMINAR USUARIO | UUID V2RAY" msg -bar echo -e "\e[97m USUARIOS REGISTRADOS" echo -e "\e[33m$(cat /etc/VPS-MX/RegV2ray|cut -d '|' -f2,1)" msg -bar echo -ne "\e[91m >> Digita el UUID a elininar:\n \033[1;92m " && read uuidel [[ $(sed -n '/'${uuidel}'/=' /etc/v2ray/config.json|head -1) ]] || invaliduuid lineP=$(sed -n '/'${uuidel}'/=' /etc/v2ray/config.json) linePre=$(sed -n '/'${uuidel}'/=' /etc/VPS-MX/RegV2ray) sed -i "${linePre}d" /etc/VPS-MX/RegV2ray numl1=2 let resta=$lineP-$numl1 sed -i "${resta}d" /etc/v2ray/config.json sed -i "${resta}d" /etc/v2ray/config.json sed -i "${resta}d" /etc/v2ray/config.json sed -i "${resta}d" /etc/v2ray/config.json sed -i "${resta}d" /etc/v2ray/config.json v2ray restart > /dev/null 2>&1 msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } mosusr_kk() { clear clear msg -bar msg -tit msg -ama " USUARIOS REGISTRADOS | UUID V2RAY" msg -bar # usersss=$(cat /etc/VPS-MX/RegV2ray|cut -d '|' -f1) # cat /etc/VPS-MX/RegV2ray|cut -d'|' -f3 VPSsec=$(date +%s) local HOST="/etc/VPS-MX/RegV2ray" local HOST2="/etc/VPS-MX/RegV2ray" local RETURN="$(cat $HOST|cut -d'|' -f2)" local IDEUUID="$(cat $HOST|cut -d'|' -f1)" if [[ -z $RETURN ]]; then echo -e "----- NINGUN USER REGISTRADO -----" msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh else i=1 echo -e "\e[97m UUID | USER | EXPIRACION \e[93m" msg -bar while read hostreturn ; do DateExp="$(cat /etc/VPS-MX/RegV2ray|grep -w "$hostreturn"|cut -d'|' -f3)" if [[ ! -z $DateExp ]]; then DataSec=$(date +%s --date="$DateExp") [[ "$VPSsec" -gt "$DataSec" ]] && EXPTIME="\e[91m[EXPIRADO]\e[97m" || EXPTIME="\e[92m[$(($(($DataSec - $VPSsec)) / 86400))]\e[97m Dias" else EXPTIME="\e[91m[ S/R ]" fi usris="$(cat /etc/VPS-MX/RegV2ray|grep -w "$hostreturn"|cut -d'|' -f2)" local contador_secuencial+="\e[93m$hostreturn \e[97m|\e[93m$usris\e[97m|\e[93m $EXPTIME \n" if [[ $i -gt 30 ]]; then echo -e "$contador_secuencial" unset contador_secuencial unset i fi let i++ done <<< "$IDEUUID" [[ ! -z $contador_secuencial ]] && { linesss=$(cat /etc/VPS-MX/RegV2ray | wc -l) echo -e "$contador_secuencial \n Numero de Registrados: $linesss" } fi msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } lim_port () { clear clear msg -bar msg -tit msg -ama " LIMITAR MB X PORT | UUID V2RAY" msg -bar ###VER estarts () { VPSsec=$(date +%s) local HOST="/etc/VPS-MX/v2ray/lisportt.log" local HOST2="/etc/VPS-MX/v2ray/lisportt.log" local RETURN="$(cat $HOST|cut -d'|' -f2)" local IDEUUID="$(cat $HOST|cut -d'|' -f1)" if [[ -z $RETURN ]]; then echo -e "----- NINGUN PUERTO REGISTRADO -----" msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh else i=1 while read hostreturn ; do iptables -n -v -L > /etc/VPS-MX/v2ray/data1.log statsss=$(cat /etc/VPS-MX/v2ray/data1.log|grep -w "tcp spt:$hostreturn quota:"|cut -d' ' -f3,4,5) gblim=$(cat /etc/VPS-MX/v2ray/lisportt.log|grep -w "$hostreturn"|cut -d'|' -f2) local contador_secuencial+=" \e[97mPUERTO: \e[93m$hostreturn \e[97m|\e[93m$statsss \e[97m|\e[93m $gblim GB \n" if [[ $i -gt 30 ]]; then echo -e "$contador_secuencial" unset contador_secuencial unset i fi let i++ done <<< "$IDEUUID" [[ ! -z $contador_secuencial ]] && { linesss=$(cat /etc/VPS-MX/v2ray/lisportt.log | wc -l) echo -e "$contador_secuencial \n Puertos Limitados: $linesss" } fi msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } ###LIM liport () { while true; do echo -ne "\e[91m >> Digite Port a Limitar:\033[1;92m " && read portbg if [[ -z "$portbg" ]]; then err_fun 17 && continue elif [[ "$portbg" != +([0-9]) ]]; then err_fun 16 && continue elif [[ "$portbg" -gt "1000" ]]; then err_fun 16 && continue fi break done while true; do echo -ne "\e[91m >> Digite Cantidad de GB:\033[1;92m " && read capgb if [[ -z "$capgb" ]]; then err_fun 17 && continue elif [[ "$capgb" != +([0-9]) ]]; then err_fun 15 && continue elif [[ "$capgb" -gt "1000" ]]; then err_fun 15 && continue fi break done uml1=1073741824 gbuser="$capgb" let multiplicacion=$uml1*$gbuser sudo iptables -I OUTPUT -p tcp --sport $portbg -j DROP sudo iptables -I OUTPUT -p tcp --sport $portbg -m quota --quota $multiplicacion -j ACCEPT iptables-save > /etc/iptables/rules.v4 echo "" echo -e " Port Seleccionado: $portbg | Cantidad de GB: $gbuser" echo "" echo " $portbg | $gbuser | $multiplicacion " >> /etc/VPS-MX/v2ray/lisportt.log msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } ###RES resdata () { VPSsec=$(date +%s) local HOST="/etc/VPS-MX/v2ray/lisportt.log" local HOST2="/etc/VPS-MX/v2ray/lisportt.log" local RETURN="$(cat $HOST|cut -d'|' -f2)" local IDEUUID="$(cat $HOST|cut -d'|' -f1)" if [[ -z $RETURN ]]; then echo -e "----- NINGUN PUERTO REGISTRADO -----" return 0 else i=1 while read hostreturn ; do iptables -n -v -L > /etc/VPS-MX/v2ray/data1.log statsss=$(cat /etc/VPS-MX/v2ray/data1.log|grep -w "tcp spt:$hostreturn quota:"|cut -d' ' -f3,4,5) gblim=$(cat /etc/VPS-MX/v2ray/lisportt.log|grep -w "$hostreturn"|cut -d'|' -f2) local contador_secuencial+=" \e[97mPUERTO: \e[93m$hostreturn \e[97m|\e[93m$statsss \e[97m|\e[93m $gblim GB \n" if [[ $i -gt 30 ]]; then echo -e "$contador_secuencial" unset contador_secuencial unset i fi let i++ done <<< "$IDEUUID" [[ ! -z $contador_secuencial ]] && { linesss=$(cat /etc/VPS-MX/v2ray/lisportt.log | wc -l) echo -e "$contador_secuencial \n Puertos Limitados: $linesss" } fi msg -bar while true; do echo -ne "\e[91m >> Digite Puerto a Limpiar:\033[1;92m " && read portbg if [[ -z "$portbg" ]]; then err_fun 17 && continue elif [[ "$portbg" != +([0-9]) ]]; then err_fun 16 && continue elif [[ "$portbg" -gt "1000" ]]; then err_fun 16 && continue fi break done invaliduuid () { msg -bar echo -e "\e[91m PUERTO INVALIDO \n$(msg -bar)" msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } [[ $(sed -n '/'${portbg}'/=' /etc/VPS-MX/v2ray/lisportt.log|head -1) ]] || invaliduuid gblim=$(cat /etc/VPS-MX/v2ray/lisportt.log|grep -w "$portbg"|cut -d'|' -f3) sudo iptables -D OUTPUT -p tcp --sport $portbg -j DROP sudo iptables -D OUTPUT -p tcp --sport $portbg -m quota --quota $gblim -j ACCEPT iptables-save > /etc/iptables/rules.v4 lineP=$(sed -n '/'${portbg}'/=' /etc/VPS-MX/v2ray/lisportt.log) sed -i "${linePre}d" /etc/VPS-MX/v2ray/lisportt.log msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } ## MENU echo -ne "\033[1;32m [1] > " && msg -azu "$(fun_trans "LIMITAR DATA x PORT") " echo -ne "\033[1;32m [2] > " && msg -azu "$(fun_trans "RESETEAR DATA DE PORT") " echo -ne "\033[1;32m [3] > " && msg -azu "$(fun_trans "VER DATOS CONSUMIDOS") " echo -ne "$(msg -bar)\n\033[1;32m [0] > " && msg -bra "\e[97m\033[1;41m VOLVER \033[1;37m" msg -bar selection=$(selection_fun 3) case ${selection} in 1)liport ;; 2)resdata;; 3)estarts;; 0) ${SCPinst}/v2ray.sh ;; esac } limpiador_activador () { unset PIDGEN PIDGEN=$(ps aux|grep -v grep|grep "limv2ray") if [[ ! $PIDGEN ]]; then screen -dmS limv2ray watch -n 21600 limv2ray else #killall screen screen -S limv2ray -p 0 -X quit fi unset PID_GEN PID_GEN=$(ps x|grep -v grep|grep "limv2ray") [[ ! $PID_GEN ]] && PID_GEN="\e[91m [ DESACTIVADO ] " || PID_GEN="\e[92m [ ACTIVADO ] " statgen="$(echo $PID_GEN)" clear clear msg -bar msg -tit msg -ama " ELIMINAR EXPIRADOS | UUID V2RAY" msg -bar echo "" echo -e " $statgen " echo "" msg -bar msg -ne "Enter Para Continuar" && read enter ${SCPinst}/v2ray.sh } selection_fun () { local selection="null" local range for((i=0; i<=$1; i++)); do range[$i]="$i "; done while [[ ! $(echo ${range[*]}|grep -w "$selection") ]]; do echo -ne "\033[1;37m$(fun_trans " ► Selecione una Opcion"): " >&2 read selection tput cuu1 >&2 && tput dl1 >&2 done echo $selection } PID_GEN=$(ps x|grep -v grep|grep "limv2ray") [[ ! $PID_GEN ]] && PID_GEN="\e[91m [ OFF ] " || PID_GEN="\e[92m [ ON ] " statgen="$(echo $PID_GEN)" SPR & msg -bar3 msg -bar msg -tit echo -e " \e[91m\e[43mINSTALADOR DE V2RAY\e[0m" msg -bar ## INSTALADOR echo -e "$(msg -verd "[1]")$(msg -verm2 " ➛ ")$(msg -azu "INSTALAR V2RAY ") " echo -e "$(msg -verd "[2]")$(msg -verm2 " ➛ ")$(msg -azu "CAMBIAR PROTOCOLO ") " echo -e "$(msg -verd "[3]")$(msg -verm2 " ➛ ")$(msg -azu "ACTIVAR TLS ") " echo -e "$(msg -verd "[4]")$(msg -verm2 " ➛ ")$(msg -azu "CAMBIAR PUERTO V2RAY ")" msg -bar ## CONTROLER echo -e "$(msg -verd "[5]")$(msg -verm2 " ➛ ")$(msg -azu "AGREGAR USUARIO UUID ")" echo -e "$(msg -verd "[6]")$(msg -verm2 " ➛ ")$(msg -azu "ELIMINAR USUARIO UUID ")" echo -e "$(msg -verd "[7]")$(msg -verm2 " ➛ ")$(msg -azu "MOSTAR USUARIOS REGISTRADOS ")" echo -e "$(msg -verd "[8]")$(msg -verm2 " ➛ ")$(msg -azu "INFORMACION DE CUENTAS ")" echo -e "$(msg -verd "[9]")$(msg -verm2 " ➛ ")$(msg -azu "ESTADISTICAS DE CONSUMO ")" echo -e "$(msg -verd "[10]")$(msg -verm2 "➛ ")$(msg -azu "LIMITADOR POR CONSUMO ")\e[91m ( BETA x PORT )" echo -e "$(msg -verd "[11]")$(msg -verm2 "➛ ")$(msg -azu "LIMPIADOR DE EXPIRADOS ------- $statgen ")" msg -bar ## DESISNTALAR echo -e "$(msg -verd "[12]")$(msg -verm2 "➛ ")$(msg -azu "\033[1;31mDESINSTALAR V2RAY ")" echo -e "$(msg -verd "[0]") $(msg -verm2 "➛ ")$(msg -azu "\e[97m\033[1;41m VOLVER \033[1;37m ")" msg -bar pid_inst () { [[ $1 = "" ]] && echo -e "\033[1;31m[OFF]" && return 0 unset portas portas_var=$(lsof -V -i -P -n | grep -v "ESTABLISHED" |grep -v "COMMAND") i=0 while read port; do var1=$(echo $port | awk '{print $1}') && var2=$(echo $port | awk '{print $9}' | awk -F ":" '{print $2}') [[ "$(echo -e ${portas[@]}|grep "$var1 $var2")" ]] || { portas[$i]="$var1 $var2\n" let i++ } done <<< "$portas_var" [[ $(echo "${portas[@]}"|grep "$1") ]] && echo -e "\033[1;32m[ Servicio ON ]" || echo -e "\033[1;31m[ Servicio OFF ]" } echo -e " \e[97mEstado actual: $(pid_inst v2ray)" msg -bar # while [[ ${arquivoonlineadm} != @(0|[1-99]) ]]; do # read -p "Seleccione una Opcion [0-12]: " arquivoonlineadm # tput cuu1 && tput dl1 # done selection=$(selection_fun 18) case ${selection} in 1)intallv2ray;; 2)protocolv2ray;; 3)tls;; 4)portv;; 5)addusr;; 6)delusr;; 7)mosusr_kk;; 8)infocuenta;; 9)stats;; 10)lim_port;; 11)limpiador_activador;; 12)unistallv2;; 0)exit;; esac