2025-06-06 08:52:14 -06:00

14129 lines
525 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
#29-03-23-648
echo "$$" >/etc/SCRIPT-LATAM/temp/menuid
clear && clear
echo -e "\a\a\a"
check-update
if [ $(whoami) != 'root' ]; then #-- VERIFICAR ROOT
echo -e "\033[1;31m -- NECESITAS SER USER ROOT PARA EJECUTAR EL SCRIPT --\n\n\033[97m DIGITE: \033[1;32m sudo su; menu\n"
sleep 5s
exit && exit
fi
rebootnb "totallssh" & ##-->> CONTADOR DE SSH
##-->> COLORES
red=$(tput setaf 1)
gren=$(tput setaf 2)
yellow=$(tput setaf 3)
SCPdir="/etc/SCRIPT-LATAM" && [[ ! -d ${SCPdir} ]] && exit 1
SCTemp="/etc/SCRIPT-LATAM/temp" && [[ ! -d ${SCTemp} ]] && exit 1
SCPfrm="${SCPdir}/botmanager"
if [[ -e /etc/bash.bashrc-bakup ]]; then # -- CHECK AUTORUN
AutoRun="\033[1;93m[\033[1;32m ON \033[1;93m]"
elif [[ -e /etc/bash.bashrc ]]; then
AutoRun="\033[1;93m[\033[1;31m OFF \033[1;93m]"
fi
msg() { ##-->> COLORES, TITULO, BARRAS
##-->> ACTULIZADOR Y VERCION
[[ ! -e /etc/SCRIPT-LATAM/temp/version_instalacion ]] && printf '1\n' >/etc/SCRIPT-LATAM/temp/version_instalacion
v11=$(cat /etc/SCRIPT-LATAM/temp/version_actual)
v22=$(cat /etc/SCRIPT-LATAM/temp/version_instalacion)
if [[ $v11 = $v22 ]]; then
vesaoSCT="\e[1;31m[\033[1;37m Ver.\033[1;32m $v22 \033[1;31m]"
else
vesaoSCT="\e[1;31m[\e[31m ACTUALIZAR \e[25m\033[1;31m]"
fi
##-->> COLORES
local colors="/etc/SCRIPT-LATAM/colors"
if [[ ! -e $colors ]]; then
COLOR[0]='\033[1;37m' #GRIS='\033[1;37m'
COLOR[1]='\e[31m' #ROJO='\e[31m'
COLOR[2]='\e[32m' #VERDE='\e[32m'
COLOR[3]='\e[33m' #AMARILLO='\e[33m'
COLOR[4]='\e[34m' #AZUL='\e[34m'
COLOR[5]='\e[91m' #ROJO-NEON='\e[91m'
COLOR[6]='\033[1;97m' #BALNCO='\033[1;97m'
else
local COL=0
for number in $(cat $colors); do
case $number in
1) COLOR[$COL]='\033[1;37m' ;;
2) COLOR[$COL]='\e[31m' ;;
3) COLOR[$COL]='\e[32m' ;;
4) COLOR[$COL]='\e[33m' ;;
5) COLOR[$COL]='\e[34m' ;;
6) COLOR[$COL]='\e[35m' ;;
7) COLOR[$COL]='\033[1;36m' ;;
esac
let COL++
done
fi
NEGRITO='\e[1m'
SINCOLOR='\e[0m'
case $1 in
-ne) cor="${COLOR[1]}${NEGRITO}" && echo -ne "${cor}${2}${SINCOLOR}" ;;
-ama) cor="${COLOR[3]}${NEGRITO}" && echo -e "${cor}${2}${SINCOLOR}" ;;
-verm) cor="${COLOR[3]}${NEGRITO}[!] ${COLOR[1]}" && echo -e "${cor}${2}${SINCOLOR}" ;;
-verm2) cor="${COLOR[1]}${NEGRITO}" && echo -e "${cor}${2}${SINCOLOR}" ;;
-azu) cor="${COLOR[6]}${NEGRITO}" && echo -e "${cor}${2}${SINCOLOR}" ;;
-verd) cor="${COLOR[2]}${NEGRITO}" && echo -e "${cor}${2}${SINCOLOR}" ;;
-bra) cor="${COLOR[0]}${SINCOLOR}" && echo -e "${cor}${2}${SINCOLOR}" ;;
"-bar2" | "-bar") cor="${COLOR[1]}════════════════════════════════════════════════════" && echo -e "${SINCOLOR}${cor}${SINCOLOR}" ;;
# Centrar texto
-tit) echo -e " \e[48;5;214m\e[38;5;0m 💻 𝙎 𝘾 𝙍 𝙄 𝙋 𝙏 | 𝙇 𝘼 𝙏 𝘼 𝙈 💻 \e[0m $vesaoSCT" ;;
esac
}
#--- INFO DE SISTEMA
os_system() {
system=$(echo $(cat -n /etc/issue | grep 1 | cut -d' ' -f6,7,8 | sed 's/1//' | sed 's/ //'))
echo $system | awk '{print $1, $2}'
}
#--- FUNCION IP INSTALACION
meu_ip() {
if [[ -e /tmp/IP ]]; then
echo "$(cat /tmp/IP)"
else
MEU_IP=$(wget -qO- ipinfo.io/ip || wget -qO- ifconfig.me)
echo "$MEU_IP" >/tmp/IP
fi
}
#--- FUNCION IP ACTUAL
fun_ip() {
if [[ -e /etc/SCRIPT-LATAM/MEUIPvps ]]; then
IP="$(cat /etc/SCRIPT-LATAM/MEUIPvps)"
else
MEU_IP=$(wget -qO- ipinfo.io/ip || wget -qO- ifconfig.me)
echo "$MEU_IP" >/etc/SCRIPT-LATAM/MEUIPvps
fi
}
#--- MENU DE SELECCION
selection_fun() {
local selection
local options="$(seq 0 $1 | paste -sd "," -)"
read -p $'\033[1;97m └⊳ Seleccione una opción:\033[1;32m ' selection
if [[ $options =~ (^|[^\d])$selection($|[^\d]) ]]; then
echo $selection
else
echo "Selección no válida: $selection" >&2
exit 1
fi
}
export -f msg
export -f selection_fun
export -f meu_ip
export -f fun_ip
clear && clear
msg -bar && msg -tit
title=$(echo -e "\033[1;4;92m$(cat ${SCPdir}/message.txt)\033[0;37m")
printf "%*s\n" $((($(echo -e "$title" | wc -c) + 68) / 2)) "$title"
msg -bar
echo -e " \033[1;37mIP: \033[93m$(meu_ip) \033[1;37mS.O: \033[96m$(os_system)"
##-->> CONTADOR DE CUENTAS
if [[ $(find /etc/SCRIPT-LATAM/temp/ -name "sshtotal" -execdir test -f {} \; -print -quit) ]]; then
SSH4=$(</etc/SCRIPT-LATAM/temp/sshtotal)
else
SSH4="0"
fi
if [[ $(find /usr/local/ -name "shadowsocksr" -type d -execdir test -f {}/mujson_mgr.py \; -print -quit) ]]; then
user_info=$(cd /usr/local/shadowsocksr && python mujson_mgr.py -l)
user_total=$(echo "${user_info}" | wc -l)
else
user_total="0"
fi
if [[ $(find /etc/SCRIPT-LATAM/ -name "RegV2ray" -execdir test -f {} \; -print -quit) ]]; then
v2ray=$(wc -l </etc/SCRIPT-LATAM/RegV2ray)
else
v2ray="0"
fi
on="\033[93m[\033[1;32m ON \033[93m]" && off="\033[93m[ \033[1;31mOFF \033[93m]"
[[ $(ps x | grep badvpn | grep -v grep | awk '{print $1}') ]] && badvpn=$on || badvpn=$off
VERY="$(ps aux | grep "/etc/SCRIPT-LATAM/menu.sh verificar" | grep -v grep)"
VERY2="$(ps aux | grep "/etc/SCRIPT-LATAM/menu.sh desbloqueo" | grep -v grep)"
VERY3="$(ps aux | grep "${SCPdir}/menu.sh monitorservi" | grep -v grep)"
VERY4="$(ps aux | grep "${SCPdir}/menu.sh autolim" | grep -v grep)"
[[ -e "/etc/SCRIPT-LATAM/temp/T-Lim" ]] && limseg="$(less /etc/SCRIPT-LATAM/temp/T-Lim)"
[[ -z ${VERY} ]] && verificar="\033[93m[ \033[1;31mOFF \033[93m]" || verificar="\033[93m[\033[1;32m ON \033[93m]"
[[ -z ${VERY2} ]] && desbloqueo="\033[93m[ \033[1;31mOFF \033[93m]" || desbloqueo="\033[93m[\033[1;32m ON \033[93m]"
[[ -z ${VERY3} ]] && monitorservi="\033[93m[ \033[1;31mOFF \033[93m]" || monitorservi="\033[93m[\033[1;32m ON \033[93m]"
[[ -z ${VERY4} ]] && autolim="\033[93m[ \033[1;31mOFF \033[93m]" || autolim="\033[93m[\033[1;32m ON \033[93m]"
echo -e " \033[1;97mLIM.SSH:$verificar \033[1;97m DES.SSH:$desbloqueo\033[1;97m BADVPN:$badvpn"
echo -e "\033[1;97m SSH REG:\033[93m[\033[1;92m $SSH4 \033[93m]\033[1;97m SS-SRR REG:\033[93m[\033[1;92m $user_total \033[93m]\033[1;97m V2RAY REG:\033[93m[\033[1;92m $v2ray \033[93m]\033[1;97m"
#ONLINES
[[ -e /etc/SCRIPT-LATAM/temp/USRonlines ]] && {
msg -bar
onssh=$(cat /etc/SCRIPT-LATAM/temp/USRonlines)
echo -ne "\033[1;32m CONECTADOS:\033[1;36m[\e[97m $onssh \033[1;36m]"
}
#EXPIRADOS
[[ -e /etc/SCRIPT-LATAM/temp/USRexpired ]] && {
expi=$(cat /etc/SCRIPT-LATAM/temp/USRexpired)
echo -ne "\e[1;31m EXPIRADOS:\033[1;36m[\e[1;97m $expi \033[1;36m]"
}
#BLOQUEADOS
[[ -e /etc/SCRIPT-LATAM/temp/USRbloqueados ]] && {
bloc=$(cat /etc/SCRIPT-LATAM/temp/USRbloqueados)
echo -ne "\e[1;95m BLOQUEADOS:\033[1;36m[\e[1;97m $bloc \033[1;36m]\n"
echo -ne "\033[1;97m ACTULIZACION DE MONITOR CADA: \033[1;34m $limseg s\n"
}
#---FUNION CAMBIAR DE COLOR
canbio_color() {
clear
msg -bar2
msg -tit
msg -ama " CONTROLADOR DE COLORES DEL SCRIPT LATAM"
msg -bar2
msg -ama "Selecione 7 cores "
echo -e '\033[1;37m [1] ###\033[0m'
echo -e '\e[31m [2] ###\033[0m'
echo -e '\e[32m [3] ###\033[0m'
echo -e '\e[33m [4] ###\033[0m'
echo -e '\e[34m [5] ###\033[0m'
echo -e '\e[35m [6] ###\033[0m'
echo -e '\033[1;36m [7] ###\033[0m'
msg -bar2
for number in $(echo {1..7}); do
msg -ne "Digite un Color [$number]: " && read corselect
[[ $corselect != @([1-7]) ]] && corselect=1
cores+="$corselect "
corselect=0
done
echo "$cores" >/etc/SCRIPT-LATAM/colors
msg -bar2
}
##-->> FUNCION PUERTOS ACTIVOS
mine_port() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m INFORMACION DE PUERTOS ACTIVOS"
msg -bar2
local portasVAR=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
local NOREPEAT
local reQ
local Port
while read port; do
reQ=$(echo ${port} | awk '{print $1}')
Port=$(echo {$port} | awk '{print $9}' | awk -F ":" '{print $2}')
[[ $(echo -e $NOREPEAT | grep -w "$Port") ]] && continue
NOREPEAT+="$Port\n"
case ${reQ} in
squid | squid3)
[[ -z $SQD ]] && local SQD="\033[1;31m SQUID: \033[1;32m"
SQD+="$Port "
;;
apache | apache2)
[[ -z $APC ]] && local APC="\033[1;31m APACHE: \033[1;32m"
APC+="$Port "
;;
ssh | sshd)
[[ -z $SSH ]] && local SSH="\033[1;31m SSH: \033[1;32m"
SSH+="$Port "
;;
dropbear)
[[ -z $DPB ]] && local DPB="\033[1;31m DROPBEAR: \033[1;32m"
DPB+="$Port "
;;
ssserver | ss-server)
[[ -z $SSV ]] && local SSV="\033[1;31m SHADOWSOCKS: \033[1;32m"
SSV+="$Port "
;;
openvpn)
[[ -z $OVPN ]] && local OVPN="\033[1;31m OPENVPN-TCP: \033[1;32m"
OVPN+="$Port "
;;
stunnel4 | stunnel)
[[ -z $SSL ]] && local SSL="\033[1;31m SSL: \033[1;32m"
SSL+="$Port "
;;
sshl | sslh)
[[ -z $SSLH ]] && local SSLH="\033[1;31m SSLH: \033[1;32m"
SSLH+="$Port "
;;
python | python3)
[[ -z $PY3 ]] && local PY3="\033[1;31m PYTHON|WEBSOCKET|SSR: \033[1;32m"
PY3+="$Port "
;;
v2ray)
[[ -z $V2R ]] && local V2R="\033[1;31m V2RAY: \033[1;32m"
V2R+="$Port "
;;
badvpn-ud)
[[ -z $BAD ]] && local BAD="\033[1;31m BADVPN: \033[1;32m"
BAD+="$Port "
;;
psiphond)
[[ -z $PSI ]] && local PSI="\033[1;31m PSIPHOND: \033[1;32m"
PSI+="$Port "
;;
esac
done <<<"${portasVAR}"
#UDP
local portasVAR=$(lsof -V -i -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND")
local NOREPEAT
local reQ
local Port
while read port; do
reQ=$(echo ${port} | awk '{print $1}')
Port=$(echo ${port} | awk '{print $9}' | awk -F ":" '{print $2}')
[[ $(echo -e $NOREPEAT | grep -w "$Port") ]] && continue
NOREPEAT+="$Port\n"
case ${reQ} in
openvpn)
[[ -z $OVPN ]] && local OVPN="\033[0;36m OPENVPN-UDP: \033[1;32m"
OVPN+="$Port "
;;
udpServer)
[[ -z $UDPSER ]] && local UDPSER="\033[0;36m UDP-SERVER \033[1;32m"
UDPSER+="$Port "
;;
esac
done <<<"${portasVAR}"
[[ ! -z $SSH ]] && echo -e $SSH
[[ ! -z $SSL ]] && echo -e $SSL
[[ ! -z $SSLH ]] && echo -e $SSLH
[[ ! -z $DPB ]] && echo -e $DPB
[[ ! -z $SQD ]] && echo -e $SQD
[[ ! -z $PY3 ]] && echo -e $PY3
[[ ! -z $SSV ]] && echo -e $SSV
[[ ! -z $V2R ]] && echo -e $V2R
[[ ! -z $APC ]] && echo -e $APC
[[ ! -z $OVPN ]] && echo -e $OVPN
[[ ! -z $BAD ]] && echo -e $BAD
[[ ! -z $PSI ]] && echo -e $PSI
port=$(cat /etc/systemd/system/UDPserver.service 2>/dev/null | grep 'exclude' 2>/dev/null)
port2=$(echo $port | awk '{print $4}' | cut -d '=' -f2 2>/dev/null | sed 's/,/ /g' 2>/dev/null)
[[ ! -z $UDPSER ]] && echo -e "$UDPSER<--> $port2 "
msg -bar2
read -t 120 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
}
#--- FUNCION AUTO INICIO
fun_autorun() {
if [[ -e /etc/bash.bashrc-bakup ]]; then
mv -f /etc/bash.bashrc-bakup /etc/bash.bashrc
cat /etc/bash.bashrc | grep -v "/etc/SCRIPT-LATAM/menu.sh" >/tmp/bash
mv -f /tmp/bash /etc/bash.bashrc
echo -e "\e[1;31m -- REMOVIDO CON EXITO --"
msg -bar
elif [[ -e /etc/bash.bashrc ]]; then
cat /etc/bash.bashrc | grep -v /bin/menu >/etc/bash.bashrc.2
echo 'rebootnb login >/dev/null 2>&1' >>/etc/bash.bashrc.2
echo '/etc/SCRIPT-LATAM/menu.sh' >>/etc/bash.bashrc.2
cp /etc/bash.bashrc /etc/bash.bashrc-bakup
mv -f /etc/bash.bashrc.2 /etc/bash.bashrc
echo -e "\e[1;32m -- AUTO INICIO AGREGADO --"
msg -bar
fi
}
#--- FUNCION BARRAS DE INSTALACION
fun_bar() {
comando="$1"
_=$(
$comando >/dev/null 2>&1
) &
>/dev/null
pid=$!
while [[ -d /proc/$pid ]]; do
echo -ne " \033[1;33m["
for ((i = 0; i < 20; i++)); do
echo -ne "\033[1;31m##"
sleep 0.2
done
echo -ne "\033[1;33m]"
sleep 1s
echo
tput cuu1
tput dl1
done
echo -ne " \033[1;33m[\033[1;31m########################################\033[1;33m] - \033[1;32m100%\033[0m\n"
sleep 1s
}
#--- FUNCION RX-TX
fun_eth() {
eth=$(ifconfig | grep -v inet6 | grep -v lo | grep -v 127.0.0.1 | grep "encap:Ethernet" | awk '{print $1}')
[[ $eth != "" ]] && {
msg -bar
msg -ama " Aplicar el sistema para mejorar los paquetes SSH?"
msg -ama " Opciones para usuarios avanzados"
msg -bar
read -p " [S/N]: " -e -i n sshsn
[[ "$sshsn" = @(s|S|y|Y) ]] && {
echo -e "${cor[1]} Correccion de problemas de paquetes en SSH ..."
echo -e " ¿Cual es la tasa RX?"
echo -ne "[ 1 - 999999999 ]: "
read rx
[[ "$rx" = "" ]] && rx="999999999"
echo -e " ¿Cual es la tasa TX?"
echo -ne "[ 1 - 999999999 ]: "
read tx
[[ "$tx" = "" ]] && tx="999999999"
apt-get install ethtool -y >/dev/null 2>&1
ethtool -G $eth rx $rx tx $tx >/dev/null 2>&1
}
msg -bar
}
}
#--- FUNCION REMOVER SCRIPT
remove_script() {
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " ¿ DESEA DESINSTALAR SCRIPT ?"
msg -bar
echo -e "\e[1;97m Esto borrara todos los archivos LATAM"
msg -bar
while [[ ${yesno} != @(s|S|y|Y|n|N) ]]; do
read -p " [ S / N ]: " yesno
tput cuu1 && tput dl1
done
if [[ ${yesno} = @(s|S|y|Y) ]]; then
rm -rf ${SCPdir} &>/dev/null
[[ -e /bin/MENU ]] && rm /bin/MENU
[[ -e /usr/bin/MENU ]] && rm /usr/bin/MENU
[[ -e /bin/menu ]] && rm /bin/menu
[[ -e /usr/bin/menu ]] && rm /usr/bin/menu
sudo apt-get --purge remove squid -y >/dev/null 2>&1
sudo apt-get --purge remove stunnel4 -y >/dev/null 2>&1
sudo apt-get --purge remove dropbear -y >/dev/null 2>&1
rm -rf /root/* >/dev/null 2>&1
cd /root
clear && clear
exit
exit
fi
}
#--- FUNCION INFORMACION DE SISTEMA
systen_info() {
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " DETALLES DEL SISTEMA"
null="\033[1;31m"
msg -bar
if [ ! /proc/cpuinfo ]; then
msg -verm "Sistema No Soportado" && msg -bar
return 1
fi
if [ ! /etc/issue.net ]; then
msg -verm "Sistema No Soportado" && msg -bar
return 1
fi
if [ ! /proc/meminfo ]; then
msg -verm "Sistema No Soportado" && msg -bar
return 1
fi
totalram=$(free | grep Mem | awk '{print $2}')
usedram=$(free | grep Mem | awk '{print $3}')
freeram=$(free | grep Mem | awk '{print $4}')
swapram=$(cat /proc/meminfo | grep SwapTotal | awk '{print $2}')
system=$(cat /etc/issue.net)
clock=$(lscpu | grep "CPU MHz" | awk '{print $3}')
based=$(cat /etc/*release | grep ID_LIKE | awk -F "=" '{print $2}')
processor=$(cat /proc/cpuinfo | grep "model name" | uniq | awk -F ":" '{print $2}')
cpus=$(cat /proc/cpuinfo | grep processor | wc -l)
[[ "$system" ]] && msg -ama "Sistema Operativo: ${null}$system" || msg -ama "Sistema: ${null}???"
[[ "$based" ]] && msg -ama "Base de SO: ${null}$based" || msg -ama "Base: ${null}???"
[[ "$processor" ]] && msg -ama "Procesador: ${null}$processor x$cpus" || msg -ama "Procesador: ${null}???"
[[ "$clock" ]] && msg -ama "Frecuencia de Operacion: ${null}$clock MHz" || msg -ama "Frecuencia de Operacion: ${null}???"
msg -ama "Uso del Procesador: ${null}$(ps aux | awk 'BEGIN { sum = 0 } { sum += sprintf("%f",$3) }; END { printf " " "%.2f" "%%", sum}')"
msg -ama "Memoria Virtual Total: ${null}$(($totalram / 1024))"
msg -ama "Memoria Virtual En Uso: ${null}$(($usedram / 1024))"
msg -ama "Memoria Virtual Libre: ${null}$(($freeram / 1024))"
msg -ama "Memoria Virtual Swap: ${null}$(($swapram / 1024))MB"
msg -ama "Tiempo Online: ${null}$(uptime)"
msg -ama "Nombre De La Maquina: ${null}$(hostname)"
msg -ama "IP De La Maquina: ${null}$(ip addr | grep inet | grep -v inet6 | grep -v "host lo" | awk '{print $2}' | awk -F "/" '{print $1}')"
msg -ama "Version de Kernel: ${null}$(uname -r)"
msg -ama "Arquitectura: ${null}$(uname -m)"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
#SPEED TEST
speed_test() {
clear && clear
msg -bar
msg -tit
msg -bar
mkdir -p /opt/speed/ >/dev/null 2>&1
wget -O /opt/speed/speedtest https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/speedtest.py &>/dev/null
chmod +rwx /opt/speed/speedtest
declare -A cor=([0]="\033[1;37m" [1]="\033[1;34m" [2]="\033[1;31m" [3]="\033[1;33m" [4]="\033[1;32m")
echo -e "\e[1;93m PRUEBA DE VELOCIDAD DE HOSTING [By LATAM]"
msg -bar
ping=$(ping -c1 google.com | awk '{print $8 $9}' | grep -v loss | cut -d = -f2 | sed ':a;N;s/\n//g;ta')
starts_test=$(/opt/speed/speedtest)
fun_bar "$starts_test"
down_load=$(echo "$starts_test" | grep "Download" | awk '{print $2,$3}')
up_load=$(echo "$starts_test" | grep "Upload" | awk '{print $2,$3}')
msg -bar
msg -ama " Latencia:\033[1;92m $ping"
msg -ama " Subida:\033[1;92m $up_load"
msg -ama " Descarga:\033[1;92m $down_load"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
#---HORARIOS LOCALES
hora_local() {
timemx() {
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/America/Merida /etc/localtime
echo -e "\e[1;92m >> FECHA LOCAL MX APLICADA! <<"
echo -e "\e[93m $(date)"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
timearg() {
rm -rf /etc/localtime
ln -sf /usr/share/zoneinfo/America/Argentina/Buenos_Aires /etc/localtime
echo -e "\e[1;92m >> FECHA LOCAL ARG APLICADA! <<"
echo -e "\e[93m $(date)"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
timeco() {
rm -rf /etc/localtime
ln -sf /usr/share/zoneinfo/America/Bogota /etc/localtime
echo -e "\e[1;92m >> FECHA LOCAL CO APLICADA! <<"
echo -e "\e[93m $(date)"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
timeperu() {
rm -rf /etc/localtime
ln -sf /usr/share/zoneinfo/America/Lima /etc/localtime
echo -e "\e[1;92m >> FECHA LOCAL PE APLICADA! <<"
echo -e "\e[93m $(date)"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
timegt() {
rm -rf /etc/localtime
ln -sf /usr/share/zoneinfo/America/Lima /etc/localtime
echo -e "\e[1;92m >> FECHA LOCAL GT APLICADA! <<"
echo -e "\e[93m $(date)"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m AJUSTES DE HORARIOS LOCALES "
msg -bar
echo -e "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97mCAMBIAR HORA LOCAL MX"
echo -e "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97mCAMBIAR HORA LOCAL ARG"
echo -e "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \e[1;97mCAMBIAR HORA LOCAL CO"
echo -e "\e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97mCAMBIAR HORA LOCAL PE"
echo -e "\e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \e[1;97mCAMBIAR HORA LOCAL GT"
msg -bar
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;97m"
msg -bar
echo -ne " └⊳ Seleccione una Opcion: \033[1;32m" && read opx
tput cuu1 && tput dl1
case $opx in
1)
timemx
;;
2)
timearg
;;
3)
timeco
;;
4)
timeperu
;;
5)
timegt
;;
*)
herramientas_fun
;;
esac
}
#---AJUSTES INTERNOS DE VPS
ajuste_in() {
reiniciar_ser() { #REINICIO DE PROTOCOLOS BASICOS
echo -ne " \033[1;31m[ ! ] Services stunnel4 restart"
service stunnel4 restart >/dev/null 2>&1
[[ -e /etc/init.d/stunnel4 ]] && /etc/init.d/stunnel4 restart >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Services squid restart"
service squid restart >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Services squid3 restart"
service squid3 restart >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Services apache2 restart"
service apache2 restart >/dev/null 2>&1
[[ -e /etc/init.d/apache2 ]] && /etc/init.d/apache2 restart >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Services openvpn restart"
service openvpn restart >/dev/null 2>&1
[[ -e /etc/init.d/openvpn ]] && /etc/init.d/openvpn restart >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Services dropbear restart"
service dropbear restart >/dev/null 2>&1
[[ -e /etc/init.d/dropbear ]] && /etc/init.d/dropbear restart >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Services ssh restart"
service ssh restart >/dev/null 2>&1
[[ -e /etc/init.d/ssh ]] && /etc/init.d/ssh restart >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Services fail2ban restart"
(
[[ -e /etc/init.d/ssh ]] && /etc/init.d/ssh restart
fail2ban-client -x stop && fail2ban-client -x start
) >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
host_name() { #CAMBIO DE HOSTNAME
unset name
while [[ ${name} = "" ]]; do
echo -ne "\033[1;37m Digite Nuevo Hostname: " && read name
tput cuu1 && tput dl1
done
hostnamectl set-hostname $name
if [ $(hostnamectl status | head -1 | awk '{print $3}') = "${name}" ]; then
echo -e "\033[1;33m Host alterado corretamente!, reiniciar VPS"
else
echo -e "\033[1;33m Host no modificado!"
fi
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
editports() {
port() {
local portas
local portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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 -w "$var1 $var2")" ]] || {
portas+="$var1 $var2 $portas"
echo "$var1 $var2"
let i++
}
done <<<"$portas_var"
}
verify_port() {
local SERVICE="$1"
local PORTENTRY="$2"
[[ ! $(echo -e $(port | grep -v ${SERVICE}) | grep -w "$PORTENTRY") ]] && return 0 || return 1
}
edit_squid() {
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
msg -bar2
msg -ama "REDEFINIR PUERTOS SQUID"
msg -bar2
if [[ -e /etc/squid/squid.conf ]]; then
local CONF="/etc/squid/squid.conf"
elif [[ -e /etc/squid3/squid.conf ]]; then
local CONF="/etc/squid3/squid.conf"
fi
NEWCONF="$(cat ${CONF} | grep -v "http_port")"
msg -ne "Nuevos Puertos: "
read -p "" newports
for PTS in $(echo ${newports}); do
verify_port squid "${PTS}" && echo -e "\033[1;33mPort $PTS \033[1;32mOK" || {
echo -e "\033[1;33mPort $PTS \033[1;31mFAIL"
return 1
}
done
rm ${CONF}
while read varline; do
echo -e "${varline}" >>${CONF}
if [[ "${varline}" = "#portas" ]]; then
for NPT in $(echo ${newports}); do
echo -e "http_port ${NPT}" >>${CONF}
done
fi
done <<<"${NEWCONF}"
msg -azu "AGUARDE"
service squid restart &>/dev/null
service squid3 restart &>/dev/null
sleep 1s
msg -bar2
echo -e "\e[92m PUERTOS REDEFINIDOS"
msg -bar2
}
edit_apache() {
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
msg -bar2
msg -azu "REDEFINIR PUERTOS APACHE"
msg -bar2
local CONF="/etc/apache2/ports.conf"
local NEWCONF="$(cat ${CONF})"
msg -ne "Nuevos Puertos: "
read -p "" newports
for PTS in $(echo ${newports}); do
verify_port apache "${PTS}" && echo -e "\033[1;33mPort $PTS \033[1;32mOK" || {
echo -e "\033[1;33mPort $PTS \033[1;31mFAIL"
return 1
}
done
rm ${CONF}
while read varline; do
if [[ $(echo ${varline} | grep -w "Listen") ]]; then
if [[ -z ${END} ]]; then
echo -e "Listen ${newports}" >>${CONF}
END="True"
else
echo -e "${varline}" >>${CONF}
fi
else
echo -e "${varline}" >>${CONF}
fi
done <<<"${NEWCONF}"
msg -azu "AGUARDE"
service apache2 restart &>/dev/null
sleep 1s
msg -bar2
echo -e "\e[92m PUERTOS REDEFINIDOS"
msg -bar2
}
edit_openvpn() {
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
msg -bar2
msg -azu "REDEFINIR PUERTOS OPENVPN"
msg -bar2
local CONF="/etc/openvpn/server.conf"
local CONF2="/etc/openvpn/client-common.txt"
local NEWCONF="$(cat ${CONF} | grep -v [Pp]ort)"
local NEWCONF2="$(cat ${CONF2})"
msg -ne "Nuevos puertos: "
read -p "" newports
for PTS in $(echo ${newports}); do
verify_port openvpn "${PTS}" && echo -e "\033[1;33mPort $PTS \033[1;32mOK" || {
echo -e "\033[1;33mPort $PTS \033[1;31mFAIL"
return 1
}
done
rm ${CONF}
while read varline; do
echo -e "${varline}" >>${CONF}
if [[ ${varline} = "proto tcp" ]]; then
echo -e "port ${newports}" >>${CONF}
fi
done <<<"${NEWCONF}"
rm ${CONF2}
while read varline; do
if [[ $(echo ${varline} | grep -v "remote-random" | grep "remote") ]]; then
echo -e "$(echo ${varline} | cut -d' ' -f1,2) ${newports} $(echo ${varline} | cut -d' ' -f4)" >>${CONF2}
else
echo -e "${varline}" >>${CONF2}
fi
done <<<"${NEWCONF2}"
msg -azu "AGUARDE"
service openvpn restart &>/dev/null
/etc/init.d/openvpn restart &>/dev/null
sleep 1s
msg -bar2
echo -e "\e[92m PUERTOS REDEFINIDOS"
msg -bar2
}
edit_dropbear() {
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
tput cuu1 >&2 && tput dl1 >&2
msg -bar2
msg -azu "REDEFINIR PUERTOS DROPBEAR"
msg -bar2
local CONF="/etc/default/dropbear"
local NEWCONF="$(cat ${CONF} | grep -v "DROPBEAR_EXTRA_ARGS")"
msg -ne "Nuevos Puertos: "
read -p "" newports
for PTS in $(echo ${newports}); do
verify_port dropbear "${PTS}" && echo -e "\033[1;33mPort $PTS \033[1;32mOK" || {
echo -e "\033[1;33mPort $PTS \033[1;31mFAIL"
return 1
}
done
rm -rf ${CONF}
while read varline; do
echo -e "${varline}" >>${CONF}
if [[ ${varline} = "NO_START=1" ]]; then
echo -e 'DROPBEAR_EXTRA_ARGS="VAR"' >>${CONF}
for NPT in $(echo ${newports}); do
sed -i "s/VAR/-p ${NPT} VAR/g" ${CONF}
done
sed -i "s/VAR//g" ${CONF}
fi
done <<<"${NEWCONF}"
msg -azu "AGUARDE"
SOPORTE rd &>/dev/null
sleep 1s
msg -bar2
echo -e "\e[92m PUERTOS REDEFINIDOS"
msg -bar2
}
edit_openssh() {
msg -azu "REDEFINIR PUERTOS OPENSSH"
msg -bar2
local CONF="/etc/ssh/sshd_config"
local NEWCONF="$(cat ${CONF} | grep -v [Pp]ort)"
msg -ne "Nuevos Puertos: "
read -p "" newports
for PTS in $(echo ${newports}); do
verify_port sshd "${PTS}" && echo -e "\033[1;33mPort $PTS \033[1;32mOK" || {
echo -e "\033[1;33mPort $PTS \033[1;31mFAIL"
return 1
}
done
rm ${CONF}
for NPT in $(echo ${newports}); do
echo -e "Port ${NPT}" >>${CONF}
done
while read varline; do
echo -e "${varline}" >>${CONF}
done <<<"${NEWCONF}"
msg -azu "AGUARDE"
service ssh restart &>/dev/null
service sshd restart &>/dev/null
sleep 1s
msg -bar2
echo -e "\e[92m PUERTOS REDEFINIDOS"
msg -bar2
}
main_fun() {
clear && clear
msg -bar2
msg -tit ""
msg -bar2
msg -ama " EDITAR PUERTOS ACTIVOS "
msg -bar2
unset newports
i=0
while read line; do
let i++
case $line in
squid | squid3) squid=$i ;;
apache | apache2) apache=$i ;;
openvpn) openvpn=$i ;;
dropbear) dropbear=$i ;;
sshd) ssh=$i ;;
esac
done <<<"$(port | cut -d' ' -f1 | sort -u)"
for ((a = 1; a <= $i; a++)); do
[[ $squid = $a ]] && echo -ne "\033[1;32m [$squid] > " && msg -azu "REDEFINIR PUERTOS SQUID"
[[ $apache = $a ]] && echo -ne "\033[1;32m [$apache] > " && msg -azu "REDEFINIR PUERTOS APACHE"
[[ $openvpn = $a ]] && echo -ne "\033[1;32m [$openvpn] > " && msg -azu "REDEFINIR PUERTOS OPENVPN"
[[ $dropbear = $a ]] && echo -ne "\033[1;32m [$dropbear] > " && msg -azu "REDEFINIR PUERTOS DROPBEAR"
[[ $ssh = $a ]] && echo -ne "\033[1;32m [$ssh] > " && msg -azu "REDEFINIR PUERTOS SSH"
done
echo -ne "$(msg -bar2)\n\033[1;32m [0] > " && msg -azu "\e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar2
while true; do
echo -ne "\033[1;37mSeleccione: " && read selection
tput cuu1 && tput dl1
[[ ! -z $squid ]] && [[ $squid = $selection ]] && edit_squid && break
[[ ! -z $apache ]] && [[ $apache = $selection ]] && edit_apache && break
[[ ! -z $openvpn ]] && [[ $openvpn = $selection ]] && edit_openvpn && break
[[ ! -z $dropbear ]] && [[ $dropbear = $selection ]] && edit_dropbear && break
[[ ! -z $ssh ]] && [[ $ssh = $selection ]] && edit_openssh && break
[[ "0" = $selection ]] && break
done
#exit 0
}
main_fun
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
cambiopass() { #CAMBIO DE PASS ROOT
echo -e "${cor[3]} Esta herramienta cambia la contraseña de su servidor vps"
echo -e "${cor[3]} Esta contraseña es utilizada como usuario root"
msg -bar
echo -ne "Desea Seguir? [S/N]: "
read x
[[ $x = @(n|N) ]] && msg -bar && return
msg -bar
#Inicia Procedimentos
echo -e "${cor[0]} Escriba su nueva contraseña"
msg -bar
read -p " Nuevo passwd: " pass
(
echo $pass
echo $pass
) | passwd root 2>/dev/null
sleep 1s
msg -bar
echo -e "${cor[3]} Contraseña cambiada con exito!"
echo -e "${cor[2]} Su contraseña ahora es: ${cor[4]}$pass"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
rootpass() { #AGREGAR ROOT A AWS Y GOOGLE VPS
clear
msg -bar
echo -e "${cor[3]} Esta herramienta cambia a usuario root las VPS de "
echo -e "${cor[3]} GoogleCloud y Amazon"
msg -bar
echo -ne " Desea Seguir? [S/N]: "
read x
[[ $x = @(n|N) ]] && msg -bar && return
msg -bar
#Inicia Procedimentos
echo -e " Aplicando Configuraciones"
fun_bar "service ssh restart"
#Parametros Aplicados
sed -i "s;PermitRootLogin prohibit-password;PermitRootLogin yes;g" /etc/ssh/sshd_config
sed -i "s;PermitRootLogin without-password;PermitRootLogin yes;g" /etc/ssh/sshd_config
sed -i "s;PasswordAuthentication no;PasswordAuthentication yes;g" /etc/ssh/sshd_config
msg -bar
echo -e "Escriba su contraseña root actual o cambiela"
msg -bar
read -p " Nuevo passwd: " pass
(
echo $pass
echo $pass
) | passwd 2>/dev/null
sleep 1s
msg -bar
echo -e "${cor[3]} Configuraciones aplicadas con exito!"
echo -e "${cor[2]} Su contraseña ahora es: ${cor[4]}$pass"
service ssh restart >/dev/null 2>&1
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
pamcrack() { #DESACTIVAR PASS ALFANUMERICO
echo -e "${cor[3]} Liberar passwd ALFANUMERICO"
msg -bar
echo -ne " Desea Seguir? [S/N]: "
read x
[[ $x = @(n|N) ]] && msg -bar && return
echo -e ""
wget -O /etc/pam.d/common-password https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/common-password &>/dev/null
chmod +rwx /etc/pam.d/common-password
fun_bar "service ssh restart"
echo -e ""
echo -e " \033[1;31m[ ! ]\033[1;33m Pass Alfanumerico Desactivado"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m AJUSTES INTERNOS DEL VPS "
msg -bar
echo -e "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97mCAMBIAR HOSTNAME VPS"
echo -e "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97mCAMBIAR CONTRASEÑA ROOT"
echo -e "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \e[1;97mAGREGAR ROOT a GoogleCloud y Amazon"
echo -e "\e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97mDESACTIVAR PASS ALFANUMERICO"
echo -e "\e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \e[1;97mEDITOR DE PUERTOS"
msg -bar
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;97m"
msg -bar
echo -ne "\033[0;97m └⊳ Seleccione una Opcion: \033[1;32m" && read opx
tput cuu1 && tput dl1
case $opx in
1)
host_name
;;
2)
cambiopass
;;
3)
rootpass
;;
4)
pamcrack
;;
5)
editports
;;
*)
herramientas_fun
;;
esac
}
#---DNS UNLOCKS
dns_unlock() {
dnsnetflix() {
echo "nameserver $dnsp" >/etc/resolv.conf
#echo "nameserver 8.8.8.8" >> /etc/resolv.conf
/etc/init.d/ssrmu stop &>/dev/null
/etc/init.d/ssrmu start &>/dev/null
/etc/init.d/shadowsocks-r stop &>/dev/null
/etc/init.d/shadowsocks-r start &>/dev/null
msg -bar2
echo -e "${cor[4]} DNS AGREGADOS CON EXITO"
}
clear && clear
msg -bar2
msg -tit
msg -bar2
echo -e "\033[1;93m AGREGARDOR DE DNS PERSONALES "
msg -bar2
echo -e "\033[1;97m Esta funcion es para DNS Unlocks's"
msg -bar2
echo -e "\033[1;39m Solo es para Protolos con Interfas Tun."
echo -e "\033[1;39m Como: SS,SSR,V2RAY"
echo -e "\033[1;39m APK: V2RAYNG, SHADOWSHOK , SHADOWSOCKR "
msg -bar2
echo -e "\033[1;93m Recuerde escojer entre 1 DNS ya sea el de MX,ARG \n segun le aya entregado el BOT."
echo ""
echo -e "\033[1;97m Ingrese su DNS a usar: \033[1;92m"
read -p " " dnsp
echo ""
msg -bar2
read -p " Estas seguro de continuar? [ s | n ]: " dnsnetflix
[[ "$dnsnetflix" = "s" || "$dnsnetflix" = "S" ]] && dnsnetflix
msg -bar2
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
#--- INSTALADOR BBR
bbr_fun() {
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
sh_ver="1.3.1"
github="raw.githubusercontent.com/cx9208/Linux-NetSpeed/master"
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[Informacion]${Font_color_suffix}"
Error="${Red_font_prefix}[Error]${Font_color_suffix}"
Tip="${Green_font_prefix}[Atencion]${Font_color_suffix}"
#Instalar el núcleo BBR
installbbr() {
kernel_version="4.11.8"
if [[ "${release}" == "centos" ]]; then
rpm --import http://${github}/bbr/${release}/RPM-GPG-KEY-elrepo.org
yum install -y http://${github}/bbr/${release}/${version}/${bit}/kernel-ml-${kernel_version}.rpm
yum remove -y kernel-headers
yum install -y http://${github}/bbr/${release}/${version}/${bit}/kernel-ml-headers-${kernel_version}.rpm
yum install -y http://${github}/bbr/${release}/${version}/${bit}/kernel-ml-devel-${kernel_version}.rpm
elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then
mkdir bbr && cd bbr
wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u10_amd64.deb
wget -N --no-check-certificate http://${github}/bbr/debian-ubuntu/linux-headers-${kernel_version}-all.deb
wget -N --no-check-certificate http://${github}/bbr/debian-ubuntu/${bit}/linux-headers-${kernel_version}.deb
wget -N --no-check-certificate http://${github}/bbr/debian-ubuntu/${bit}/linux-image-${kernel_version}.deb
dpkg -i libssl1.0.0_1.0.1t-1+deb8u10_amd64.deb
dpkg -i linux-headers-${kernel_version}-all.deb
dpkg -i linux-headers-${kernel_version}.deb
dpkg -i linux-image-${kernel_version}.deb
cd .. && rm -rf bbr
fi
detele_kernel
BBR_grub
msg -bar
echo -e "${Tip} Deves Reiniciar VPS y Activar Acelerador\n${Red_font_prefix} BBR/BBR Versión mágica${Font_color_suffix}"
msg -bar
stty erase '^H' && read -p "Reiniciar VPS para habilitar BBR ? [Y/n] :" yn
[ -z "${yn}" ] && yn="y"
if [[ $yn == [Yy] ]]; then
echo -e "${Info} VPS se reinicia ..."
reboot
fi
}
#Instale el núcleo BBRplus
installbbrplus() {
kernel_version="4.14.129-bbrplus"
if [[ "${release}" == "centos" ]]; then
wget -N --no-check-certificate https://${github}/bbrplus/${release}/${version}/kernel-${kernel_version}.rpm
yum install -y kernel-${kernel_version}.rpm
rm -f kernel-${kernel_version}.rpm
kernel_version="4.14.129_bbrplus" #fix a bug
elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then
mkdir bbrplus && cd bbrplus
wget -N --no-check-certificate http://${github}/bbrplus/debian-ubuntu/${bit}/linux-headers-${kernel_version}.deb
wget -N --no-check-certificate http://${github}/bbrplus/debian-ubuntu/${bit}/linux-image-${kernel_version}.deb
dpkg -i linux-headers-${kernel_version}.deb
dpkg -i linux-image-${kernel_version}.deb
cd .. && rm -rf bbrplus
fi
detele_kernel
BBR_grub
msg -bar
echo -e "${Tip} Deves Reiniciar VPS y Activar Acelerador \n${Red_font_prefix} BBRplus${Font_color_suffix}"
msg -bar
stty erase '^H' && read -p "Reiniciar VPS para habilitar BBRplus? [Y/n]:" yn
[ -z "${yn}" ] && yn="y"
if [[ $yn == [Yy] ]]; then
echo -e "${Info} VPS se reinicia ..."
reboot
fi
}
#Instale el kernel de Lotserver
installlot() {
if [[ "${release}" == "centos" ]]; then
rpm --import http://${github}/lotserver/${release}/RPM-GPG-KEY-elrepo.org
yum remove -y kernel-firmware
yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-firmware-${kernel_version}.rpm
yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-${kernel_version}.rpm
yum remove -y kernel-headers
yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-headers-${kernel_version}.rpm
yum install -y http://${github}/lotserver/${release}/${version}/${bit}/kernel-devel-${kernel_version}.rpm
elif [[ "${release}" == "ubuntu" ]]; then
bash <(wget --no-check-certificate -qO- "http://${github}/Debian_Kernel.sh")
elif [[ "${release}" == "debian" ]]; then
bash <(wget --no-check-certificate -qO- "http://${github}/Debian_Kernel.sh")
fi
detele_kernel
BBR_grub
msg -bar
echo -e "${Tip} Deves Reiniciar VPS y Activar Acelerador\n${Red_font_prefix}Lotserver${Font_color_suffix}"
msg -bar
stty erase '^H' && read -p "Necesita reiniciar el VPS antes de poder abrir Lotserver, reiniciar ahora ? [Y/n] :" yn
[ -z "${yn}" ] && yn="y"
if [[ $yn == [Yy] ]]; then
echo -e "${Info} VPS se reinicia ..."
reboot
fi
}
# Habilitar BBR
startbbr() {
remove_all
echo "Aceleracion Reconfigurada de Nuevo"
echo "net.core.default_qdisc=fq" >>/etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >>/etc/sysctl.conf
sysctl -p
echo -e "${Info}¡BBR comenzó con éxito!"
msg -bar
}
#Habilitar BBRplus
startbbrplus() {
remove_all
echo "net.core.default_qdisc=fq" >>/etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbrplus" >>/etc/sysctl.conf
sysctl -p
echo -e "${Info}BBRplus comenzó con éxito!"
msg -bar
}
# Compilar y habilitar el cambio mágico BBR
startbbrmod() {
remove_all
if [[ "${release}" == "centos" ]]; then
yum install -y make gcc
mkdir bbrmod && cd bbrmod
wget -N --no-check-certificate http://${github}/bbr/tcp_tsunami.c
echo "obj-m:=tcp_tsunami.o" >Makefile
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules CC=/usr/bin/gcc
chmod +x ./tcp_tsunami.ko
cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4
insmod tcp_tsunami.ko
depmod -a
else
apt-get update
if [[ "${release}" == "ubuntu" && "${version}" = "14" ]]; then
apt-get -y install build-essential
apt-get -y install software-properties-common
add-apt-repository ppa:ubuntu-toolchain-r/test -y
apt-get update
fi
apt-get -y install make gcc
mkdir bbrmod && cd bbrmod
wget -N --no-check-certificate http://${github}/bbr/tcp_tsunami.c
echo "obj-m:=tcp_tsunami.o" >Makefile
ln -s /usr/bin/gcc /usr/bin/gcc-4.9
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules CC=/usr/bin/gcc-4.9
install tcp_tsunami.ko /lib/modules/$(uname -r)/kernel
cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4
depmod -a
fi
echo "net.core.default_qdisc=fq" >>/etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=tsunami" >>/etc/sysctl.conf
sysctl -p
cd .. && rm -rf bbrmod
echo -e "${Info}¡La versión mágica de BBR comenzó con éxito!"
msg -bar
}
# Compilar y habilitar el cambio mágico BBR
startbbrmod_nanqinlang() {
remove_all
if [[ "${release}" == "centos" ]]; then
yum install -y make gcc
mkdir bbrmod && cd bbrmod
wget -N --no-check-certificate https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/bbr/centos/tcp_nanqinlang.c
echo "obj-m := tcp_nanqinlang.o" >Makefile
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules CC=/usr/bin/gcc
chmod +x ./tcp_nanqinlang.ko
cp -rf ./tcp_nanqinlang.ko /lib/modules/$(uname -r)/kernel/net/ipv4
insmod tcp_nanqinlang.ko
depmod -a
else
apt-get update
if [[ "${release}" == "ubuntu" && "${version}" = "14" ]]; then
apt-get -y install build-essential
apt-get -y install software-properties-common
add-apt-repository ppa:ubuntu-toolchain-r/test -y
apt-get update
fi
apt-get -y install make gcc-4.9
mkdir bbrmod && cd bbrmod
wget -N --no-check-certificate https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/bbr/tcp_nanqinlang.c
echo "obj-m := tcp_nanqinlang.o" >Makefile
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules CC=/usr/bin/gcc-4.9
install tcp_nanqinlang.ko /lib/modules/$(uname -r)/kernel
cp -rf ./tcp_nanqinlang.ko /lib/modules/$(uname -r)/kernel/net/ipv4
depmod -a
fi
echo "net.core.default_qdisc=fq" >>/etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=nanqinlang" >>/etc/sysctl.conf
sysctl -p
echo -e "${Info}¡La versión mágica de BBR comenzó con éxito!"
msg -bar
}
# Desinstalar toda la aceleración
remove_all() {
rm -rf bbrmod
sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf
sed -i '/fs.file-max/d' /etc/sysctl.conf
sed -i '/net.core.rmem_max/d' /etc/sysctl.conf
sed -i '/net.core.wmem_max/d' /etc/sysctl.conf
sed -i '/net.core.rmem_default/d' /etc/sysctl.conf
sed -i '/net.core.wmem_default/d' /etc/sysctl.conf
sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf
sed -i '/net.core.somaxconn/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_tw_recycle/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_keepalive_time/d' /etc/sysctl.conf
sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_rmem/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_wmem/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_mtu_probing/d' /etc/sysctl.conf
sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
sed -i '/fs.inotify.max_user_instances/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf
sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
sed -i '/net.ipv4.route.gc_timeout/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_synack_retries/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_syn_retries/d' /etc/sysctl.conf
sed -i '/net.core.somaxconn/d' /etc/sysctl.conf
sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_timestamps/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf
if [[ -e /appex/bin/lotServer.sh ]]; then
bash <(wget --no-check-certificate -qO- https://github.com/MoeClub/lotServer/raw/master/Install.sh) uninstall
fi
clear
echo -e "${Info}:La aceleración está Desinstalada."
msg -bar
sleep 1s
}
#Optimizar la configuración del sistema
optimizing_system() {
sed -i '/fs.file-max/d' /etc/sysctl.conf
sed -i '/fs.inotify.max_user_instances/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_fin_timeout/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_tw_reuse/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_syn_backlog/d' /etc/sysctl.conf
sed -i '/net.ipv4.ip_local_port_range/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_tw_buckets/d' /etc/sysctl.conf
sed -i '/net.ipv4.route.gc_timeout/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_synack_retries/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_syn_retries/d' /etc/sysctl.conf
sed -i '/net.core.somaxconn/d' /etc/sysctl.conf
sed -i '/net.core.netdev_max_backlog/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_timestamps/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_max_orphans/d' /etc/sysctl.conf
sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
echo "fs.file-max = 1000000
fs.inotify.max_user_instances = 8192
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 32768
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_max_orphans = 32768
# forward ipv4
net.ipv4.ip_forward = 1" >>/etc/sysctl.conf
sysctl -p
echo "* soft nofile 1000000
* hard nofile 1000000" >/etc/security/limits.conf
echo "ulimit -SHn 1000000" >>/etc/profile
read -p "Después de aplicar la configuracion al VPS necesita reiniciar, reiniciar ahora ? [Y/n] :" yn
msg -bar
[ -z "${yn}" ] && yn="y"
if [[ $yn == [Yy] ]]; then
echo -e "${Info} Reinicio de VPS..."
reboot
fi
}
############# Componentes de gestión del núcleo #############
# Eliminar kernel redundante
detele_kernel() {
if [[ "${release}" == "centos" ]]; then
rpm_total=$(rpm -qa | grep kernel | grep -v "${kernel_version}" | grep -v "noarch" | wc -l)
if [ "${rpm_total}" ] >"1"; then
echo -e "Detectado ${rpm_total} El resto del núcleo, comienza a desinstalar ..."
for ((integer = 1; integer <= ${rpm_total}; integer++)); do
rpm_del=$(rpm -qa | grep kernel | grep -v "${kernel_version}" | grep -v "noarch" | head -${integer})
echo -e "Comience a desinstalar${rpm_del} Kernel ..."
rpm --nodeps -e ${rpm_del}
echo -e "Desinstalar ${rpm_del} La desinstalación del núcleo se ha completado, continúa ..."
done
echo --nodeps -e "El núcleo se desinstala y continúa ..."
else
echo -e " El número de núcleos detectados es incorrecto, ¡por favor verifique!" && exit 1
fi
elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then
deb_total=$(dpkg -l | grep linux-image | awk '{print $2}' | grep -v "${kernel_version}" | wc -l)
if [ "${deb_total}" ] >"1"; then
echo -e "Detectado ${deb_total} El resto del núcleo, comienza a desinstalar ..."
for ((integer = 1; integer <= ${deb_total}; integer++)); do
deb_del=$(dpkg -l | grep linux-image | awk '{print $2}' | grep -v "${kernel_version}" | head -${integer})
echo -e "Comience a desinstalar ${deb_del} Kernel ..."
apt-get purge -y ${deb_del}
echo -e "Desinstalar ${deb_del} La desinstalación del núcleo se ha completado, continúa ..."
done
echo -e "El núcleo se desinstala y continúa ..."
else
echo -e " El número de núcleos detectados es incorrecto, ¡por favor verifique!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
fi
}
#Actualizar arranque
BBR_grub() {
if [[ "${release}" == "centos" ]]; then
if [[ ${version} = "6" ]]; then
if [ ! -f "/boot/grub/grub.conf" ]; then
echo -e "${Error} /boot/grub/grub.conf No encontrado, verifique."
exit 1
fi
sed -i 's/^default=.*/default=0/g' /boot/grub/grub.conf
elif [[ ${version} = "7" ]]; then
if [ ! -f "/boot/grub2/grub.cfg" ]; then
echo -e "${Error} /boot/grub2/grub.cfg No encontrado, verifique."
exit 1
fi
grub2-set-default 0
fi
elif [[ "${release}" == "debian" || "${release}" == "ubuntu" ]]; then
/usr/sbin/update-grub
fi
}
#############Componente de gestión del kernel#############
#############Componentes de detección del sistema#############
#Sistema de inspección
check_sys() {
if [[ -f /etc/redhat-release ]]; then
release="centos"
elif cat /etc/issue | grep -q -E -i "debian"; then
release="debian"
elif cat /etc/issue | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
elif cat /proc/version | grep -q -E -i "debian"; then
release="debian"
elif cat /proc/version | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
fi
}
#Verifique la versión de Linux
check_version() {
if [[ -s /etc/redhat-release ]]; then
version=$(grep -oE "[0-9.]+" /etc/redhat-release | cut -d . -f 1)
else
version=$(grep -oE "[0-9.]+" /etc/issue | cut -d . -f 1)
fi
bit=$(uname -m)
if [[ ${bit} = "x86_64" ]]; then
bit="x64"
else
bit="x32"
fi
}
#Verifique los requisitos del sistema para instalar bbr
check_sys_bbr() {
check_version
if [[ "${release}" == "centos" ]]; then
if [[ ${version} -ge "6" ]]; then
installbbr
else
echo -e "${Error} BBR El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
elif [[ "${release}" == "debian" ]]; then
if [[ ${version} -ge "8" ]]; then
installbbr
else
echo -e "${Error} BBR El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
elif [[ "${release}" == "ubuntu" ]]; then
if [[ ${version} -ge "14" ]]; then
installbbr
else
echo -e "${Error} BBR El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
else
echo -e "${Error} BBR El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
}
check_sys_bbrplus() {
check_version
if [[ "${release}" == "centos" ]]; then
if [[ ${version} -ge "6" ]]; then
installbbrplus
else
echo -e "${Error} BBRplus El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
elif [[ "${release}" == "debian" ]]; then
if [[ ${version} -ge "8" ]]; then
installbbrplus
else
echo -e "${Error} BBRplus El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
elif [[ "${release}" == "ubuntu" ]]; then
if [[ ${version} -ge "14" ]]; then
installbbrplus
else
echo -e "${Error} BBRplus El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
else
echo -e "${Error} BBRplus El núcleo no es compatible con el sistema actual ${release} ${version} ${bit} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && bbr_fun
fi
}
check_status() {
kernel_version=$(uname -r | awk -F "-" '{print $1}')
kernel_version_full=$(uname -r)
if [[ ${kernel_version_full} = "4.14.129-bbrplus" ]]; then
kernel_status="BBRplus"
elif [[ ${kernel_version} = "3.10.0" || ${kernel_version} = "3.16.0" || ${kernel_version} = "3.2.0" || ${kernel_version} = "4.4.0" || ${kernel_version} = "3.13.0" || ${kernel_version} = "2.6.32" || ${kernel_version} = "4.9.0" ]]; then
kernel_status="Lotserver"
elif [[ $(echo ${kernel_version} | awk -F'.' '{print $1}') == "4" ]] && [[ $(echo ${kernel_version} | awk -F'.' '{print $2}') -ge 9 ]] || [[ $(echo ${kernel_version} | awk -F'.' '{print $1}') == "5" ]]; then
kernel_status="BBR"
else
kernel_status="noinstall"
fi
if [[ ${kernel_status} == "Lotserver" ]]; then
if [[ -e /appex/bin/lotServer.sh ]]; then
run_status=$(bash /appex/bin/lotServer.sh status | grep "LotServer" | awk '{print $3}')
if [[ ${run_status} = "running!" ]]; then
run_status="Comenzó exitosamente"
else
run_status="No se pudo iniciar"
fi
else
run_status="No hay acelerador instalado"
fi
elif [[ ${kernel_status} == "BBR" ]]; then
run_status=$(grep "net.ipv4.tcp_congestion_control" /etc/sysctl.conf | awk -F "=" '{print $2}')
if [[ ${run_status} == "bbr" ]]; then
run_status=$(lsmod | grep "bbr" | awk '{print $1}')
if [[ ${run_status} == "tcp_bbr" ]]; then
run_status="BBR Comenzó exitosamente"
else
run_status="BBR Comenzó exitosamente"
fi
elif [[ ${run_status} == "tsunami" ]]; then
run_status=$(lsmod | grep "tsunami" | awk '{print $1}')
if [[ ${run_status} == "tcp_tsunami" ]]; then
run_status="BBR La revisión mágica se lanzó con éxito"
else
run_status="BBR Inicio de modificación mágica fallido"
fi
elif [[ ${run_status} == "nanqinlang" ]]; then
run_status=$(lsmod | grep "nanqinlang" | awk '{print $1}')
if [[ ${run_status} == "tcp_nanqinlang" ]]; then
run_status="El violento manifestante de BBR se lanzó con éxito"
else
run_status="Violenta revisión mágica de BBR no pudo comenzar"
fi
else
run_status="No hay acelerador instalado"
fi
elif [[ ${kernel_status} == "BBRplus" ]]; then
run_status=$(grep "net.ipv4.tcp_congestion_control" /etc/sysctl.conf | awk -F "=" '{print $2}')
if [[ ${run_status} == "bbrplus" ]]; then
run_status=$(lsmod | grep "bbrplus" | awk '{print $1}')
if [[ ${run_status} == "tcp_bbrplus" ]]; then
run_status="BBRplus comenzó con éxito"
else
run_status="BBRplus comenzó con éxito"
fi
else
run_status="No hay acelerador instalado"
fi
fi
}
#############Componentes de detección del sistema#############
check_sys
check_version
[[ ${release} != "debian" ]] && [[ ${release} != "ubuntu" ]] && [[ ${release} != "centos" ]] && echo -e "${Error} Este script no es compatible con el sistema actual. ${release} !" && herramientas_fun
# Menú de inicio
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m ACELERACION BBR [ PLUS/MAGICK ] "
echo -e "\033[38;5;239m════════════════\e[48;5;1m\e[38;5;230m INSTALAR KERNEL \e[0m\e[38;5;239m══════════════════"
echo -e "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR KERNEL MAGICO"
echo -e "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97m INSTALAR KERNEL BBRPLUS"
echo -e "\033[38;5;239m═══════════════\e[48;5;2m\e[38;5;22m ACTIVAR ACELERADOR \e[0m\e[38;5;239m════════════════"
echo -e "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \e[1;97m ACELERACION (KERNER STOCK UBUNTU 18+)"
echo -e "\e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97m ACELERACION (KERNEL MAGICO)"
echo -e "\e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \e[1;97m ACELERACION (KERNEL MAGICO MODO AGRECIVO)"
echo -e "\e[1;93m [\e[1;32m6\e[1;93m]\033[1;31m > \e[1;97m ACELERACION (KERNEL BB_RPLUS)"
echo -e "\033[38;5;239m════════════════════════════════════════════════════"
echo -e "\e[1;93m [\e[1;32m7\e[1;93m]\033[1;31m > \e[1;91m DESINTALAR TODAS LAS ACELERACIONES"
echo -e "\e[1;93m [\e[1;32m8\e[1;93m]\033[1;31m > \e[1;93m OPTIMIZACION DE LA CONFIGURACION "
msg -bar
check_status
if [[ ${kernel_status} == "noinstall" ]]; then
echo -e " KERNEL ACTUAL: ${Green_font_prefix}No instalado\n${Font_color_suffix} Kernel Acelerado ${Red_font_prefix}Por favor, instale el Núcleo primero.${Font_color_suffix}"
else
echo -e " KERNEL ACTUAL: ${Green_font_prefix}Instalado\n${Font_color_suffix} ${_font_prefix}${kernel_status}${Font_color_suffix} Kernel Acelerado, ${Green_font_prefix}${run_status}${Font_color_suffix}"
fi
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > " && echo -e "\e[97m\033[1;41m VOLVER \033[0;37m"
msg -bar
echo -ne "\033[1;97m └⊳ Seleccione una opcion [0-8]: \033[1;32m" && read num
case "$num" in
1)
check_sys_bbr
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
2)
check_sys_bbrplus
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
3)
startbbr
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
4)
startbbrmod
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
5)
startbbrmod_nanqinlang
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
6)
startbbrplus
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
7)
remove_all
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
8)
optimizing_system
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
bbr_fun
;;
*)
herramientas_fun
# read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
#exit 0
}
#---PONER PASS SQUID
pass_squid() {
squidpass() {
tmp_arq="/tmp/arq-tmp"
if [ -d "/etc/squid" ]; then
pwd="/etc/squid/passwd"
config_="/etc/squid/squid.conf"
service_="squid"
squid_="0"
elif [ -d "/etc/squid3" ]; then
pwd="/etc/squid3/passwd"
config_="/etc/squid3/squid.conf"
service_="squid3"
squid_="1"
fi
[[ ! -e $config_ ]] &&
msg -bar &&
echo -e " \033[1;36m Proxy Squid no Instalado no puede proseguir" &&
msg -bar &&
return 0
if [ -e $pwd ]; then
echo -e "${cor[3]} Desea Desactivar Autentificasion del Proxy Squid"
read -p " [S/N]: " -e -i n sshsn
[[ "$sshsn" = @(s|S|y|Y) ]] && {
msg -bar
echo -e " \033[1;36mDesintalando Dependencias:"
rm -rf /usr/bin/squid_log1
fun_bar 'apt-get remove apache2-utils'
msg -bar
cat $config_ | grep -v '#Password' >$tmp_arq
mv -f $tmp_arq $config_
cat $config_ | grep -v '^auth_param.*passwd*$' >$tmp_arq
mv -f $tmp_arq $config_
cat $config_ | grep -v '^auth_param.*proxy*$' >$tmp_arq
mv -f $tmp_arq $config_
cat $config_ | grep -v '^acl.*REQUIRED*$' >$tmp_arq
mv -f $tmp_arq $config_
cat $config_ | grep -v '^http_access.*authenticated*$' >$tmp_arq
mv -f $tmp_arq $config_
cat $config_ | grep -v '^http_access.*all*$' >$tmp_arq
mv -f $tmp_arq $config_
echo -e "
http_access allow all" >>"$config_"
rm -f $pwd
service $service_ restart >/dev/null 2>&1 &
echo -e " \033[1;31m Desautentificasion de Proxy Squid Desactivado"
msg -bar
}
else
echo -e "${cor[3]} "Confirmar Autentificasion ?""
read -p " [S/N]: " -e -i n sshsn
[[ "$sshsn" = @(s|S|y|Y) ]] && {
msg -bar
echo -e " \033[1;36mInstalando Dependencias:"
echo "Archivo SQUID PASS" >/usr/bin/squid_log1
fun_bar 'apt-get install apache2-utils'
msg -bar
read -e -p " Tu nombre de usuario deseado: " usrn
[[ $usrn = "" ]] &&
msg -bar &&
echo -e " \033[1;31mEl usuario no puede ser nulo" &&
msg -bar &&
return 0
htpasswd -c $pwd $usrn
succes_=$(grep -c "$usrn" $pwd)
if [ "$succes_" = "0" ]; then
rm -f $pwd
msg -bar
echo -e " \033[1;31m Error al generar la contraseña, no se inicio la autenticacion de Squid"
msg -bar
return 0
elif [[ "$succes_" = "1" ]]; then
cat $config_ | grep -v '^http_access.*all*$' >$tmp_arq
mv -f $tmp_arq $config_
if [ "$squid_" = "0" ]; then
echo -e "#Password
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all" >>"$config_"
service squid restart >/dev/null 2>&1 &
update-rc.d squid defaults >/dev/null 2>&1 &
elif [ "$squid_" = "1" ]; then
echo -e "#Password
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwd
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated
http_access deny all" >>"$config_"
service squid3 restart >/dev/null 2>&1 &
update-rc.d squid3 defaults >/dev/null 2>&1 &
fi
msg -bar
service squid restart >/dev/null 2>&1
echo -e " \033[1;32m PROTECCION DE PROXY INICIADA"
msg -bar
fi
}
fi
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " AUTENTIFICAR PROXY SQUID "
msg -bar
unset squid_log1
[[ -e /usr/bin/squid_log1 ]] && squid_log1="\033[1;32mACTIVO"
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \033[1;97m PONER CONTRASEÑA A SQUID $squid_log1\e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;37mEscoja una Opcion: "
read optons
case $optons in
1)
msg -bar
squidpass
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
;;
*)
msg -bar
herramientas_fun
;;
esac
}
#---FAIL2BAN
fai2ban_fun() {
pid_fail=$(ps x | grep "fail2ban" | grep -v grep | awk -F "pts" '{print $1}')
apache=$(dpkg -l | grep apache2 | grep ii)
squid=$(dpkg -l | grep squid | grep ii)
dropbear=$(dpkg -l | grep dropbear | grep ii)
openssh=$(dpkg -l | grep openssh | grep ii)
stunnel4=$(dpkg -l | grep stunnel4 | grep ii)
[[ "$openssh" != "" ]] && s1="ssh"
[[ "$squid" != "" ]] && s2="squid"
[[ "$dropbear" != "" ]] && s3="dropbear"
[[ "$apache" != "" ]] && s4="apache"
[[ "$stunnel4" != "" ]] && s5="stunnel4"
remove_fail2ba() {
apt-get remove fail2ban -y &>/dev/null
service fail2ban stop &>/dev/null
kill $(ps ax | grep fail2ban | grep -v grep | awk '{print $1}') &>/dev/null
rm -rf /etc/SCRIPT-LATAM/fail2ban &>/dev/null
echo -e "\e[1;32m >> FAIL2BAN DESINTALADO CON EXITO << "
}
clear
clear
msg -bar
msg -tit
msg -bar
echo -e "\e[93m INSTALADOR FAIL2BAN "
echo -e "\e[97m ANTI DDOS y SPOOFING SPAM"
msg -bar
if [[ ! -z "$pid_fail" ]]; then
echo -e "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;91mDESINSTALAR FAIL2BAN"
echo -e "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;93mVER LOG DE REGISTROS"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > " && echo -e "\e[97m\033[1;41m VOLVER \033[0;37m"
msg -bar
echo -ne "\033[1;97m └⊳ Seleccione una opcion [0-2]: \033[1;32m" && read num
tput cuu1 && tput dl1
case "$num" in
1)
remove_fail2ba
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
;;
2)
cat /var/log/fail2ban.log
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
;;
*)
herramientas_fun
;;
esac
return 0
fi
echo -e "\e[1;92m CONFIRMAR INSTALACION DE FAIL2BAN?"
msg -bar
while [[ -z ${fail2ban} || ${fail2ban} != @(s|S|n|N|y|Y) ]]; do
echo -ne "\033[1;37mSeleccione una Opcion [S/N]: \033[1;32m" && read fail2ban
tput cuu1 && tput dl1
done
if [[ "$fail2ban" = @(s|S|y|Y) ]]; then
fun_bar "git clone https://github.com/fail2ban/fail2ban.git"
cd fail2ban &>/dev/null
sudo python setup.py install &>/dev/null
cp files/debian-initd /etc/init.d/fail2ban &>/dev/null
service fail2ban start &>/dev/null
echo '[INCLUDES]
before = paths-debian.conf
[DEFAULT]
ignoreip = 127.0.0.1/8
# ignorecommand = /path/to/command <ip>
ignorecommand =
bantime = 1036800
findtime = 3600
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
filter = %(__name__)s
destemail = root@localhost
sender = root@localhost
mta = sendmail
protocol = tcp
chain = INPUT
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mw = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
action_mwl = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
action_xarf = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath=%(logpath)s, port="%(port)s"]
action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
action_blocklist_de = blocklist_de[email="%(sender)s", service=%(filter)s, apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]
action_badips = badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]
action_badips_report = badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]
action = %(action_)s' >/etc/fail2ban/jail.local
echo -ne "\e[1;93m Fail2ban sera activo en los Siguientes\n >> Puertos y Servicos\n"
msg -bar
echo -ne "\n"
[ "$s1" != "" ] && echo -ne " $s1"
[ "$s2" != "" ] && echo -ne " $s2"
[ "$s3" != "" ] && echo -ne " $s3"
[ "$s4" != "" ] && echo -ne " $s4"
[ "$s5" != "" ] && echo -ne " $s5"
echo -ne "\n\n"
msg -bar
sleep 1
if [[ "$s1" != "" ]]; then
echo '[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
[sshd-ddos]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s' >>/etc/fail2ban/jail.local
else
echo '[sshd]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
[sshd-ddos]
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s' >>/etc/fail2ban/jail.local
fi
if [[ "$s2" != "" ]]; then
echo '[squid]
enabled = true
port = 80,443,3128,8080
logpath = /var/log/squid/access.log' >>/etc/fail2ban/jail.local
else
echo '[squid]
port = 80,443,3128,8080
logpath = /var/log/squid/access.log' >>/etc/fail2ban/jail.local
fi
if [[ "$s3" != "" ]]; then
echo '[dropbear]
enabled = true
port = ssh
logpath = %(dropbear_log)s
backend = %(dropbear_backend)s' >>/etc/fail2ban/jail.local
else
echo '[dropbear]
port = ssh
logpath = %(dropbear_log)s
backend = %(dropbear_backend)s' >>/etc/fail2ban/jail.local
fi
if [[ "$s4" != "" ]]; then
echo '[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s' >>/etc/fail2ban/jail.local
else
echo '[apache-auth]
port = http,https
logpath = %(apache_error_log)s' >>/etc/fail2ban/jail.local
fi
echo '[selinux-ssh]
port = ssh
logpath = %(auditd_log)s
[apache-badbots]
port = http,https
logpath = %(apache_access_log)s
bantime = 172800
maxretry = 1
[apache-noscript]
port = http,https
logpath = %(apache_error_log)s
[apache-overflows]
port = http,https
logpath = %(apache_error_log)s
maxretry = 2
[apache-nohome]
port = http,https
logpath = %(apache_error_log)s
maxretry = 2
[apache-botsearch]
port = http,https
logpath = %(apache_error_log)s
maxretry = 2
[apache-fakegooglebot]
port = http,https
logpath = %(apache_access_log)s
maxretry = 1
ignorecommand = %(ignorecommands_dir)s/apache-fakegooglebot <ip>
[apache-modsecurity]
port = http,https
logpath = %(apache_error_log)s
maxretry = 2
[apache-shellshock]
port = http,https
logpath = %(apache_error_log)s
maxretry = 1
[openhab-auth]
filter = openhab
action = iptables-allports[name=NoAuthFailures]
logpath = /opt/openhab/logs/request.log
[nginx-http-auth]
port = http,https
logpath = %(nginx_error_log)s
[nginx-limit-req]
port = http,https
logpath = %(nginx_error_log)s
[nginx-botsearch]
port = http,https
logpath = %(nginx_error_log)s
maxretry = 2
[php-url-fopen]
port = http,https
logpath = %(nginx_access_log)s
%(apache_access_log)s
[suhosin]
port = http,https
logpath = %(suhosin_log)s
[lighttpd-auth]
port = http,https
logpath = %(lighttpd_error_log)s
[roundcube-auth]
port = http,https
logpath = %(roundcube_errors_log)s
[openwebmail]
port = http,https
logpath = /var/log/openwebmail.log
[horde]
port = http,https
logpath = /var/log/horde/horde.log
[groupoffice]
port = http,https
logpath = /home/groupoffice/log/info.log
[sogo-auth]
port = http,https
logpath = /var/log/sogo/sogo.log
[tine20]
logpath = /var/log/tine20/tine20.log
port = http,https
[drupal-auth]
port = http,https
logpath = %(syslog_daemon)s
backend = %(syslog_backend)s
[guacamole]
port = http,https
logpath = /var/log/tomcat*/catalina.out
[monit]
#Ban clients brute-forcing the monit gui login
port = 2812
logpath = /var/log/monit
[webmin-auth]
port = 10000
logpath = %(syslog_authpriv)s
backend = %(syslog_backend)s
[froxlor-auth]
port = http,https
logpath = %(syslog_authpriv)s
backend = %(syslog_backend)s
[3proxy]
port = 3128
logpath = /var/log/3proxy.log
[proftpd]
port = ftp,ftp-data,ftps,ftps-data
logpath = %(proftpd_log)s
backend = %(proftpd_backend)s
[pure-ftpd]
port = ftp,ftp-data,ftps,ftps-data
logpath = %(pureftpd_log)s
backend = %(pureftpd_backend)s
[gssftpd]
port = ftp,ftp-data,ftps,ftps-data
logpath = %(syslog_daemon)s
backend = %(syslog_backend)s
[wuftpd]
port = ftp,ftp-data,ftps,ftps-data
logpath = %(wuftpd_log)s
backend = %(wuftpd_backend)s
[vsftpd]
port = ftp,ftp-data,ftps,ftps-data
logpath = %(vsftpd_log)s
[assp]
port = smtp,465,submission
logpath = /root/path/to/assp/logs/maillog.txt
[courier-smtp]
port = smtp,465,submission
logpath = %(syslog_mail)s
backend = %(syslog_backend)s
[postfix]
port = smtp,465,submission
logpath = %(postfix_log)s
backend = %(postfix_backend)s
[postfix-rbl]
port = smtp,465,submission
logpath = %(postfix_log)s
backend = %(postfix_backend)s
maxretry = 1
[sendmail-auth]
port = submission,465,smtp
logpath = %(syslog_mail)s
backend = %(syslog_backend)s
[sendmail-reject]
port = smtp,465,submission
logpath = %(syslog_mail)s
backend = %(syslog_backend)s
[qmail-rbl]
filter = qmail
port = smtp,465,submission
logpath = /service/qmail/log/main/current
[dovecot]
port = pop3,pop3s,imap,imaps,submission,465,sieve
logpath = %(dovecot_log)s
backend = %(dovecot_backend)s
[sieve]
port = smtp,465,submission
logpath = %(dovecot_log)s
backend = %(dovecot_backend)s
[solid-pop3d]
port = pop3,pop3s
logpath = %(solidpop3d_log)s
[exim]
port = smtp,465,submission
logpath = %(exim_main_log)s
[exim-spam]
port = smtp,465,submission
logpath = %(exim_main_log)s
[kerio]
port = imap,smtp,imaps,465
logpath = /opt/kerio/mailserver/store/logs/security.log
[courier-auth]
port = smtp,465,submission,imap3,imaps,pop3,pop3s
logpath = %(syslog_mail)s
backend = %(syslog_backend)s
[postfix-sasl]
port = smtp,465,submission,imap3,imaps,pop3,pop3s
logpath = %(postfix_log)s
backend = %(postfix_backend)s
[perdition]
port = imap3,imaps,pop3,pop3s
logpath = %(syslog_mail)s
backend = %(syslog_backend)s
[squirrelmail]
port = smtp,465,submission,imap2,imap3,imaps,pop3,pop3s,http,https,socks
logpath = /var/lib/squirrelmail/prefs/squirrelmail_access_log
[cyrus-imap]
port = imap3,imaps
logpath = %(syslog_mail)s
backend = %(syslog_backend)s
[uwimap-auth]
port = imap3,imaps
logpath = %(syslog_mail)s
backend = %(syslog_backend)s
[named-refused]
port = domain,953
logpath = /var/log/named/security.log
[nsd]
port = 53
action = %(banaction)s[name=%(__name__)s-tcp, port="%(port)s", protocol="tcp", chain="%(chain)s", actname=%(banaction)s-tcp]
%(banaction)s[name=%(__name__)s-udp, port="%(port)s", protocol="udp", chain="%(chain)s", actname=%(banaction)s-udp]
logpath = /var/log/nsd.log
[asterisk]
port = 5060,5061
action = %(banaction)s[name=%(__name__)s-tcp, port="%(port)s", protocol="tcp", chain="%(chain)s", actname=%(banaction)s-tcp]
%(banaction)s[name=%(__name__)s-udp, port="%(port)s", protocol="udp", chain="%(chain)s", actname=%(banaction)s-udp]
%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s"]
logpath = /var/log/asterisk/messages
maxretry = 10
[freeswitch]
port = 5060,5061
action = %(banaction)s[name=%(__name__)s-tcp, port="%(port)s", protocol="tcp", chain="%(chain)s", actname=%(banaction)s-tcp]
%(banaction)s[name=%(__name__)s-udp, port="%(port)s", protocol="udp", chain="%(chain)s", actname=%(banaction)s-udp]
%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s"]
logpath = /var/log/freeswitch.log
maxretry = 10
[mysqld-auth]
port = 3306
logpath = %(mysql_log)s
backend = %(mysql_backend)s
[recidive]
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
bantime = 604800 ; 1 week
findtime = 86400 ; 1 day
[pam-generic]
banaction = %(banaction_allports)s
logpath = %(syslog_authpriv)s
backend = %(syslog_backend)s
[xinetd-fail]
banaction = iptables-multiport-log
logpath = %(syslog_daemon)s
backend = %(syslog_backend)s
maxretry = 2
[stunnel]
logpath = /var/log/stunnel4/stunnel.log
[ejabberd-auth]
port = 5222
logpath = /var/log/ejabberd/ejabberd.log
[counter-strike]
logpath = /opt/cstrike/logs/L[0-9]*.log
# Firewall: http://www.cstrike-planet.com/faq/6
tcpport = 27030,27031,27032,27033,27034,27035,27036,27037,27038,27039
udpport = 1200,27000,27001,27002,27003,27004,27005,27006,27007,27008,27009,27010,27011,27012,27013,27014,27015
action = %(banaction)s[name=%(__name__)s-tcp, port="%(tcpport)s", protocol="tcp", chain="%(chain)s", actname=%(banaction)s-tcp]
%(banaction)s[name=%(__name__)s-udp, port="%(udpport)s", protocol="udp", chain="%(chain)s", actname=%(banaction)s-udp]
[nagios]
logpath = %(syslog_daemon)s ; nrpe.cfg may define a different log_facility
backend = %(syslog_backend)s
maxretry = 1
[directadmin]
logpath = /var/log/directadmin/login.log
port = 2222
[portsentry]
logpath = /var/lib/portsentry/portsentry.history
maxretry = 1
[pass2allow-ftp]
# this pass2allow example allows FTP traffic after successful HTTP authentication
port = ftp,ftp-data,ftps,ftps-data
# knocking_url variable must be overridden to some secret value in filter.d/apache-pass.local
filter = apache-pass
# access log of the website with HTTP auth
logpath = %(apache_access_log)s
blocktype = RETURN
returntype = DROP
bantime = 3600
maxretry = 1
findtime = 1
[murmur]
port = 64738
action = %(banaction)s[name=%(__name__)s-tcp, port="%(port)s", protocol=tcp, chain="%(chain)s", actname=%(banaction)s-tcp]
%(banaction)s[name=%(__name__)s-udp, port="%(port)s", protocol=udp, chain="%(chain)s", actname=%(banaction)s-udp]
logpath = /var/log/mumble-server/mumble-server.log
[screensharingd]
logpath = /var/log/system.log
logencoding = utf-8
[haproxy-http-auth]
logpath = /var/log/haproxy.log' >>/etc/fail2ban/jail.local
service fail2ban restart
systemctl daemon-reload
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
fi
}
#---ARCHIVOS ONLINE
ftp_apache() {
clear && clear
fun_ip() {
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && echo "$MEU_IP2" || echo "$MEU_IP"
}
IP="$(fun_ip)"
list_archivos() {
[[ $(find /var/www/html -name index.html | grep -w "index.html" | head -1) ]] &>/dev/null || {
echo -e "\e[1;31m SIN REGITROS A UN "
msg -bar
return
}
[[ -z $(ls /var/www/html) ]] && echo -e "" || {
for my_arqs in $(ls /var/www/html); do
[[ "$my_arqs" = "index.html" ]] && continue
[[ "$my_arqs" = "index.php" ]] && continue
[[ -d "$my_arqs" ]] && continue
echo -e "\033[1;31m[$my_arqs] \033[1;36mhttp://$IP:81/$my_arqs\033[0m"
done
msg -bar
}
}
borar_archivos() {
[[ $(find /var/www/html -name index.html | grep -w "index.html" | head -1) ]] &>/dev/null || {
echo -e "\e[1;31m SIN REGITROS A UN "
msg -bar
return
}
i="1"
[[ -z $(ls /var/www/html) ]] && echo -e "" || {
for my_arqs in $(ls /var/www/html); do
[[ "$my_arqs" = "index.html" ]] && continue
[[ "$my_arqs" = "index.php" ]] && continue
[[ -d "$my_arqs" ]] && continue
select_arc[$i]="$my_arqs"
echo -e "${cor[2]}[$i] > ${cor[3]}$my_arqs - \033[1;36mhttp://$IP:81/$my_arqs\033[0m"
let i++
done
msg -bar
echo -e "${cor[5]}Seleccione el archivo que desea borrar"
msg -bar
i=$(($i - 1))
# while [[ -z ${select_arc[$slct]} ]]; do
read -p " [1-$i]: " slct
tput cuu1 && tput dl1
# done
arquivo_move="${select_arc[$slct]}"
[[ -d /var/www/html ]] && [[ -e /var/www/html/$arquivo_move ]] && rm -rf /var/www/html/$arquivo_move >/dev/null 2>&1
[[ -e /var/www/$arquivo_move ]] && rm -rf /var/www/$arquivo_move >/dev/null 2>&1
echo -e "\e[1;32m >> Completado con Exito!"
msg -bar
}
}
subir_archivo() {
i="1"
[[ -z $(ls $HOME) ]] && echo -e "" || {
for my_arqs in $(ls $HOME); do
[[ -d "$my_arqs" ]] && continue
select_arc[$i]="$my_arqs"
echo -e "${cor[2]} [$i] > ${cor[3]}$my_arqs"
let i++
done
i=$(($i - 1))
msg -bar
echo -e "${cor[5]}Seleccione el archivo"
msg -bar
# while [[ -z ${select_arc[$slct]} ]]; do
read -p " [1-$i]: " slct
tput cuu1 && tput dl1
#done
arquivo_move="${select_arc[$slct]}"
[ ! -d /var ] && mkdir /var
[ ! -d /var/www ] && mkdir /var/www
[ ! -d /var/www/html ] && mkdir /var/www/html
[ ! -e /var/www/html/index.html ] && touch /var/www/html/index.html
[ ! -e /var/www/index.html ] && touch /var/www/index.html
chmod -R 755 /var/www
cp $HOME/$arquivo_move /var/www/$arquivo_move
cp $HOME/$arquivo_move /var/www/html/$arquivo_move
echo -e "\033[1;36m http://$IP:81/$arquivo_move\033[0m"
msg -bar
echo -e "\e[1;32m >> Completado con Exito!"
msg -bar
}
}
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m GESTOR FTP VIA APACHE DIRECTO"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \033[1;97m COLOCAR ARCHIVO OLINE\e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m QUITAR ARCHIVO ONLINE\e[97m \n"
echo -ne " \e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \033[1;97m VER ARCHIVOS ONLINE\e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;37mEscoja una Opcion: "
read optons
tput cuu1 && tput dl1
case $optons in
3)
list_archivos
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
ftp_apache
;;
2)
borar_archivos
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
ftp_apache
;;
1)
subir_archivo
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
ftp_apache
;;
*)
msg -bar
herramientas_fun
;;
esac
}
#---NOTIBOT
noti_bot() {
add_id() {
echo -ne "\033[1;37mDIGITE SU ID NUMERICO DE TELEGRAM: \e[1;32m" && read idtele
tput cuu1 && tput dl1
echo -ne "\033[1;37mDIGITE SU ID NUMERICO DE GRUPO TELEGRAM: \e[1;32m" && read -p " " -e -i "Enter-OFF" idgrupo
tput cuu1 && tput dl1
echo -ne "\033[1;37mDIGITE NOMBRE PARA IDENTIFICAR VPS: \e[1;32m" && read nomvps
tput cuu1 && tput dl1
echo -e "\e[1;93m >> Su ID:\e[1;31m$idtele \e[1;93ma sido registrado"
echo -e "\e[1;93m >> Su ID-GRUPO:\e[1;31m$idgrupo \e[1;93ma sido registrado"
echo -e "\e[1;93m >> Nombre VPS:\e[1;31m$nomvps \e[1;93ma sido registrado"
echo "$idtele" >/etc/SCRIPT-LATAM/temp/idtelegram
echo "-100$idgrupo" >/etc/SCRIPT-LATAM/temp/idgrupo
echo "$nomvps" >/etc/SCRIPT-LATAM/temp/vpstelegram
msg -bar
}
del_noti() {
echo -e "\033[1;37mREGISTRO DE NOTIBOT BORRADO \e[1;32m"
echo "00000000" >/etc/SCRIPT-LATAM/temp/idtelegram
echo "00000000" >/etc/SCRIPT-LATAM/temp/vpstelegram
echo "00000000" >/etc/SCRIPT-LATAM/temp/idgrupo
msg -bar
}
msg_test() {
echo -e "\033[1;32m SE ENVIO UN MESAJE DE PRUEBA AL BOT\n\e[1;93m >> @Noty_LATAM_bot \e[1;32m"
NOM=$(less /etc/SCRIPT-LATAM/temp/idtelegram) >/dev/null 2>&1
ID=$(echo $NOM) >/dev/null 2>&1
NOMG=$(less /etc/SCRIPT-LATAM/temp/idgrupo) >/dev/null 2>&1
IDG=$(echo $NOMG) >/dev/null 2>&1
NOM2=$(less /etc/SCRIPT-LATAM/temp/vpstelegram) >/dev/null 2>&1
VPS=$(echo $NOM2) >/dev/null 2>&1
KEY="5179637690:AAExt2gHMurxUmuJghfhghBCHg-D0Uzlt0rM"
TIMEOUT="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"
SONIDO="0"
TEXTO="🟢 >> MENSAJE DE PRUEBA EXITOSO <<\n ▫️ VPS: $VPS "
curl -s --max-time $TIMEOUT -d "parse_mode=Markdown&disable_notification=$SONIDO&chat_id=$ID&disable_web_page_preview=1&text=$(echo -e "$TEXTO")" $URL &>/dev/null
echo "" &>/dev/null
curl -s --max-time $TIMEOUT -d "parse_mode=Markdown&disable_notification=$SONIDO&chat_id=$IDG&disable_web_page_preview=1&text=$(echo -e "$TEXTO")" $URL &>/dev/null
echo "" &>/dev/null
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m ACTIVAR NOTI-BOT"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \033[1;97m AGREGAR SU ID y NOMBRE DEL VPS\e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DESACTIVAR NOTIFICACIONES\e[97m \n"
echo -ne " \e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \033[1;97m EJECUTAR MENSAJE DE PRUEBA \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;37mEscoja una Opcion: \e[1;31m" && read optons
tput cuu1 && tput dl1
case $optons in
3)
msg_test
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
noti_bot
;;
2)
del_noti
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
noti_bot
;;
1)
add_id
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
noti_bot
;;
*)
msg -bar
herramientas_fun
;;
esac
}
#--- TOKEN GENERAL
token_ge() {
clear && clear
msg -bar2
msg -tit
msg -bar2
msg -ama " CAMBIAR TOKEN GENERAL"
msg -bar2
echo -ne "\e[1;97mDIGITE SU NUEVO TOKEN GENERAL:\e[1;32m " && read passgeneral
tput cuu1 && tput dl1
echo -e "\e[1;97m Nuevo Token General:\e[1;32m $passgeneral"
echo "$passgeneral" >/etc/SCRIPT-LATAM/temp/.passw
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
#--- RECUPERAR BASE DE USER
recuperar_base() {
clear && clear
msg -bar2
msg -tit
msg -bar2
msg -ama " RECUPERAR BASE DE USER"
msg -bar2
rm -rf /etc/SCRIPT-LATAM/backuplog/principal >/dev/null 2>&1
i="1"
[[ -z $(ls /etc/SCRIPT-LATAM/backuplog) ]] && echo -e "" || {
for my_arqs in $(ls /etc/SCRIPT-LATAM/backuplog); do
[[ -d "$my_arqs" ]] && continue
select_arc[$i]="$my_arqs"
echo -e "\e[1;93m [\e[1;92m$i\e[1;93m] \e[1;91m> \e[1;97m$my_arqs"
let i++
done
i=$(($i - 1))
msg -bar
echo -e "\e[1;93m Seleccione el archivo"
msg -bar
# while [[ -z ${select_arc[$slct]} ]]; do
read -p " [1-$i]: " slct
tput cuu1 && tput dl1
#done
backselect="${select_arc[$slct]}"
cd /etc/SCRIPT-LATAM/backuplog
file="$backselect"
tar -xzvf ./$file
cat /etc/SCRIPT-LATAM/backuplog/principal/cuentassh >/etc/SCRIPT-LATAM/cuentassh
cat /etc/SCRIPT-LATAM/backuplog/principal/cuentahwid >/etc/SCRIPT-LATAM/cuentahwid
cat /etc/SCRIPT-LATAM/backuplog/principal/cuentatoken >/etc/SCRIPT-LATAM/cuentatoken
cd
msg -bar
echo -e "\e[1;32m >> Completado con Exito!"
}
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
#--- CHEKER USER APKS
chekc_users() {
clear && clear
msg -bar2
msg -tit
msg -bar2
msg -ama " CHECK USER APKS"
msg -bar2
verif_ptrs() {
porta=$1
PT=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
for pton in $(echo -e "$PT" | cut -d: -f2 | cut -d' ' -f1 | uniq); do
svcs=$(echo -e "$PT" | grep -w "$pton" | awk '{print $1}' | uniq)
[[ "$porta" = "$pton" ]] && {
echo -e "\n\033[1;31mPUERTO \033[1;33m$porta \033[1;31mEN USO PELO \033[1;37m$svcs\033[0m"
sleep 3
fun_initcheck
}
done
}
fun_bar() {
comando[0]="$1"
comando[1]="$2"
(
[[ -e $HOME/fim ]] && rm $HOME/fim
${comando[0]} >/dev/null 2>&1
${comando[1]} >/dev/null 2>&1
touch $HOME/fim
) >/dev/null 2>&1 &
tput civis
echo -ne "\033[1;33m ESPERE \033[1;37m- \033[1;33m["
while true; do
for ((i = 0; i < 18; i++)); do
echo -ne "\033[1;31m#"
sleep 0.1s
done
[[ -e $HOME/fim ]] && rm $HOME/fim && break
echo -e "\033[1;33m]"
sleep 1s
tput cuu1
tput dl1
echo -ne "\033[1;33m ESPERE \033[1;37m- \033[1;33m["
done
echo -e "\033[1;33m]\033[1;37m -\033[1;32m OK !\033[1;37m"
tput cnorm
}
fun_initcheck() {
var_sks1=$(ps x | grep "checkuser" | grep -v grep >/dev/null && echo -e "\033[1;32m [ ON ]" || echo -e "\033[1;31m [ OFF ] ")
var_sks2=$(ps x | grep "4gcheck" | grep -v grep >/dev/null && echo -e "\033[1;32m [ ON ]" || echo -e "\033[1;31m [ OFF ]")
echo -e " \033[1;31m[\033[1;36m 1 \033[1;31m] \033[1;37m• \033[1;97mACTIVAR / DESACTIVAR (BASICO) $var_sks1 \033[0m"
echo -e " \033[1;31m[\033[1;36m 2 \033[1;31m] \033[1;37m• \033[1;97mACTIVAR / DESACTIVAR (PLUS) $var_sks2 \033[0m"
msg -bar2
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;37m"
msg -bar2
echo -ne "\033[1;97m └⊳ Seleccione una Opcion:\033[1;33m "
read resposta
if [[ "$resposta" = '1' ]]; then
if ps x | grep -w checkuser | grep -v grep 1>/dev/null 2>/dev/null; then
for i in {1..3}; do tput cuu 1 && tput el; done
echo ""
echo -e "\E[1;92m CHECKUSER(BASICO) \E[0m"
echo ""
fun_stopbad() {
screen -r -S "checkuser" -X quit
rm -rf /bin/check
[[ $(grep -wc "check.py" /etc/autostart) != '0' ]] && {
sed -i '/check.py/d' /etc/autostart
}
sleep 1
screen -wipe >/dev/null
}
echo -e " \033[1;91mDESACTIVANDO CHECKUSER(BASICO)\033[1;33m"
fun_stopbad
echo ""
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
else
for i in {1..3}; do tput cuu 1 && tput el; done
echo ""
echo -e "\e[48;5;40m\e[38;5;0m ACTIVANDO CHECKUSER (BASICO) \E[0m"
echo ""
echo -ne "\033[1;97mCUAL \033[1;91mPUERTO \033[1;32mDESEA ULTILIZAR \033[1;33m?\033[1;37m: "
read porta
[[ $porta != ?(+|-)+([0-9]) ]] && {
echo ""
echo -e "\033[1;31mPuerto Invalido!"
sleep 3
clear
fun_initcheck
}
verif_ptrs $porta
fun_check() {
screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/check.py $porta 1
[[ $(grep -wc "check.py" /etc/autostart) = '0' ]] && {
echo -e "netstat -tlpn | grep -w $porta > /dev/null || { screen -r -S 'ws' -X quit; screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/check.py $porta 1; }" >>/etc/autostart
} || {
sed -i '/check.py/d' /etc/autostart
echo -e "netstat -tlpn | grep -w $porta > /dev/null || { screen -r -S 'ws' -X quit; screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/check.py $porta 1; }" >>/etc/autostart
}
sleep 1
}
fun_check2() {
screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/check.py $porta 2
[[ $(grep -wc "check.py" /etc/autostart) = '0' ]] && {
echo -e "netstat -tlpn | grep -w $porta > /dev/null || { screen -r -S 'ws' -X quit; screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/check.py $porta 2; }" >>/etc/autostart
} || {
sed -i '/check.py/d' /etc/autostart
echo -e "netstat -tlpn | grep -w $porta > /dev/null || { screen -r -S 'ws' -X quit; screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/check.py $porta 2; }" >>/etc/autostart
}
sleep 1
}
echo ""
echo -e "\033[1;97mSELECIONE TIPO DE FORMATO.\033[0m"
echo ""
echo -e "\033[1;31m[\033[1;36m1\033[1;31m] \033[1;37m• \033[1;33mFORMATO YYYY/MM/DD (MAS COMUN)\033[0m"
echo -e "\033[1;31m[\033[1;36m2\033[1;31m] \033[1;37m• \033[1;33mFORMATO DD/MM/YYYY\033[0m"
echo ""
echo -ne "\033[1;36mOpcion: \033[1;37m"
read resposta
if [[ "$resposta" = '1' ]]; then
echo ""
fun_bar 'fun_check'
elif [[ "$resposta" = '2' ]]; then
echo ""
fun_bar 'fun_check2'
else
echo ""
echo -e "\033[1;31mOpcion Invalida !\033[0m"
sleep 3
fun_initcheck
fi
echo ""
echo -e "\033[1;32m CHECKUSER(BASICO) ACTIVADO CON EXITO\033[1;33m"
echo ""
echo -e " URL: \033[1;97mhttp://$(meu_ip):$porta/checkUser"
echo ""
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
fi
elif [[ "$resposta" = '2' ]]; then
if ps x | grep -w 4gcheck | grep -v grep 1>/dev/null 2>/dev/null; then
echo ""
echo -e "\E[1;92m CHECKUSER(PLUS) \E[0m"
echo ""
fun_stopbad() {
screen -r -S "4gcheck" -X quit
[[ $(grep -wc "4gcheck.py" /etc/autostart) != '0' ]] && {
sed -i '/4gcheck.py/d' /etc/autostart
}
sleep 1
screen -wipe >/dev/null
}
echo -e " \033[1;91mDESACTIVANDO CHECKUSER(PLUS)\033[1;33m"
fun_stopbad
echo ""
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
else
echo ""
echo -e "\e[48;5;40m\e[38;5;0m ACTIVANDO CHECKUSER (PLUS) \E[0m"
echo ""
echo -ne "\033[1;97mCUAL \033[1;91mPUERTO \033[1;32mDESEA ULTILIZAR \033[1;33m?\033[1;37m: "
read porta
[[ $porta != ?(+|-)+([0-9]) ]] && {
echo ""
echo -e "\033[1;31mPuerto Invalido!"
sleep 3
fun_initcheck
}
verif_ptrs $porta
fun_udpon() {
screen -dmS 4gcheck python3 /etc/SCRIPT-LATAM/filespy/4gcheck.py $porta
[[ $(grep -wc "4gcheck.py" /etc/autostart) = '0' ]] && {
echo -e "netstat -tlpn | grep -w $porta > /dev/null || { screen -r -S 'ws' -X quit; screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/4gcheck.py $porta; }" >>/etc/autostart
} || {
sed -i '/check.py/d' /etc/autostart
echo -e "netstat -tlpn | grep -w $porta > /dev/null || { screen -r -S 'ws' -X quit; screen -dmS checkuser python3 /etc/SCRIPT-LATAM/filespy/4gcheck.py $porta; }" >>/etc/autostart
}
sleep 1
}
echo ""
fun_bar 'fun_udpon'
echo ""
echo -e "\033[1;32m CHECKUSER(PLUS) ACTIVADO CON EXITO\033[1;33m"
echo ""
echo -e " URL: \033[1;97mhttp://$(meu_ip):$porta/checkUser"
echo ""
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
fi
read -t 120 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
fun_initcheck
fi
}
inst_depedencias() {
# ehck installed pip3
if ! [ -x "$(command -v pip3)" ]; then
echo 'Error: pip3 no esta instalado.' >&2
echo 'Instale pip3 .' >&2
if ! apt-get install -y python3-pip; then
echo 'Erro ao instalar pip3' >&2
exit 1
else
echo 'Instalado pip3 con exito'
fi
fi
# install flask
apt install python -y >/dev/null 2>&1
pip3 install flask >/dev/null 2>&1
echo "by: @LATAM" >/usr/lib/licence
mkdir -p /etc/rec
echo "by: @LATAM" >/etc/rec/licence
# download check.py
[[ -e "/etc/SCRIPT-LATAM/filespy/check.py" ]] && {
sleep 0.1
} || {
wget -O /etc/SCRIPT-LATAM/filespy/check.py https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/check.py &>/dev/null
chmod +rwx /etc/SCRIPT-LATAM/filespy/check.py
}
[[ -e "/etc/SCRIPT-LATAM/filespy/4gcheck.py" ]] && {
sleep 0.1
} || {
wget -O /etc/SCRIPT-LATAM/filespy/4gcheck.py https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/4gcheck.py &>/dev/null
chmod +rwx /etc/SCRIPT-LATAM/filespy/4gcheck.py
}
[[ -e "/bin/check" ]] && {
sleep 0.1
} || {
wget -O /bin/check https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/check &>/dev/null
chmod 777 /bin/check
}
}
[[ -e "/etc/SCRIPT-LATAM/filespy/check.py" ]] && [[ -e "/etc/SCRIPT-LATAM/filespy/4gcheck.py" ]] && [[ -e "/bin/check" ]] && {
fun_initcheck
} || {
echo -e "\n\033[1;97m SE INSTALARA EL WEBHOOK DE APK PERSONALES \033[0m"
echo ""
echo -ne "\033[1;32m Proceder con la Instalacion ? \033[1;33m[\033[1;97ms \033[1;37m/ n\033[1;33m]:\033[1;32m "
read resposta
[[ "$resposta" = 's' ]] && {
echo -e "\n\033[1;32m Instalando CHECKUSER"
echo ""
fun_bar 'inst_depedencias'
fun_initcheck
} || {
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
}
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
chekc_online() {
##-->> DESCARGAR ARHIVO
if [ -e "/etc/SCRIPT-LATAM/chekerapp/onlineapp.sh" ]; then
clear && clear
msg -bar2
msg -tit
msg -bar2
msg -ama " CHEKER ONLINES APKS"
msg -bar2
echo -e "\033[1;97m ELIMINANDO ONLINES APKS \033[0m"
rm -rf /etc/SCRIPT-LATAM/chekerapp/onlineapp.sh
service apache2 stop &>/dev/null
sed -i '/\/etc\/SCRIPT-LATAM\/chekerapp\/onlineapp\.sh/d' /etc/crontab
service cron reload &>/dev/null
else
clear && clear
msg -bar2
msg -tit
msg -bar2
msg -ama " CHEKER ONLINES APKS"
msg -bar2
echo -e "\033[1;97m SE INSTALARAN LOS PAQUETES CORRESPONDIENTES \033[0m"
apt-get update &>/dev/null
apt-get install apache2 -y &>/dev/null
fun_bar "apt-get install apache2 -y &>/dev/null "
sed -i 's/Listen 80/Listen 8888/' /etc/apache2/ports.conf
sed -i 's/:80>/:8888>/' /etc/apache2/sites-available/000-default.conf
service apache2 restart &>/dev/null
mkdir -p /var/www/html/server
mkdir -p /etc/SCRIPT-LATAM/chekerapp
wget -O /etc/SCRIPT-LATAM/chekerapp/onlineapp.sh https://raw.githubusercontent.com/NT-GIT-HUB/StatusServer/main/onlineapp.sh &>/dev/null
chmod +rwx /etc/SCRIPT-LATAM/chekerapp/onlineapp.sh
/etc/SCRIPT-LATAM/chekerapp/onlineapp.sh &>/dev/null
agregar_tarea_cron() {
local script="/etc/SCRIPT-LATAM/chekerapp/onlineapp.sh"
local tarea="*/1 * * * * root /bin/bash ${script}"
echo "${tarea}" >>/etc/crontab
}
agregar_tarea_cron
service cron reload &>/dev/null
ufw allow 8888/tcp &>/dev/null
check_apache_port() {
if netstat -tln | grep -q :8888; then
echo ""
echo -e "\n\033[1;32m CHECK ONLINES STATUS \033[1;32m ON \033[1;33m"
else
echo ""
echo -e "\n\033[1;32m CHECK ONLINES STATUS \033[1;31mOFF \033[1;33m"
fi
}
check_apache_port
echo -e " URL: \033[1;97mhttp://$(meu_ip):8888:/server/online"
fi
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
herramientas_fun
}
#---FUNCION HERRAMIENTAS
herramientas_fun() {
clear && clear
tput cuu1 && tput dl1
msg -bar2
msg -tit
msg -bar2
msg -ama " MENU DE HERRAMIENTAS"
msg -bar2
var_sks1=$(ps x | grep "checkuser" | grep -v grep >/dev/null && echo -e "\033[1;32m ON BASICO" || echo -e "\033[1;31mOFF BASICO")
var_sks2=$(ps x | grep "4gcheck" | grep -v grep >/dev/null && echo -e "\033[1;32mON PLUS" || echo -e "\033[1;31mOFF PLUS ")
chonlines=$(netstat -tln | grep -q :8888 >/dev/null && echo -e "\033[1;32m ON " || echo -e "\033[1;31mOFF")
local Numb=1
echo -e " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m GESTOR DE CUENTAS VIA BOT TELEGRAM "
script[$Numb]="LATAMbot.sh"
let Numb++
echo -e " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m FIX BASE DE USER "
script[$Numb]="fixbaseuser"
let Numb++
echo -e " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m CHECK USER APK [ $var_sks1 \033[1;97m| $var_sks2\033[1;97m] "
script[$Numb]="chekcusers"
let Numb++
echo -e " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m CHECK ONLINES APK [ $chonlines \033[1;97m] "
script[$Numb]="checkonlines"
#echo -e "\033[1;93m--------------------OPTIMIZADORES-------------------"
echo -e "\033[1;93m--------------------- EXTRAS -----------------------"
let Numb++
echo -ne " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m ALERTAS NOTY-BOT "
script[$Numb]="notibot"
let Numb++
echo -ne " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m FTP X APACHE\n"
script[$Numb]="ftpapache"
let Numb++
echo -ne " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m ACTIVAR (BBR/PLUS) "
script[$Numb]="bbr"
let Numb++
echo -ne " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m TOKEN GENERAL\n"
script[$Numb]="tokengeneral"
echo -e "\033[1;93m-------------------- SEGURIDAD ---------------------"
let Numb++
echo -ne " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m FAIL2BAN PROTECION "
script[$Numb]="fai2ban"
let Numb++
echo -e " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m PASS PROXY SQUID "
script[$Numb]="passsquid"
echo -e "\033[1;93m------------------ AJUSTES DEL VPS -----------------"
let Numb++
echo -ne " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m AJUSTES INTERNOS "
script[$Numb]="ajustein"
let Numb++
echo -e "\e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m HORARIO LOCAL "
script[$Numb]="horalocal"
let Numb++
echo -ne " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m AGREGAR DNS UNLOCK'S "
script[$Numb]="dnsunlock"
let Numb++
echo -e "\e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;97m SPEED TEST VPS "
script[$Numb]="speed"
echo -e "\033[1;93m----------------------------------------------------"
let Numb++
echo -e " \e[1;93m[\e[1;32m$Numb\e[1;93m]\033[1;31m >\033[1;96m - - - >> DETALLES DE SISTEMA << - - - - - "
script[$Numb]="systeminf"
msg -bar
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;97m"
script[0]="voltar"
msg -bar2
selection=$(selection_fun $Numb)
[[ -e "${SCPfrm}/${script[$selection]}" ]] && {
${SCPfrm}/${script[$selection]}
} || {
case ${script[$selection]} in
#"agregar")agregar_ferramenta;;
"speed") speed_test ;;
"limpar") limpar_caches ;;
"systeminf") systen_info ;;
"horalocal") hora_local ;;
"ajustein") ajuste_in ;;
"dnsunlock") dns_unlock ;;
"bbr") bbr_fun ;;
"passsquid") pass_squid ;;
"fai2ban") fai2ban_fun ;;
"ftpapache") ftp_apache ;;
"notibot") noti_bot ;;
"tokengeneral") token_ge ;;
"fixbaseuser") recuperar_base ;;
"chekcusers") chekc_users ;;
"checkonlines") chekc_online ;;
*) menu ;;
esac
}
exit 0
}
#--- MONITOR PID DE PROTOCOLOS
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[ON]" || echo -e "\033[1;31m[ OFF ]"
}
# MENU FLUTUANTE
menu_func() {
local options=${#@}
local array
for ((num = 1; num <= $options; num++)); do
echo -ne " $(msg -verd "[$num]") $(msg -verm2 "=>>") "
array=(${!num})
case ${array[0]} in
"-vd") msg -verd "\033[1;33m[!]\033[1;32m ${array[@]:1}" | sed ':a;N;$!ba;s/\n/ /g' ;;
"-vm") msg -verm2 "\033[1;33m[!]\033[1;31m ${array[@]:1}" | sed ':a;N;$!ba;s/\n/ /g' ;;
"-fi") msg -azu "${array[@]:2} ${array[1]}" | sed ':a;N;$!ba;s/\n/ /g' ;;
*) msg -azu "${array[@]}" | sed ':a;N;$!ba;s/\n/ /g' ;;
esac
done
}
#--- MONITOR DE PROTOCOLOS AUTO
monservi_fun() {
clear && clear
#AUTO INICIAR
automprotos() {
echo '#!/bin/sh -e' >/etc/rc.local
sudo chmod +x /etc/rc.local
echo "sudo rebootnb reboot" >>/etc/rc.local
echo "sudo rebootnb resetprotos" >>/etc/rc.local
}
autobadvpn() {
echo "sudo rebootnb resetbadvpn" >>/etc/rc.local
}
autowebsoket() {
echo "sudo rebootnb resetwebsocket" >>/etc/rc.local
}
autolimitador() {
echo "sudo rebootnb resetlimitador" >>/etc/rc.local
}
autodesbloqueador() {
echo "sudo rebootnb resetdesbloqueador" >>/etc/rc.local
}
#MONITOREAR
monssh() {
echo "resetssh" >/etc/SCRIPT-LATAM/temp/monitorpt
}
mondropbear() {
echo "resetdropbear" >>/etc/SCRIPT-LATAM/temp/monitorpt
}
monssl() {
echo "resetssl" >>/etc/SCRIPT-LATAM/temp/monitorpt
}
monsquid() {
echo "resetsquid" >>/etc/SCRIPT-LATAM/temp/monitorpt
}
monapache() {
echo "resetapache" >>/etc/SCRIPT-LATAM/temp/monitorpt
}
monv2ray() {
echo "resetv2ray" >>/etc/SCRIPT-LATAM/temp/monitorpt
}
monwebsoket() {
echo "resetwebp" >>/etc/SCRIPT-LATAM/temp/monitorpt
}
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m MONITOR DE SERVICIONS PRINCIPALES"
msg -bar
#AUTO INICIOS
PIDVRF3="$(ps aux | grep "monitorproto" | grep -v grep | awk '{print $2}')"
if [[ -z $PIDVRF3 ]]; then
echo -e "\e[1;32m >>> AUTO INICIOS"
echo -ne "\e[1;96m # Iniciar M-PROTOCOLOS ante reboot\e[1;93m [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read automprotos
echo '#!/bin/sh -e' >/etc/rc.local
sudo chmod +x /etc/rc.local
echo "sudo rebootnb reboot" >>/etc/rc.local
[[ "$automprotos" = "s" || "$automprotos" = "S" ]] && automprotos
echo -ne "\e[1;97m Iniciar BADVPN ante reboot\e[1;93m ....... [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read autobadvpn
[[ "$autobadvpn" = "s" || "$autobadvpn" = "S" ]] && autobadvpn
echo -ne "\e[1;97m Iniciar PROXY-WEBSOKET ante reboot\e[1;93m [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read autowebsoket
[[ "$autowebsoket" = "s" || "$autowebsoket" = "S" ]] && autowebsoket
echo -ne "\e[1;97m Iniciar LIMITADOR ante reboot\e[1;93m .... [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read autolimitador
[[ "$autolimitador" = "s" || "$autolimitador" = "S" ]] && autolimitador
echo -ne "\e[1;97m Iniciar DESBLOQUEADOR ante reboot\e[1;93m [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read autodesbloqueador
[[ "$autodesbloqueador" = "s" || "$autodesbloqueador" = "S" ]] && autodesbloqueador
echo "sleep 2s" >>/etc/rc.local
echo "exit 0" >>/etc/rc.local
msg -bar
echo -e "\e[1;32m >>> MONITOR DE PROTOCOLOS"
echo -ne "\e[1;97m Monitorear SSH\e[1;93m ................... [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read monssh
echo "null" >/etc/SCRIPT-LATAM/temp/monitorpt
[[ "$monssh" = "s" || "$monssh" = "S" ]] && monssh
echo -ne "\e[1;97m Monitorear DROPBEAR\e[1;93m .............. [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read mondropbear
[[ "$mondropbear" = "s" || "$mondropbear" = "S" ]] && mondropbear
echo -ne "\e[1;97m Monitorear SSL\e[1;93m ................... [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read monssl
[[ "$monssl" = "s" || "$monssl" = "S" ]] && monssl
echo -ne "\e[1;97m Monitorear SQUID\e[1;93m ................. [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read monsquid
[[ "$monsquid" = "s" || "$monsquid" = "S" ]] && monsquid
echo -ne "\e[1;97m Monitorear APACHE\e[1;93m ................ [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read monapache
[[ "$monapache" = "s" || "$monapache" = "S" ]] && monapache
echo -ne "\e[1;97m Monitorear V2RAY\e[1;93m ................. [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read monv2ray
[[ "$monv2ray" = "s" || "$monv2ray" = "S" ]] && monv2ray
echo -ne "\e[1;97m Monitorear PROXY WEBSOCKET\e[1;93m ....... [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read monwebsoket
[[ "$monwebsoket" = "s" || "$monwebsoket" = "S" ]] && monwebsoket
msg -bar
echo -ne "\033[1;96m ¿Cada cuantos segundos ejecutar el Monitor?\n\033[1;97m +Segundos = -Uso de CPU | -Segundos = +Uso de CPU\033[0;92m \n Predeterminado:\033[1;37m 120s\n Cuantos Segundos (Numeros Unicamente): " && read tiemmoni
error() {
msg -verm "Tiempo invalido,se ajustara a 120s (Tiempo por Defeto)"
sleep 5s
tput cuu1
tput dl1
tput cuu1
tput dl1
tiemmoni="120"
echo "${tiemmoni}" >/etc/SCRIPT-LATAM/temp/T-Mon
}
#[[ -z "$tiemmoni" ]] && tiemmoni="120"
if [[ "$tiemmoni" != +([0-9]) ]]; then
error
fi
[[ -z "$tiemmoni" ]] && tiemmoni="120"
if [ "$tiemmoni" -lt "120" ]; then
error
fi
echo "${tiemmoni}" >/etc/SCRIPT-LATAM/temp/T-Mon
screen -dmS monitorproto watch -n $tiemmoni /etc/SCRIPT-LATAM/menu.sh "monitorservi"
else
for pid in $(echo $PIDVRF3); do
screen -S monitorproto -p 0 -X quit
rm -rf /etc/rc.local >/dev/null 2>&1
done
fi
[[ -z ${VERY3} ]] && monitorservi="\033[1;32m ACTIVADO " || monitorservi="\033[1;31m DESACTIVADO "
echo -e " $monitorservi -- CON EXITO"
msg -bar
}
#--- EJECUTOR MOTITOR DE PROTOCOLOS
monitor_auto() {
for servicex in $(cat /etc/SCRIPT-LATAM/temp/monitorpt); do
rebootnb $servicex
done
}
#--- ACTIVADOR MOTITOR DE PROTOCOLOS
if [[ "$1" = "monitorservi" ]]; then
monitor_auto
exit
fi
#--- FUNCION AUTO LIMPIEZA Y FRESH RAM
autolimpieza_fun() {
clear
clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;32m AUTO MANTENIMIENTO"
PIDVRF4="$(ps aux | grep "autolimpieza" | grep -v grep | awk '{print $2}')"
if [[ -z $PIDVRF4 ]]; then
msg -bar
echo ""
echo -e "\033[1;93m ----- Se procedera cada 12 hrs a"
echo ""
echo -e "\033[97m >> Actulizar Paquetes"
echo -e "\033[97m >> Remover Paquetes Obsoletos"
echo -e "\033[97m >> Se Limpiara Cache sys/temp "
echo -e "\033[97m >> Se Refrescara RAM"
echo -e "\033[97m >> Se Refrescara SWAP"
echo -e "\033[97m >> Limpieza de VRAM de v2ray (Si esta Activo)"
echo ""
screen -dmS autolimpieza watch -n 43200 /etc/SCRIPT-LATAM/menu.sh "autolim"
else
screen -S autolimpieza -p 0 -X quit
fi
msg -bar
[[ -z ${VERY4} ]] && autolim="\033[1;32m ACTIVADO " || autolim="\033[1;31m DESACTIVADO "
echo -e " $autolim -- CON EXITO"
msg -bar
read -t 120 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
}
#--- EJECUTOR AUTOLIMPIEZA
autolim_fun() {
clear && clear
apt-get update
apt-get upgrade -y
dpkg --configure -a
apt -f install -y
apt-get autoremove -y
apt-get clean -y
apt-get autoclean -y
sync
echo 1 >/proc/sys/vm/drop_caches
sync
echo 2 >/proc/sys/vm/drop_caches
sync
echo 3 >/proc/sys/vm/drop_caches
swapoff -a && swapon -a
v2ray clean
}
#--- ACTIVADOR AUTOLIMPIEZA
if [[ "$1" = "autolim" ]]; then
autolim_fun
exit
fi
#############
#--- CREDITOS Y TERMINOS DE USO
creditoss() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -ne " \033[1;93m CREDITOS Y REGISTRO DE CAMBIOS\n"
msg -bar
[[ -e ${SCPdir}/message.txt ]] && echo -e "\033[1;97m RESELLER AUTORIZADO: \n\033[1;96m $(cat ${SCPdir}/message.txt) "
[[ -e ${SCPdir}/key.txt ]] && echo -e "\033[1;97m KEY DE REGISTRO:\n \033[1;93m $(cat ${SCPdir}/key.txt)"
[[ -e ${SCPdir}/F-Instalacion ]] && echo -e "\033[1;97m ACTIVACION:\n \033[1;92m $(cat ${SCPdir}/F-Instalacion)"
msg -bar
echo -ne "\033[1;97m \e[100m CAMBIOS DE SCRIPT LATAM \e[0;97m \n"
registro=$(curl -sSL "https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/cambios")
echo -ne "$registro"
msg -bar
echo -e " \e[48;5;1m\e[38;5;15m ❗️ ⚠️ LATAM SE DESLINDA ⚠️ ❗️ \e[0;97m\n"
echo -e "\033[1;33m >> Del mal uso a este panel VPN"
echo -e "\033[1;33m >> El uso indebido a redes de Terceros "
echo -e "\033[1;33m >> Del mal uso al Hosting y Bloqueo del mismo "
echo -e "\033[1;33m >> Abusar de las VPN con redes de Terceros \n"
msg -bar
read -t 120 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
}
#--- INSTALAR DROPBEAR
proto_dropbear() {
activar_dropbear() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m INSTALADOR DROPBEAR | SCRIPT LATAM"
msg -bar
echo -e "\033[1;97m Puede activar varios puertos en orden secuencial\n Ejemplo: \033[1;32m 442 443 444\033[1;37m"
msg -bar
echo -ne "\033[1;97m Digite Puertos:\033[1;32m" && read -p " " -e -i "444 445" DPORT
tput cuu1 && tput dl1
TTOTAL2=($DPORT)
for ((i = 0; i < ${#TTOTAL2[@]}; i++)); do
[[ $(mportas | grep "${TTOTAL2[$i]}") = "" ]] && {
echo -e "\033[1;33m Puerto Elegido:\033[1;32m ${TTOTAL2[$i]} OK"
PORT2="$PORT2 ${TTOTAL2[$i]}"
} || {
echo -e "\033[1;33m Puerto Elegido:\033[1;31m ${TTOTAL2[$i]} FAIL"
}
done
[[ -z $PORT2 ]] && {
echo -e "\033[1;31m Ningun Puerto Valido Fue Elegido\033[0m"
return 1
}
msg -bar
echo -e "\033[1;97m Revisando Actualizaciones"
fun_bar "apt update; apt upgrade -y > /dev/null 2>&1"
echo -e "\033[1;97m Instalando Dropbear"
fun_bar "apt-get install dropbear -y > /dev/null 2>&1"
apt-get install dropbear -y >/dev/null 2>&1
touch /etc/dropbear/banner
msg -bar
cat <<EOF >/etc/default/dropbear
NO_START=0
DROPBEAR_EXTRA_ARGS="VAR"
DROPBEAR_BANNER="/etc/dropbear/banner"
DROPBEAR_RECEIVE_WINDOW=65536
EOF
for dpts in $(echo $PORT2); do
sed -i "s/VAR/-p $dpts VAR/g" /etc/default/dropbear
done
sed -i "s/VAR//g" /etc/default/dropbear
[[ ! $(cat /etc/shells | grep "/bin/false") ]] && echo -e "/bin/false" >>/etc/shells
dropbearkey -t ecdsa -f /etc/dropbear/dropbear_ecdsa_host_key >/dev/null 2>&1
dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key >/dev/null 2>&1
service ssh restart >/dev/null 2>&1
sed -i "s/=1/=0/g" /etc/default/dropbear
service dropbear restart
sed -i "s/=0/=1/g" /etc/default/dropbear
sleep 3s
echo -e "\033[1;92m >> DROPBEAR INSTALADO CON EXITO <<"
msg -bar
#UFW
# for ufww in $(mportas | awk '{print $2}'); do
# ufw allow $ufww >/dev/null 2>&1
# done
}
desactivar_dropbear() {
clear && clear
msg -bar
echo -e "\033[1;91m DESINSTALANDO DROPBEAR"
msg -bar
service dropbear stop >/dev/null 2>&1
fun_bar "apt-get remove dropbear -y"
killall dropbear >/dev/null 2>&1
rm -rf /etc/dropbear/* >/dev/null 2>&1
msg -bar
echo -e "\033[1;32m DROPBEAR DESINSTALADO EXITO"
msg -bar
[[ -e /etc/default/dropbear ]] && rm /etc/default/dropbear
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m INSTALADOR DROPBEAR | SCRIPT LATAM"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR UN DROPBEAR \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER TODOS LOS DROPBEAR\e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_dropbear
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
2)
msg -bar
desactivar_dropbear
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
menu_inst
}
#--- INSTALAR SSL
proto_ssl() {
clear
clear
declare -A cor=([0]="\033[1;37m" [1]="\033[1;34m" [2]="\033[1;31m" [3]="\033[1;33m" [4]="\033[1;32m")
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
ssl_stunel() {
clear
clear
[[ $(mportas | grep stunnel4 | head -1) ]] && {
msg -bar
echo -e "\033[1;31m DESINSTALANDO SSL"
msg -bar
service stunnel4 stop >/dev/null 2>&1
fun_bar "apt-get purge stunnel4 -y"
msg -bar
echo -e "\033[1;32m >> SSL DESINSTALADO CON EXITO <<"
msg -bar
return 0
}
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m INSTALADOR SSL SCRIPT LATAM"
msg -bar
echo -e "\033[1;97m Seleccione un puerto de anclaje."
echo -e "\033[1;97m Puede ser un SSH/DROPBEAR/SQUID/OPENVPN/WEBSOCKET"
msg -bar
while true; do
echo -ne "\033[1;97m Puerto-Local:\033[1;32m" && read -p " " -e -i "22" portx
if [[ ! -z $portx ]]; then
if [[ $(echo $portx | grep "[0-9]") ]]; then
[[ $(mportas | grep $portx | awk '{print $2}' | head -1) ]] && break || echo -e "\033[1;31m Puerto Invalido - Reintente con otro Activo"
fi
fi
done
msg -bar
DPORT="$(mportas | grep $portx | awk '{print $2}' | head -1)"
echo -e "\033[1;33m Ahora Que Puerto sera SSL"
msg -bar
while true; do
echo -ne "\033[1;97m Puerto para SSL:\033[1;32m" && read -p " " -e -i "443" SSLPORT
[[ $(mportas | grep -w "$SSLPORT") ]] || break
echo -e "\033[1;33m Este Puerto esta en Uso"
unset SSLPORT
done
msg -bar
echo -e "\033[1;32m Instalando SSL"
msg -bar
fun_bar "apt-get install stunnel4 -y"
apt-get install stunnel4 -y >/dev/null 2>&1
msg -bar
echo -e "\033[1;97m A continuacion se le pediran datos de su crt si\n desconoce que datos lleva presione puro ENTER"
msg -bar
sleep 5s
echo -e "client = no\n[SSL]\ncert = /etc/stunnel/stunnel.pem\naccept = ${SSLPORT}\nconnect = 127.0.0.1:${portx}" >/etc/stunnel/stunnel.conf
####Coreccion2.0#####
openssl genrsa -out stunnel.key 2048 >/dev/null 2>&1
# (echo "mx" ; echo "mx" ; echo "mx" ; echo "mx" ; echo "mx" ; echo "mx" ; echo "@vpsmx" )|openssl req -new -key stunnel.key -x509 -days 1000 -out stunnel.crt > /dev/null 2>&1
openssl req -new -key stunnel.key -x509 -days 1000 -out stunnel.crt
cat stunnel.crt stunnel.key >stunnel.pem
mv stunnel.pem /etc/stunnel/
##-->> AutoInicio
sed -i '/ENABLED=[01]/d' /etc/default/stunnel4
echo "ENABLED=1" >>/etc/default/stunnel4
service stunnel4 restart >/dev/null 2>&1
msg -bar
echo -e "\033[1;32m >> SSL INSTALADO CON EXITO <<"
msg -bar
rm -rf /etc/SCRIPT-LATAM/stunnel.crt >/dev/null 2>&1
rm -rf /etc/SCRIPT-LATAM/stunnel.key >/dev/null 2>&1
rm -rf /root/stunnel.crt >/dev/null 2>&1
rm -rf /root/stunnel.key >/dev/null 2>&1
return 0
}
ssl_stunel_2() {
clear
clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m AGREGAR MAS PUESRTOS SSL"
msg -bar
echo -e "\033[1;97m Seleccione un puerto de anclaje."
echo -e "\033[1;97m Puede ser un SSH/DROPBEAR/SQUID/OPENVPN/SSL/PY"
msg -bar
while true; do
echo -ne "\033[1;97m Puerto-Local: \033[1;32m" && read portx
if [[ ! -z $portx ]]; then
if [[ $(echo $portx | grep "[0-9]") ]]; then
[[ $(mportas | grep $portx | head -1) ]] && break || echo -e "\033[1;31m Puerto Invalido - Reintente con otro Activo"
fi
fi
done
msg -bar
DPORT="$(mportas | grep $portx | awk '{print $2}' | head -1)"
echo -e "\033[1;33m Ahora Que Puerto sera SSL"
msg -bar
while true; do
echo -ne "\033[97m Puerto-SSL: \033[1;32m" && read SSLPORT
[[ $(mportas | grep -w "$SSLPORT") ]] || break
echo -e "\033[1;33m Este Puerto esta en Uso"
unset SSLPORT
done
msg -bar
echo -e "client = no\n[SSL+]\ncert = /etc/stunnel/stunnel.pem\naccept = ${SSLPORT}\nconnect = 127.0.0.1:${portx}" >>/etc/stunnel/stunnel.conf
##-->> AutoInicio
sed -i '/ENABLED=[01]/d' /etc/default/stunnel4
echo "ENABLED=1" >>/etc/default/stunnel4
service stunnel4 restart >/dev/null 2>&1
echo -e "\033[1;32m PUERTO AGREGADO CON EXITO"
msg -bar
rm -rf /etc/SCRIPT-LATAM/stunnel.crt >/dev/null 2>&1
rm -rf /etc/SCRIPT-LATAM/stunnel.key >/dev/null 2>&1
rm -rf /root/stunnel.crt >/dev/null 2>&1
rm -rf /root/stunnel.key >/dev/null 2>&1
return 0
}
cert_ssl() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m AGREGAR CERTIFICADO MANUAL"
msg -bar
echo -e "\033[1;97m Tenga ya su SSL activo y configurado Previamente"
echo -e "\033[1;93m >> Suba su certificado en zip a Dropbox"
msg -bar
echo -ne "\033[1;97m Pegue el link Abajo:\e[1;96m\n " && read linkd
wget $linkd -O /etc/stunnel/certificado.zip &>/dev/null
cd /etc/stunnel/
unzip -o certificado.zip &>/dev/null
cat private.key certificate.crt ca_bundle.crt >stunnel.pem
##-->> AutoInicio
sed -i '/ENABLED=[01]/d' /etc/default/stunnel4
echo "ENABLED=1" >>/etc/default/stunnel4
systemctl start stunnel4 &>/dev/null
systemctl start stunnel &>/dev/null
systemctl restart stunnel4 &>/dev/null
systemctl restart stunnel &>/dev/null
cd
msg -bar
echo -e "\e[1;32m >> CERTIFICADO INSTALADO CON EXITO <<"
msg -bar
}
certificadom() {
if [ -f /etc/stunnel/stunnel.conf ]; then
insapa2() {
for pid in $(pgrep python); do
kill $pid
done
for pid in $(pgrep apache2); do
kill $pid
done
service dropbear stop
apt install apache2 -y
echo "Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule> " >/etc/apache2/ports.conf
service apache2 restart
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m AGREGAR CERTIFICADO ZEROSSL"
msg -bar
echo -e "\e[1;37m Verificar dominio.......... \e[0m\n"
echo -e "\e[1;37m TIENES QUE MODIFICAR EL ARCHIVO DESCARGADO\n EJEMPLO: 530DDCDC3 comodoca.com 7bac5e210\e[0m"
msg -bar
read -p " LLAVE > Nombre Del Archivo: " keyy
msg -bar
read -p " DATOS > De La LLAVE: " dat2w
[[ ! -d /var/www/html/.well-known ]] && mkdir /var/www/html/.well-known
[[ ! -d /var/www/html/.well-known/pki-validation ]] && mkdir /var/www/html/.well-known/pki-validation
datfr1=$(echo "$dat2w" | awk '{print $1}')
datfr2=$(echo "$dat2w" | awk '{print $2}')
datfr3=$(echo "$dat2w" | awk '{print $3}')
echo -ne "${datfr1}\n${datfr2}\n${datfr3}" >/var/www/html/.well-known/pki-validation/$keyy.txt
msg -bar
echo -e "\e[1;37m VERIFIQUE EN LA PÁGINA ZEROSSL \e[0m"
msg -bar
read -p " ENTER PARA CONTINUAR"
clear
msg -bar
echo -e "\e[1;33m👇 LINK DEL CERTIFICADO 👇 \n \e[0m"
echo -e "\e[1;36m LINK\e[37m: \e[34m"
read link
incertis() {
wget $link -O /etc/stunnel/certificado.zip
cd /etc/stunnel/
unzip certificado.zip
cat private.key certificate.crt ca_bundle.crt >stunnel.pem
##-->> AutoInicio
sed -i '/ENABLED=[01]/d' /etc/default/stunnel4
echo "ENABLED=1" >>/etc/default/stunnel4
systemctl start stunnel4 &>/dev/null
systemctl start stunnel &>/dev/null
systemctl restart stunnel4 &>/dev/null
systemctl restart stunnel &>/dev/null
}
incertis &>/dev/null && echo -e " \e[1;33mEXTRAYENDO CERTIFICADO " | pv -qL 10
msg -bar
echo -e "${cor[4]} CERTIFICADO INSTALADO \e[0m"
msg -bar
for pid in $(pgrep apache2); do
kill $pid
done
apt install apache2 -y &>/dev/null
echo "Listen 81
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule> " >/etc/apache2/ports.conf
service apache2 restart &>/dev/null
service dropbear start &>/dev/null
service dropbear restart &>/dev/null
for port in $(cat /etc/SCRIPT-LATAM/PortM/PDirect.log | grep -v "nobody" | cut -d' ' -f1); do
PIDVRF3="$(ps aux | grep pid-"$port" | grep -v grep | awk '{print $2}')"
Portd="$(cat /etc/SCRIPT-LATAM/PortM/PDirect.log | grep -v "nobody" | cut -d' ' -f1)"
if [[ -z ${Portd} ]]; then
# systemctl start python.PD &>/dev/null
screen -dmS pydic-"$port" python /etc/SCRIPT-LATAM/filespy/PDirect-8081.py
else
# systemctl start python.PD &>/dev/null
screen -dmS pydic-"$port" python /etc/SCRIPT-LATAM/filespy/PDirect-8081.py
fi
done
else
msg -bar
echo -e "${cor[3]} SSL/TLS NO INSTALADO \e[0m"
msg -bar
fi
}
gerar_cert() {
clear
case $1 in
1)
msg -bar
msg -ama "Generador De Certificado Let's Encrypt"
msg -bar
;;
2)
msg -bar
msg -ama "Generador De Certificado Zerossl"
msg -bar
;;
esac
msg -ama "Requiere ingresar un dominio."
msg -ama "el mismo solo deve resolver DNS, y apuntar"
msg -ama "a la direccion ip de este servidor."
msg -bar
msg -ama "Temporalmente requiere tener"
msg -ama "los puertos 80 y 443 libres."
if [[ $1 = 2 ]]; then
msg -bar
msg -ama "Requiere tener una cuenta Zerossl."
fi
msg -bar
msg -ne " Continuar [S/N]: "
read opcion
[[ $opcion != @(s|S|y|Y) ]] && return 1
if [[ $1 = 2 ]]; then
while [[ -z $mail ]]; do
clear
msg -bar
msg -ama "ingresa tu correo usado en Zerossl"
msg -bar3
msg -ne " >>> "
read mail
done
fi
if [[ -e ${tmp_crt}/dominio.txt ]]; then
domain=$(cat ${tmp_crt}/dominio.txt)
[[ $domain = "multi-domain" ]] && unset domain
if [[ ! -z $domain ]]; then
clear
msg -bar
msg -azu "Dominio asociado a esta ip"
msg -bar
echo -e "$(msg -verm2 " >>> ") $(msg -ama "$domain")"
msg -ne "Continuar, usando este dominio? [S/N]: "
read opcion
tput cuu1 && tput dl1
[[ $opcion != @(S|s|Y|y) ]] && unset domain
fi
fi
while [[ -z $domain ]]; do
clear
msg -bar
msg -ama "ingresa tu dominio"
msg -bar
msg -ne " >>> "
read domain
done
msg -bar
msg -ama " Comprovando direccion IP ..."
local_ip=$(wget -qO- ipv4.icanhazip.com)
domain_ip=$(ping "${domain}" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')
sleep 1
[[ -z "${domain_ip}" ]] && domain_ip="ip no encontrada"
if [[ $(echo "${local_ip}" | tr '.' '+' | bc) -ne $(echo "${domain_ip}" | tr '.' '+' | bc) ]]; then
clear
msg -bar
msg -verm2 "ERROR DE DIRECCION IP"
msg -bar
msg -ama " La direccion ip de su dominio\n no coincide con la de su servidor."
msg -bar
echo -e " $(msg -azu "IP dominio: ")$(msg -verm2 "${domain_ip}")"
echo -e " $(msg -azu "IP servidor: ")$(msg -verm2 "${local_ip}")"
msg -bar
msg -ama " Verifique su dominio, e intente de nuevo."
msg -bar
fi
stop_port
acme_install
echo "$domain" >${tmp_crt}/dominio.txt
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m INSTALADOR MONO Y MULTI SSL | SCRIPT LATAM"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR | PARAR SSL \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m AGREGAR PUERTOS SSL EXTRA \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \033[1;97m AGREGAR CERTIFICADO MANUAL (zip) \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \033[1;97m AGREGAR CERTIFICADO ZEROSSL \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \033[1;97m AGREGAR CERTIFICADO SSL (Let's Encript) \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \033[1;97m AGREGAR CERTIFICADO SSL (Zerossl Directo) \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
ssl_stunel
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_ssl
;;
2)
msg -bar
ssl_stunel_2
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_ssl
;;
3)
msg -bar
cert_ssl
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_ssl
;;
4)
msg -bar
certificadom
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_ssl
;;
5)
msg -bar
gerar_cert 1
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_ssl
;;
6)
msg -bar
gerar_cert 2
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_ssl
;;
esac
menu_inst
}
#--- PROTOCOLO SQUID
proto_squid() {
clear
clear
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
fun_ip() {
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && IP="$MEU_IP2" || IP="$MEU_IP"
}
#ETHOOL SSH
fun_eth() {
eth=$(ifconfig | grep -v inet6 | grep -v lo | grep -v 127.0.0.1 | grep "encap:Ethernet" | awk '{print $1}')
[[ $eth != "" ]] && {
msg -bar
echo -e "${cor[3]} Aplicar el sistema para mejorar los paquetes SSH?"
echo -e "${cor[3]} Opciones para usuarios avanzados"
msg -bar
read -p "[S/N]: " -e -i n sshsn
tput cuu1 && tput dl1
[[ "$sshsn" = @(s|S|y|Y) ]] && {
echo -e "${cor[1]} Correccion de problemas de paquetes en SSH..."
msg -bar
echo -e " Cual es la tasa RX"
echo -ne "[ 1 - 999999999 ]: "
read rx
[[ "$rx" = "" ]] && rx="999999999"
echo -e " Cual es la tasa TX"
echo -ne "[ 1 - 999999999 ]: "
read tx
[[ "$tx" = "" ]] && tx="999999999"
apt-get install ethtool -y >/dev/null 2>&1
ethtool -G $eth rx $rx tx $tx >/dev/null 2>&1
msg -bar
}
}
}
fun_squid() {
if [[ -e /etc/squid/squid.conf ]]; then
var_squid="/etc/squid/squid.conf"
elif [[ -e /etc/squid3/squid.conf ]]; then
var_squid="/etc/squid3/squid.conf"
fi
[[ -e $var_squid ]] && {
clear
clear
msg -bar
echo -e "\033[1;31m DESINSTALADO SQUID"
msg -bar
service squid stop >/dev/null 2>&1
fun_bar "apt-get remove squid3 -y"
msg -bar
echo -e "\033[1;32m >> SQUID DESINSTALADO CON EXITO << "
msg -bar
[[ -e $var_squid ]] && rm $var_squid
return 0
}
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR SQUID | SCRIPT LATAM "
msg -bar
fun_ip
echo -ne "\033[97m Confirme su ip:\033[1;32m"
read -p " " -e -i $IP ip
msg -bar
echo -e "\033[1;97mPuede activar varios puertosen forma secuencial\n \033[1;93mEjemplo: \033[1;32m80 8080 8799 3128"
msg -bar
echo -ne "Digite losPuertos:\033[1;32m "
read -p " " -e -i "8080 7999" portasx
msg -bar
totalporta=($portasx)
unset PORT
for ((i = 0; i < ${#totalporta[@]}; i++)); do
[[ $(mportas | grep "${totalporta[$i]}") = "" ]] && {
echo -e "\033[1;33m Puerto Escojido:\033[1;32m ${totalporta[$i]} OK"
PORT+="${totalporta[$i]}\n"
} || {
echo -e "\033[1;33m Puerto Escojido:\033[1;31m ${totalporta[$i]} FAIL"
}
done
[[ -z $PORT ]] && {
echo -e "\033[1;31m No se ha elegido ninguna puerto valido, reintente\033[0m"
return 1
}
msg -bar
echo -e " INSTALANDO SQUID"
msg -bar
fun_bar "apt-get install squid3 -y"
msg -bar
echo -e " INICIANDO CONFIGURACION"
echo -e ".bookclaro.com.br/\n.claro.com.ar/\n.claro.com.br/\n.claro.com.co/\n.claro.com.ec/\n.claro.com.gt/\n.cloudfront.net/\n.claro.com.ni/\n.claro.com.pe/\n.claro.com.sv/\n.claro.cr/\n.clarocurtas.com.br/\n.claroideas.com/\n.claroideias.com.br/\n.claromusica.com/\n.clarosomdechamada.com.br/\n.clarovideo.com/\n.facebook.net/\n.facebook.com/\n.netclaro.com.br/\n.oi.com.br/\n.oimusica.com.br/\n.speedtest.net/\n.tim.com.br/\n.timanamaria.com.br/\n.vivo.com.br/\n.rdio.com/\n.compute-1.amazonaws.com/\n.portalrecarga.vivo.com.br/\n.vivo.ddivulga.com/" >/etc/payloads
msg -bar
echo -e "\033[1;32m Ahora Escoja Una Conf Para Su Proxy"
msg -bar
echo -e "|1| Basico"
echo -e "|2| Avanzado\033[1;37m"
msg -bar
read -p "[1/2]: " -e -i 1 proxy_opt
tput cuu1 && tput dl1
if [[ $proxy_opt = 1 ]]; then
echo -e " INSTALANDO SQUID BASICO"
elif [[ $proxy_opt = 2 ]]; then
echo -e " INSTALANDO SQUID AVANZADO"
else
echo -e " INSTALANDO SQUID BASICO"
proxy_opt=1
fi
unset var_squid
if [[ -d /etc/squid ]]; then
var_squid="/etc/squid/squid.conf"
elif [[ -d /etc/squid3 ]]; then
var_squid="/etc/squid3/squid.conf"
fi
if [[ "$proxy_opt" = @(02|2) ]]; then
echo -e "#ConfiguracaoSquiD
acl url1 dstdomain -i $ip
acl url2 dstdomain -i 127.0.0.1
acl url3 url_regex -i '/etc/payloads'
acl url4 url_regex -i '/etc/opendns'
acl url5 dstdomain -i localhost
acl accept dstdomain -i GET
acl accept dstdomain -i POST
acl accept dstdomain -i OPTIONS
acl accept dstdomain -i CONNECT
acl accept dstdomain -i PUT
acl HEAD dstdomain -i HEAD
acl accept dstdomain -i TRACE
acl accept dstdomain -i OPTIONS
acl accept dstdomain -i PATCH
acl accept dstdomain -i PROPATCH
acl accept dstdomain -i DELETE
acl accept dstdomain -i REQUEST
acl accept dstdomain -i METHOD
acl accept dstdomain -i NETDATA
acl accept dstdomain -i MOVE
acl all src 0.0.0.0/0
http_access allow url1
http_access allow url2
http_access allow url3
http_access allow url4
http_access allow url5
http_access allow accept
http_access allow HEAD
http_access deny all
# Request Headers Forcing
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access User-Agent allow all
request_header_access Cookie allow all
#request_header_access All deny all
# Response Headers Spoofing
#reply_header_access Via deny all
#reply_header_access X-Cache deny all
#reply_header_access X-Cache-Lookup deny all
#portas" >$var_squid
for pts in $(echo -e $PORT); do
echo -e "http_port $pts" >>$var_squid
done
echo -e "
#nome
visible_hostname SCRIPT-LATAM
via off
forwarded_for off
pipeline_prefetch off" >>$var_squid
else
echo -e "#Configuracion SquiD
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT
acl SSH dst $ip-$ip/255.255.255.255
http_access allow SSH
http_access allow manager localhost
http_access deny manager
http_access allow localhost
http_access deny all
coredump_dir /var/spool/squid
#Puertos" >$var_squid
for pts in $(echo -e $PORT); do
echo -e "http_port $pts" >>$var_squid
done
echo -e "
#HostName
visible_hostname SCRIPT-LATAM
via off
forwarded_for off
pipeline_prefetch off" >>$var_squid
fi
touch /etc/opendns
fun_eth
msg -bar
echo -ne " \033[1;31m [ ! ] \033[1;33m REINICIANDO SERVICIOS"
squid3 -k reconfigure >/dev/null 2>&1
squid -k reconfigure >/dev/null 2>&1
service ssh restart >/dev/null 2>&1
service squid3 restart >/dev/null 2>&1
service squid restart >/dev/null 2>&1
echo -e " \033[1;32m[OK]"
msg -bar
echo -e "\033[1;32m >> SQUID CONFIGURADO << "
msg -bar
#UFW
for ufww in $(mportas | awk '{print $2}'); do
ufw allow $ufww >/dev/null 2>&1
done
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
online_squid() {
payload="/etc/payloads"
msg -bar
echo -e "\033[1;33m CONFIGURACIONES EXTRA PARA SQUID"
msg -bar
echo -ne " $(msg -verd "[1]") $(msg -verm2 "=>>") \e[1;97mCOLOCAR HOST EN SQUID \e[97m \n"
echo -ne " $(msg -verd "[2]") $(msg -verm2 "=>>") \e[1;97mREMOVER HOST DE SQUID\e[97m \n"
echo -ne " $(msg -verd "[3]") $(msg -verm2 "=>>") \e[1;31mDESINSTALAR SQUID \e[97m \n"
echo -ne "$(msg -bar2)\n$(msg -verd " [0]") $(msg -verm2 ">") " && msg -bra "\e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
while [[ $varpay != @(0|[1-3]) ]]; do
read -p "[0/3]: " varpay
tput cuu1 && tput dl1
done
if [[ "$varpay" = "0" ]]; then
menu_inst
elif [[ "$varpay" = "1" ]]; then
echo -e "${cor[4]} Hosts Actuales Dentro del Squid"
msg -bar
cat $payload | awk -F "/" '{print $1,$2,$3,$4}'
msg -bar
while [[ $hos != \.* ]]; do
echo -ne "\033[1;93mEscriba el nuevo host: \033[1;32m" && read hos
tput cuu1 && tput dl1
[[ $hos = \.* ]] && continue
echo -e "\033[1;31m Comience con ."
sleep 5s
tput cuu1 && tput dl1
done
host="$hos/"
[[ -z $host ]] && return 1
[[ $(grep -c "^$host" $payload) -eq 1 ]] && :echo -e "${cor[4]}Host ya Exciste${cor[0]}" && return 1
echo "$host" >>$payload && grep -v "^$" $payload >/tmp/a && mv /tmp/a $payload
echo -e "${cor[4]}Host Agregado con Exito"
msg -bar
cat $payload | awk -F "/" '{print $1,$2,$3,$4}'
msg -bar
if [[ ! -f "/etc/init.d/squid" ]]; then
service squid3 reload
service squid3 restart
menu_inst
else
/etc/init.d/squid reload
service squid restart
menu_inst
fi
elif [[ "$varpay" = "2" ]]; then
echo -e "${cor[4]} Hosts Actuales Dentro del Squid"
msg -bar
cat $payload | awk -F "/" '{print $1,$2,$3,$4}'
msg -bar
while [[ $hos != \.* ]]; do
echo -ne "\033[1;93m Digite un Host: \033[1;32m " && read hos
tput cuu1 && tput dl1
[[ $hos = \.* ]] && continue
echo -e "\033[1;31m Comience con ."
sleep 5s
tput cuu1 && tput dl1
done
host="$hos/"
[[ -z $host ]] && return 1
[[ $(grep -c "^$host" $payload) -ne 1 ]] && !echo -e "${cor[5]}Host No Encontrado" && return 1
grep -v "^$host" $payload >/tmp/a && mv /tmp/a $payload
echo -e "${cor[4]}Host Removido Con Exito"
msg -bar
cat $payload | awk -F "/" '{print $1,$2,$3,$4}'
msg -bar
if [[ ! -f "/etc/init.d/squid" ]]; then
service squid3 reload
service squid3 restart
service squid reload
service squid restart
else
service squid restart
service squid3 restart
fi
menu_inst
elif [[ "$varpay" = "3" ]]; then
fun_squid
fi
}
if [[ -e /etc/squid/squid.conf ]]; then
online_squid
elif [[ -e /etc/squid3/squid.conf ]]; then
online_squid
else
fun_squid
fi
}
#--- PROTOCOLO OPENVPN
proto_openvpn() {
#timedatectl set-timezone UTC
# Detect Debian users running the script with "sh" instead of bash
if readlink /proc/$$/exe | grep -q "dash"; then
echo "Este script se utiliza con bash"
exit
fi
if [[ "$EUID" -ne 0 ]]; then
echo "Sorry, solo funciona como root"
exit
fi
if [[ ! -e /dev/net/tun ]]; then
echo "El TUN device no esta disponible
Necesitas habilitar TUN antes de usar este script"
exit
fi
if [[ -e /etc/debian_version ]]; then
OS=debian
GROUPNAME=nogroup
RCLOCAL='/etc/rc.local'
elif [[ -e /etc/centos-release || -e /etc/redhat-release ]]; then
OS=centos
GROUPNAME=nobody
RCLOCAL='/etc/rc.d/rc.local'
else
echo "Tu sistema operativo no esta disponible para este script"
exit
fi
agrega_dns() {
msg -ama " Escriba el HOST DNS que desea Agregar"
read -p " [NewDNS]: " SDNS
cat /etc/hosts | grep -v "$SDNS" >/etc/hosts.bak && mv -f /etc/hosts.bak /etc/hosts
if [[ -e /etc/opendns ]]; then
cat /etc/opendns >/tmp/opnbak
mv -f /tmp/opnbak /etc/opendns
echo "$SDNS" >>/etc/opendns
else
echo "$SDNS" >/etc/opendns
fi
[[ -z $NEWDNS ]] && NEWDNS="$SDNS" || NEWDNS="$NEWDNS $SDNS"
unset SDNS
}
mportas() {
unset portas
portas_var=$(lsof -V -i -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
dns_fun() {
case $1 in
3) dns[$2]='push "dhcp-option DNS 1.0.0.1"' ;;
4) dns[$2]='push "dhcp-option DNS 1.1.1.1"' ;;
5) dns[$2]='push "dhcp-option DNS 9.9.9.9"' ;;
6) dns[$2]='push "dhcp-option DNS 1.1.1.1"' ;;
7) dns[$2]='push "dhcp-option DNS 80.67.169.40"' ;;
8) dns[$2]='push "dhcp-option DNS 80.67.169.12"' ;;
9) dns[$2]='push "dhcp-option DNS 84.200.69.80"' ;;
10) dns[$2]='push "dhcp-option DNS 84.200.70.40"' ;;
11) dns[$2]='push "dhcp-option DNS 208.67.222.222"' ;;
12) dns[$2]='push "dhcp-option DNS 208.67.220.220"' ;;
13) dns[$2]='push "dhcp-option DNS 8.8.8.8"' ;;
14) dns[$2]='push "dhcp-option DNS 8.8.4.4"' ;;
15) dns[$2]='push "dhcp-option DNS 77.88.8.8"' ;;
16) dns[$2]='push "dhcp-option DNS 77.88.8.1"' ;;
17) dns[$2]='push "dhcp-option DNS 176.103.130.130"' ;;
18) dns[$2]='push "dhcp-option DNS 176.103.130.131"' ;;
esac
}
meu_ip() {
if [[ -e /etc/SCRIPT-LATAM/MEUIPvps ]]; then
echo "$(cat /etc/SCRIPT-LATAM/MEUIPvps)"
else
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && echo "$MEU_IP2" || echo "$MEU_IP"
echo "$MEU_IP" >/etc/SCRIPT-LATAM/MEUIPvps
fi
}
IP="$(meu_ip)"
instala_ovpn2() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;32m INSTALADOR DE OPENVPN "
msg -bar
# OpenVPN setup and first user creation
echo -e "\033[1;97mSe necesitan ciertos parametros para configurar OpenVPN."
echo "Configuracion por default solo presiona ENTER."
echo "Primero, cual es la IPv4 que quieres para OpenVPN"
echo "Detectando..."
msg -bar
# Autodetect IP address and pre-fill for the user
IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
read -p "IP address: " -e -i $IP IP
# If $IP is a private IP address, the server must be behind NAT
if echo "$IP" | grep -qE '^(10\.|172\.1[6789]\.|172\.2[0-9]\.|172\.3[01]\.|192\.168)'; then
echo
echo "Este servidor esta detras de una red NAT?"
read -p "IP Publica / hostname: " -e PUBLICIP
fi
msg -bar
msg -ama "Que protocolo necesitas para las conexiones OpenVPN?"
msg -bar
echo " 1) UDP (recomendada)"
echo " 2) TCP"
msg -bar
read -p "Protocolo [1-2]: " -e -i 1 PROTOCOL
case $PROTOCOL in
1)
PROTOCOL=udp
;;
2)
PROTOCOL=tcp
;;
esac
msg -bar
msg -ama "Que puerto necesitas en OpenVPN (Default 1194)?"
msg -bar
read -p "Puerto: " -e -i 1194 PORT
msg -bar
msg -ama "Cual DNS usaras en tu VPN?"
msg -bar
echo " 1) Actuales en el VPS"
echo " 2) 1.1.1.1"
echo " 3) Google"
echo " 4) OpenDNS"
echo " 5) Verisign"
msg -bar
read -p "DNS [1-5]: " -e -i 1 DNS
#CIPHER
msg -bar
msg -ama " Elija que codificacion desea para el canal de datos:"
msg -bar
echo " 1) AES-128-CBC"
echo " 2) AES-192-CBC"
echo " 3) AES-256-CBC"
echo " 4) CAMELLIA-128-CBC"
echo " 5) CAMELLIA-192-CBC"
echo " 6) CAMELLIA-256-CBC"
echo " 7) SEED-CBC"
echo " 8) NONE"
msg -bar
while [[ $CIPHER != @([1-8]) ]]; do
read -p " Cipher [1-7]: " -e -i 1 CIPHER
done
case $CIPHER in
1) CIPHER="cipher AES-128-CBC" ;;
2) CIPHER="cipher AES-192-CBC" ;;
3) CIPHER="cipher AES-256-CBC" ;;
4) CIPHER="cipher CAMELLIA-128-CBC" ;;
5) CIPHER="cipher CAMELLIA-192-CBC" ;;
6) CIPHER="cipher CAMELLIA-256-CBC" ;;
7) CIPHER="cipher SEED-CBC" ;;
8) CIPHER="cipher none" ;;
esac
msg -bar
msg -ama " Estamos listos para configurar su servidor OpenVPN"
msg -bar
read -n1 -r -p "Presiona cualquier tecla para continuar..."
if [[ "$OS" = 'debian' ]]; then
apt-get update
apt-get install openvpn iptables openssl ca-certificates -y
else
#
yum install epel-release -y
yum install openvpn iptables openssl ca-certificates -y
fi
# Get easy-rsa
EASYRSAURL='https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz'
wget -O ~/easyrsa.tgz "$EASYRSAURL" 2>/dev/null || curl -Lo ~/easyrsa.tgz "$EASYRSAURL"
tar xzf ~/easyrsa.tgz -C ~/
mv ~/EasyRSA-3.0.8/ /etc/openvpn/
mv /etc/openvpn/EasyRSA-3.0.8/ /etc/openvpn/easy-rsa/
chown -R root:root /etc/openvpn/easy-rsa/
rm -f ~/easyrsa.tgz
cd /etc/openvpn/easy-rsa/
#
./easyrsa init-pki
./easyrsa --batch build-ca nopass
./easyrsa gen-dh
./easyrsa build-server-full server nopass
EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl
#
cp pki/ca.crt pki/private/ca.key pki/dh.pem pki/issued/server.crt pki/private/server.key pki/crl.pem /etc/openvpn
#
chown nobody:$GROUPNAME /etc/openvpn/crl.pem
#
openvpn --genkey --secret /etc/openvpn/ta.key
#
echo "port $PORT
proto $PROTOCOL
dev tun
sndbuf 0
rcvbuf 0
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-auth ta.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt" >/etc/openvpn/server.conf
echo 'push "redirect-gateway def1 bypass-dhcp"' >>/etc/openvpn/server.conf
# DNS
case $DNS in
1)
#
#
if grep -q "127.0.0.53" "/etc/resolv.conf"; then
RESOLVCONF='/run/systemd/resolve/resolv.conf'
else
RESOLVCONF='/etc/resolv.conf'
fi
#
grep -v '#' $RESOLVCONF | grep 'nameserver' | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | while read line; do
echo "push \"dhcp-option DNS $line\"" >>/etc/openvpn/server.conf
done
;;
2)
echo 'push "dhcp-option DNS 1.1.1.1"' >>/etc/openvpn/server.conf
echo 'push "dhcp-option DNS 1.0.0.1"' >>/etc/openvpn/server.conf
;;
3)
echo 'push "dhcp-option DNS 8.8.8.8"' >>/etc/openvpn/server.conf
echo 'push "dhcp-option DNS 8.8.4.4"' >>/etc/openvpn/server.conf
;;
4)
echo 'push "dhcp-option DNS 208.67.222.222"' >>/etc/openvpn/server.conf
echo 'push "dhcp-option DNS 208.67.220.220"' >>/etc/openvpn/server.conf
;;
5)
echo 'push "dhcp-option DNS 64.6.64.6"' >>/etc/openvpn/server.conf
echo 'push "dhcp-option DNS 64.6.65.6"' >>/etc/openvpn/server.conf
;;
esac
echo "keepalive 10 120
${CIPHER}
user nobody
group $GROUPNAME
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem" >>/etc/openvpn/server.conf
updatedb
PLUGIN=$(locate openvpn-plugin-auth-pam.so | head -1)
[[ ! -z $(echo ${PLUGIN}) ]] && {
echo "client-to-client
client-cert-not-required
username-as-common-name
plugin $PLUGIN login" >>/etc/openvpn/server.conf
}
#
echo 'net.ipv4.ip_forward=1' >/etc/sysctl.d/30-openvpn-forward.conf
#
echo 1 >/proc/sys/net/ipv4/ip_forward
if pgrep firewalld; then
#
#
#
#
firewall-cmd --zone=public --add-port=$PORT/$PROTOCOL
firewall-cmd --zone=trusted --add-source=10.8.0.0/24
firewall-cmd --permanent --zone=public --add-port=$PORT/$PROTOCOL
firewall-cmd --permanent --zone=trusted --add-source=10.8.0.0/24
#
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
else
#
if [[ "$OS" = 'debian' && ! -e $RCLOCAL ]]; then
echo '#!/bin/sh -e
exit 0' >$RCLOCAL
fi
chmod +x $RCLOCAL
#
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
sed -i "1 a\iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP" $RCLOCAL
if iptables -L -n | grep -qE '^(REJECT|DROP)'; then
#
#
#
iptables -I INPUT -p $PROTOCOL --dport $PORT -j ACCEPT
iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sed -i "1 a\iptables -I INPUT -p $PROTOCOL --dport $PORT -j ACCEPT" $RCLOCAL
sed -i "1 a\iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT" $RCLOCAL
sed -i "1 a\iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT" $RCLOCAL
fi
fi
#
if sestatus 2>/dev/null | grep "Current mode" | grep -q "enforcing" && [[ "$PORT" != '1194' ]]; then
#
if ! hash semanage 2>/dev/null; then
yum install policycoreutils-python -y
fi
semanage port -a -t openvpn_port_t -p $PROTOCOL $PORT
fi
#
if [[ "$OS" = 'debian' ]]; then
#
if pgrep systemd-journal; then
systemctl restart openvpn@server.service
else
/etc/init.d/openvpn restart
fi
else
if pgrep systemd-journal; then
systemctl restart openvpn@server.service
systemctl enable openvpn@server.service
else
service openvpn restart
chkconfig openvpn on
fi
fi
#
if [[ "$PUBLICIP" != "" ]]; then
IP=$PUBLICIP
fi
#
echo "# OVPN_ACCESS_SERVER_PROFILE=VPS-MX
client
dev tun
proto $PROTOCOL
sndbuf 0
rcvbuf 0
remote $IP $PORT
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
${CIPHER}
setenv opt block-outside-dns
key-direction 1
verb 3
auth-user-pass" >/etc/openvpn/client-common.txt
msg -bar
msg -ama " Ahora crear una SSH para generar el (.ovpn)!"
msg -bar
echo -e "\033[1;32m Configuracion Finalizada!"
msg -bar
}
instala_ovpn() {
parametros_iniciais() {
#Verifica o Sistema
[[ "$EUID" -ne 0 ]] && echo " Lo siento, usted necesita ejecutar esto como ROOT" && exit 1
[[ ! -e /dev/net/tun ]] && echo " TUN no esta Disponible" && exit 1
if [[ -e /etc/debian_version ]]; then
OS="debian"
VERSION_ID=$(cat /etc/os-release | grep "VERSION_ID")
IPTABLES='/etc/iptables/iptables.rules'
[[ ! -d /etc/iptables ]] && mkdir /etc/iptables
[[ ! -e $IPTABLES ]] && touch $IPTABLES
SYSCTL='/etc/sysctl.conf'
[[ "$VERSION_ID" != 'VERSION_ID="7"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="8"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="9"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="14.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="16.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="18.04"' ]] && [[ "$VERSION_ID" != 'VERSION_ID="17.10"' ]] && {
echo " Su vercion de Debian / Ubuntu no Soportada."
while [[ $CONTINUE != @(y|Y|s|S|n|N) ]]; do
read -p "Continuar ? [y/n]: " -e CONTINUE
done
[[ "$CONTINUE" = @(n|N) ]] && exit 1
}
else
msg -ama " Parece que no estas ejecutando este instalador en un sistema Debian o Ubuntu"
msg -bar
return 1
fi
#Pega Interface
NIC=$(ip -4 route ls | grep default | grep -Po '(?<=dev )(\S+)' | head -1)
}
add_repo() {
#INSTALACAO E UPDATE DO REPOSITORIO
# Debian 7
if [[ "$VERSION_ID" = 'VERSION_ID="7"' ]]; then
echo "deb http://build.openvpn.net/debian/openvpn/stable wheezy main" >/etc/apt/sources.list.d/openvpn.list
wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - >/dev/null 2>&1
# Debian 8
elif [[ "$VERSION_ID" = 'VERSION_ID="8"' ]]; then
echo "deb http://build.openvpn.net/debian/openvpn/stable jessie main" >/etc/apt/sources.list.d/openvpn.list
wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - >/dev/null 2>&1
# Ubuntu 14.04
elif [[ "$VERSION_ID" = 'VERSION_ID="14.04"' ]]; then
echo "deb http://build.openvpn.net/debian/openvpn/stable trusty main" >/etc/apt/sources.list.d/openvpn.list
wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - >/dev/null 2>&1
# Ubuntu 16.04
elif [[ "$VERSION_ID" = 'VERSION_ID="16.04"' ]]; then
echo "deb http://build.openvpn.net/debian/openvpn/stable xenial main" >/etc/apt/sources.list.d/openvpn.list
wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - >/dev/null 2>&1
# Ubuntu 18.04
elif [[ "$VERSION_ID" = 'VERSION_ID="18.04"' ]]; then
apt-get remove openvpn -y >/dev/null 2>&1
rm -rf /etc/apt/sources.list.d/openvpn.list >/dev/null 2>&1
echo "deb http://build.openvpn.net/debian/openvpn/stable bionic main" >/etc/apt/sources.list.d/openvpn.list
wget -q -O - https://swupdate.openvpn.net/repos/repo-public.gpg | apt-key add - >/dev/null 2>&1
fi
}
coleta_variaveis() {
echo -e "\033[1;32m INSTALADOR DE OPENVPN | VPS-MX By @Kalix1"
msg -bar
msg -ne " Confirme su IP"
read -p ": " -e -i $IP ip
msg -bar
msg -ama " Que puerto desea usar?"
msg -bar
while true; do
read -p " Port: " -e -i 1194 PORT
[[ $(mportas | grep -w "$PORT") ]] || break
echo -e "\033[1;33m Este puerto esta en uso\033[0m"
unset PORT
done
msg -bar
echo -e "\033[1;31m Que protocolo desea para las conexiones OPENVPN?"
echo -e "\033[1;31m A menos que UDP este bloqueado, no utilice TCP (es mas lento)"
#PROTOCOLO
while [[ $PROTOCOL != @(UDP|TCP) ]]; do
read -p " Protocol [UDP/TCP]: " -e -i TCP PROTOCOL
done
[[ $PROTOCOL = "UDP" ]] && PROTOCOL=udp
[[ $PROTOCOL = "TCP" ]] && PROTOCOL=tcp
#DNS
msg -bar
msg -ama " Que DNS desea utilizar?"
msg -bar
echo " 1) Usar DNS de sistema "
echo " 2) Cloudflare"
echo " 3) Quad"
echo " 4) FDN"
echo " 5) DNS.WATCH"
echo " 6) OpenDNS"
echo " 7) Google DNS"
echo " 8) Yandex Basic"
echo " 9) AdGuard DNS"
msg -bar
while [[ $DNS != @([1-9]) ]]; do
read -p " DNS [1-9]: " -e -i 1 DNS
done
#CIPHER
msg -bar
msg -ama " Elija que codificacion desea para el canal de datos:"
msg -bar
echo " 1) AES-128-CBC"
echo " 2) AES-192-CBC"
echo " 3) AES-256-CBC"
echo " 4) CAMELLIA-128-CBC"
echo " 5) CAMELLIA-192-CBC"
echo " 6) CAMELLIA-256-CBC"
echo " 7) SEED-CBC"
msg -bar
while [[ $CIPHER != @([1-7]) ]]; do
read -p " Cipher [1-7]: " -e -i 1 CIPHER
done
case $CIPHER in
1) CIPHER="cipher AES-128-CBC" ;;
2) CIPHER="cipher AES-192-CBC" ;;
3) CIPHER="cipher AES-256-CBC" ;;
4) CIPHER="cipher CAMELLIA-128-CBC" ;;
5) CIPHER="cipher CAMELLIA-192-CBC" ;;
6) CIPHER="cipher CAMELLIA-256-CBC" ;;
7) CIPHER="cipher SEED-CBC" ;;
esac
msg -bar
msg -ama " Estamos listos para configurar su servidor OpenVPN"
msg -bar
read -n1 -r -p " Enter para Continuar ..."
tput cuu1 && tput dl1
}
parametros_iniciais # BREVE VERIFICACAO
coleta_variaveis # COLETA VARIAVEIS PARA INSTALAÇÃO
add_repo # ATUALIZA REPOSITÓRIO OPENVPN E INSTALA OPENVPN
# Cria Diretorio
[[ ! -d /etc/openvpn ]] && mkdir /etc/openvpn
# Install openvpn
echo -ne " \033[1;31m[ ! ] apt-get update"
apt-get update -q >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] apt-get install openvpn curl openssl"
apt-get install -qy openvpn curl >/dev/null 2>&1 && apt-get install openssl ca-certificates -y >/dev/null 2>&1 && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
SERVER_IP="$(meu_ip)" # IP Address
[[ -z "${SERVER_IP}" ]] && SERVER_IP=$(ip a | awk -F"[ /]+" '/global/ && !/127.0/ {print $3; exit}')
echo -ne " \033[1;31m[ ! ] Generating Server Config" # Gerando server.con
(
case $DNS in
1)
i=0
grep -v '#' /etc/resolv.conf | grep 'nameserver' | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | while read line; do
dns[$i]="push \"dhcp-option DNS $line\""
done
[[ ! "${dns[@]}" ]] && dns[0]='push "dhcp-option DNS 8.8.8.8"' && dns[1]='push "dhcp-option DNS 8.8.4.4"'
;;
2) dns_fun 3 && dns_fun 4 ;;
3) dns_fun 5 && dns_fun 6 ;;
4) dns_fun 7 && dns_fun 8 ;;
5) dns_fun 9 && dns_fun 10 ;;
6) dns_fun 11 && dns_fun 12 ;;
7) dns_fun 13 && dns_fun 14 ;;
8) dns_fun 15 && dns_fun 16 ;;
9) dns_fun 17 && dns_fun 18 ;;
esac
echo 01 >/etc/openvpn/ca.srl
while [[ ! -e /etc/openvpn/dh.pem || -z $(cat /etc/openvpn/dh.pem) ]]; do
openssl dhparam -out /etc/openvpn/dh.pem 2048 &>/dev/null
done
while [[ ! -e /etc/openvpn/ca-key.pem || -z $(cat /etc/openvpn/ca-key.pem) ]]; do
openssl genrsa -out /etc/openvpn/ca-key.pem 2048 &>/dev/null
done
chmod 600 /etc/openvpn/ca-key.pem &>/dev/null
while [[ ! -e /etc/openvpn/ca-csr.pem || -z $(cat /etc/openvpn/ca-csr.pem) ]]; do
openssl req -new -key /etc/openvpn/ca-key.pem -out /etc/openvpn/ca-csr.pem -subj /CN=OpenVPN-CA/ &>/dev/null
done
while [[ ! -e /etc/openvpn/ca.pem || -z $(cat /etc/openvpn/ca.pem) ]]; do
openssl x509 -req -in /etc/openvpn/ca-csr.pem -out /etc/openvpn/ca.pem -signkey /etc/openvpn/ca-key.pem -days 365 &>/dev/null
done
cat >/etc/openvpn/server.conf <<EOF
server 10.8.0.0 255.255.255.0
verb 3
duplicate-cn
key client-key.pem
ca ca.pem
cert client-cert.pem
dh dh.pem
keepalive 10 120
persist-key
persist-tun
comp-lzo
float
push "redirect-gateway def1 bypass-dhcp"
${dns[0]}
${dns[1]}
user nobody
group nogroup
${CIPHER}
proto ${PROTOCOL}
port $PORT
dev tun
status openvpn-status.log
EOF
updatedb
PLUGIN=$(locate openvpn-plugin-auth-pam.so | head -1)
[[ ! -z $(echo ${PLUGIN}) ]] && {
echo "client-to-client
client-cert-not-required
username-as-common-name
plugin $PLUGIN login" >>/etc/openvpn/server.conf
}
) && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
echo -ne " \033[1;31m[ ! ] Generating CA Config" # Generate CA Config
(
while [[ ! -e /etc/openvpn/client-key.pem || -z $(cat /etc/openvpn/client-key.pem) ]]; do
openssl genrsa -out /etc/openvpn/client-key.pem 2048 &>/dev/null
done
chmod 600 /etc/openvpn/client-key.pem
while [[ ! -e /etc/openvpn/client-csr.pem || -z $(cat /etc/openvpn/client-csr.pem) ]]; do
openssl req -new -key /etc/openvpn/client-key.pem -out /etc/openvpn/client-csr.pem -subj /CN=OpenVPN-Client/ &>/dev/null
done
while [[ ! -e /etc/openvpn/client-cert.pem || -z $(cat /etc/openvpn/client-cert.pem) ]]; do
openssl x509 -req -in /etc/openvpn/client-csr.pem -out /etc/openvpn/client-cert.pem -CA /etc/openvpn/ca.pem -CAkey /etc/openvpn/ca-key.pem -days 365 &>/dev/null
done
) && echo -e "\033[1;32m [OK]" || echo -e "\033[1;31m [FAIL]"
teste_porta() {
msg -bar
echo -ne " \033[1;31m ${id} Verificando:"
sleep 1s
[[ ! $(mportas | grep "$1") ]] && {
echo -e "\033[1;33m [FAIL]\033[0m"
} || {
echo -e "\033[1;32m [Pass]\033[0m"
return 1
}
}
msg -bar
echo -e "\033[1;33m Ahora Necesitamos un Proxy SQUID o PYTHON-OPENVPN"
echo -e "\033[1;33m Si no existe un proxy en la puerta, un proxy Python sera abierto!"
msg -bar
while [[ $? != "1" ]]; do
read -p " Confirme el Puerto(Proxy) " -e -i 80 PPROXY
teste_porta $PPROXY
done
cat >/etc/openvpn/client-common.txt <<EOF
# OVPN_ACCESS_SERVER_PROFILE=VPS-MX
client
nobind
dev tun
redirect-gateway def1 bypass-dhcp
remote-random
remote ${SERVER_IP} ${PORT} ${PROTOCOL}
http-proxy ${SERVER_IP} ${PPROXY}
$CIPHER
comp-lzo yes
keepalive 10 20
float
auth-user-pass
EOF
# Iptables
if [[ ! -f /proc/user_beancounters ]]; then
INTIP=$(ip a | awk -F"[ /]+" '/global/ && !/127.0/ {print $3; exit}')
N_INT=$(ip a | awk -v sip="$INTIP" '$0 ~ sip { print $7}')
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o $N_INT -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $SERVER_IP
else
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source $SERVER_IP
fi
iptables-save >/etc/iptables.conf
cat >/etc/network/if-up.d/iptables <<EOF
#!/bin/sh
iptables-restore < /etc/iptables.conf
EOF
chmod +x /etc/network/if-up.d/iptables
# Enable net.ipv4.ip_forward
sed -i 's|#net.ipv4.ip_forward=1|net.ipv4.ip_forward=1|' /etc/sysctl.conf
echo 1 >/proc/sys/net/ipv4/ip_forward
# Regras de Firewall
if pgrep firewalld; then
if [[ "$PROTOCOL" = 'udp' ]]; then
firewall-cmd --zone=public --add-port=$PORT/udp
firewall-cmd --permanent --zone=public --add-port=$PORT/udp
elif [[ "$PROTOCOL" = 'tcp' ]]; then
firewall-cmd --zone=public --add-port=$PORT/tcp
firewall-cmd --permanent --zone=public --add-port=$PORT/tcp
fi
firewall-cmd --zone=trusted --add-source=10.8.0.0/24
firewall-cmd --permanent --zone=trusted --add-source=10.8.0.0/24
fi
if iptables -L -n | grep -qE 'REJECT|DROP'; then
if [[ "$PROTOCOL" = 'udp' ]]; then
iptables -I INPUT -p udp --dport $PORT -j ACCEPT
elif [[ "$PROTOCOL" = 'tcp' ]]; then
iptables -I INPUT -p tcp --dport $PORT -j ACCEPT
fi
iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables-save >$IPTABLES
fi
if hash sestatus 2>/dev/null; then
if sestatus | grep "Current mode" | grep -qs "enforcing"; then
if [[ "$PORT" != '1194' ]]; then
if ! hash semanage 2>/dev/null; then
yum install policycoreutils-python -y
fi
if [[ "$PROTOCOL" = 'udp' ]]; then
semanage port -a -t openvpn_port_t -p udp $PORT
elif [[ "$PROTOCOL" = 'tcp' ]]; then
semanage port -a -t openvpn_port_t -p tcp $PORT
fi
fi
fi
fi
#Liberando DNS
msg -bar
msg -ama " Ultimo Paso, Configuraciones DNS"
msg -bar
while [[ $DDNS != @(n|N) ]]; do
echo -ne "\033[1;33m"
read -p " Agergar HOST DNS [S/N]: " -e -i n DDNS
[[ $DDNS = @(s|S|y|Y) ]] && agrega_dns
done
[[ ! -z $NEWDNS ]] && {
sed -i "/127.0.0.1[[:blank:]]\+localhost/a 127.0.0.1 $NEWDNS" /etc/hosts
for DENESI in $(echo $NEWDNS); do
sed -i "/remote ${SERVER_IP} ${PORT} ${PROTOCOL}/a remote ${DENESI} ${PORT} ${PROTOCOL}" /etc/openvpn/client-common.txt
done
}
msg -bar
# REINICIANDO OPENVPN
if [[ "$OS" = 'debian' ]]; then
if pgrep systemd-journal; then
sed -i 's|LimitNPROC|#LimitNPROC|' /lib/systemd/system/openvpn\@.service
sed -i 's|/etc/openvpn/server|/etc/openvpn|' /lib/systemd/system/openvpn\@.service
sed -i 's|%i.conf|server.conf|' /lib/systemd/system/openvpn\@.service
#systemctl daemon-reload
(
systemctl restart openvpn
systemctl enable openvpn
) >/dev/null 2>&1
else
/etc/init.d/openvpn restart >/dev/null 2>&1
fi
else
if pgrep systemd-journal; then
(
systemctl restart openvpn@server.service
systemctl enable openvpn@server.service
) >/dev/null 2>&1
else
(
service openvpn restart
chkconfig openvpn on
) >/dev/null 2>&1
fi
fi
service squid restart &>/dev/null
service squid3 restart &>/dev/null
apt-get install ufw -y >/dev/null 2>&1
for ufww in $(mportas | awk '{print $2}'); do
ufw allow $ufww >/dev/null 2>&1
done
#Restart OPENVPN
(
killall openvpn 2>/dev/null
systemctl stop openvpn@server.service >/dev/null 2>&1
service openvpn stop >/dev/null 2>&1
sleep 0.1s
cd /etc/openvpn >/dev/null 2>&1
screen -dmS ovpnscr openvpn --config "server.conf" >/dev/null 2>&1
) >/dev/null 2>&1
echo -e "\033[1;32m Openvpn configurado con EXITO!"
msg -bar
msg -ama " Ahora crear una SSH para generar el (.ovpn)!"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
edit_ovpn_host() {
msg -bar3
msg -ama " CONFIGURACION HOST DNS OPENVPN"
msg -bar
while [[ $DDNS != @(n|N) ]]; do
echo -ne "\033[1;33m"
read -p " Agregar host [S/N]: " -e -i n DDNS
[[ $DDNS = @(s|S|y|Y) ]] && agrega_dns
done
[[ ! -z $NEWDNS ]] && sed -i "/127.0.0.1[[:blank:]]\+localhost/a 127.0.0.1 $NEWDNS" /etc/hosts
msg -bar
msg -ama " Es Necesario el Reboot del Servidor Para"
msg -ama " Para que las configuraciones sean efectudas"
msg -bar
}
fun_openvpn() {
[[ -e /etc/openvpn/server.conf ]] && {
unset OPENBAR
[[ $(mportas | grep -w "openvpn") ]] && OPENBAR="\033[1;32m ONLINE" || OPENBAR="\033[1;31m OFFLINE"
clear && clear
msg -bar
msg -ama " OPENVPN YA ESTA INSTALADO"
msg -bar
echo -e "\033[1;32m [1] >\033[1;36m DESINSTALAR OPENVPN"
echo -e "\033[1;32m [2] >\033[1;36m EDITAR CONFIGURACION CLIENTE \033[1;31m(MEDIANTE NANO)"
echo -e "\033[1;32m [3] >\033[1;36m EDITAR CONFIGURACION SERVIDOR \033[1;31m(MEDIANTE NANO)"
echo -e "\033[1;32m [4] >\033[1;36m CAMBIAR HOST DE OPENVPN"
echo -e "\033[1;32m [5] >\033[1;36m INICIAR O PARAR OPENVPN - $OPENBAR"
msg -bar
while [[ $xption != @([0|1|2|3|4|5]) ]]; do
echo -ne "\033[1;33m Opcion: " && read xption
tput cuu1 && tput dl1
done
case $xption in
1)
clear
msg -bar
echo -ne "\033[1;97m"
read -p "QUIERES DESINTALAR OPENVPN? [Y/N]: " -e REMOVE
msg -bar
if [[ "$REMOVE" = 'y' || "$REMOVE" = 'Y' ]]; then
PORT=$(grep '^port ' /etc/openvpn/server.conf | cut -d " " -f 2)
PROTOCOL=$(grep '^proto ' /etc/openvpn/server.conf | cut -d " " -f 2)
if pgrep firewalld; then
IP=$(firewall-cmd --direct --get-rules ipv4 nat POSTROUTING | grep '\-s 10.8.0.0/24 '"'"'!'"'"' -d 10.8.0.0/24 -j SNAT --to ' | cut -d " " -f 10)
#
firewall-cmd --zone=public --remove-port=$PORT/$PROTOCOL
firewall-cmd --zone=trusted --remove-source=10.8.0.0/24
firewall-cmd --permanent --zone=public --remove-port=$PORT/$PROTOCOL
firewall-cmd --permanent --zone=trusted --remove-source=10.8.0.0/24
firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
firewall-cmd --permanent --direct --remove-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
else
IP=$(grep 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to ' $RCLOCAL | cut -d " " -f 14)
iptables -t nat -D POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to $IP
sed -i '/iptables -t nat -A POSTROUTING -s 10.8.0.0\/24 ! -d 10.8.0.0\/24 -j SNAT --to /d' $RCLOCAL
if iptables -L -n | grep -qE '^ACCEPT'; then
iptables -D INPUT -p $PROTOCOL --dport $PORT -j ACCEPT
iptables -D FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
sed -i "/iptables -I INPUT -p $PROTOCOL --dport $PORT -j ACCEPT/d" $RCLOCAL
sed -i "/iptables -I FORWARD -s 10.8.0.0\/24 -j ACCEPT/d" $RCLOCAL
sed -i "/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT/d" $RCLOCAL
fi
fi
if sestatus 2>/dev/null | grep "Current mode" | grep -q "enforcing" && [[ "$PORT" != '1194' ]]; then
semanage port -d -t openvpn_port_t -p $PROTOCOL $PORT
fi
if [[ "$OS" = 'debian' ]]; then
apt-get remove --purge -y openvpn
else
yum remove openvpn -y
fi
rm -rf /etc/openvpn
rm -f /etc/sysctl.d/30-openvpn-forward.conf
msg -bar
echo "OpenVPN removido!"
msg -bar
else
msg -bar
echo "Desinstalacion abortada!"
msg -bar
fi
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
;;
2)
nano /etc/openvpn/client-common.txt
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
;;
3)
nano /etc/openvpn/server.conf
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
;;
4) edit_ovpn_host ;;
5)
[[ $(mportas | grep -w openvpn) ]] && {
/etc/init.d/openvpn stop >/dev/null 2>&1
killall openvpn &>/dev/null
systemctl stop openvpn@server.service &>/dev/null
service openvpn stop &>/dev/null
#ps x |grep openvpn |grep -v grep|awk '{print $1}' | while read pid; do kill -9 $pid; done
} || {
cd /etc/openvpn
screen -dmS ovpnscr openvpn --config "server.conf" >/dev/null 2>&1
cd $HOME
}
msg -ama " Procedimiento Hecho con Exito"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
;;
0)
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
;;
esac
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
[[ -e /etc/squid/squid.conf ]] && instala_ovpn2 && menu_inst
[[ -e /etc/squid3/squid.conf ]] && instala_ovpn2 && menu_inst
instala_ovpn2 || menu_inst
}
fun_openvpn
}
#--- PROTOCOLO BADVPN
proto_badvpn() {
activar_badvpn() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR DE BADVPN (UDP)"
msg -bar
echo -e "\033[1;97mDigite los puertos a activar de forma secuencial\nEjemplo:\033[1;32m 7300 7200 7100 \033[1;97m| \033[1;93mPuerto recomendado \033[1;32m 7300\n"
echo -ne "\033[1;97mDigite los Puertos:\033[1;32m " && read -p " " -e -i "7200 7300" portasx
echo "$portasx" >/etc/SCRIPT-LATAM/PortM/Badvpn.log
msg -bar
totalporta=($portasx)
unset PORT
for ((i = 0; i < ${#totalporta[@]}; i++)); do
[[ $(mportas | grep "${totalporta[$i]}") = "" ]] && {
echo -e "\033[1;33m Puerto Escojido:\033[1;32m ${totalporta[$i]} OK"
PORT+="${totalporta[$i]}\n"
screen -dmS badvpn /bin/badvpn-udpgw --listen-addr 127.0.0.1:${totalporta[$i]} --max-clients 1000 --max-connections-for-client 10
} || {
echo -e "\033[1;33m Puerto Escojido:\033[1;31m ${totalporta[$i]} FAIL"
}
done
[[ -z $PORT ]] && {
echo -e "\033[1;31m No se ha elegido ninguna puerto valido, reintente\033[0m"
return 1
}
msg -bar
[[ "$(ps x | grep badvpn | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> BADVPN INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
desactivar_badvpn() {
clear && clear
msg -bar
echo -e "\033[1;31m DESISNTALANDO PUERTOS BADVPN "
msg -bar
kill -9 $(ps x | grep badvpn | grep -v grep | awk '{print $1'}) >/dev/null 2>&1
killall badvpn-udpgw >/dev/null 2>&1
screen -wipe >/dev/null 2>&1
rm -rf /etc/SCRIPT-LATAM/PortM/Badvpn.log >/dev/null 2>&1
[[ ! "$(ps x | grep badvpn | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> BADVPN DESINSTALADO CON EXICO << "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR DE BADVPN (UDP)"
msg -bar
if [[ ! -e /bin/badvpn-udpgw ]]; then
wget -O /bin/badvpn-udpgw https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/badvpn-udpgw &>/dev/null
chmod 777 /bin/badvpn-udpgw
fi
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR UN BADVPN \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER TODOS LOS BADVPN\e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_badvpn
;;
2)
msg -bar
desactivar_badvpn
;;
0)
menu
;;
*)
echo -e "$ Porfavor use numeros del [0-14]"
msg -bar
menu
;;
esac
#exit 0
}
#--- PROTO SHADOWSOCK NORMAL
proto_shadowsockN() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
fun_ip() {
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && IP="$MEU_IP2" || IP="$MEU_IP"
}
fun_eth() {
eth=$(ifconfig | grep -v inet6 | grep -v lo | grep -v 127.0.0.1 | grep "encap:Ethernet" | awk '{print $1}')
[[ $eth != "" ]] && {
msg -bar
echo -e "${cor[3]} Aplicar Sistema Para Mejorar Paquetes SSH?"
echo -e "${cor[3]} Opcion Para Usuarios Avanzados"
msg -bar
read -p " [S/N]: " -e -i n sshsn
[[ "$sshsn" = @(s|S|y|Y) ]] && {
echo -e "${cor[1]} Correccion de problemas de paquetes en SSH..."
echo -e " Cual es la Tasa de RX"
echo -ne "[ 1 - 999999999 ]: "
read rx
[[ "$rx" = "" ]] && rx="999999999"
echo -e " Cual es la Tasa de TX"
echo -ne "[ 1 - 999999999 ]: "
read tx
[[ "$tx" = "" ]] && tx="999999999"
apt-get install ethtool -y >/dev/null 2>&1
ethtool -G $eth rx $rx tx $tx >/dev/null 2>&1
}
msg -bar
}
}
fun_shadowsocks() {
[[ -e /etc/shadowsocks.json ]] && {
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALANDO SHADOWSOCK"
msg -bar
[[ $(ps x | grep ssserver | grep -v grep | awk '{print $1}') != "" ]] && kill -9 $(ps x | grep ssserver | grep -v grep | awk '{print $1}') >/dev/null 2>&1 && ssserver -c /etc/shadowsocks.json -d stop >/dev/null 2>&1
echo -e "\033[1;32m >> SHADOWSOCK-N DESINSTALADO CON EXITO << "
msg -bar
rm /etc/shadowsocks.json
return 0
}
while true; do
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR SHADOWSOCKS | SCRIPT LATAM"
msg -bar
echo -e "\033[1;97m Selecione una Criptografia"
msg -bar
encript=(aes-256-gcm aes-192-gcm aes-128-gcm aes-256-ctr aes-192-ctr aes-128-ctr aes-256-cfb aes-192-cfb aes-128-cfb camellia-128-cfb camellia-192-cfb camellia-256-cfb chacha20-ietf-poly1305 chacha20-ietf chacha20 rc4-md5)
for ((s = 0; s < ${#encript[@]}; s++)); do
echo -e " [${s}] - ${encript[${s}]}"
done
msg -bar
while true; do
unset cript
echo -ne "\033[1;97mEscoja una Criptografia:\033[1;32m " && read -p " " -e -i "0" cript
[[ ${encript[$cript]} ]] && break
echo -e "Opcion Invalida"
done
encriptacao="${encript[$cript]}"
[[ ${encriptacao} != "" ]] && break
echo -e "Opcion Invalida"
done
#ESCOLHENDO LISTEN
msg -bar
echo -e "\033[1;97m Seleccione el puerto para Shadowsocks\033[0m"
msg -bar
while true; do
unset Lport
echo -ne "\033[1;97m Puerto:\033[1;32m " && read Lport
[[ $(mportas | grep "$Lport") = "" ]] && break
echo -e " ${Lport}: Puerto Invalido"
done
#INICIANDO
msg -bar
echo -ne "\033[1;97m Ingrese una contraseña:\033[1;32m " && read Pass
msg -bar
echo -e "\033[1;97m -- Iniciando Instalacion -- "
msg -bar
echo -e "\033[1;93m Despaquetando Shadowsock"
fun_bar 'sudo apt-get install shadowsocks -y'
echo -e "\033[1;93m Despaquetando libsodium"
fun_bar 'sudo apt-get install libsodium-dev -y'
echo -e "\033[1;93m Despaquetando python-pip"
fun_bar 'sudo apt-get install python-pip -y'
echo -e "\033[1;93m Despaquetando setups"
fun_bar 'sudo pip install --upgrade setuptools'
echo -e "\033[1;93m Actualizando Ficheros"
fun_bar 'pip install --upgrade pip -y'
echo -e "\033[1;93m Revisando Ficheros"
fun_bar 'pip install https://github.com/shadowsocks/shadowsocks/archive/master.zip -U'
echo -ne '{\n"server":"' >/etc/shadowsocks.json
echo -ne "0.0.0.0" >>/etc/shadowsocks.json
echo -ne '",\n"server_port":' >>/etc/shadowsocks.json
echo -ne "${Lport},\n" >>/etc/shadowsocks.json
echo -ne '"local_port":1080,\n"password":"' >>/etc/shadowsocks.json
echo -ne "${Pass}" >>/etc/shadowsocks.json
echo -ne '",\n"timeout":600,\n"method":"' >>/etc/shadowsocks.json
echo -ne "${encriptacao}" >>/etc/shadowsocks.json
echo -ne '"\n}' >>/etc/shadowsocks.json
ssserver -c /etc/shadowsocks.json -d start >/dev/null 2>&1
value=$(ps x | grep ssserver | grep -v grep)
[[ $value != "" ]] && value="\033[1;32m >> SHADOW SOCK INSTALADO CON EXITO << " || value="\033[1;31m ERROR"
msg -bar
echo -e "${value}"
msg -bar
return 0
}
fun_shadowsocks
ufw disable >/dev/null 2>&1
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
#--- SHADOWSOCK LIV + OBFS
proto_shadowsockL() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
fun_ip() {
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && IP="$MEU_IP2" || IP="$MEU_IP"
}
fun_eth() {
eth=$(ifconfig | grep -v inet6 | grep -v lo | grep -v 127.0.0.1 | grep "encap:Ethernet" | awk '{print $1}')
[[ $eth != "" ]] && {
msg -bar
echo -e "${cor[3]} Aplicar Sistema Para Mejorar Paquetes SSH?"
echo -e "${cor[3]} Opcion Para Usuarios Avanzados"
msg -bar
read -p " [S/N]: " -e -i n sshsn
[[ "$sshsn" = @(s|S|y|Y) ]] && {
echo -e "${cor[1]} Correccion de problemas de paquetes en SSH..."
echo -e " Cual es la Tasa de RX"
echo -ne "[ 1 - 999999999 ]: "
read rx
[[ "$rx" = "" ]] && rx="999999999"
echo -e " Cual es la Tasa de TX"
echo -ne "[ 1 - 999999999 ]: "
read tx
[[ "$tx" = "" ]] && tx="999999999"
apt-get install ethtool -y >/dev/null 2>&1
ethtool -G $eth rx $rx tx $tx >/dev/null 2>&1
}
msg -bar
}
}
#--- SHADOW
instaladossb_fun() {
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
plain='\033[0m'
[[ $EUID -ne 0 ]] && echo -e "[${red}Error${plain}] This script must be run as root!" && exit 1
cur_dir=$(pwd)
software=(Shadowsocks-Python ShadowsocksR Shadowsocks-Go Shadowsocks-libev)
libsodium_file="libsodium-1.0.17"
libsodium_url="https://github.com/jedisct1/libsodium/releases/download/1.0.17/libsodium-1.0.17.tar.gz"
mbedtls_file="mbedtls-2.16.0"
mbedtls_url="https://tls.mbed.org/download/mbedtls-2.16.0-gpl.tgz"
shadowsocks_python_file="shadowsocks-master"
shadowsocks_python_url="https://github.com/shadowsocks/shadowsocks/archive/master.zip"
shadowsocks_python_init="/etc/init.d/shadowsocks-python"
shadowsocks_python_config="/etc/shadowsocks-python/config.json"
shadowsocks_python_centos="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks"
shadowsocks_python_debian="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-debian"
shadowsocks_r_file="shadowsocksr-3.2.2"
shadowsocks_r_url="https://github.com/shadowsocksrr/shadowsocksr/archive/3.2.2.tar.gz"
shadowsocks_r_init="/etc/init.d/shadowsocks-r"
shadowsocks_r_config="/etc/shadowsocks-r/config.json"
shadowsocks_r_centos="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR"
shadowsocks_r_debian="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocksR-debian"
shadowsocks_go_file_64="shadowsocks-server-linux64-1.2.2"
shadowsocks_go_url_64="https://dl.lamp.sh/shadowsocks/shadowsocks-server-linux64-1.2.2.gz"
shadowsocks_go_file_32="shadowsocks-server-linux32-1.2.2"
shadowsocks_go_url_32="https://dl.lamp.sh/shadowsocks/shadowsocks-server-linux32-1.2.2.gz"
shadowsocks_go_init="/etc/init.d/shadowsocks-go"
shadowsocks_go_config="/etc/shadowsocks-go/config.json"
shadowsocks_go_centos="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-go"
shadowsocks_go_debian="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-go-debian"
shadowsocks_libev_init="/etc/init.d/shadowsocks-libev"
shadowsocks_libev_config="/etc/shadowsocks-libev/config.json"
shadowsocks_libev_centos="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev"
shadowsocks_libev_debian="https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev-debian"
# Stream Ciphers
common_ciphers=(
aes-256-gcm
aes-192-gcm
aes-128-gcm
aes-256-ctr
aes-192-ctr
aes-128-ctr
aes-256-cfb
aes-192-cfb
aes-128-cfb
camellia-128-cfb
camellia-192-cfb
camellia-256-cfb
xchacha20-ietf-poly1305
chacha20-ietf-poly1305
chacha20-ietf
chacha20
salsa20
rc4-md5
)
go_ciphers=(
aes-256-cfb
aes-192-cfb
aes-128-cfb
aes-256-ctr
aes-192-ctr
aes-128-ctr
chacha20-ietf
chacha20
salsa20
rc4-md5
)
r_ciphers=(
none
aes-256-cfb
aes-192-cfb
aes-128-cfb
aes-256-cfb8
aes-192-cfb8
aes-128-cfb8
aes-256-ctr
aes-192-ctr
aes-128-ctr
chacha20-ietf
chacha20
salsa20
xchacha20
xsalsa20
rc4-md5
)
# Reference URL:
# https://github.com/shadowsocksr-rm/shadowsocks-rss/blob/master/ssr.md
# https://github.com/shadowsocksrr/shadowsocksr/commit/a3cf0254508992b7126ab1151df0c2f10bf82680
# Protocol
protocols=(
origin
verify_deflate
auth_sha1_v4
auth_sha1_v4_compatible
auth_aes128_md5
auth_aes128_sha1
auth_chain_a
auth_chain_b
auth_chain_c
auth_chain_d
auth_chain_e
auth_chain_f
)
# obfs
obfs=(
plain
http_simple
http_simple_compatible
http_post
http_post_compatible
tls1.2_ticket_auth
tls1.2_ticket_auth_compatible
tls1.2_ticket_fastauth
tls1.2_ticket_fastauth_compatible
)
# libev obfuscating
obfs_libev=(http tls)
# initialization parameter
libev_obfs=""
disable_selinux() {
if [ -s /etc/selinux/config ] && grep 'SELINUX=enforcing' /etc/selinux/config; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
fi
}
check_sys() {
local checkType=$1
local value=$2
local release=''
local systemPackage=''
if [[ -f /etc/redhat-release ]]; then
release="centos"
systemPackage="yum"
elif grep -Eqi "debian|raspbian" /etc/issue; then
release="debian"
systemPackage="apt"
elif grep -Eqi "ubuntu" /etc/issue; then
release="ubuntu"
systemPackage="apt"
elif grep -Eqi "centos|red hat|redhat" /etc/issue; then
release="centos"
systemPackage="yum"
elif grep -Eqi "debian|raspbian" /proc/version; then
release="debian"
systemPackage="apt"
elif grep -Eqi "ubuntu" /proc/version; then
release="ubuntu"
systemPackage="apt"
elif grep -Eqi "centos|red hat|redhat" /proc/version; then
release="centos"
systemPackage="yum"
fi
if [[ "${checkType}" == "sysRelease" ]]; then
if [ "${value}" == "${release}" ]; then
return 0
else
return 1
fi
elif [[ "${checkType}" == "packageManager" ]]; then
if [ "${value}" == "${systemPackage}" ]; then
return 0
else
return 1
fi
fi
}
version_ge() {
test "$(echo "$@" | tr " " "\n" | sort -rV | head -n 1)" == "$1"
}
version_gt() {
test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"
}
check_kernel_version() {
local kernel_version=$(uname -r | cut -d- -f1)
if version_gt ${kernel_version} 3.7.0; then
return 0
else
return 1
fi
}
check_kernel_headers() {
if check_sys packageManager yum; then
if rpm -qa | grep -q headers-$(uname -r); then
return 0
else
return 1
fi
elif check_sys packageManager apt; then
if dpkg -s linux-headers-$(uname -r) >/dev/null 2>&1; then
return 0
else
return 1
fi
fi
return 1
}
getversion() {
if [[ -s /etc/redhat-release ]]; then
grep -oE "[0-9.]+" /etc/redhat-release
else
grep -oE "[0-9.]+" /etc/issue
fi
}
centosversion() {
if check_sys sysRelease centos; then
local code=$1
local version="$(getversion)"
local main_ver=${version%%.*}
if [ "$main_ver" == "$code" ]; then
return 0
else
return 1
fi
else
return 1
fi
}
autoconf_version() {
if [ ! "$(command -v autoconf)" ]; then
echo -e "[${green}Info${plain}] \e[1;97mIniciando instalacion de package autoconf"
if check_sys packageManager yum; then
yum install -y autoconf >/dev/null 2>&1 || echo -e "[${red}Error:${plain}] Failed to install autoconf"
elif check_sys packageManager apt; then
apt-get -y update >/dev/null 2>&1
apt-get -y install autoconf >/dev/null 2>&1 || echo -e "[${red}Error:${plain}] Failed to install autoconf"
fi
fi
local autoconf_ver=$(autoconf --version | grep autoconf | grep -oE "[0-9.]+")
if version_ge ${autoconf_ver} 2.67; then
return 0
else
return 1
fi
}
get_ip() {
local IP=$(ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1)
[ -z ${IP} ] && IP=$(wget -qO- -t1 -T2 ipv4.icanhazip.com)
[ -z ${IP} ] && IP=$(wget -qO- -t1 -T2 ipinfo.io/ip)
echo ${IP}
}
get_ipv6() {
local ipv6=$(wget -qO- -t1 -T2 ipv6.icanhazip.com)
[ -z ${ipv6} ] && return 1 || return 0
}
get_libev_ver() {
libev_ver=$(wget --no-check-certificate -qO- https://api.github.com/repos/shadowsocks/shadowsocks-libev/releases/latest | grep 'tag_name' | cut -d\" -f4)
[ -z ${libev_ver} ] && echo -e "[${red}Error${plain}] Get shadowsocks-libev latest version failed" && exit 1
}
get_opsy() {
[ -f /etc/redhat-release ] && awk '{print ($1,$3~/^[0-9]/?$3:$4)}' /etc/redhat-release && return
[ -f /etc/os-release ] && awk -F'[= "]' '/PRETTY_NAME/{print $3,$4,$5}' /etc/os-release && return
[ -f /etc/lsb-release ] && awk -F'[="]+' '/DESCRIPTION/{print $2}' /etc/lsb-release && return
}
is_64bit() {
if [ $(getconf WORD_BIT) = '32' ] && [ $(getconf LONG_BIT) = '64' ]; then
return 0
else
return 1
fi
}
debianversion() {
if check_sys sysRelease debian; then
local version=$(get_opsy)
local code=${1}
local main_ver=$(echo ${version} | sed 's/[^0-9]//g')
if [ "${main_ver}" == "${code}" ]; then
return 0
else
return 1
fi
else
return 1
fi
}
download() {
local filename=$(basename $1)
if [ -f ${1} ]; then
echo "${filename} [found]"
else
echo "${filename} not found, download now..."
wget --no-check-certificate -c -t3 -T60 -O ${1} ${2}
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Download ${filename} failed."
exit 1
fi
fi
}
download_files() {
cd ${cur_dir}
if [ "${selected}" == "1" ]; then
download "${shadowsocks_python_file}.zip" "${shadowsocks_python_url}"
if check_sys packageManager yum; then
download "${shadowsocks_python_init}" "${shadowsocks_python_centos}"
elif check_sys packageManager apt; then
download "${shadowsocks_python_init}" "${shadowsocks_python_debian}"
fi
elif [ "${selected}" == "2" ]; then
download "${shadowsocks_r_file}.tar.gz" "${shadowsocks_r_url}"
if check_sys packageManager yum; then
download "${shadowsocks_r_init}" "${shadowsocks_r_centos}"
elif check_sys packageManager apt; then
download "${shadowsocks_r_init}" "${shadowsocks_r_debian}"
fi
elif [ "${selected}" == "3" ]; then
if is_64bit; then
download "${shadowsocks_go_file_64}.gz" "${shadowsocks_go_url_64}"
else
download "${shadowsocks_go_file_32}.gz" "${shadowsocks_go_url_32}"
fi
if check_sys packageManager yum; then
download "${shadowsocks_go_init}" "${shadowsocks_go_centos}"
elif check_sys packageManager apt; then
download "${shadowsocks_go_init}" "${shadowsocks_go_debian}"
fi
elif [ "${selected}" == "4" ]; then
get_libev_ver
shadowsocks_libev_file="shadowsocks-libev-$(echo ${libev_ver} | sed -e 's/^[a-zA-Z]//g')"
shadowsocks_libev_url="https://github.com/shadowsocks/shadowsocks-libev/releases/download/${libev_ver}/${shadowsocks_libev_file}.tar.gz"
download "${shadowsocks_libev_file}.tar.gz" "${shadowsocks_libev_url}"
if check_sys packageManager yum; then
download "${shadowsocks_libev_init}" "${shadowsocks_libev_centos}"
elif check_sys packageManager apt; then
download "${shadowsocks_libev_init}" "${shadowsocks_libev_debian}"
fi
fi
}
get_char() {
SAVEDSTTY=$(stty -g)
stty -echo
stty cbreak
dd if=/dev/tty bs=1 count=1 2>/dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
error_detect_depends() {
local command=$1
local depend=$(echo "${command}" | awk '{print $4}')
echo -e "[${green}Info${plain}] Starting to install package ${depend}"
${command} >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Failed to install ${red}${depend}${plain}"
echo "Please visit: https://teddysun.com/486.html and contact."
exit 1
fi
}
config_firewall() {
if centosversion 6; then
/etc/init.d/iptables status >/dev/null 2>&1
if [ $? -eq 0 ]; then
iptables -L -n | grep -i ${shadowsocksport} >/dev/null 2>&1
if [ $? -ne 0 ]; then
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${shadowsocksport} -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${shadowsocksport} -j ACCEPT
/etc/init.d/iptables save
/etc/init.d/iptables restart
else
echo -e "[${green}Info${plain}] port ${green}${shadowsocksport}${plain} already be enabled."
fi
else
echo -e "[${yellow}Warning${plain}] iptables looks like not running or not installed, please enable port ${shadowsocksport} manually if necessary."
fi
elif centosversion 7; then
systemctl status firewalld >/dev/null 2>&1
if [ $? -eq 0 ]; then
default_zone=$(firewall-cmd --get-default-zone)
firewall-cmd --permanent --zone=${default_zone} --add-port=${shadowsocksport}/tcp
firewall-cmd --permanent --zone=${default_zone} --add-port=${shadowsocksport}/udp
firewall-cmd --reload
else
echo -e "[${yellow}Warning${plain}] firewalld looks like not running or not installed, please enable port ${shadowsocksport} manually if necessary."
fi
fi
}
config_shadowsocks() {
if check_kernel_version && check_kernel_headers; then
fast_open="true"
else
fast_open="false"
fi
if [ "${selected}" == "1" ]; then
if [ ! -d "$(dirname ${shadowsocks_python_config})" ]; then
mkdir -p $(dirname ${shadowsocks_python_config})
fi
cat >${shadowsocks_python_config} <<-EOF
{
"server":"0.0.0.0",
"server_port":${shadowsocksport},
"local_address":"127.0.0.1",
"local_port":1080,
"password":"${shadowsockspwd}",
"timeout":300,
"method":"${shadowsockscipher}",
"fast_open":${fast_open}
}
EOF
elif [ "${selected}" == "2" ]; then
if [ ! -d "$(dirname ${shadowsocks_r_config})" ]; then
mkdir -p $(dirname ${shadowsocks_r_config})
fi
cat >${shadowsocks_r_config} <<-EOF
{
"server":"0.0.0.0",
"server_ipv6":"::",
"server_port":${shadowsocksport},
"local_address":"127.0.0.1",
"local_port":1080,
"password":"${shadowsockspwd}",
"timeout":120,
"method":"${shadowsockscipher}",
"protocol":"${shadowsockprotocol}",
"protocol_param":"",
"obfs":"${shadowsockobfs}",
"obfs_param":"",
"redirect":"",
"dns_ipv6":false,
"fast_open":${fast_open},
"workers":1
}
EOF
elif [ "${selected}" == "3" ]; then
if [ ! -d "$(dirname ${shadowsocks_go_config})" ]; then
mkdir -p $(dirname ${shadowsocks_go_config})
fi
cat >${shadowsocks_go_config} <<-EOF
{
"server":"0.0.0.0",
"server_port":${shadowsocksport},
"local_port":1080,
"password":"${shadowsockspwd}",
"method":"${shadowsockscipher}",
"timeout":300
}
EOF
elif [ "${selected}" == "4" ]; then
local server_value="\"0.0.0.0\""
if get_ipv6; then
server_value="[\"[::0]\",\"0.0.0.0\"]"
fi
if [ ! -d "$(dirname ${shadowsocks_libev_config})" ]; then
mkdir -p $(dirname ${shadowsocks_libev_config})
fi
if [ "${libev_obfs}" == "y" ] || [ "${libev_obfs}" == "Y" ]; then
cat >${shadowsocks_libev_config} <<-EOF
{
"server":${server_value},
"server_port":${shadowsocksport},
"password":"${shadowsockspwd}",
"timeout":300,
"user":"nobody",
"method":"${shadowsockscipher}",
"fast_open":${fast_open},
"nameserver":"8.8.8.8",
"mode":"tcp_and_udp",
"plugin":"obfs-server",
"plugin_opts":"obfs=${shadowsocklibev_obfs}"
}
EOF
else
cat >${shadowsocks_libev_config} <<-EOF
{
"server":${server_value},
"server_port":${shadowsocksport},
"password":"${shadowsockspwd}",
"timeout":300,
"user":"nobody",
"method":"${shadowsockscipher}",
"fast_open":${fast_open},
"nameserver":"8.8.8.8",
"mode":"tcp_and_udp"
}
EOF
fi
fi
}
install_dependencies() {
if check_sys packageManager yum; then
echo -e "[${green}Info${plain}] Checking the EPEL repository..."
if [ ! -f /etc/yum.repos.d/epel.repo ]; then
yum install -y epel-release >/dev/null 2>&1
fi
[ ! -f /etc/yum.repos.d/epel.repo ] && echo -e "[${red}Error${plain}] Install EPEL repository failed, please check it." && exit 1
[ ! "$(command -v yum-config-manager)" ] && yum install -y yum-utils >/dev/null 2>&1
[ x"$(yum-config-manager epel | grep -w enabled | awk '{print $3}')" != x"True" ] && yum-config-manager --enable epel >/dev/null 2>&1
echo -e "[${green}Info${plain}] Checking the EPEL repository complete..."
yum_depends=(
unzip gzip openssl openssl-devel gcc python python-devel python-setuptools pcre pcre-devel libtool libevent
autoconf automake make curl curl-devel zlib-devel perl perl-devel cpio expat-devel gettext-devel
libev-devel c-ares-devel git qrencode
)
for depend in ${yum_depends[@]}; do
error_detect_depends "yum -y install ${depend}"
done
elif check_sys packageManager apt; then
apt_depends=(
gettext build-essential unzip gzip python python-dev python-setuptools curl openssl libssl-dev
autoconf automake libtool gcc make perl cpio libpcre3 libpcre3-dev zlib1g-dev libev-dev libc-ares-dev git qrencode
)
apt-get -y update
for depend in ${apt_depends[@]}; do
error_detect_depends "apt-get -y install ${depend}"
done
fi
}
install_check() {
if check_sys packageManager yum || check_sys packageManager apt; then
if centosversion 5; then
return 1
fi
return 0
else
return 1
fi
}
install_select() {
if ! install_check; then
echo -e "[${red}Error${plain}] Your OS is not supported to run it!"
echo "Please change to CentOS 6+/Debian 7+/Ubuntu 12+ and try again."
exit 1
fi
while true; do
selected=4
case "${selected}" in
1 | 2 | 3 | 4)
echo -e "\e[1;97m ##Este proceso puede demorar unos minutos##"
msg -bar
break
;;
*)
echo -e "[${red}Error${plain}] Please only enter a number [1-4]"
;;
esac
done
}
install_prepare_password() {
echo -ne "\033[1;97m Digite una contraseña:\033[1;32m" && read -p " " -e -i latam shadowsockspwd
[ -z "${shadowsockspwd}" ] && shadowsockspwd="latam"
msg -bar
echo -e "\e[1;97m Contraseña Digitada:\e[1;31m ${shadowsockspwd}"
msg -bar
}
install_prepare_port() {
while true; do
dport=$(shuf -i 9000-19999 -n 1)
echo -ne "\033[1;97m Ingrese un puerto: [1-65535]:\033[1;32m" && read -p " " -e -i "3000" shadowsocksport
[ -z "${shadowsocksport}" ] && shadowsocksport="3000"
expr ${shadowsocksport} + 1 &>/dev/null
if [ $? -eq 0 ]; then
if [ ${shadowsocksport} -ge 1 ] && [ ${shadowsocksport} -le 65535 ] && [ ${shadowsocksport:0:1} != 0 ]; then
msg -bar
echo -e "\e[1;97m Puerto Digitada:\e[1;31m ${shadowsocksport}"
msg -bar
break
fi
fi
echo -e "[${red}Error${plain}] Digite solo numeros [1-65535]"
done
}
install_prepare_cipher() {
while true; do
if [[ "${selected}" == "1" || "${selected}" == "4" ]]; then
for ((i = 1; i <= ${#common_ciphers[@]}; i++)); do
hint="${common_ciphers[$i - 1]}"
echo -e "${green}${i}${plain}) ${hint}"
done
msg -bar
echo -ne "\033[1;97m Elige un cifrado \033[1;32m" && read -p " " -e -i 1 pick
[ -z "$pick" ] && pick=1
expr ${pick} + 1 &>/dev/null
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Digite solo numeros"
continue
fi
if [[ "$pick" -lt 1 || "$pick" -gt ${#common_ciphers[@]} ]]; then
echo -e "[${red}Error${plain}] Digite un numero empezando de 1 ${#common_ciphers[@]}"
continue
fi
shadowsockscipher=${common_ciphers[$pick - 1]}
elif [ "${selected}" == "2" ]; then
for ((i = 1; i <= ${#r_ciphers[@]}; i++)); do
hint="${r_ciphers[$i - 1]}"
echo -e "${green}${i}${plain}) ${hint}"
done
msg -bar
read -p "¿Qué cifrado elegirías?(Default: ${r_ciphers[1]}):" pick
[ -z "$pick" ] && pick=2
expr ${pick} + 1 &>/dev/null
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Please enter a number"
continue
fi
if [[ "$pick" -lt 1 || "$pick" -gt ${#r_ciphers[@]} ]]; then
echo -e "[${red}Error${plain}] Please enter a number between 1 and ${#r_ciphers[@]}"
continue
fi
shadowsockscipher=${r_ciphers[$pick - 1]}
elif [ "${selected}" == "3" ]; then
for ((i = 1; i <= ${#go_ciphers[@]}; i++)); do
hint="${go_ciphers[$i - 1]}"
echo -e "${green}${i}${plain}) ${hint}"
done
msg -bar
read -p "¿Qué cifrado elegirías?(Default: ${go_ciphers[0]}):" pick
[ -z "$pick" ] && pick=1
expr ${pick} + 1 &>/dev/null
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Please enter a number"
continue
fi
if [[ "$pick" -lt 1 || "$pick" -gt ${#go_ciphers[@]} ]]; then
echo -e "[${red}Error${plain}] Please enter a number between 1 and ${#go_ciphers[@]}"
continue
fi
shadowsockscipher=${go_ciphers[$pick - 1]}
fi
msg -bar
echo -e "\e[1;97m Cifrado Digitada:\e[1;31m ${shadowsockscipher}"
msg -bar
break
done
}
install_prepare_protocol() {
while true; do
echo -e "Please select protocol for ${software[${selected} - 1]}:"
for ((i = 1; i <= ${#protocols[@]}; i++)); do
hint="${protocols[$i - 1]}"
echo -e "${green}${i}${plain}) ${hint}"
done
read -p "Which protocol you'd select(Default: ${protocols[0]}):" protocol
[ -z "$protocol" ] && protocol=1
expr ${protocol} + 1 &>/dev/null
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Please enter a number"
continue
fi
if [[ "$protocol" -lt 1 || "$protocol" -gt ${#protocols[@]} ]]; then
echo -e "[${red}Error${plain}] Please enter a number between 1 and ${#protocols[@]}"
continue
fi
shadowsockprotocol=${protocols[$protocol - 1]}
echo
echo "protocol = ${shadowsockprotocol}"
echo
break
done
}
install_prepare_obfs() {
while true; do
echo -e "Por favor, seleccione obfs para ${software[${selected} - 1]}:"
msg -bar
for ((i = 1; i <= ${#obfs[@]}; i++)); do
hint="${obfs[$i - 1]}"
echo -e "${green}${i}${plain}) ${hint}"
done
msg -bar
echo -ne "\033[1;97m Qué obfs elegiras (Default ${obfs[0]}):\033[1;32m" && read -p " " -e -i 1 r_obfs
[ -z "$r_obfs" ] && r_obfs=1
expr ${r_obfs} + 1 &>/dev/null
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Digite un numero "
continue
fi
if [[ "$r_obfs" -lt 1 || "$r_obfs" -gt ${#obfs[@]} ]]; then
echo -e "[${red}Error${plain}] Digite un numero apartir de 1 ${#obfs[@]}"
continue
fi
shadowsockobfs=${obfs[$r_obfs - 1]}
echo
echo "obfs = ${shadowsockobfs}"
echo
break
done
}
install_prepare_libev_obfs() {
if autoconf_version || centosversion 6; then
while true; do
echo -ne "\033[1;97m Instalar simple-obfs [y/n] (default: n):\033[1;32m" && read -p " " -e -i n libev_obfs
[ -z "$libev_obfs" ] && libev_obfs=n
case "${libev_obfs}" in
y | Y | n | N)
msg -bar
echo -e "\e[1;97m Tu eligeste =\e[1;31m ${libev_obfs}"
msg -bar
break
;;
*)
echo -e "[${red}Error${plain}] Digite solo [y/n]"
;;
esac
done
if [ "${libev_obfs}" == "y" ] || [ "${libev_obfs}" == "Y" ]; then
while true; do
echo -e "\e[97m Por favor, seleccione obfs para simple-obfs:"
msg -bar
for ((i = 1; i <= ${#obfs_libev[@]}; i++)); do
hint="${obfs_libev[$i - 1]}"
echo -e "${green}${i}${plain}) ${hint}"
done
msg -bar
echo -ne "\033[1;97m Qué obfs elegiras (Default ${obfs_libev[0]}):\033[1;32m" && read -p " " -e -i 1 r_libev_obfs
[ -z "$r_libev_obfs" ] && r_libev_obfs=1
expr ${r_libev_obfs} + 1 &>/dev/null
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Digite solo numeros"
continue
fi
if [[ "$r_libev_obfs" -lt 1 || "$r_libev_obfs" -gt ${#obfs_libev[@]} ]]; then
echo -e "[${red}Error${plain}] digite un numero del 1 a ${#obfs_libev[@]}"
continue
fi
shadowsocklibev_obfs=${obfs_libev[$r_libev_obfs - 1]}
msg -bar
echo -e "\e[1;97mOBFS elegido = \e[1;31m${shadowsocklibev_obfs}"
msg -bar
break
done
fi
else
echo -e "[${green}Info${plain}] autoconf version is less than 2.67, simple-obfs for ${software[${selected} - 1]} installation has been skipped"
fi
}
install_prepare() {
if [[ "${selected}" == "1" || "${selected}" == "3" || "${selected}" == "4" ]]; then
install_prepare_password
install_prepare_port
install_prepare_cipher
if [ "${selected}" == "4" ]; then
install_prepare_libev_obfs
fi
elif [ "${selected}" == "2" ]; then
install_prepare_password
install_prepare_port
install_prepare_cipher
install_prepare_protocol
install_prepare_obfs
fi
echo -e "\033[1;93m Se instalaran librerias de cifrado, este proceso \n puede demorar varios minutos"
msg -bar
echo -e "\033[1;97m << Presiona enter para Continuar >>"
char=$(get_char)
}
install_libsodium() {
if [ ! -f /usr/lib/libsodium.a ]; then
cd ${cur_dir}
download "${libsodium_file}.tar.gz" "${libsodium_url}"
tar zxf ${libsodium_file}.tar.gz
cd ${libsodium_file}
./configure --prefix=/usr && make && make install
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] ${libsodium_file} install failed."
install_cleanup
exit 1
fi
else
echo -e "[${green}Info${plain}] ${libsodium_file} already installed."
fi
}
install_mbedtls() {
if [ ! -f /usr/lib/libmbedtls.a ]; then
cd ${cur_dir}
download "${mbedtls_file}-gpl.tgz" "${mbedtls_url}"
tar xf ${mbedtls_file}-gpl.tgz
cd ${mbedtls_file}
make SHARED=1 CFLAGS=-fPIC
make DESTDIR=/usr install
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] ${mbedtls_file} install failed."
install_cleanup
exit 1
fi
else
echo -e "[${green}Info${plain}] ${mbedtls_file} already installed."
fi
}
install_shadowsocks_python() {
cd ${cur_dir}
unzip -q ${shadowsocks_python_file}.zip
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] unzip ${shadowsocks_python_file}.zip failed, please check unzip command."
install_cleanup
exit 1
fi
cd ${shadowsocks_python_file}
python setup.py install --record /usr/local/shadowsocks_python.log
if [ -f /usr/bin/ssserver ] || [ -f /usr/local/bin/ssserver ]; then
chmod +x ${shadowsocks_python_init}
local service_name=$(basename ${shadowsocks_python_init})
if check_sys packageManager yum; then
chkconfig --add ${service_name}
chkconfig ${service_name} on
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} defaults
fi
else
echo
echo -e "[${red}Error${plain}] ${software[0]} install failed."
echo "Please visit: https://teddysun.com/486.html and contact."
install_cleanup
exit 1
fi
}
install_shadowsocks_r() {
cd ${cur_dir}
tar zxf ${shadowsocks_r_file}.tar.gz
mv ${shadowsocks_r_file}/shadowsocks /usr/local/
if [ -f /usr/local/shadowsocks/server.py ]; then
chmod +x ${shadowsocks_r_init}
local service_name=$(basename ${shadowsocks_r_init})
if check_sys packageManager yum; then
chkconfig --add ${service_name}
chkconfig ${service_name} on
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} defaults
fi
else
echo
echo -e "[${red}Error${plain}] ${software[1]} install failed."
echo "Please visit; https://teddysun.com/486.html and contact."
install_cleanup
exit 1
fi
}
install_shadowsocks_go() {
cd ${cur_dir}
if is_64bit; then
gzip -d ${shadowsocks_go_file_64}.gz
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Decompress ${shadowsocks_go_file_64}.gz failed."
install_cleanup
exit 1
fi
mv -f ${shadowsocks_go_file_64} /usr/bin/shadowsocks-server
else
gzip -d ${shadowsocks_go_file_32}.gz
if [ $? -ne 0 ]; then
echo -e "[${red}Error${plain}] Decompress ${shadowsocks_go_file_32}.gz failed."
install_cleanup
exit 1
fi
mv -f ${shadowsocks_go_file_32} /usr/bin/shadowsocks-server
fi
if [ -f /usr/bin/shadowsocks-server ]; then
chmod +x /usr/bin/shadowsocks-server
chmod +x ${shadowsocks_go_init}
local service_name=$(basename ${shadowsocks_go_init})
if check_sys packageManager yum; then
chkconfig --add ${service_name}
chkconfig ${service_name} on
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} defaults
fi
else
echo
echo -e "[${red}Error${plain}] ${software[2]} install failed."
echo "Please visit: https://teddysun.com/486.html and contact."
install_cleanup
exit 1
fi
}
install_shadowsocks_libev() {
cd ${cur_dir}
tar zxf ${shadowsocks_libev_file}.tar.gz
cd ${shadowsocks_libev_file}
./configure --disable-documentation && make && make install
if [ $? -eq 0 ]; then
chmod +x ${shadowsocks_libev_init}
local service_name=$(basename ${shadowsocks_libev_init})
if check_sys packageManager yum; then
chkconfig --add ${service_name}
chkconfig ${service_name} on
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} defaults
fi
else
echo
echo -e "[${red}Error${plain}] ${software[3]} install failed."
echo "Please visit: https://teddysun.com/486.html and contact."
install_cleanup
exit 1
fi
}
install_shadowsocks_libev_obfs() {
if [ "${libev_obfs}" == "y" ] || [ "${libev_obfs}" == "Y" ]; then
cd ${cur_dir}
git clone https://github.com/shadowsocks/simple-obfs.git
[ -d simple-obfs ] && cd simple-obfs || echo -e "[${red}Error:${plain}] Failed to git clone simple-obfs."
git submodule update --init --recursive
if centosversion 6; then
if [ ! "$(command -v autoconf268)" ]; then
echo -e "[${green}Info${plain}] Starting install autoconf268..."
yum install -y autoconf268 >/dev/null 2>&1 || echo -e "[${red}Error:${plain}] Failed to install autoconf268."
fi
# replace command autoreconf to autoreconf268
sed -i 's/autoreconf/autoreconf268/' autogen.sh
# replace #include <ev.h> to #include <libev/ev.h>
sed -i 's@^#include <ev.h>@#include <libev/ev.h>@' src/local.h
sed -i 's@^#include <ev.h>@#include <libev/ev.h>@' src/server.h
fi
./autogen.sh
./configure --disable-documentation
make
make install
if [ ! "$(command -v obfs-server)" ]; then
echo -e "[${red}Error${plain}] simple-obfs for ${software[${selected} - 1]} install failed."
echo "Please visit: https://teddysun.com/486.html and contact."
install_cleanup
exit 1
fi
[ -f /usr/local/bin/obfs-server ] && ln -s /usr/local/bin/obfs-server /usr/bin
fi
}
install_completed_python() {
clear && clear
msg -bar
${shadowsocks_python_init} start
msg -bar
echo -e "Felicidades, ${green}${software[0]}${plain} instalación del servidor completada!"
echo -e "Tu Server IP : ${red} $(get_ip) ${plain}"
echo -e "Tu Server Port : ${red} ${shadowsocksport} ${plain}"
echo -e "Tu Password : ${red} ${shadowsockspwd} ${plain}"
echo -e "Tu Encryption Method: ${red} ${shadowsockscipher} ${plain}"
}
install_completed_r() {
clear && clear
msg -bar
${shadowsocks_r_init} start
msg -bar
echo -e "Felicidades, ${green}${software[1]}${plain} instalación del servidor completada!"
echo -e "Tu Server IP : ${red} $(get_ip) ${plain}"
echo -e "Tu Server Port : ${red} ${shadowsocksport} ${plain}"
echo -e "Tu Password : ${red} ${shadowsockspwd} ${plain}"
echo -e "Tu Protocol : ${red} ${shadowsockprotocol} ${plain}"
echo -e "Tu obfs : ${red} ${shadowsockobfs} ${plain}"
echo -e "Tu Encryption Method: ${red} ${shadowsockscipher} ${plain}"
}
install_completed_go() {
clear
${shadowsocks_go_init} start
msg -bar
echo -e "Felicidades, ${green}${software[2]}${plain} instalación del servidor completada!"
echo -e "Tu Server IP : ${red} $(get_ip) ${plain}"
echo -e "Tu Server Port : ${red} ${shadowsocksport} ${plain}"
echo -e "Tu Password : ${red} ${shadowsockspwd} ${plain}"
echo -e "Tu Encryption Method: ${red} ${shadowsockscipher} ${plain}"
}
install_completed_libev() {
clear && clear
msg -bar
ldconfig
${shadowsocks_libev_init} start
msg -bar
echo -e "Felicidades, ${green}${software[3]}${plain} instalación del servidor completada!"
echo -e "Tu Server IP : ${red} $(get_ip) ${plain}"
echo -e "Tu Server Port : ${red} ${shadowsocksport} ${plain}"
echo -e "Tu Password : ${red} ${shadowsockspwd} ${plain}"
if [ "$(command -v obfs-server)" ]; then
echo -e "Tu obfs : ${red} ${shadowsocklibev_obfs} ${plain}"
fi
echo -e "Tu Encryption Method: ${red} ${shadowsockscipher} ${plain}"
}
qr_generate_python() {
if [ "$(command -v qrencode)" ]; then
local tmp=$(echo -n "${shadowsockscipher}:${shadowsockspwd}@$(get_ip):${shadowsocksport}" | base64 -w0)
local qr_code="ss://${tmp}"
echo
echo "Tu QR Code: (For Shadowsocks Windows, OSX, Android and iOS clients)"
echo -e "${green} ${qr_code} ${plain}"
echo -n "${qr_code}" | qrencode -s8 -o ${cur_dir}/shadowsocks_python_qr.png
echo "Tu QR Code has been saved as a PNG file path:"
echo -e "${green} ${cur_dir}/shadowsocks_python_qr.png ${plain}"
fi
}
qr_generate_r() {
if [ "$(command -v qrencode)" ]; then
local tmp1=$(echo -n "${shadowsockspwd}" | base64 -w0 | sed 's/=//g;s/\//_/g;s/+/-/g')
local tmp2=$(echo -n "$(get_ip):${shadowsocksport}:${shadowsockprotocol}:${shadowsockscipher}:${shadowsockobfs}:${tmp1}/?obfsparam=" | base64 -w0)
local qr_code="ssr://${tmp2}"
echo
echo "Tu QR Code: (For ShadowsocksR Windows, Android clients only)"
echo -e "${green} ${qr_code} ${plain}"
echo -n "${qr_code}" | qrencode -s8 -o ${cur_dir}/shadowsocks_r_qr.png
echo "Tu QR Code has been saved as a PNG file path:"
echo -e "${green} ${cur_dir}/shadowsocks_r_qr.png ${plain}"
fi
}
qr_generate_go() {
if [ "$(command -v qrencode)" ]; then
local tmp=$(echo -n "${shadowsockscipher}:${shadowsockspwd}@$(get_ip):${shadowsocksport}" | base64 -w0)
local qr_code="ss://${tmp}"
echo
echo "Tu QR Code: (For Shadowsocks Windows, OSX, Android and iOS clients)"
echo -e "${green} ${qr_code} ${plain}"
echo -n "${qr_code}" | qrencode -s8 -o ${cur_dir}/shadowsocks_go_qr.png
echo "Tu QR Code has been saved as a PNG file path:"
echo -e "${green} ${cur_dir}/shadowsocks_go_qr.png ${plain}"
fi
}
qr_generate_libev() {
if [ "$(command -v qrencode)" ]; then
local tmp=$(echo -n "${shadowsockscipher}:${shadowsockspwd}@$(get_ip):${shadowsocksport}" | base64 -w0)
local qr_code="ss://${tmp}"
echo
echo "Tu BaseCode:"
echo -e "${green} ${qr_code} ${plain}"
echo -n "${qr_code}" | qrencode -s8 -o ${cur_dir}/shadowsocks_libev_qr.png
echo "Tu QR Code has been saved as a PNG file path:"
echo -e "${green} ${cur_dir}/shadowsocks_libev_qr.png ${plain}"
fi
}
install_main() {
install_libsodium
if ! ldconfig -p | grep -wq "/usr/lib"; then
echo "/usr/lib" >/etc/ld.so.conf.d/lib.conf
fi
ldconfig
if [ "${selected}" == "1" ]; then
install_shadowsocks_python
install_completed_python
qr_generate_python
elif [ "${selected}" == "2" ]; then
install_shadowsocks_r
install_completed_r
qr_generate_r
elif [ "${selected}" == "3" ]; then
install_shadowsocks_go
install_completed_go
qr_generate_go
elif [ "${selected}" == "4" ]; then
install_mbedtls
install_shadowsocks_libev
install_shadowsocks_libev_obfs
install_completed_libev
qr_generate_libev
fi
}
install_cleanup() {
cd ${cur_dir}
rm -rf simple-obfs
rm -rf ${libsodium_file} ${libsodium_file}.tar.gz
rm -rf ${mbedtls_file} ${mbedtls_file}-gpl.tgz
rm -rf ${shadowsocks_python_file} ${shadowsocks_python_file}.zip
rm -rf ${shadowsocks_r_file} ${shadowsocks_r_file}.tar.gz
rm -rf ${shadowsocks_go_file_64}.gz ${shadowsocks_go_file_32}.gz
rm -rf ${shadowsocks_libev_file} ${shadowsocks_libev_file}.tar.gz
}
install_shadowsocks() {
disable_selinux
install_select
install_prepare
install_dependencies
download_files
config_shadowsocks
if check_sys packageManager yum; then
config_firewall
fi
install_main
install_cleanup
}
uninstall_shadowsocks_python() {
printf "Estás seguro de desinstalar ${red}${software[0]}${plain}? [y/n]\n"
read -p "(default: n):" answer
[ -z ${answer} ] && answer="n"
if [ "${answer}" == "y" ] || [ "${answer}" == "Y" ]; then
${shadowsocks_python_init} status >/dev/null 2>&1
if [ $? -eq 0 ]; then
${shadowsocks_python_init} stop
fi
local service_name=$(basename ${shadowsocks_python_init})
if check_sys packageManager yum; then
chkconfig --del ${service_name}
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} remove
fi
rm -fr $(dirname ${shadowsocks_python_config})
rm -f ${shadowsocks_python_init}
rm -f /var/log/shadowsocks.log
if [ -f /usr/local/shadowsocks_python.log ]; then
cat /usr/local/shadowsocks_python.log | xargs rm -rf
rm -f /usr/local/shadowsocks_python.log
fi
echo -e "[${green}Info${plain}] ${software[0]} uninstall success"
else
echo
echo -e "[${green}Info${plain}] ${software[0]} uninstall cancelled, nothing to do..."
echo
fi
}
uninstall_shadowsocks_r() {
printf "Estás seguro de desinstalar ${red}${software[1]}${plain}? [y/n]\n"
read -p "(default: n):" answer
[ -z ${answer} ] && answer="n"
if [ "${answer}" == "y" ] || [ "${answer}" == "Y" ]; then
${shadowsocks_r_init} status >/dev/null 2>&1
if [ $? -eq 0 ]; then
${shadowsocks_r_init} stop
fi
local service_name=$(basename ${shadowsocks_r_init})
if check_sys packageManager yum; then
chkconfig --del ${service_name}
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} remove
fi
rm -fr $(dirname ${shadowsocks_r_config})
rm -f ${shadowsocks_r_init}
rm -f /var/log/shadowsocks.log
rm -fr /usr/local/shadowsocks
echo -e "[${green}Info${plain}] ${software[1]} uninstall success"
else
echo
echo -e "[${green}Info${plain}] ${software[1]} uninstall cancelled, nothing to do..."
echo
fi
}
uninstall_shadowsocks_go() {
printf "Estás seguro de desinstalar ${red}${software[2]}${plain}? [y/n]\n"
read -p "(default: n):" answer
[ -z ${answer} ] && answer="n"
if [ "${answer}" == "y" ] || [ "${answer}" == "Y" ]; then
${shadowsocks_go_init} status >/dev/null 2>&1
if [ $? -eq 0 ]; then
${shadowsocks_go_init} stop
fi
local service_name=$(basename ${shadowsocks_go_init})
if check_sys packageManager yum; then
chkconfig --del ${service_name}
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} remove
fi
rm -fr $(dirname ${shadowsocks_go_config})
rm -f ${shadowsocks_go_init}
rm -f /usr/bin/shadowsocks-server
echo -e "[${green}Info${plain}] ${software[2]} uninstall success"
else
echo
echo -e "[${green}Info${plain}] ${software[2]} uninstall cancelled, nothing to do..."
echo
fi
}
uninstall_shadowsocks_libev() {
printf "Estás seguro de desinstalar ${red}${software[3]}${plain}? [y/n]\n"
read -p "(default: n):" answer
[ -z ${answer} ] && answer="n"
if [ "${answer}" == "y" ] || [ "${answer}" == "Y" ]; then
${shadowsocks_libev_init} status >/dev/null 2>&1
if [ $? -eq 0 ]; then
${shadowsocks_libev_init} stop
fi
local service_name=$(basename ${shadowsocks_libev_init})
if check_sys packageManager yum; then
chkconfig --del ${service_name}
elif check_sys packageManager apt; then
update-rc.d -f ${service_name} remove
fi
rm -fr $(dirname ${shadowsocks_libev_config})
rm -f /usr/local/bin/ss-local
rm -f /usr/local/bin/ss-tunnel
rm -f /usr/local/bin/ss-server
rm -f /usr/local/bin/ss-manager
rm -f /usr/local/bin/ss-redir
rm -f /usr/local/bin/ss-nat
rm -f /usr/local/bin/obfs-local
rm -f /usr/local/bin/obfs-server
rm -f /usr/local/lib/libshadowsocks-libev.a
rm -f /usr/local/lib/libshadowsocks-libev.la
rm -f /usr/local/include/shadowsocks.h
rm -f /usr/local/lib/pkgconfig/shadowsocks-libev.pc
rm -f /usr/local/share/man/man1/ss-local.1
rm -f /usr/local/share/man/man1/ss-tunnel.1
rm -f /usr/local/share/man/man1/ss-server.1
rm -f /usr/local/share/man/man1/ss-manager.1
rm -f /usr/local/share/man/man1/ss-redir.1
rm -f /usr/local/share/man/man1/ss-nat.1
rm -f /usr/local/share/man/man8/shadowsocks-libev.8
rm -fr /usr/local/share/doc/shadowsocks-libev
rm -f ${shadowsocks_libev_init}
echo -e "[${green}Info${plain}] ${software[3]} uninstall success"
else
echo
echo -e "[${green}Info${plain}] ${software[3]} uninstall cancelled, nothing to do..."
echo
fi
}
uninstall_shadowsocks() {
while true; do
echo "¿Qué servidor de Shadowsocks quieres desinstalar?"
msg -bar
for ((i = 1; i <= ${#software[@]}; i++)); do
hint="${software[$i - 1]}"
echo -e "${green}${i}${plain}) ${hint}"
done
msg -bar
read -p "Por favor, introduzca un número[1-4]:" un_select
case "${un_select}" in
1 | 2 | 3 | 4)
msg -bar
echo "Tu eliges = ${software[${un_select} - 1]}"
msg -bar
break
;;
*)
echo -e "[${red}Error${plain}] Please only enter a number [1-4]"
;;
esac
done
if [ "${un_select}" == "1" ]; then
if [ -f ${shadowsocks_python_init} ]; then
uninstall_shadowsocks_python
else
echo -e "[${red}Error${plain}] ${software[${un_select} - 1]} not installed, please check it and try again."
echo
exit 1
fi
elif [ "${un_select}" == "2" ]; then
if [ -f ${shadowsocks_r_init} ]; then
uninstall_shadowsocks_r
else
echo -e "[${red}Error${plain}] ${software[${un_select} - 1]} not installed, please check it and try again."
echo
exit 1
fi
elif [ "${un_select}" == "3" ]; then
if [ -f ${shadowsocks_go_init} ]; then
uninstall_shadowsocks_go
else
echo -e "[${red}Error${plain}] ${software[${un_select} - 1]} not installed, please check it and try again."
echo
exit 1
fi
elif [ "${un_select}" == "4" ]; then
if [ -f ${shadowsocks_libev_init} ]; then
uninstall_shadowsocks_libev
else
echo -e "[${red}Error${plain}] ${software[${un_select} - 1]} not installed, please check it and try again."
echo
exit 1
fi
fi
}
# Initialization step
action=$1
[ -z $1 ] && action=install
case "${action}" in
install | uninstall)
${action}_shadowsocks
;;
*)
echo "Arguments error! [${action}]"
echo "Usage: $(basename $0) [install|uninstall]"
;;
esac
}
fun_shadowsocks() {
[[ -e /etc/shadowsocks-libev/config.json ]] && {
[[ $(ps ax | grep ss-server | grep -v grep | awk '{print $1}') != "" ]] && kill -9 $(ps ax | grep ss-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1 && ss-server -c /etc/shadowsocks-libev/config.json -d stop >/dev/null 2>&1
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALAR SHADOWSOCK-LIB"
msg -bar
fun_bar "rm /etc/shadowsocks-libev/config.json "
msg -bar
echo -e "\033[1;32m >> SHADOWSOCK-LIB DESINSTALADO CON EXITO <<"
msg -bar
return 0
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m INSTALADOR SHADOWSOCK-LIBEV+(obfs) | SCRIPT LATAM"
msg -bar
instaladossb_fun
rm -rf Instalador-Shadowsocks-libev.sh
value=$(ps ax | grep ss-server | grep -v grep)
[[ $value != "" ]] && value="\033[1;32m >> SHADOWSOCK LIB INSTALADO CON EXITO <<" || value="\033[1;31mERROR"
msg -bar
echo -e "${value}"
msg -bar
return 0
}
fun_shadowsocks
read -t 180 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
#--- PROTO WEBSOCKET EDITABLE
proto_websockete() {
activar_websokete() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE WEBSOCKET EDITABLE | SCRIPT LATAM \033[1;37m"
msg -bar
porta_socket=
while [[ -z $porta_socket || ! -z $(mportas | grep -w $porta_socket) ]]; do
echo -ne "\033[1;97m Digite el Puerto para el Websoket:\033[1;92m" && read -p " " -e -i "8081" porta_socket
done
msg -bar
echo -ne "\033[1;97m Introduzca el texto de estado plano o en HTML:\n \033[1;31m" && read -p " " -e -i "By SCRIP | LATAM" texto_soket
msg -bar
echo -ne "\033[1;97m Digite algun puerto de anclaje\n Puede ser un SSH/DROPBEAR/SSL/OPENVPN:\033[1;92m" && read -p " " -e -i "443" puetoantla
msg -bar
echo -ne "\033[1;97m Estatus de encabezado (200,101,404,500,etc):\033[1;92m" && read -p " " -e -i "200" rescabeza
msg -bar
(
less <<PYTHON >/etc/SCRIPT-LATAM/filespy/PDirect-$porta_socket.py
import socket, threading, thread, select, signal, sys, time, getopt
# Listen
LISTENING_ADDR = '0.0.0.0'
if sys.argv[1:]:
LISTENING_PORT = sys.argv[1]
else:
LISTENING_PORT = '$porta_socket'
#Pass
PASS = ''
# CONST
BUFLEN = 4096 * 4
TIMEOUT = 60
DEFAULT_HOST = '127.0.0.1:$puetoantla'
RESPONSE = 'HTTP/1.1 $rescabeza <strong>$texto_soket</strong>\r\nContent-length: 0\r\n\r\nHTTP/1.1 $rescabeza Connection established\r\n\r\n'
#RESPONSE = 'HTTP/1.1 200 Hello_World!\r\nContent-length: 0\r\n\r\nHTTP/1.1 200 Connection established\r\n\r\n' # lint:ok
class Server(threading.Thread):
def __init__(self, host, port):
threading.Thread.__init__(self)
self.running = False
self.host = host
self.port = port
self.threads = []
self.threadsLock = threading.Lock()
self.logLock = threading.Lock()
def run(self):
self.soc = socket.socket(socket.AF_INET)
self.soc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.soc.settimeout(2)
intport = int(self.port)
self.soc.bind((self.host, intport))
self.soc.listen(0)
self.running = True
try:
while self.running:
try:
c, addr = self.soc.accept()
c.setblocking(1)
except socket.timeout:
continue
conn = ConnectionHandler(c, self, addr)
conn.start()
self.addConn(conn)
finally:
self.running = False
self.soc.close()
def printLog(self, log):
self.logLock.acquire()
print log
self.logLock.release()
def addConn(self, conn):
try:
self.threadsLock.acquire()
if self.running:
self.threads.append(conn)
finally:
self.threadsLock.release()
def removeConn(self, conn):
try:
self.threadsLock.acquire()
self.threads.remove(conn)
finally:
self.threadsLock.release()
def close(self):
try:
self.running = False
self.threadsLock.acquire()
threads = list(self.threads)
for c in threads:
c.close()
finally:
self.threadsLock.release()
class ConnectionHandler(threading.Thread):
def __init__(self, socClient, server, addr):
threading.Thread.__init__(self)
self.clientClosed = False
self.targetClosed = True
self.client = socClient
self.client_buffer = ''
self.server = server
self.log = 'Connection: ' + str(addr)
def close(self):
try:
if not self.clientClosed:
self.client.shutdown(socket.SHUT_RDWR)
self.client.close()
except:
pass
finally:
self.clientClosed = True
try:
if not self.targetClosed:
self.target.shutdown(socket.SHUT_RDWR)
self.target.close()
except:
pass
finally:
self.targetClosed = True
def run(self):
try:
self.client_buffer = self.client.recv(BUFLEN)
hostPort = self.findHeader(self.client_buffer, 'X-Real-Host')
if hostPort == '':
hostPort = DEFAULT_HOST
split = self.findHeader(self.client_buffer, 'X-Split')
if split != '':
self.client.recv(BUFLEN)
if hostPort != '':
passwd = self.findHeader(self.client_buffer, 'X-Pass')
if len(PASS) != 0 and passwd == PASS:
self.method_CONNECT(hostPort)
elif len(PASS) != 0 and passwd != PASS:
self.client.send('HTTP/1.1 400 WrongPass!\r\n\r\n')
elif hostPort.startswith('127.0.0.1') or hostPort.startswith('localhost'):
self.method_CONNECT(hostPort)
else:
self.client.send('HTTP/1.1 403 Forbidden!\r\n\r\n')
else:
print '- No X-Real-Host!'
self.client.send('HTTP/1.1 400 NoXRealHost!\r\n\r\n')
except Exception as e:
self.log += ' - error: ' + e.strerror
self.server.printLog(self.log)
pass
finally:
self.close()
self.server.removeConn(self)
def findHeader(self, head, header):
aux = head.find(header + ': ')
if aux == -1:
return ''
aux = head.find(':', aux)
head = head[aux+2:]
aux = head.find('\r\n')
if aux == -1:
return ''
return head[:aux];
def connect_target(self, host):
i = host.find(':')
if i != -1:
port = int(host[i+1:])
host = host[:i]
else:
if self.method=='CONNECT':
port = $puetoantla
else:
port = sys.argv[1]
(soc_family, soc_type, proto, _, address) = socket.getaddrinfo(host, port)[0]
self.target = socket.socket(soc_family, soc_type, proto)
self.targetClosed = False
self.target.connect(address)
def method_CONNECT(self, path):
self.log += ' - CONNECT ' + path
self.connect_target(path)
self.client.sendall(RESPONSE)
self.client_buffer = ''
self.server.printLog(self.log)
self.doCONNECT()
def doCONNECT(self):
socs = [self.client, self.target]
count = 0
error = False
while True:
count += 1
(recv, _, err) = select.select(socs, [], socs, 3)
if err:
error = True
if recv:
for in_ in recv:
try:
data = in_.recv(BUFLEN)
if data:
if in_ is self.target:
self.client.send(data)
else:
while data:
byte = self.target.send(data)
data = data[byte:]
count = 0
else:
break
except:
error = True
break
if count == TIMEOUT:
error = True
if error:
break
def print_usage():
print 'Usage: proxy.py -p <port>'
print ' proxy.py -b <bindAddr> -p <port>'
print ' proxy.py -b 0.0.0.0 -p 80'
def parse_args(argv):
global LISTENING_ADDR
global LISTENING_PORT
try:
opts, args = getopt.getopt(argv,"hb:p:",["bind=","port="])
except getopt.GetoptError:
print_usage()
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print_usage()
sys.exit()
elif opt in ("-b", "--bind"):
LISTENING_ADDR = arg
elif opt in ("-p", "--port"):
LISTENING_PORT = int(arg)
def main(host=LISTENING_ADDR, port=LISTENING_PORT):
print "\n:-------PythonProxy-------:\n"
print "Listening addr: " + LISTENING_ADDR
print "Listening port: " + str(LISTENING_PORT) + "\n"
print ":-------------------------:\n"
server = Server(LISTENING_ADDR, LISTENING_PORT)
server.start()
while True:
try:
time.sleep(2)
except KeyboardInterrupt:
print 'Stopping...'
server.close()
break
####### parse_args(sys.argv[1:])
if __name__ == '__main__':
main()
PYTHON
) >$HOME/proxy.log
chmod +x /etc/SCRIPT-LATAM/filespy/PDirect.py
screen -dmS pydic-"$porta_socket" python /etc/SCRIPT-LATAM/filespy/PDirect-$porta_socket.py && echo "$porta_socket" >>/etc/SCRIPT-LATAM/PortM/PDirect.log
[[ "$(ps x | grep pydic-"$porta_socket" | grep -v grep | awk -F "pts" '{print $1}')" ]] && msg -verd " >> WEBSOCKET INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
}
desactivar_websokete() {
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALAR WEBSOKET's "
msg -bar
for portdic in $(cat /etc/SCRIPT-LATAM/PortM/PDirect.log); do
echo -e "\e[1;93m Puertos Activos: \e[1;32m$portdic"
done
msg -bar
echo -ne "\033[1;97m Digite el Puero a Desisntalar: \e[1;32m" && read portselect
screen -wipe >/dev/null 2>&1
screen -S pydic-"$portselect" -p 0 -X quit
rm -rf /etc/SCRIPT-LATAM/filespy/PDirect-$portselect.py >/dev/null 2>&1
sed -i '/'$portselect'/d' /etc/SCRIPT-LATAM/PortM/PDirect.log >/dev/null 2>&1
msg -bar
[[ ! "$(ps x | grep pydic-"$portselect" | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> WEBSOCKET DESINSTALADO CON EXITO << "
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE WEBSOCKET EDITABLE | SCRIPT LATAM \033[1;37m"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR UN PROXY \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER UN PROXY WEBSOCKET's \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_websokete
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
2)
msg -bar
desactivar_websokete
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
menu_inst
}
#--- PROXY OPENVPN
proto_popenvpn() {
activar_openvpn() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE PROXY OPENVPN | SCRIPT LATAM \033[1;37m"
msg -bar
porta_socket=
while [[ -z $porta_socket || ! -z $(mportas | grep -w $porta_socket) ]]; do
echo -ne "\033[1;97m Digite el Puerto para el Websoket:\033[1;92m" && read -p " " -e -i "8081" porta_socket
done
msg -bar
echo -ne "\033[1;97m Introduzca el texto de estado plano o en HTML:\n \033[1;31m" && read -p " " -e -i "By SCRIP | LATAM" texto_soket
msg -bar
screen -dmS popenvpn-"$porta_socket" python /etc/SCRIPT-LATAM/filespy/POpen.py "$porta_socket" "$texto_soket" && echo ""$porta_socket"" >>/etc/SCRIPT-LATAM/PortM/POpen.log
[[ "$(ps x | grep POpen.py | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> PROXY OPENVPN INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
}
desactivar_popen() {
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALAR PROXY OPENVPN "
msg -bar
echo -e "\033[1;97m Procesando ...."
rm -rf /etc/SCRIPT-LATAM/PortM/POpen.log >/dev/null 2>&1
fun_bar "kill -9 $(ps x | grep POpen.py | grep -v grep | awk '{print $1'}) >/dev/null 2>&1"
msg -bar
[[ ! "$(ps x | grep POpen.py | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> PROXY OPENVPN DESINSTALADO CON EXITO << "
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE PROXY OPENVPN | SCRIPT LATAM \033[1;37m"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR UN PROXY \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER TODOS LOS PROXY OPENVPN \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_openvpn
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
2)
msg -bar
desactivar_popen
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
menu_inst
}
#--- PROXY PUBLICO
proto_ppublico() {
activar_ppublico() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE PROXY PUBLICO | SCRIPT LATAM \033[1;37m"
msg -bar
porta_socket=
while [[ -z $porta_socket || ! -z $(mportas | grep -w $porta_socket) ]]; do
echo -ne "\033[1;97m Digite el Puerto para el P. Publico:\033[1;92m" && read -p " " -e -i "8082" porta_socket
done
msg -bar
echo -ne "\033[1;97m Introduzca el texto de estado plano o en HTML:\n \033[1;31m" && read -p " " -e -i "By SCRIP | LATAM" texto_soket
msg -bar
screen -dmS ppublico-"$porta_socket" python /etc/SCRIPT-LATAM/filespy/PPub.py "$porta_socket" "$texto_soket" && echo ""$porta_socket"" >>/etc/SCRIPT-LATAM/PortM/PPub.log
[[ "$(ps x | grep PPub.py | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> PROXY PUBLICO INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
}
desactivar_ppublico() {
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALAR PROXY PUBLICO "
msg -bar
echo -e "\033[1;97m Procesando ...."
rm -rf /etc/SCRIPT-LATAM/PortM/PPub.log >/dev/null 2>&1
fun_bar "kill -9 $(ps x | grep PPub.py | grep -v grep | awk '{print $1'}) >/dev/null 2>&1"
msg -bar
[[ ! "$(ps x | grep PPub.py | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> PROXY PUBLICO DESINSTALADO CON EXITO << "
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE PROXY PUBLICO | SCRIPT LATAM \033[1;37m"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR UN PROXY PUBLICO \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER TODOS LOS PROXY PUBLICOS \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_ppublico
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
2)
msg -bar
desactivar_ppublico
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
menu_inst
}
#--- PROTOCOLO PRIVADO
proto_pprivado() {
activar_pprivado() {
meu_ip() {
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && echo "$MEU_IP2" || echo "$MEU_IP"
}
IP=(meu_ip)
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE PROXY PRIVADO | SCRIPT LATAM \033[1;37m"
msg -bar
porta_socket=
while [[ -z $porta_socket || ! -z $(mportas | grep -w $porta_socket) ]]; do
echo -ne "\033[1;97m Digite el Puerto para el P. Privado:\033[1;92m" && read -p " " -e -i "8083" porta_socket
done
msg -bar
echo -ne "\033[1;97m Introduzca el texto de estado plano o en HTML:\n \033[1;31m" && read -p " " -e -i "By SCRIP | LATAM" texto_soket
msg -bar
screen -dmS pprivado-"$porta_socket" python3 /etc/SCRIPT-LATAM/filespy/PPriv.py "$porta_socket" "$texto_soket" "$IP" && echo ""$porta_socket"" >>/etc/SCRIPT-LATAM/PortM/PPriv.log
[[ "$(ps x | grep PPriv.py | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> PROXY PRIVADO INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
}
desactivar_pprivado() {
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALAR PROXY PRIVADO "
msg -bar
echo -e "\033[1;97m Procesando ...."
rm -rf /etc/SCRIPT-LATAM/PortM/PPriv.log >/dev/null 2>&1
fun_bar "kill -9 $(ps x | grep PPriv.py | grep -v grep | awk '{print $1'}) >/dev/null 2>&1"
msg -bar
[[ ! "$(ps x | grep PPriv.py | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> PROXY PUBLICO DESINSTALADO CON EXITO << "
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE PROXY PRIVADO | SCRIPT LATAM \033[1;37m"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR UN PROXY PRIVADO \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER TODOS LOS PROXY PRIVADOS \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_pprivado
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
2)
msg -bar
desactivar_pprivado
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
menu_inst
}
#--- GETTUNEL
proto_pgettunel() {
activar_gettunel() {
meu_ip() {
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && echo "$MEU_IP2" || echo "$MEU_IP"
}
IP=(meu_ip)
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE GETTUNEL | SCRIPT LATAM \033[1;37m"
msg -bar
porta_socket=
while [[ -z $porta_socket || ! -z $(mportas | grep -w $porta_socket) ]]; do
echo -ne "\033[1;97m Digite el Puerto para GETUNNEL\033[1;92m" && read -p " " -e -i "8085" porta_socket
done
msg -bar
echo -ne "\033[1;97m Digite una contraseña:\n \033[1;31m" && read -p " " -e -i "SCRIP-LATAM" passg
echo "$passg" >/etc/SCRIPT-LATAM/filespy/pwd.pwd
msg -bar
while read service; do
[[ -z $service ]] && break
echo "127.0.0.1:$(echo $service | cut -d' ' -f2)=$(echo $service | cut -d' ' -f1)"
done <<<"$(mportas)"
screen -dmS getpy python /etc/SCRIPT-LATAM/filespy/PGet.py -b "0.0.0.0:porta_socket" -p "/etc/SCRIPT-LATAM/filespy/pwd.pwd"
[[ "$(ps x | grep PGet.py | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> GETTUNEL INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
}
desactivar_gettunel() {
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALAR GETTUNEL "
msg -bar
echo -e "\033[1;97m Procesando ...."
fun_bar "kill -9 $(ps x | grep PGet.py | grep -v grep | awk '{print $1'}) >/dev/null 2>&1"
msg -bar
[[ ! "$(ps x | grep PGet.py | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> GETTUNEL DESINSTALADO CON EXITO << "
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE GETTUNEL | SCRIPT LATAM \033[1;37m"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR GETTUNEL \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER GETTUNEL \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_gettunel
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
2)
msg -bar
desactivar_gettunel
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
menu_inst
}
#--- PROTOCOLO TPOVER
proto_ptcpover() {
activar_tcpover() {
meu_ip() {
MEU_IP=$(ip addr | grep 'inet' | grep -v inet6 | grep -vE '127\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
MEU_IP2=$(wget -qO- ipv4.icanhazip.com)
[[ "$MEU_IP" != "$MEU_IP2" ]] && echo "$MEU_IP2" || echo "$MEU_IP"
}
IP=(meu_ip)
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE TCPOVER | SCRIPT LATAM \033[1;37m"
msg -bar
porta_socket=
while [[ -z $porta_socket || ! -z $(mportas | grep -w $porta_socket) ]]; do
echo -ne "\033[1;97m Digite el Puerto para el TCPOVER:\033[1;92m" && read -p " " -e -i "8888" porta_socket
done
msg -bar
echo -ne "\033[1;97m Digite una banner txt:\n \033[1;31m" && read -p " " -e -i "SCRIP-LATAM" passg
msg -bar
while read service; do
[[ -z $service ]] && break
echo "127.0.0.1:$(echo $service | cut -d' ' -f2)=$(echo $service | cut -d' ' -f1)"
done <<<"$(mportas)"
[[ -e $HOME/socks ]] && rm -rf $HOME/socks >/dev/null 2>&1
[[ -d $HOME/socks ]] && rm -rf $HOME/socks >/dev/null 2>&1
cd $HOME && mkdir socks >/dev/null 2>&1
cd socks
patch="https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/backsocz.zip"
arq="backsocz.zip"
wget $patch >/dev/null 2>&1
unzip $arq >/dev/null 2>&1
mv -f /root/socks/backsocz/./ssh /etc/ssh/sshd_config && service ssh restart 1>/dev/null 2>/dev/null
mv -f /root/socks/backsocz/sckt$(python3 --version | awk '{print $2}' | cut -d'.' -f1,2) /usr/sbin/sckt
mv -f /root/socks/backsocz/scktcheck /bin/scktcheck
chmod +x /bin/scktcheck
chmod +x /usr/sbin/sckt
rm -rf $HOME/root/socks
cd $HOME
screen -dmS sokz scktcheck "$porta_socket" "$passg" >/dev/null 2>&1
[[ "$(ps x | grep scktcheck | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> TCPOVER INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
}
desactivar_gettunel() {
clear && clear
msg -bar
echo -e "\033[1;31m DESINSTALAR TCPOVER "
msg -bar
echo -e "\033[1;97m Procesando ...."
fun_bar "kill -9 $(ps x | grep scktcheck | grep -v grep | awk '{print $1'}) >/dev/null 2>&1"
msg -bar
[[ ! "$(ps x | grep scktcheck | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> TCPOVER DESINSTALADO CON EXITO << "
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m INSTALADOR DE GETTUNEL | SCRIPT LATAM \033[1;37m"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR TCPOVER \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER TCPOVER \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_tcpover
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
2)
msg -bar
desactivar_gettunel
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
;;
esac
menu_inst
}
#--- SLOWN DNS
proto_slowndns() {
mkdir -p /etc/SCRIPT-LATAM/temp/SlowDNS/install >/dev/null 2>&1
mkdir -p /etc/SCRIPT-LATAM/temp/SlowDNS/Key >/dev/null 2>&1
SlowDNSinstall="/etc/SCRIPT-LATAM/temp/SlowDNS/install"
SlowDNSconf="/etc/SCRIPT-LATAM/temp/SlowDNS/Key"
info() {
nodata() {
msg -bar
echo -e "\e[1;91m NOSE CUENTA CON REGISTRO DE SLOWDNS"
return 1
}
echo -e "\e[1;97m INFORMACION DE SU CONECCION SLOWDNS"
[[ -e ${SlowDNSconf}/domain_ns ]] && msg -ama "Su NS (Nameserver): $(cat ${SlowDNSconf}/domain_ns)" || nodata
[[ -e ${SlowDNSconf}/server.pub ]] && msg -ama "Su Llave: $(cat ${SlowDNSconf}/server.pub)"
}
drop_port() {
local portasVAR=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
local NOREPEAT
local reQ
local Port
unset DPB
while read port; do
reQ=$(echo ${port} | awk '{print $1}')
Port=$(echo {$port} | awk '{print $9}' | awk -F ":" '{print $2}')
[[ $(echo -e $NOREPEAT | grep -w "$Port") ]] && continue
NOREPEAT+="$Port\\n"
case ${reQ} in
sshd | dropbear | trojan | stunnel4 | stunnel | python | python3 | v2ray | xray) DPB+=" $reQ:$Port" ;;
*) continue ;;
esac
done <<<"${portasVAR}"
}
ini_slow() {
clear && clear
msg -bar
msg -tit
msg -bar
msg -bra " INSTALADOR SLOWDNS"
msg -bar
drop_port
n=1
for i in $DPB; do
proto=$(echo $i | awk -F ":" '{print $1}')
proto2=$(printf '%-12s' "$proto")
port=$(echo $i | awk -F ":" '{print $2}')
echo -e " \e[1;93m [\e[1;32m$n\e[1;93m]\033[1;31m $(msg -verm2 ">") $(msg -ama "$proto2")$(msg -azu "$port")"
drop[$n]=$port
num_opc="$n"
let n++
done
msg -bar
opc=$(selection_fun $num_opc)
echo "${drop[$opc]}" >${SlowDNSconf}/puerto
PORT=$(cat ${SlowDNSconf}/puerto)
msg -bra " INSTALADOR SLOWDNS"
msg -bar
echo -e " $(msg -ama "Puerto de coneccion atraves de SlowDNS:") $(msg -verd "$PORT")"
msg -bar
unset NS
while [[ -z $NS ]]; do
echo -ne "\e[1;93m Tu dominio NS: \e[1;31m" && read NS
tput cuu1 && tput dl1
done
echo "$NS" >${SlowDNSconf}/domain_ns
echo -e " $(msg -ama "Tu dominio NS:") $(msg -verd "$NS")"
msg -bar
if [[ ! -e ${SlowDNSinstall}/dns-server ]]; then
msg -ama " Descargando ejecutable SlowDNS"
if wget -O ${SlowDNSinstall}/dns-server https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/dns-server &>/dev/null; then
chmod +x ${SlowDNSinstall}/dns-server
msg -verd "[OK]"
else
msg -verm "[fail]"
msg -bar
msg -ama "No se pudo descargar el binario"
msg -verm "Instalacion canselada"
fi
msg -bar
fi
[[ -e "${SlowDNSconf}/server.pub" ]] && pub=$(cat ${SlowDNSconf}/server.pub)
if [[ ! -z "$pub" ]]; then
echo -ne "\e[1;93m Usar clave existente [S/N]: \e[1;32m" && read ex_key
case $ex_key in
s | S | y | Y)
tput cuu1 && tput dl1
echo -e " $(msg -ama "Tu clave:") $(msg -verd "$(cat ${SlowDNSconf}/server.pub)")"
;;
n | N)
tput cuu1 && tput dl1
rm -rf ${SlowDNSconf}/server.key
rm -rf ${SlowDNSconf}/server.pub
${SlowDNSinstall}/dns-server -gen-key -privkey-file ${SlowDNSconf}/server.key -pubkey-file ${SlowDNSconf}/server.pub &>/dev/null
echo -e " $(msg -ama "Tu clave:") $(msg -verd "$(cat ${SlowDNSconf}/server.pub)")"
;;
*) ;;
esac
else
rm -rf ${SlowDNSconf}/server.key
rm -rf ${SlowDNSconf}/server.pub
${SlowDNSinstall}/dns-server -gen-key -privkey-file ${SlowDNSconf}/server.key -pubkey-file ${SlowDNSconf}/server.pub &>/dev/null
echo -e " $(msg -ama "Tu clave:") $(msg -verd "$(cat ${SlowDNSconf}/server.pub)")"
fi
msg -bar
msg -ama " Iniciando SlowDNS...."
iptables -I INPUT -p udp --dport 5300 -j ACCEPT
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5300
echo "nameserver 1.1.1.1 " >/etc/resolv.conf
echo "nameserver 1.0.0.1 " >>/etc/resolv.conf
if screen -dmS slowdns ${SlowDNSinstall}/dns-server -udp :5300 -privkey-file ${SlowDNSconf}/server.key $NS 127.0.0.1:$PORT; then
msg -verd " >> INSTALADO CON EXITO <<"
else
msg -verm "Con fallo!!!"
fi
}
reset_slow() {
clear && clear
msg -bar
msg -ama " REINICIANDO SLOWDNS...."
screen -S slowdns -p 0 -X quit
[[ -e ${SlowDNSconf}/domain_ns ]] && NS=$(cat ${SlowDNSconf}/domain_ns)
[[ -e ${SlowDNSconf}/puerto ]] && PORT=$(cat ${SlowDNSconf}/puerto)
screen -dmS slowdns ${SlowDNSinstall}/dns-server -udp :5300 -privkey-file /root/server.key $NS 127.0.0.1:$PORT
msg -verd " >> REINICIADO CON EXITO << "
}
stop_slow() {
echo -e "\e[1;31m DESISNTALAR SLOWDNS"
screen -S slowdns -p 0 -X quit
msg -verd " >> DESINSTALADO CON EXITO << "
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m INSTALADOR SLOWNDNS"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR SLOWDNS\e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m REINICIAR SLOWDNS \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \033[1;97m INFORMACON \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \033[1;97m DETENER SLOWNDNS \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
tput cuu1 && tput dl1
case $opcao in
1)
ini_slow
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_slowndns
;;
2)
reset_slow
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_slowndns
;;
3)
info
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_slowndns
;;
4)
stop_slow
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
proto_slowndns
;;
*)
menu_inst
;;
esac
}
#--- PROTOCOLO SSLH
sshl_install() {
clear && clear
declare -A cor=([0]="\033[1;37m" [1]="\033[1;34m" [2]="\033[1;31m" [3]="\033[1;33m" [4]="\033[1;32m")
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
sslh_inicial() {
clear && clear
[[ $(dpkg --get-selections | grep -w "sslh" | head -1) ]] && {
msg -bar
echo -e "\033[1;31m DESINSTALANDO SSLH"
msg -bar
service sslh stop >/dev/null 2>&1
fun_bar "apt-get purge sslh -y"
msg -bar
echo -e "\033[1;32m >> SSLH DESINSTALADO CON EXITO <<"
msg -bar
return 0
}
msg -bar
msg -tit
msg -bar
echo -e "\033[1;93m INSTALADOR SSLH SCRIPT LATAM"
msg -bar
echo -e "\033[1;32m Instalando SSLH"
msg -bar
echo -e "\033[1;97m A continuacion se le pedira tipo de instalacion\nescojer \033[1;31mstandalone \033[1;97my dar ENTER"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m Presiona enter para Continuar \n'
msg -bar
clear && clear
apt-get install sslh -y
msg -bar
msg -verd " >> INSTALADO CON EXITO <<"
msg -bar
return 0
}
edit_sslh() {
clear && clear
service sslh stop >/dev/null 2>&1
msg -bar
msg -tit
msg -bar
echo -e "\033[1;32m CONFIGURAR E INICIAR SSLH"
msg -bar
while true; do
echo -ne "\033[1;97m Puerto principal SSLH:\033[1;32m" && read -p " " -e -i "443" SSLHPORT
[[ $(mportas | grep -w "$SSLHPORT") ]] || break
echo -e "\033[1;33m Este Puerto esta en uso usar Otro"
sleep 5s
tput cuu1 && tput dl1
tput cuu1 && tput dl1
unset SSLPORT
done
#SELECC PORT SSH
portssh() {
echo 'DAEMON=/usr/sbin/sslh' >/etc/default/sslh
echo 'Run=yes' >>/etc/default/sslh
chmod +x /etc/default/sslh
echo -ne "\033[1;97m -- > \033[1;93m Cual es su Puerto SSH:\033[1;32m" && read -p " " -e -i "22" SSHPORT
PORTSSHF="--ssh 127.0.0.1:$SSHPORT"
}
portssl() {
echo -ne "\033[1;97m -- > \033[1;93m Cual es su Puerto SSL:\033[1;32m" && read -p " " -e -i "442" SSLPORT
PORTSSLF="--ssl 127.0.0.1:$SSLPORT"
}
portopenvpn() {
echo -ne "\033[1;97m -- > \033[1;93m Cual es su Puerto SSL:\033[1;32m" && read -p " " -e -i "1194" OPENVPNPORT
PORTOPENVPNF="--openvpn 127.0.0.1:$OPENVPNPORT"
}
portauto() {
echo -ne "\033[1;97m -- > \033[1;93m Cual es su Puerto AUTOMATICO:\033[1;32m" && read -p " " -e -i "80" AUTOMATICO
AUTOMATICO="--anyprot 127.0.0.1:$AUTOMATICO"
}
echo -ne "\n\e[1;96m Agregar Port SSH\e[1;93m [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read portssh
echo 'DAEMON=/usr/sbin/sslh' >/etc/default/sslh
echo 'Run=yes' >>/etc/default/sslh
chmod +x /etc/default/sslh
[[ "$portssh" = "s" || "$portssh" = "S" ]] && portssh
echo -ne "\e[1;96m Agregar Port SSL\e[1;93m [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read portssl
[[ "$portssl" = "s" || "$portssl" = "S" ]] && portssl
echo -ne "\e[1;96m Agregar Port OPENVPN\e[1;93m [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read portopenvpn
[[ "$portopenvpn" = "s" || "$portopenvpn" = "S" ]] && portopenvpn
echo -ne "\e[1;96m Agregar Port AUTOMATICO\e[1;93m [\033[1;97m s \033[1;93m| \033[1;97mn \033[1;93m]\033[1;97m: \e[1;32m" && read portauto
[[ "$portauto" = "s" || "$portauto" = "S" ]] && portauto
echo 'DAEMON_OPTS="--user sslh --listen 0.0.0.0:'$SSLHPORT' '$PORTSSHF' '$PORTSSLF' '$PORTOPENVPNF' '$AUTOMATICO' --pidfile /var/run/sslh/sslh.pid"' >>/etc/default/sslh
service sslh restart
sleep 3s
msg -bar
SSLH=$(ps -ef | grep "/var/run/sslh/sslh.pid" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${SSLH} ]] && SSLH="\033[1;31m >> FALLO << " || SSLH="\033[1;32m >> SSLH INSTALADO CON EXITO << "
echo -e "$SSLH"
msg -bar
return 0
}
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m INSTALADOR DE SSLH | SCRIPT LATAM"
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR | DESISNTALAR SSLH \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m EDITAR PUERTOS SSLH\e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
sslh_inicial
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
sshl_install
;;
2)
msg -bar
edit_sslh
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
sshl_install
;;
esac
menu_inst
}
##-->>PROTOCOLO UDP SERVER
udp_serverr() {
activar_badvpn() {
mportas() {
unset portas
portas_var=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
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+="$var1 $var2\n"
done <<<"$portas_var"
i=1
echo -e "$portas"
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR DE UDP-REQUEST"
msg -bar
echo -e "\033[1;97mDigite los puertos a activar de forma secuencial\nEjemplo:\033[1;32m 53 5300 5200 \033[1;97m| \033[1;93mPuerto recomendado \033[1;32m 5300\n"
echo -ne "\033[1;97mDigite los Puertos:\033[1;32m " && read -p " " -e -i "53 5300" portasx
echo "$portasx" >/etc/SCRIPT-LATAM/PortM/UDP-server.log
msg -bar
totalporta=($portasx)
unset PORT
for ((i = 0; i < ${#totalporta[@]}; i++)); do
[[ $(mportas | grep "${totalporta[$i]}") = "" ]] && {
PORT+="${totalporta[$i]}\n"
ip_nat=$(ip -4 addr | grep inet | grep -vE '127(\.[0-9]{1,3}){3}' | cut -d '/' -f 1 | grep -oE '[0-9]{1,3}(\.[0-9]{1,3}){3}' | sed -n 1p)
interfas=$(ip -4 addr | grep inet | grep -vE '127(\.[0-9]{1,3}){3}' | grep "$ip_nat" | awk {'print $NF'})
ip_publica=$(grep -m 1 -oE '^[0-9]{1,3}(\.[0-9]{1,3}){3}$' <<<"$(wget -T 10 -t 1 -4qO- "http://ip1.dynupdate.no-ip.com/" || curl -m 10 -4Ls "http://ip1.dynupdate.no-ip.com/")")
cat <<EOF >/etc/systemd/system/UDPserver.service
[Unit]
Description=UDPserver Service by LATAM
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root
ExecStart=/usr/bin/udpServer -ip=$ip_publica -net=$interfas -exclude=${totalporta[$i]} -mode=system
Restart=always
RestartSec=3s
[Install]
WantedBy=multi-user.target6
EOF
systemctl start UDPserver &>/dev/null
echo -e "\033[1;33m Puerto Escojido:\033[1;32m ${totalporta[$i]} OK"
} || {
echo -e "\033[1;33m Puerto Escojido:\033[1;31m ${totalporta[$i]} FAIL"
}
done
[[ -z $PORT ]] && {
echo -e "\033[1;31m No se ha elegido ninguna puerto valido, reintente\033[0m"
return 1
}
sleep 3s
msg -bar
[[ "$(ps x | grep /usr/bin/udpServer | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> UDP-SERVER INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
desactivar_badvpn() {
clear && clear
msg -bar
echo -e "\033[1;31m DESISNTALANDO PUERTOS UDP-SERVER "
msg -bar
systemctl stop UDPserver &>/dev/null
systemctl disable UDPserver &>/dev/null
rm -rf /etc/systemd/system/UDPserver.service &>/dev/null
rm -rf /usr/bin/udpServer
rm -rf /etc/SCRIPT-LATAM/PortM/UDP-server.log
[[ ! "$(ps x | grep "/usr/bin/udpServer" | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> UDP-SERVER DESINSTALADO CON EXICO << "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR DE UDP-REQUEST"
msg -bar
if [[ ! -e /usr/bin/udpServer ]]; then
wget -O /usr/bin/udpServer 'https://bitbucket.org/iopmx/udprequestserver/downloads/udpServer' &>/dev/null
chmod +x /usr/bin/udpServer
fi
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR UDP-SERVER \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER TODOS LOS UDP-SERVER\e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
activar_badvpn
;;
2)
msg -bar
desactivar_badvpn
;;
0)
menu
;;
*)
echo -e "$ Porfavor use numeros del [0-14]"
msg -bar
menu
;;
esac
#exit 0
}
server_psiphones() {
install_psiphone() {
clear && clear
if ps aux | grep 'psiphond' | grep -v grep >/dev/null; then
echo "El proceso psiphond ya está activo."
exit 1
fi
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR DE SERVR-PSIPHONE"
msg -bar
echo -e "\033[1;97m Ingrese los puertos segun su necesidad\033[1;97m\n"
#echo -e "\033[1;97mDigite los puertos a activar \033[1;97m | \033[1;93mPuerto recomendados \033[1;32m 5300\n"
#echo -ne "\033[1;97mDigite los Puertos:\033[1;32m " && read -p " " -e -i "22" portasx
#echo "$portasx" >/etc/SCRIPT-LATAM/PortM/UDP-server.log
#tput cuu1 && tput dl1
rm -rf /root/psi
kill $(ps aux | grep 'psiphond' | awk '{print $2}') 1>/dev/null 2>/dev/null
killall psiphond 1>/dev/null 2>/dev/null
mkdir -p /root/psi
cd /root/psi
ship=$(wget -qO- ipinfo.io/ip || wget -qO- ifconfig.me)
wget -O /root/psi/psiphond https://raw.githubusercontent.com/Psiphon-Labs/psiphon-tunnel-core-binaries/master/psiphond/psiphond &>/dev/null
chmod +rwx /root/psi/psiphond
echo -ne "\033[1;97m Escribe el puerto para Psiphon SSH:\033[32m " && read -p " " -e -i "3001" sh
echo -ne "\033[1;97m Escribe el puerto para Psiphon OSSH:\033[32m " && read -p " " -e -i "3002" osh
echo -ne "\033[1;97m Escribe el puerto para Psiphon FRONTED-MEEK:\033[32m " && read -p " " -e -i "443" fm
echo -ne "\033[1;97m Escribe el puerto para Psiphon WEB:\033[32m " && read -p " " -e -i "3000" wb
#echo -ne "\033[1;97m Escribe el puerto para Psiphon UNFRONTED-MEEK:\033[32m " && read umo
#./psiphond --ipaddress $ship --protocol SSH:$sh --protocol OSSH:$osh --protocol FRONTED-MEEK-OSSH:$fm --protocol UNFRONTED-MEEK-OSSH:$umo generate
./psiphond --ipaddress $ship --web $wb --protocol SSH:$sh --protocol OSSH:$osh --protocol FRONTED-MEEK-OSSH:$fm generate
chmod 666 psiphond.config
chmod 666 psiphond-traffic-rules.config
chmod 666 psiphond-osl.config
chmod 666 psiphond-tactics.config
chmod 666 server-entry.dat
cat server-entry.dat >/root/psi.txt
screen -dmS psiserver ./psiphond run
cd /root
psi=$(cat /root/psi.txt)
echo -e "\033[1;33m LA CONFIGURACION DE TU SERVIDOR ES:\033[0m"
msg -bar
echo -e "\033[1;32m $psi \033[0m"
msg -bar
echo -e "\033[1;33m PROTOCOLOS HABILITADOS:\033[0m"
echo -e "\033[1;33m → SSH:\033[1;32m $sh \033[0m"
echo -e "\033[1;33m → OSSH:\033[1;32m $osh \033[0m"
echo -e "\033[1;33m → FRONTED-MEEK-OSSH:\033[1;32m $fm \033[0m"
#echo -e "\033[1;33m → UNFRONTED-MEEK-OSSH:\033[1;32m $umo \033[0m"
echo -e "\033[1;33m → WEB:\033[1;32m $wb \033[0m"
msg -bar
echo -e "\033[1;33m DIRECTORIO DE ARCHIVOS:\033[1;32m /root/psi \033[0m"
msg -bar
[[ "$(ps x | grep psiserver | grep -v grep | awk '{print $1}')" ]] && msg -verd " >> SERVIDOR-PSIPHONE INSTALADO CON EXITO <<" || msg -ama " ERROR VERIFIQUE"
msg -bar
read -t 120 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
desactivar_psiphone() {
clear && clear
msg -bar
echo -e "\033[1;31m DESISNTALANDO PUERTOS UDP-SERVER "
msg -bar
rm -rf /root/psi
kill $(ps aux | grep 'psiphond' | awk '{print $2}') 1>/dev/null 2>/dev/null
killall psiphond 1>/dev/null 2>/dev/null
[[ "$(ps x | grep psiserver | grep -v grep | awk '{print $1}')" ]] && echo -e "\033[1;32m >> UDP-SERVER DESINSTALADO CON EXICO << "
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
menu_inst
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " INSTALADOR DE PSIPHONE-SERVER"
msg -bar
if [[ ! -e /bin/psiphond ]]; then
curl -o /bin/psiphond https://raw.githubusercontent.com/Psiphon-Labs/psiphon-tunnel-core-binaries/master/psiphond/psiphond &>/dev/null
chmod 777 /bin/psiphond
fi
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m INSTALAR SERVER-PSIPHONE \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m DETENER SERVER-PSIPHONE \e[97m \n"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;97m" && msg -bra " \e[97m\033[1;41m VOLVER \033[1;37m"
msg -bar
echo -ne "\033[1;97mDigite solo el numero segun su respuesta:\e[32m "
read opcao
case $opcao in
1)
msg -bar
install_psiphone
;;
2)
msg -bar
desactivar_psiphone
;;
0)
menu
;;
*)
echo -e "$ Porfavor use numeros del [0-2]"
msg -bar
menu
;;
esac
#exit 0
}
#--- MENU DE PROTOCOLOS
menu_inst() {
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " MENU DE PROTOCOLOS "
msg -bar
DROPBEAR=$(ps x | grep "dropbear" | grep -v "grep" | awk -F "pts" '{print $1}')
[[ -z ${DROPBEAR} ]] && DROPBEAR="\033[1;97m[\033[1;31m OFF \033[1;97m]" || DROPBEAR="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
SSL=$(ps x | grep "stunnel4" | grep -v "grep" | awk -F "pts" '{print $1}')
[[ -z ${SSL} ]] && SSL="\033[1;97m[\033[1;31m OFF \033[1;97m]" || SSL="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
SQUID=$(ps x | grep "squid" | grep -v "grep" | awk -F "pts" '{print $1}')
[[ -z ${SQUID} ]] && SQUID="\033[1;97m[\033[1;31m OFF \033[1;97m]" || SQUID="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
OPENVPN=$(ps x | grep "openvpn" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${OPENVPN} ]] && OPENVPN="\033[1;97m[\033[1;31m OFF \033[1;97m]" || OPENVPN="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
BADVPN=$(ps x | grep "badvpn" | grep -v "grep" | awk -F "pts" '{print $1}')
[[ -z ${BADVPN} ]] && BADVPN="\033[1;97m[\033[1;31m OFF \033[1;97m]" || BADVPN="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
SHADOWN=$(ps x | grep "ssserver" | grep -v "grep" | awk -F "pts" '{print $1}')
[[ -z ${SHADOWN} ]] && SHADOWN="\033[1;97m[\033[1;31m OFF \033[1;97m]" || SHADOWN="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
SHADOWL=$(ps x | grep "ss-server" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${SHADOWL} ]] && SHADOWL="\033[1;97m[\033[1;31m OFF \033[1;97m]" || SHADOWL="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
WEBSOKETE=$(ps x | grep "pydic-*" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${WEBSOKETE} ]] && WEBSOKETE="\033[1;97m[\033[1;31m OFF \033[1;97m]" || WEBSOKETE="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
POPENVPN=$(ps x | grep "POpen.py" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${POPENVPN} ]] && POPENVPN="\033[1;97m[\033[1;31m OFF \033[1;97m]" || POPENVPN="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
PPUBLICO=$(ps x | grep "PPub.py" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${PPUBLICO} ]] && PPUBLICO="\033[1;97m[\033[1;31m OFF \033[1;97m]" || PPUBLICO="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
PPRIVADO=$(ps x | grep "PPriv.py" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${PPRIVADO} ]] && PPRIVADO="\033[1;97m[\033[1;31m OFF \033[1;97m]" || PPRIVADO="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
PGETTUNEL=$(ps x | grep "PGet.py" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${PGETTUNEL} ]] && PGETTUNEL="\033[1;97m[\033[1;31m OFF \033[1;97m]" || PGETTUNEL="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
POVER=$(ps x | grep "scktcheck" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${POVER} ]] && POVER="\033[1;97m[\033[1;31m OFF \033[1;97m]" || POVER="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
SLOWDNS=$(ps x | grep "slowdns" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${SLOWDNS} ]] && SLOWDNS="\033[1;97m[\033[1;31m OFF \033[1;97m]" || SLOWDNS="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
SSLH=$(ps -ef | grep "/var/run/sslh/sslh.pid" | grep -v grep | awk -F "pts" '{print $1}')
[[ -z ${SSLH} ]] && SSLH="\033[1;97m[\033[1;31m OFF \033[1;97m]" || SSLH="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
UDPREQ=$(ps x | grep "/usr/bin/udpServer" | grep -v "grep" | awk -F "pts" '{print $1}')
[[ -z ${UDPREQ} ]] && UDPREQ="\033[1;97m[\033[1;31m OFF \033[1;97m]" || UDPREQ="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
PSIPHON=$(ps x | grep "psiserver" | grep -v "grep" | awk -F "pts" '{print $1}')
[[ -z ${PSIPHON} ]] && PSIPHON="\033[1;97m[\033[1;31m OFF \033[1;97m]" || PSIPHON="\033[1;97m[\033[1;32m ACTIVO \033[1;97m]"
local Numb=1
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mBADVPN ---------------------- $BADVPN"
script[$Numb]="pbadvpn"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mDROPBEAR -------------------- $DROPBEAR"
script[$Numb]="pdropbear"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mSSL ------------------------- $SSL"
script[$Numb]="pssl"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mSQUID ----------------------- $SQUID"
script[$Numb]="psquid"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mOPENVPN --------------------- $OPENVPN"
script[$Numb]="popenvpn"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mSHADOWSOCK NORMAL ----------- $SHADOWN"
script[$Numb]="pshadowsockN"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mSHADOWSOCK LIV +OBFS -------- $SHADOWL"
script[$Numb]="pshadowsockL"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mSLOWDNS --------------------- $SLOWDNS"
script[$Numb]="slowdns"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mGETTUNEL -------------------- $PGETTUNEL"
script[$Numb]="pgettunel"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mTCP-OVER -------------------- $POVER"
script[$Numb]="ptcpover"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mSSLH ------------------------ $SSLH"
script[$Numb]="sslh"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mUDP-REQUEST ----------------- $UDPREQ"
script[$Numb]="udpserverr"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mSERVIDOR PSIPHONE ----------- $PSIPHON"
script[$Numb]="spsiphone"
echo -ne "\e[0;0m\e[1;90m═════════════════════ \e[0;0m\e[1;93mPROXY´S \e[0;0m\e[1;90m══════════════════════\n"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mWEBSOKET STATUS EDITABLE ---- $WEBSOKETE"
script[$Numb]="pwebsokete"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mPROXY OPENVPN --------------- $POPENVPN"
script[$Numb]="pro-openvpn"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mPROXY PUBLICO --------------- $PPUBLICO"
script[$Numb]="ppublico"
let Numb++
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m > \033[1;97m" && echo -e "\033[1;97mPROXY PRIVADO --------------- $PPRIVADO"
script[$Numb]="pprivado"
let Numb++
msg -bar2
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;97m"
script[0]="voltar"
msg -bar2
selection=$(selection_fun $Numb)
[[ -e "${SCPfrm}/${script[$selection]}" ]] && {
${SCPfrm}/${script[$selection]}
} || {
case ${script[$selection]} in
"pdropbear") proto_dropbear ;;
"pssl") proto_ssl ;;
"psquid") proto_squid ;;
"popenvpn") proto_openvpn ;;
"pbadvpn") proto_badvpn ;;
"pshadowsockN") proto_shadowsockN ;;
"pshadowsockL") proto_shadowsockL ;;
"pwebsokete") proto_websockete ;;
"pro-openvpn") proto_popenvpn ;;
"ppublico") proto_ppublico ;;
"pprivado") proto_pprivado ;;
"pgettunel") proto_pgettunel ;;
"ptcpover") proto_ptcpover ;;
"slowdns") proto_slowndns ;;
"sslh") sshl_install ;;
"udpserverr") udp_serverr ;;
"spsiphone") server_psiphones ;;
*) return 0 ;;
esac
}
}
#--- CONTROLADOR V2RAY
control_v2ray() {
err_fun() {
case $1 in
1)
msg -verm "Usuario Nulo"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
2)
msg -verm "Nombre muy corto (MIN: 2 CARACTERES)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
3)
msg -verm "Nombre muy grande (MAX: 5 CARACTERES)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
4)
msg -verm "Contraseña Nula"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
5)
msg -verm "Contraseña muy corta"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
6)
msg -verm "Contraseña muy grande"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
7)
msg -verm "Duracion Nula"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
8)
msg -verm "Duracion invalida utilize numeros"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
9)
msg -verm "Duracion maxima y de un año"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
11)
msg -verm "Limite Nulo"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
12)
msg -verm "Limite invalido utilize numeros"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
13)
msg -verm "Limite maximo de 999"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
14)
msg -verm "Usuario Ya Existe"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
15)
msg -verm "(Solo numeros) GB = Min: 1gb Max: 1000gb"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
16)
msg -verm "Solo numeros"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
17)
msg -verm "Sin Informacion - Para Cancelar Digite CRTL + C"
sleep 4s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
esac
}
intallv2ray() {
clear && clear
msg -bar
echo -e " \e[1;32m >>> SE INSTALARA V2RAY <<< " | pv -qL 10
msg -bar
source <(curl -sL https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/v2ray.sh)
v2ray update
mailfix=$(cat /dev/urandom | tr -dc '[:alnum:]' | head -c 10)
curl https://get.acme.sh | sh -s email=$mailfix@gmail.com
#service v2ray restart
msg -ama "Intalado con EXITO!"
USRdatabase="/etc/SCRIPT-LATAM/RegV2ray"
[[ ! -e ${USRdatabase} ]] && touch ${USRdatabase}
sort ${USRdatabase} | uniq >${USRdatabase}tmp
mv -f ${USRdatabase}tmp ${USRdatabase}
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
protocolv2ray() {
msg -ama "Escojer opcion 3 y poner el dominio de nuestra IP!"
msg -bar
v2ray stream
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
tls() {
msg -ama "Activar o Desactivar TLS!"
msg -bar
v2ray tls
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
portv() {
msg -ama "Cambiar Puerto v2ray!"
msg -bar
v2ray port
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
stats() {
msg -ama "Estadisticas de Consumo!"
msg -bar
v2ray stats
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
unistallv2() {
source <(curl -sL https://multi.netlify.app/v2ray.sh) --remove >/dev/null 2>&1
rm -rf /etc/SCRIPT-LATAM/RegV2ray >/dev/null 2>&1
rm -rf /etc/SCRIPT-LATAM/v2ray/* >/dev/null 2>&1
echo -e "\033[1;92m V2RAY DESINSTALADO CON EXITO"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
infocuenta() {
v2ray info
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
addusr() {
clear
clear
msg -bar
msg -tit
msg -bar
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 "6" ]]; 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/SCRIPT-LATAM/RegV2ray
Fecha=$(date +%d-%m-%y-%R)
cp /etc/SCRIPT-LATAM/RegV2ray /etc/SCRIPT-LATAM/v2ray/RegV2ray-"$Fecha"
cp /etc/SCRIPT-LATAM/RegV2ray /etc/v2ray/config.json-"$Fecha"
v2ray restart >/dev/null 2>&1
echo ""
v2ray info >/etc/SCRIPT-LATAM/v2ray/confuuid.log
lineP=$(sed -n '/'${UUID}'/=' /etc/SCRIPT-LATAM/v2ray/confuuid.log)
numl1=4
let suma=$lineP+$numl1
sed -n ${suma}p /etc/SCRIPT-LATAM/v2ray/confuuid.log
echo ""
msg -bar
echo -e "\e[92m UUID AGREGEGADO CON EXITO "
msg -bar
read -t 120 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
delusr() {
clear
clear
invaliduuid() {
msg -bar
echo -e "\e[91m UUID INVALIDO \n$(msg -bar)"
msg -ne "Enter Para Continuar" && read enter
control_v2ray
}
msg -bar
msg -tit
msg -bar
msg -ama " ELIMINAR USUARIO | UUID V2RAY"
msg -bar
echo -e "\e[1;97m USUARIOS REGISTRADOS"
echo -e "\e[1;33m$(cat /etc/SCRIPT-LATAM/RegV2ray | cut -d '|' -f2,1)"
msg -bar
echo -ne "\e[91m >> Digita el usuario a eliminar:\n \033[1;92m " && read userv
uuidel=$(cat /etc/SCRIPT-LATAM/RegV2ray | grep -w "$userv" | cut -d'|' -f1 | tr -d " \t\n\r")
[[ $(sed -n '/'${uuidel}'/=' /etc/v2ray/config.json | head -1) ]] || invaliduuid
lineP=$(sed -n '/'${uuidel}'/=' /etc/v2ray/config.json)
linePre=$(sed -n '/'${uuidel}'/=' /etc/SCRIPT-LATAM/RegV2ray)
sed -i "${linePre}d" /etc/SCRIPT-LATAM/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
echo -e "\e[1;32m USUARIO ELIMINADO CON EXITO"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
mosusr_kk() {
clear
clear
msg -bar
msg -tit
msg -bar
msg -ama " USUARIOS REGISTRADOS | UUID V2RAY"
msg -bar
# usersss=$(cat /etc/SCRIPT-LATAM/RegV2ray|cut -d '|' -f1)
# cat /etc/SCRIPT-LATAM/RegV2ray|cut -d'|' -f3
VPSsec=$(date +%s)
local HOST="/etc/SCRIPT-LATAM/RegV2ray"
local HOST2="/etc/SCRIPT-LATAM/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
control_v2ray
else
i=1
echo -e "\e[97m UUID | USER | DIAS\e[93m"
msg -bar
while read hostreturn; do
DateExp="$(cat /etc/SCRIPT-LATAM/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))]"
else
EXPTIME="\e[91m[ S/R ]"
fi
usris="$(cat /etc/SCRIPT-LATAM/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/SCRIPT-LATAM/RegV2ray | wc -l)
echo -e "$contador_secuencial \n \e[1;97mNumero de Registrados: $linesss"
}
fi
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
limpiador_activador() {
unset PIDGEN
PIDGEN=$(ps aux | grep -v grep | grep "limv2ray")
if [[ ! $PIDGEN ]]; then
screen -dmS limv2ray watch -n 21600 /etc/SCRIPT-LATAM/menu.sh "exlimv2ray"
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 -bar
msg -ama " ELIMINAR EXPIRADOS | UUID V2RAY"
msg -bar
echo -e "\e[1;97m SE LIMPIARAN EXPIRADOS CADA 6 hrs"
msg -bar
echo -e " $statgen "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
changepath() {
clear
clear
msg -bar
msg -tit
msg -ama " CAMBIAR NOMBRE DEL PATH"
msg -bar
echo -e "\e[97m USUARIOS REGISTRADOS"
echo -ne "\e[91m >> Digita un nombre corto para el path:\n \033[1;92m " && read nombrepat
NPath=$(sed -n '/'path'/=' /etc/v2ray/config.json)
sed -i "${NPath}d" /etc/v2ray/config.json
sed -i ''${NPath}'i\ \"path": "/'${nombrepat}'/",' /etc/v2ray/config.json
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
backup_fun() {
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " BACKUP BASE DE USUARIOS / JSON GENERAL (WEBSOCKET)"
msg -bar
menu_func "CREAR BACKUP" "RESTAURAR BACKUP" "CAMBIAR HOST/CRT"
echo -ne ""$(msg -bar)" \n$(msg -verd " [0]") $(msg -verm2 "╚⊳ ")" && msg -bra " \e[1;97m\033[1;41m VOLVER \033[1;37m"
msg -bar
unset selection
while [[ ${selection} != @([0-3]) ]]; do
echo -ne "\033[1;37mSeleccione una Opcion: " && read selection
tput cuu1 && tput dl1
done
case ${selection} in
1)
cp /etc/v2ray/config.json $HOME/config.json
cp /etc/SCRIPT-LATAM/RegV2ray $HOME/RegV2ray
msg -azu "Procedimiento Hecho con Exito, Guardado en:"
echo ""
echo -e "\033[1;31mBACKUP > [\033[1;32m$HOME/config.json\033[1;31m]"
echo -e "\033[1;31mBACKUP > [\033[1;32m$HOME/RegV2ray\033[1;31m]"
;;
2)
echo -ne "\033[1;37m Ubique los files la carpeta root\n"
msg -bar
read -t 20 -n 1 -rsp $'\033[1;39m Enter Para Proceder o CTRL + C para Cancelar\n'
echo ""
cp /root/config.json /etc/v2ray/config.json
cp /root/RegV2ray /etc/SCRIPT-LATAM/RegV2ray
echo -e "\033[1;31mRESTAURADO > [\033[1;32m/etc/v2ray/config.json \033[1;31m]"
echo -e "\033[1;31mRESTAURADO > [\033[1;32m/etc/SCRIPT-LATAM/RegV2ray \033[1;31m]"
;;
3)
echo -ne "\033[1;37m EDITAR HOST,SUDOMINIO,KEY,CRT\n"
msg -bar
read -t 20 -n 1 -rsp $'\033[1;39m Enter Para Proceder o CTRL + C para Cancelar\n'
echo -ne "\e[91m >> Digita el sub.dominio usado anteriormente:\n \033[1;92m " && read nombrehost
##CER
Ncert=$(sed -n '/'certificateFile'/=' /etc/v2ray/config.json)
sed -i "${Ncert}d" /etc/v2ray/config.json
sed -i ''${Ncert}'i\ \"certificateFile": "/root/.acme.sh/'${nombrehost}'_ecc/fullchain.cer",' /etc/v2ray/config.json
##KEY
Nkey=$(sed -n '/'keyFile'/=' /etc/v2ray/config.json)
sed -i "${Nkey}d" /etc/v2ray/config.json
sed -i ''${Nkey}'i\ \"keyFile": "/root/.acme.sh/'${nombrehost}'_ecc/'${nombrehost}'.key"' /etc/v2ray/config.json
##HOST
Nhost=$(sed -n '/'Host'/=' /etc/v2ray/config.json)
sed -i "${Nhost}d" /etc/v2ray/config.json
sed -i ''${Nhost}'i\ \"Host": "'${nombrehost}'"' /etc/v2ray/config.json
##DOM
Ndom=$(sed -n '/'domain'/=' /etc/v2ray/config.json)
sed -i "${Ndom}d" /etc/v2ray/config.json
sed -i ''${Ndom}'i\ \"domain": "'${nombrehost}'"' /etc/v2ray/config.json
echo -e "\033[1;31m HOST Y CRT ,KEY RESTAURADO > [\033[1;32m $nombrehost \033[1;31m]"
;;
0)
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
exit 0
;;
esac
echo ""
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
control_v2ray
}
pid_inst2() {
[[ $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 Activo ]" || echo -e "\033[1;31m[ Servicio Desactivado ]"
}
clear && clear
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)"
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m CONTROLADOR DE V2RAY (WEBSOCKET+TLS) "
msg -bar
echo -e " \e[97mEstado actual: $(pid_inst2 v2ray)"
msg -bar
## INSTALADOR
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \033[1;97mINSTALAR V2RAY " && echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97mCAMBIAR PROTOCOLO \n"
echo -ne " \e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \033[1;97mACTIVAR TLS " && echo -ne " \e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \033[1;97mCAMBIAR PUERTO \n"
echo -ne " \e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mCAMBIAR NOMBRRE DE PATH"
echo -e "\033[38;5;239m══════════════\e[100m\e[97m ADMINISTRAR CUENTAS \e[0m\e[38;5;239m══════════════"
echo -ne " \e[1;93m [\e[1;32m6\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mAGREGAR USUARIO UUID "
echo -ne " \e[1;93m [\e[1;32m7\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mELIMINAR USUARIO UUID"
echo -ne " \e[1;93m [\e[1;32m8\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mMOSTAR USUARIOS REGISTRADOS"
echo -ne " \e[1;93m [\e[1;32m9\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mINFORMACION DE CUENTAS"
echo -ne "\e[1;93m [\e[1;32m10\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mESTADISTICAS DE CONSUMO "
echo -ne "\e[1;93m [\e[1;32m11\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mLIMPIADOR DE EXPIRADOS --- $statgen"
echo -ne "\e[1;93m [\e[1;32m12\e[1;93m]\033[1;31m > " && echo -e "\033[1;97mBACKUP / BASE USER Y JSON"
echo -ne "\e[1;93m [\e[1;32m13\e[1;93m]\033[1;31m > " && echo -e "\033[1;31mDESINSTALAR V2RAY"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > " && echo -e "\e[97m\033[1;41m VOLVER \033[0;37m"
msg -bar
# while [[ ${arquivoonlineadm} != @(0|[1-99]) ]]; do
# read -p "Seleccione una Opcion [0-12]: " arquivoonlineadm
# tput cuu1 && tput dl1
# done
selection=$(selection_fun 14)
case ${selection} in
1) intallv2ray ;;
2) protocolv2ray ;;
3) tls ;;
4) portv ;;
5) changepath ;;
6) addusr ;;
7) delusr ;;
8) mosusr_kk ;;
9) infocuenta ;;
10) stats ;;
11) limpiador_activador ;;
12) backup_fun ;;
13) unistallv2 ;;
0) menu ;;
esac
exit 0
}
#--- CONTROLADOR SSR
controlador_ssr() {
clear
clear
msg -bar
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#SCPfrm="/etc/ger-frm" && [[ ! -d ${SCPfrm} ]] && mkdir ${SCPfrm}
BARRA1="\e[0;31m--------------------------------------------------------------------\e[0m"
#SCPinst="/etc/ger-inst" && [[ ! -d ${SCPfrm} ]] && mkdir ${SCPfrm}
sh_ver="1.0.26"
filepath=$(
cd "$(dirname "$0")"
pwd
)
file=$(echo -e "${filepath}" | awk -F "$0" '{print $1}')
ssr_folder="/usr/local/shadowsocksr"
config_file="${ssr_folder}/config.json"
config_user_file="${ssr_folder}/user-config.json"
config_user_api_file="${ssr_folder}/userapiconfig.py"
config_user_mudb_file="${ssr_folder}/mudb.json"
ssr_log_file="${ssr_folder}/ssserver.log"
Libsodiumr_file="/usr/local/lib/libsodium.so"
Libsodiumr_ver_backup="1.0.16"
Server_Speeder_file="/serverspeeder/bin/serverSpeeder.sh"
LotServer_file="/appex/bin/serverSpeeder.sh"
BBR_file="${file}/bbr.sh"
jq_file="${ssr_folder}/jq"
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[ INFORMACION ]${Font_color_suffix}"
Error="${Red_font_prefix}[# ERROR #]${Font_color_suffix}"
Tip="${Green_font_prefix}[ NOTA ]${Font_color_suffix}"
Separator_1="——————————————————————————————"
check_root() {
[[ $EUID != 0 ]] && echo -e "${Error} La cuenta actual no es ROOT (no tiene permiso ROOT), no puede continuar la operacion, por favor ${Green_background_prefix} sudo su ${Font_color_suffix} Venga a ROOT (le pedire que ingrese la contraseña de la cuenta actual despues de la ejecucion)" && exit 1
}
check_sys() {
if [[ -f /etc/redhat-release ]]; then
release="centos"
elif cat /etc/issue | grep -q -E -i "debian"; then
release="debian"
elif cat /etc/issue | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
elif cat /proc/version | grep -q -E -i "debian"; then
release="debian"
elif cat /proc/version | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
fi
bit=$(uname -m)
}
check_pid() {
PID=$(ps -ef | grep -v grep | grep server.py | awk '{print $2}')
}
check_crontab() {
[[ ! -e "/usr/bin/crontab" ]] && echo -e "${Error}Falta de dependencia Crontab, Por favor, intente instalar manualmente CentOS: yum install crond -y , Debian/Ubuntu: apt-get install cron -y !" && exit 1
}
SSR_installation_status() {
[[ ! -e ${ssr_folder} ]] && echo -e "${Error}\nShadowsocksR No se encontro la instalacion\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
}
Server_Speeder_installation_status() {
[[ ! -e ${Server_Speeder_file} ]] && echo -e "${Error}No instalado (Server Speeder), Por favor compruebe!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
}
LotServer_installation_status() {
[[ ! -e ${LotServer_file} ]] && echo -e "${Error}No instalado LotServer, Por favor revise!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
}
BBR_installation_status() {
if [[ ! -e ${BBR_file} ]]; then
echo -e "${Error} No encontre el script de BBR, comience a descargar ..."
cd "${file}"
if ! wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/bbr.sh; then
echo -e "${Error} BBR script descargar!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} BBR script descarga completa!"
chmod +x bbr.sh
fi
fi
}
#Establecer reglas de firewall
Add_iptables() {
if [[ ! -z "${ssr_port}" ]]; then
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${ssr_port} -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport ${ssr_port} -j ACCEPT
ip6tables -I INPUT -m state --state NEW -m tcp -p tcp --dport ${ssr_port} -j ACCEPT
ip6tables -I INPUT -m state --state NEW -m udp -p udp --dport ${ssr_port} -j ACCEPT
fi
}
Del_iptables() {
if [[ ! -z "${port}" ]]; then
iptables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j ACCEPT
iptables -D INPUT -m state --state NEW -m udp -p udp --dport ${port} -j ACCEPT
ip6tables -D INPUT -m state --state NEW -m tcp -p tcp --dport ${port} -j ACCEPT
ip6tables -D INPUT -m state --state NEW -m udp -p udp --dport ${port} -j ACCEPT
fi
}
Save_iptables() {
if [[ ${release} == "centos" ]]; then
service iptables save
service ip6tables save
else
iptables-save >/etc/iptables.up.rules
ip6tables-save >/etc/ip6tables.up.rules
fi
}
Set_iptables() {
if [[ ${release} == "centos" ]]; then
service iptables save
service ip6tables save
chkconfig --level 2345 iptables on
chkconfig --level 2345 ip6tables on
else
iptables-save >/etc/iptables.up.rules
ip6tables-save >/etc/ip6tables.up.rules
echo -e '#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules\n/sbin/ip6tables-restore < /etc/ip6tables.up.rules' >/etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables
fi
}
#Leer la informaci<63>n de configuraci<63>n
Get_IP() {
ip=$(wget -qO- -t1 -T2 ipinfo.io/ip)
if [[ -z "${ip}" ]]; then
ip=$(wget -qO- -t1 -T2 api.ip.sb/ip)
if [[ -z "${ip}" ]]; then
ip=$(wget -qO- -t1 -T2 members.3322.org/dyndns/getip)
if [[ -z "${ip}" ]]; then
ip="VPS_IP"
fi
fi
fi
}
Get_User_info() {
Get_user_port=$1
user_info_get=$(python mujson_mgr.py -l -p "${Get_user_port}")
match_info=$(echo "${user_info_get}" | grep -w "### user ")
if [[ -z "${match_info}" ]]; then
echo -e "${Error}La adquisicion de informacion del usuario fallo ${Green_font_prefix}[Puerto: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
user_name=$(echo "${user_info_get}" | grep -w "user :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
port=$(echo "${user_info_get}" | grep -w "port :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
password=$(echo "${user_info_get}" | grep -w "passwd :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
method=$(echo "${user_info_get}" | grep -w "method :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
protocol=$(echo "${user_info_get}" | grep -w "protocol :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
protocol_param=$(echo "${user_info_get}" | grep -w "protocol_param :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
[[ -z ${protocol_param} ]] && protocol_param="0(Ilimitado)"
msg -bar
obfs=$(echo "${user_info_get}" | grep -w "obfs :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
#transfer_enable=$(echo "${user_info_get}"|grep -w "transfer_enable :"|sed 's/[[:space:]]//g'|awk -F ":" '{print $NF}'|awk -F "ytes" '{print $1}'|sed 's/KB/ KB/;s/MB/ MB/;s/GB/ GB/;s/TB/ TB/;s/PB/ PB/')
#u=$(echo "${user_info_get}"|grep -w "u :"|sed 's/[[:space:]]//g'|awk -F ":" '{print $NF}')
#d=$(echo "${user_info_get}"|grep -w "d :"|sed 's/[[:space:]]//g'|awk -F ":" '{print $NF}')
forbidden_port=$(echo "${user_info_get}" | grep -w "Puerto prohibido :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
[[ -z ${forbidden_port} ]] && forbidden_port="Permitir todo"
msg -bar
speed_limit_per_con=$(echo "${user_info_get}" | grep -w "speed_limit_per_con :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
speed_limit_per_user=$(echo "${user_info_get}" | grep -w "speed_limit_per_user :" | sed 's/[[:space:]]//g' | awk -F ":" '{print $NF}')
msg -bar
Get_User_transfer "${port}"
}
Get_User_transfer() {
transfer_port=$1
#echo "transfer_port=${transfer_port}"
all_port=$(${jq_file} '.[]|.port' ${config_user_mudb_file})
#echo "all_port=${all_port}"
port_num=$(echo "${all_port}" | grep -nw "${transfer_port}" | awk -F ":" '{print $1}')
#echo "port_num=${port_num}"
port_num_1=$(expr ${port_num} - 1)
#echo "port_num_1=${port_num_1}"
transfer_enable_1=$(${jq_file} ".[${port_num_1}].transfer_enable" ${config_user_mudb_file})
#echo "transfer_enable_1=${transfer_enable_1}"
u_1=$(${jq_file} ".[${port_num_1}].u" ${config_user_mudb_file})
#echo "u_1=${u_1}"
d_1=$(${jq_file} ".[${port_num_1}].d" ${config_user_mudb_file})
#echo "d_1=${d_1}"
transfer_enable_Used_2_1=$(expr ${u_1} + ${d_1})
#echo "transfer_enable_Used_2_1=${transfer_enable_Used_2_1}"
transfer_enable_Used_1=$(expr ${transfer_enable_1} - ${transfer_enable_Used_2_1})
#echo "transfer_enable_Used_1=${transfer_enable_Used_1}"
if [[ ${transfer_enable_1} -lt 1024 ]]; then
transfer_enable="${transfer_enable_1} B"
elif [[ ${transfer_enable_1} -lt 1048576 ]]; then
transfer_enable=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_1}'/'1024'}')
transfer_enable="${transfer_enable} KB"
elif [[ ${transfer_enable_1} -lt 1073741824 ]]; then
transfer_enable=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_1}'/'1048576'}')
transfer_enable="${transfer_enable} MB"
elif [[ ${transfer_enable_1} -lt 1099511627776 ]]; then
transfer_enable=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_1}'/'1073741824'}')
transfer_enable="${transfer_enable} GB"
elif [[ ${transfer_enable_1} -lt 1125899906842624 ]]; then
transfer_enable=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_1}'/'1099511627776'}')
transfer_enable="${transfer_enable} TB"
fi
#echo "transfer_enable=${transfer_enable}"
if [[ ${u_1} -lt 1024 ]]; then
u="${u_1} B"
elif [[ ${u_1} -lt 1048576 ]]; then
u=$(awk 'BEGIN{printf "%.2f\n",'${u_1}'/'1024'}')
u="${u} KB"
elif [[ ${u_1} -lt 1073741824 ]]; then
u=$(awk 'BEGIN{printf "%.2f\n",'${u_1}'/'1048576'}')
u="${u} MB"
elif [[ ${u_1} -lt 1099511627776 ]]; then
u=$(awk 'BEGIN{printf "%.2f\n",'${u_1}'/'1073741824'}')
u="${u} GB"
elif [[ ${u_1} -lt 1125899906842624 ]]; then
u=$(awk 'BEGIN{printf "%.2f\n",'${u_1}'/'1099511627776'}')
u="${u} TB"
fi
#echo "u=${u}"
if [[ ${d_1} -lt 1024 ]]; then
d="${d_1} B"
elif [[ ${d_1} -lt 1048576 ]]; then
d=$(awk 'BEGIN{printf "%.2f\n",'${d_1}'/'1024'}')
d="${d} KB"
elif [[ ${d_1} -lt 1073741824 ]]; then
d=$(awk 'BEGIN{printf "%.2f\n",'${d_1}'/'1048576'}')
d="${d} MB"
elif [[ ${d_1} -lt 1099511627776 ]]; then
d=$(awk 'BEGIN{printf "%.2f\n",'${d_1}'/'1073741824'}')
d="${d} GB"
elif [[ ${d_1} -lt 1125899906842624 ]]; then
d=$(awk 'BEGIN{printf "%.2f\n",'${d_1}'/'1099511627776'}')
d="${d} TB"
fi
#echo "d=${d}"
if [[ ${transfer_enable_Used_1} -lt 1024 ]]; then
transfer_enable_Used="${transfer_enable_Used_1} B"
elif [[ ${transfer_enable_Used_1} -lt 1048576 ]]; then
transfer_enable_Used=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_1}'/'1024'}')
transfer_enable_Used="${transfer_enable_Used} KB"
elif [[ ${transfer_enable_Used_1} -lt 1073741824 ]]; then
transfer_enable_Used=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_1}'/'1048576'}')
transfer_enable_Used="${transfer_enable_Used} MB"
elif [[ ${transfer_enable_Used_1} -lt 1099511627776 ]]; then
transfer_enable_Used=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_1}'/'1073741824'}')
transfer_enable_Used="${transfer_enable_Used} GB"
elif [[ ${transfer_enable_Used_1} -lt 1125899906842624 ]]; then
transfer_enable_Used=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_1}'/'1099511627776'}')
transfer_enable_Used="${transfer_enable_Used} TB"
fi
#echo "transfer_enable_Used=${transfer_enable_Used}"
if [[ ${transfer_enable_Used_2_1} -lt 1024 ]]; then
transfer_enable_Used_2="${transfer_enable_Used_2_1} B"
elif [[ ${transfer_enable_Used_2_1} -lt 1048576 ]]; then
transfer_enable_Used_2=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_2_1}'/'1024'}')
transfer_enable_Used_2="${transfer_enable_Used_2} KB"
elif [[ ${transfer_enable_Used_2_1} -lt 1073741824 ]]; then
transfer_enable_Used_2=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_2_1}'/'1048576'}')
transfer_enable_Used_2="${transfer_enable_Used_2} MB"
elif [[ ${transfer_enable_Used_2_1} -lt 1099511627776 ]]; then
transfer_enable_Used_2=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_2_1}'/'1073741824'}')
transfer_enable_Used_2="${transfer_enable_Used_2} GB"
elif [[ ${transfer_enable_Used_2_1} -lt 1125899906842624 ]]; then
transfer_enable_Used_2=$(awk 'BEGIN{printf "%.2f\n",'${transfer_enable_Used_2_1}'/'1099511627776'}')
transfer_enable_Used_2="${transfer_enable_Used_2} TB"
fi
#echo "transfer_enable_Used_2=${transfer_enable_Used_2}"
}
urlsafe_base64() {
date=$(echo -n "$1" | base64 -w0)
echo -e "${date}"
}
ss_link_qr() {
SSbase64=$(urlsafe_base64 "${method}:${password}@${ip}:${port}")
SSurl="ss://${SSbase64}"
SSQRcode="http://www.codigos-qr.com/qr/php/qr_img.php?d=${SSurl}"
ss_link=" SS Link :\n ${Green_font_prefix}${SSurl}${Font_color_suffix} \n Codigo QR SS:\n ${Green_font_prefix}${SSQRcode}${Font_color_suffix}"
}
ssr_link_qr() {
SSRprotocol=$(echo ${protocol} | sed 's/_compatible//g')
SSRobfs=$(echo ${obfs} | sed 's/_compatible//g')
SSRPWDbase64=$(urlsafe_base64 "${password}")
SSRbase64=$(urlsafe_base64 "${ip}:${port}:${SSRprotocol}:${method}:${SSRobfs}:${SSRPWDbase64}/?obfsparam=")
SSRurl="ssr://${SSRbase64}"
SSRQRcode="http://www.codigos-qr.com/qr/php/qr_img.php?d=${SSRurl}"
ssr_link=" SSR Link :\n ${Red_font_prefix}${SSRurl}${Font_color_suffix} \n Codigo QR SSR:\n ${Red_font_prefix}${SSRQRcode}${Font_color_suffix}"
}
ss_ssr_determine() {
protocol_suffix=$(echo ${protocol} | awk -F "_" '{print $NF}')
obfs_suffix=$(echo ${obfs} | awk -F "_" '{print $NF}')
if [[ ${protocol} = "origin" ]]; then
if [[ ${obfs} = "plain" ]]; then
ss_link_qr
ssr_link=""
else
if [[ ${obfs_suffix} != "compatible" ]]; then
ss_link=""
else
ss_link_qr
fi
fi
else
if [[ ${protocol_suffix} != "compatible" ]]; then
ss_link=""
else
if [[ ${obfs_suffix} != "compatible" ]]; then
if [[ ${obfs_suffix} = "plain" ]]; then
ss_link_qr
else
ss_link=""
fi
else
ss_link_qr
fi
fi
fi
ssr_link_qr
}
# Display configuration information
View_User() {
clear
SSR_installation_status
List_port_user
while true; do
echo -e "\e[93mIngrese el puerto de usuario para ver la informacion\nmas detallada"
msg -bar
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read View_user_port
[[ -z "${View_user_port}" ]] && echo -e "Cancelado ...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
View_user=$(cat "${config_user_mudb_file}" | grep '"port": '"${View_user_port}"',')
if [[ ! -z ${View_user} ]]; then
Get_User_info "${View_user_port}"
View_User_info
break
else
echo -e "${Error} Por favor ingrese el puerto correcto !"
fi
done
read -p "Enter para continuar" enter
}
View_User_info() {
ip=$(cat ${config_user_api_file} | grep "SERVER_PUB_ADDR = " | awk -F "[']" '{print $2}')
[[ -z "${ip}" ]] && Get_IP
ss_ssr_determine
clear
echo -e " Usuario [${user_name}] Informacion de Cuenta:"
msg -bar
echo -e " IP : ${Green_font_prefix}${ip}${Font_color_suffix}"
echo -e " Puerto : ${Green_font_prefix}${port}${Font_color_suffix}"
echo -e " Contraseña : ${Green_font_prefix}${password}${Font_color_suffix}"
echo -e " Encriptacion : ${Green_font_prefix}${method}${Font_color_suffix}"
echo -e " Protocol : ${Red_font_prefix}${protocol}${Font_color_suffix}"
echo -e " Obfs : ${Red_font_prefix}${obfs}${Font_color_suffix}"
echo -e " Limite de dispositivos: ${Green_font_prefix}${protocol_param}${Font_color_suffix}"
echo -e " Velocidad de subproceso Unico: ${Green_font_prefix}${speed_limit_per_con} KB/S${Font_color_suffix}"
echo -e " Velocidad Maxima del Usuario: ${Green_font_prefix}${speed_limit_per_user} KB/S${Font_color_suffix}"
echo -e " Puertos Prohibido: ${Green_font_prefix}${forbidden_port} ${Font_color_suffix}"
echo -e " Consumo de sus Datos:\n Carga: ${Green_font_prefix}${u}${Font_color_suffix} + Descarga: ${Green_font_prefix}${d}${Font_color_suffix} = ${Green_font_prefix}${transfer_enable_Used_2}${Font_color_suffix}"
echo -e " Trafico Restante: ${Green_font_prefix}${transfer_enable_Used} ${Font_color_suffix}"
msg -bar
echo -e " Trafico Total del Usuario: ${Green_font_prefix}${transfer_enable} ${Font_color_suffix}"
msg -bar
echo -e "${ss_link}"
msg -bar
echo -e "${ssr_link}"
msg -bar
echo -e " ${Green_font_prefix} Nota: ${Font_color_suffix}
En el navegador, abra el enlace del codigo QR, puede\n ver la imagen del codigo QR."
msg -bar
}
#Configuracion de la informacion de configuracion
Set_config_user() {
msg -bar
echo -ne "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97mIngrese un nombre de usuario\n"
msg -bar
read -p "(Predeterminado: LATAM):" ssr_user
[[ -z "${ssr_user}" ]] && ssr_user="LATAM"
echo && echo -e " Nombre de usuario : ${Green_font_prefix}${ssr_user}${Font_color_suffix}" && echo
}
Set_config_port() {
msg -bar
while true; do
echo -e "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97mPor favor ingrese un Puerto "
msg -bar
read -p "(Predeterminado: 2525):" ssr_port
[[ -z "$ssr_port" ]] && ssr_port="2525"
expr ${ssr_port} + 0 &>/dev/null
if [[ $? == 0 ]]; then
if [[ ${ssr_port} -ge 1 ]] && [[ ${ssr_port} -le 65535 ]]; then
echo && echo -e " Port : ${Green_font_prefix}${ssr_port}${Font_color_suffix}" && echo
break
else
echo -e "${Error} Por favor ingrese el numero correcto (1-65535)"
fi
else
echo -e "${Error} Por favor ingrese el numero correcto (1-65535)"
fi
done
}
Set_config_password() {
msg -bar
echo -e "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \e[1;97mPor favor ingrese una contrasena para el Usuario"
msg -bar
read -p "(Predeterminado: LATAM):" ssr_password
[[ -z "${ssr_password}" ]] && ssr_password="LATAM"
echo && echo -e " contrasena : ${Green_font_prefix}${ssr_password}${Font_color_suffix}" && echo
}
Set_config_method() {
msg -bar
echo -e "\e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97mSeleccione tipo de Encriptacion
$(msg -bar)
${Green_font_prefix} 1.${Font_color_suffix} Ninguno
${Green_font_prefix} 2.${Font_color_suffix} rc4
${Green_font_prefix} 3.${Font_color_suffix} rc4-md5
${Green_font_prefix} 4.${Font_color_suffix} rc4-md5-6
${Green_font_prefix} 5.${Font_color_suffix} aes-128-ctr
${Green_font_prefix} 6.${Font_color_suffix} aes-192-ctr
${Green_font_prefix} 7.${Font_color_suffix} aes-256-ctr
${Green_font_prefix} 8.${Font_color_suffix} aes-128-cfb
${Green_font_prefix} 9.${Font_color_suffix} aes-192-cfb
${Green_font_prefix}10.${Font_color_suffix} aes-256-cfb
${Green_font_prefix}11.${Font_color_suffix} aes-128-cfb8
${Green_font_prefix}12.${Font_color_suffix} aes-192-cfb8
${Green_font_prefix}13.${Font_color_suffix} aes-256-cfb8
${Green_font_prefix}14.${Font_color_suffix} salsa20
${Green_font_prefix}15.${Font_color_suffix} chacha20
${Green_font_prefix}16.${Font_color_suffix} chacha20-ietf
${Red_font_prefix}17.${Font_color_suffix} xsalsa20
${Red_font_prefix}18.${Font_color_suffix} xchacha20
$(msg -bar)
${Tip} Para salsa20/chacha20-*:\n Porfavor instale libsodium:\n Opcion 4 en menu principal SSRR"
msg -bar
read -p "(Predeterminado: 16. chacha20-ietf):" ssr_method
msg -bar
[[ -z "${ssr_method}" ]] && ssr_method="16"
if [[ ${ssr_method} == "1" ]]; then
ssr_method="Ninguno"
elif [[ ${ssr_method} == "2" ]]; then
ssr_method="rc4"
elif [[ ${ssr_method} == "3" ]]; then
ssr_method="rc4-md5"
elif [[ ${ssr_method} == "4" ]]; then
ssr_method="rc4-md5-6"
elif [[ ${ssr_method} == "5" ]]; then
ssr_method="aes-128-ctr"
elif [[ ${ssr_method} == "6" ]]; then
ssr_method="aes-192-ctr"
elif [[ ${ssr_method} == "7" ]]; then
ssr_method="aes-256-ctr"
elif [[ ${ssr_method} == "8" ]]; then
ssr_method="aes-128-cfb"
elif [[ ${ssr_method} == "9" ]]; then
ssr_method="aes-192-cfb"
elif [[ ${ssr_method} == "10" ]]; then
ssr_method="aes-256-cfb"
elif [[ ${ssr_method} == "11" ]]; then
ssr_method="aes-128-cfb8"
elif [[ ${ssr_method} == "12" ]]; then
ssr_method="aes-192-cfb8"
elif [[ ${ssr_method} == "13" ]]; then
ssr_method="aes-256-cfb8"
elif [[ ${ssr_method} == "14" ]]; then
ssr_method="salsa20"
elif [[ ${ssr_method} == "15" ]]; then
ssr_method="chacha20"
elif [[ ${ssr_method} == "16" ]]; then
ssr_method="chacha20-ietf"
elif [[ ${ssr_method} == "17" ]]; then
ssr_method="xsalsa20"
elif [[ ${ssr_method} == "18" ]]; then
ssr_method="xchacha20"
else
ssr_method="aes-256-cfb"
fi
echo && echo -e " Encriptacion: ${Green_font_prefix}${ssr_method}${Font_color_suffix}" && echo
}
Set_config_protocol() {
msg -bar
echo -e "\e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \e[1;97mPor favor, seleccione un Protocolo
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} origin
${Green_font_prefix}2.${Font_color_suffix} auth_sha1_v4
${Green_font_prefix}3.${Font_color_suffix} auth_aes128_md5
${Green_font_prefix}4.${Font_color_suffix} auth_aes128_sha1
${Green_font_prefix}5.${Font_color_suffix} auth_chain_a
${Green_font_prefix}6.${Font_color_suffix} auth_chain_b
${Red_font_prefix}7.${Font_color_suffix} auth_chain_c
${Red_font_prefix}8.${Font_color_suffix} auth_chain_d
${Red_font_prefix}9.${Font_color_suffix} auth_chain_e
${Red_font_prefix}10.${Font_color_suffix} auth_chain_f
$(msg -bar)
${Tip}\n Si selecciona el protocolo de serie auth_chain_ *:\n Se recomienda establecer el metodo de cifrado en ninguno"
msg -bar
read -p "(Predterminado: 1. origin):" ssr_protocol
msg -bar
[[ -z "${ssr_protocol}" ]] && ssr_protocol="1"
if [[ ${ssr_protocol} == "1" ]]; then
ssr_protocol="origin"
elif [[ ${ssr_protocol} == "2" ]]; then
ssr_protocol="auth_sha1_v4"
elif [[ ${ssr_protocol} == "3" ]]; then
ssr_protocol="auth_aes128_md5"
elif [[ ${ssr_protocol} == "4" ]]; then
ssr_protocol="auth_aes128_sha1"
elif [[ ${ssr_protocol} == "5" ]]; then
ssr_protocol="auth_chain_a"
elif [[ ${ssr_protocol} == "6" ]]; then
ssr_protocol="auth_chain_b"
elif [[ ${ssr_protocol} == "7" ]]; then
ssr_protocol="auth_chain_c"
elif [[ ${ssr_protocol} == "8" ]]; then
ssr_protocol="auth_chain_d"
elif [[ ${ssr_protocol} == "9" ]]; then
ssr_protocol="auth_chain_e"
elif [[ ${ssr_protocol} == "10" ]]; then
ssr_protocol="auth_chain_f"
else
ssr_protocol="origin"
fi
echo && echo -e " Protocolo : ${Green_font_prefix}${ssr_protocol}${Font_color_suffix}" && echo
if [[ ${ssr_protocol} != "origin" ]]; then
if [[ ${ssr_protocol} == "auth_sha1_v4" ]]; then
read -p "Set protocol plug-in to compatible mode(_compatible)?[Y/n]" ssr_protocol_yn
[[ -z "${ssr_protocol_yn}" ]] && ssr_protocol_yn="y"
[[ $ssr_protocol_yn == [Yy] ]] && ssr_protocol=${ssr_protocol}"_compatible"
echo
fi
fi
}
Set_config_obfs() {
msg -bar
echo -e "\e[1;93m [\e[1;32m6\e[1;93m]\033[1;31m > \e[1;97mPor favor, seleccione el metodo OBFS
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} plain
${Green_font_prefix}2.${Font_color_suffix} http_simple
${Green_font_prefix}3.${Font_color_suffix} http_post
${Green_font_prefix}4.${Font_color_suffix} random_head
${Green_font_prefix}5.${Font_color_suffix} tls1.2_ticket_auth
$(msg -bar)
Si elige tls1.2_ticket_auth, entonces el cliente puede\n elegir tls1.2_ticket_fastauth!"
msg -bar
read -p "(Predeterminado: 5. tls1.2_ticket_auth):" ssr_obfs
[[ -z "${ssr_obfs}" ]] && ssr_obfs="5"
if [[ ${ssr_obfs} == "1" ]]; then
ssr_obfs="plain"
elif [[ ${ssr_obfs} == "2" ]]; then
ssr_obfs="http_simple"
elif [[ ${ssr_obfs} == "3" ]]; then
ssr_obfs="http_post"
elif [[ ${ssr_obfs} == "4" ]]; then
ssr_obfs="random_head"
elif [[ ${ssr_obfs} == "5" ]]; then
ssr_obfs="tls1.2_ticket_auth"
else
ssr_obfs="tls1.2_ticket_auth"
fi
echo && echo -e " obfs : ${Green_font_prefix}${ssr_obfs}${Font_color_suffix}" && echo
msg -bar
if [[ ${ssr_obfs} != "plain" ]]; then
read -p "Configurar modo Compatible (Para usar SS)? [y/n]: " ssr_obfs_yn
[[ -z "${ssr_obfs_yn}" ]] && ssr_obfs_yn="y"
[[ $ssr_obfs_yn == [Yy] ]] && ssr_obfs=${ssr_obfs}"_compatible"
fi
}
Set_config_protocol_param() {
msg -bar
while true; do
echo -e "\e[1;93m [\e[1;32m7\e[1;93m]\033[1;31m > \e[1;97mLimitar Cantidad de Dispositivos Simultaneos\n ${Green_font_prefix} auth_*La serie no es compatible con la version original. ${Font_color_suffix}"
msg -bar
echo -e "${Tip} Limite de numero de dispositivos:\n Es el numero de clientes que usaran la cuenta\n el minimo recomendado 2."
msg -bar
read -p "(Predeterminado: Ilimitado):" ssr_protocol_param
[[ -z "$ssr_protocol_param" ]] && ssr_protocol_param="" && echo && break
expr ${ssr_protocol_param} + 0 &>/dev/null
if [[ $? == 0 ]]; then
if [[ ${ssr_protocol_param} -ge 1 ]] && [[ ${ssr_protocol_param} -le 9999 ]]; then
echo && echo -e " Limite del dispositivo: ${Green_font_prefix}${ssr_protocol_param}${Font_color_suffix}" && echo
break
else
echo -e "${Error} Por favor ingrese el numero correcto (1-9999)"
fi
else
echo -e "${Error} Por favor ingrese el numero correcto (1-9999)"
fi
done
}
Set_config_speed_limit_per_con() {
msg -bar
while true; do
echo -e "\e[1;93m [\e[1;32m8\e[1;93m]\033[1;31m > \e[1;97mIntroduzca un Limite de Velocidad x Hilo (en KB/S)"
msg -bar
read -p "(Predterminado: Ilimitado):" ssr_speed_limit_per_con
msg -bar
[[ -z "$ssr_speed_limit_per_con" ]] && ssr_speed_limit_per_con=0 && echo && break
expr ${ssr_speed_limit_per_con} + 0 &>/dev/null
if [[ $? == 0 ]]; then
if [[ ${ssr_speed_limit_per_con} -ge 1 ]] && [[ ${ssr_speed_limit_per_con} -le 131072 ]]; then
echo && echo -e " Velocidad de Subproceso Unico: ${Green_font_prefix}${ssr_speed_limit_per_con} KB/S${Font_color_suffix}" && echo
break
else
echo -e "${Error} Por favor ingrese el numero correcto (1-131072)"
fi
else
echo -e "${Error} Por favor ingrese el numero correcto (1-131072)"
fi
done
}
Set_config_speed_limit_per_user() {
msg -bar
while true; do
echo -e "\e[1;93m [\e[1;32m9\e[1;93m]\033[1;31m > \e[1;97mIntroduzca un Limite de Velocidad Maxima (en KB/S)"
msg -bar
echo -e "${Tip} Limite de Velocidad Maxima del Puerto :\n Es la velocidad maxima que ira el Usuario."
msg -bar
read -p "(Predeterminado: Ilimitado):" ssr_speed_limit_per_user
[[ -z "$ssr_speed_limit_per_user" ]] && ssr_speed_limit_per_user=0 && echo && break
expr ${ssr_speed_limit_per_user} + 0 &>/dev/null
if [[ $? == 0 ]]; then
if [[ ${ssr_speed_limit_per_user} -ge 1 ]] && [[ ${ssr_speed_limit_per_user} -le 131072 ]]; then
echo && echo -e " Velocidad Maxima del Usuario : ${Green_font_prefix}${ssr_speed_limit_per_user} KB/S${Font_color_suffix}" && echo
break
else
echo -e "${Error} Por favor ingrese el numero correcto (1-131072)"
fi
else
echo -e "${Error} Por favor ingrese el numero correcto (1-131072)"
fi
done
}
Set_config_transfer() {
msg -bar
while true; do
echo -e "\e[1;93m [\e[1;32m10\e[1;93m]\033[1;31m > \e[1;97mIngrese Cantidad Total de Datos para el Usuario\n (en GB, 1-838868 GB)"
msg -bar
read -p "(Predeterminado: Ilimitado):" ssr_transfer
[[ -z "$ssr_transfer" ]] && ssr_transfer="838868" && echo && break
expr ${ssr_transfer} + 0 &>/dev/null
if [[ $? == 0 ]]; then
if [[ ${ssr_transfer} -ge 1 ]] && [[ ${ssr_transfer} -le 838868 ]]; then
echo && echo -e " Trafico Total Para El Usuario: ${Green_font_prefix}${ssr_transfer} GB${Font_color_suffix}" && echo
break
else
echo -e "${Error} Por favor ingrese el numero correcto (1-838868)"
fi
else
echo -e "${Error} Por favor ingrese el numero correcto (1-838868)"
fi
done
}
Set_config_forbid() {
msg -bar
echo "PROIBIR PUERTOS"
msg -bar
echo -e "${Tip} Puertos prohibidos:\n Por ejemplo, si no permite el acceso al puerto 25, los\n usuarios no podran acceder al puerto de correo 25 a\n traves del proxy de SSR. Si 80,443 esta desactivado,\n los usuarios no podran acceda a los sitios\n http/https normalmente."
msg -bar
read -p "(Predeterminado: permitir todo):" ssr_forbid
[[ -z "${ssr_forbid}" ]] && ssr_forbid=""
echo && echo -e " Puerto prohibido: ${Green_font_prefix}${ssr_forbid}${Font_color_suffix}" && echo
}
Set_config_enable() {
user_total=$(expr ${user_total} - 1)
for ((integer = 0; integer <= ${user_total}; integer++)); do
echo -e "integer=${integer}"
port_jq=$(${jq_file} ".[${integer}].port" "${config_user_mudb_file}")
echo -e "port_jq=${port_jq}"
if [[ "${ssr_port}" == "${port_jq}" ]]; then
enable=$(${jq_file} ".[${integer}].enable" "${config_user_mudb_file}")
echo -e "enable=${enable}"
[[ "${enable}" == "null" ]] && echo -e "${Error} Obtenga el puerto actual [${ssr_port}] Estado deshabilitado fallido!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
ssr_port_num=$(cat "${config_user_mudb_file}" | grep -n '"puerto": '${ssr_port}',' | awk -F ":" '{print $1}')
echo -e "ssr_port_num=${ssr_port_num}"
[[ "${ssr_port_num}" == "null" ]] && echo -e "${Error}Obtener actual Puerto [${ssr_port}] Numero de filas fallidas!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
ssr_enable_num=$(expr ${ssr_port_num} - 5)
echo -e "ssr_enable_num=${ssr_enable_num}"
break
fi
done
if [[ "${enable}" == "1" ]]; then
echo -e "Puerto [${ssr_port}] El estado de la cuenta es: ${Green_font_prefix}Enabled ${Font_color_suffix} , Cambiar a ${Red_font_prefix}Disabled${Font_color_suffix} ?[Y/n]"
read -p "(Predeterminado: Y):" ssr_enable_yn
[[ -z "${ssr_enable_yn}" ]] && ssr_enable_yn="y"
if [[ "${ssr_enable_yn}" == [Yy] ]]; then
ssr_enable="0"
else
echo -e "Cancelado...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
fi
elif [[ "${enable}" == "0" ]]; then
echo -e "Port [${ssr_port}] El estado de la cuenta:${Green_font_prefix}Habilitado ${Font_color_suffix} , Cambie a ${Red_font_prefix}Deshabilitado${Font_color_suffix} ?[Y/n]"
read -p "(Predeterminado: Y):" ssr_enable_yn
[[ -z "${ssr_enable_yn}" ]] && ssr_enable_yn = "y"
if [[ "${ssr_enable_yn}" == [Yy] ]]; then
ssr_enable="1"
else
echo "Cancelar ..." && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
fi
else
echo -e "${Error} El actual estado de discapacidad de Puerto es anormal.[${enable}] !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
Set_user_api_server_pub_addr() {
addr=$1
if [[ "${addr}" == "Modify" ]]; then
server_pub_addr=$(cat ${config_user_api_file} | grep "SERVER_PUB_ADDR = " | awk -F "[']" '{print $2}')
if [[ -z ${server_pub_addr} ]]; then
echo -e "${Error} La IP del servidor o el nombre de dominio obtenidos fallaron!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} La IP del servidor o el nombre de dominio actualmente configurados es ${Green_font_prefix}${server_pub_addr}${Font_color_suffix}"
fi
fi
msg -bar
read -p "(Deteccion automatica de IP):" ssr_server_pub_addr
if [[ -z "${ssr_server_pub_addr}" ]]; then
Get_IP
if [[ ${ip} == "VPS_IP" ]]; then
while true; do
read -p "${Error} La deteccion automatica de la IP de la red externa fallo, ingrese manualmente la IP del servidor o el nombre de dominio" ssr_server_pub_addr
if [[ -z "$ssr_server_pub_addr" ]]; then
echo -e "${Error}No puede estar vacio!"
else
break
fi
done
else
ssr_server_pub_addr="${ip}"
fi
fi
echo && msg -bar && echo -e " IP o nombre de dominio: ${Green_font_prefix}${ssr_server_pub_addr}${Font_color_suffix}" && msg -bar && echo
}
Set_config_all() {
lal=$1
if [[ "${lal}" == "Modify" ]]; then
Set_config_password
Set_config_method
Set_config_protocol
Set_config_obfs
Set_config_protocol_param
Set_config_speed_limit_per_con
Set_config_speed_limit_per_user
Set_config_transfer
Set_config_forbid
else
Set_config_user
Set_config_port
Set_config_password
Set_config_method
Set_config_protocol
Set_config_obfs
Set_config_protocol_param
Set_config_speed_limit_per_con
Set_config_speed_limit_per_user
Set_config_transfer
Set_config_forbid
fi
}
#Modificar la informaci<63>n de configuraci<63>n
Modify_config_password() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -k "${ssr_password}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} Fallo la modificacion de la contrasena del usuario ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} La contrasena del usuario se modifico correctamente ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Puede tardar unos 10 segundos aplicar la ultima configuracion)"
fi
}
Modify_config_method() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -m "${ssr_method}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} La modificacion del metodo de cifrado del usuario fallo ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Modo de cifrado de usuario ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Note: Nota: la configuracion mas reciente puede demorar unos 10 segundos)"
fi
}
Modify_config_protocol() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -O "${ssr_protocol}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} Fallo la modificacion del protocolo de usuario ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Acuerdo de usuario modificacion exito ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Nota: la configuracion m<>s reciente puede demorar unos 10 segundos)"
fi
}
Modify_config_obfs() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -o "${ssr_obfs}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} La modificacion de la confusion del usuario fallo ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Confusion del usuario exito de modificacion ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Nota: La aplicacion de la ultima configuracion puede demorar unos 10 segundos)"
fi
}
Modify_config_protocol_param() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -G "${ssr_protocol_param}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} Fallo la modificacion del parametro del protocolo del usuario (numero de dispositivos limite) ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Parametros de negociaci<63>n del usuario (numero de dispositivos limite) modificados correctamente ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Nota: puede tomar aproximadamente 10 segundos aplicar la ultima configuracion)"
fi
}
Modify_config_speed_limit_per_con() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -s "${ssr_speed_limit_per_con}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} Fallo la modificacion de la velocidad de un solo hilo ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Modificacion de la velocidad de un solo hilo exitosa ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Nota: puede tomar aproximadamente 10 segundos aplicar la ultima configuracion)"
fi
}
Modify_config_speed_limit_per_user() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -S "${ssr_speed_limit_per_user}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} Usuario Puerto la modificaci<63>n del limite de velocidad total fallo ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Usuario Puerto limite de velocidad total modificado con exito ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Nota: la configuracion mas reciente puede demorar unos 10 segundos)"
fi
}
Modify_config_connect_verbose_info() {
sed -i 's/"connect_verbose_info": '"$(echo ${connect_verbose_info})"',/"connect_verbose_info": '"$(echo ${ssr_connect_verbose_info})"',/g' ${config_user_file}
}
Modify_config_transfer() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -t "${ssr_transfer}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} La modificacion de trafico total del usuario fallo ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Trafico total del usuario ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Nota: la configuracion mas reciente puede demorar unos 10 segundos)"
fi
}
Modify_config_forbid() {
match_edit=$(python mujson_mgr.py -e -p "${ssr_port}" -f "${ssr_forbid}" | grep -w "edit user ")
if [[ -z "${match_edit}" ]]; then
echo -e "${Error} La modificacion del puerto prohibido por el usuario ha fallado ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} " && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Los puertos prohibidos por el usuario se modificaron correctamente ${Green_font_prefix}[Port: ${ssr_port}]${Font_color_suffix} (Nota: puede tomar aproximadamente 10 segundos aplicar la ultima configuracion)"
fi
}
Modify_config_enable() {
sed -i "${ssr_enable_num}"'s/"enable": '"$(echo ${enable})"',/"enable": '"$(echo ${ssr_enable})"',/' ${config_user_mudb_file}
}
Modify_user_api_server_pub_addr() {
sed -i "s/SERVER_PUB_ADDR = '${server_pub_addr}'/SERVER_PUB_ADDR = '${ssr_server_pub_addr}'/" ${config_user_api_file}
}
Modify_config_all() {
Modify_config_password
Modify_config_method
Modify_config_protocol
Modify_config_obfs
Modify_config_protocol_param
Modify_config_speed_limit_per_con
Modify_config_speed_limit_per_user
Modify_config_transfer
Modify_config_forbid
}
Check_python() {
python_ver=$(python -h)
if [[ -z ${python_ver} ]]; then
echo -e "${Info} No instalo Python, comience a instalar ..."
if [[ ${release} == "centos" ]]; then
yum install -y python
else
apt-get install -y python
fi
fi
}
Centos_yum() {
yum update
cat /etc/redhat-release | grep 7\..* | grep -i centos >/dev/null
if [[ $? = 0 ]]; then
yum install -y vim unzip crond net-tools git
else
yum install -y vim unzip crond git
fi
}
Debian_apt() {
apt-get update
apt-get install -y vim unzip cron git net-tools
}
#Descargar ShadowsocksR
Download_SSR() {
cd "/usr/local"
# wget -N --no-check-certificate "https://github.com/ToyoDAdoubi/shadowsocksr/archive/manyuser.zip"
#git config --global http.sslVerify false
git clone -b akkariiin/master https://github.com/shadowsocksrr/shadowsocksr.git
[[ ! -e ${ssr_folder} ]] && echo -e "${Error} Fallo la descarga del servidor ShadowsocksR!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
# [[ ! -e "manyuser.zip" ]] && echo -e "${Error} Fallo la descarga del paquete de compresion lateral ShadowsocksR !" && rm -rf manyuser.zip && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
# unzip "manyuser.zip"
# [[ ! -e "/usr/local/shadowsocksr-manyuser/" ]] && echo -e "${Error} Fallo la descompresi<73>n del servidor ShadowsocksR !" && rm -rf manyuser.zip && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
# mv "/usr/local/shadowsocksr-manyuser/" "/usr/local/shadowsocksr/"
# [[ ! -e "/usr/local/shadowsocksr/" ]] && echo -e "${Error} Fallo el cambio de nombre del servidor ShadowsocksR!" && rm -rf manyuser.zip && rm -rf "/usr/local/shadowsocksr-manyuser/" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
# rm -rf manyuser.zip
cd "shadowsocksr"
cp "${ssr_folder}/config.json" "${config_user_file}"
cp "${ssr_folder}/mysql.json" "${ssr_folder}/usermysql.json"
cp "${ssr_folder}/apiconfig.py" "${config_user_api_file}"
[[ ! -e ${config_user_api_file} ]] && echo -e "${Error} Fallo la replicacion apiconfig.py del servidor ShadowsocksR!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
sed -i "s/API_INTERFACE = 'sspanelv2'/API_INTERFACE = 'mudbjson'/" ${config_user_api_file}
server_pub_addr="127.0.0.1"
Modify_user_api_server_pub_addr
#sed -i "s/SERVER_PUB_ADDR = '127.0.0.1'/SERVER_PUB_ADDR = '${ip}'/" ${config_user_api_file}
sed -i 's/ \/\/ only works under multi-user mode//g' "${config_user_file}"
echo -e "${Info} Descarga del servidor ShadowsocksR completa!"
}
Service_SSR() {
if [[ ${release} = "centos" ]]; then
if ! wget --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/service/ssrmu_centos -O /etc/init.d/ssrmu; then
echo -e "${Error} Fallo la descarga de la secuencia de comandos de administracion de servicios de ShadowsocksR!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
chmod +x /etc/init.d/ssrmu
chkconfig --add ssrmu
chkconfig ssrmu on
else
if ! wget --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/service/ssrmu_debian -O /etc/init.d/ssrmu; then
echo -e "${Error} Fallo la descarga de la secuencia de comandos de administracion de servicio de ShadowsocksR!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
chmod +x /etc/init.d/ssrmu
update-rc.d -f ssrmu defaults
fi
echo -e "${Info} ShadowsocksR Service Management Script Descargar Descargar!"
}
#Instalar el analizador JQ
JQ_install() {
if [[ ! -e ${jq_file} ]]; then
cd "${ssr_folder}"
if [[ ${bit} = "x86_64" ]]; then
# mv "jq-linux64" "jq"
wget --no-check-certificate "https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64" -O ${jq_file}
else
# mv "jq-linux32" "jq"
wget --no-check-certificate "https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux32" -O ${jq_file}
fi
[[ ! -e ${jq_file} ]] && echo -e "${Error} JQ parser, por favor!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
chmod +x ${jq_file}
echo -e "${Info} La instalacion del analizador JQ se ha completado, continuar ..."
else
echo -e "${Info} JQ parser esta instalado, continuar ..."
fi
}
#Instalacion
Installation_dependency() {
if [[ ${release} == "centos" ]]; then
Centos_yum
else
Debian_apt
fi
[[ ! -e "/usr/bin/unzip" ]] && echo -e "${Error} Dependiente de la instalacion de descomprimir (paquete comprimido) fallo, en su mayoria problema, por favor verifique!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
Check_python
#echo "nameserver 8.8.8.8" > /etc/resolv.conf
#echo "nameserver 8.8.4.4" >> /etc/resolv.conf
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if [[ ${release} == "centos" ]]; then
/etc/init.d/crond restart
else
/etc/init.d/cron restart
fi
}
Install_SSR() {
clear
check_root
msg -bar
[[ -e ${ssr_folder} ]] && echo -e "${Error}\nLa carpeta ShadowsocksR ha sido creada, por favor verifique\n(si la instalacion falla, desinstalela primero) !\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
echo -e "${Info}\nProceso de instaacion de ShadowsocksR..."
Set_user_api_server_pub_addr
Set_config_all
echo -e "${Info} Comience a instalar / configurar las dependencias de ShadowsocksR ..."
Installation_dependency
echo -e "${Info} Iniciar descarga / Instalar ShadowsocksR File ..."
Download_SSR
echo -e "${Info} Iniciar descarga / Instalar ShadowsocksR Service Script(init)..."
Service_SSR
echo -e "${Info} Iniciar descarga / instalar JSNO Parser JQ ..."
JQ_install
echo -e "${Info} Comience a agregar usuario inicial ..."
Add_port_user "install"
echo -e "${Info} Empezar a configurar el firewall de iptables ..."
Set_iptables
echo -e "${Info} Comience a agregar reglas de firewall de iptables ..."
Add_iptables
echo -e "${Info} Comience a guardar las reglas del servidor de seguridad de iptables ..."
Save_iptables
echo -e "${Info} Todos los pasos para iniciar el servicio ShadowsocksR ..."
Start_SSR
Get_User_info "${ssr_port}"
View_User_info
}
Update_SSR() {
SSR_installation_status
# echo -e "Debido a que el beb<65> roto actualiza el servidor ShadowsocksR, entonces."
cd ${ssr_folder}
git pull
Restart_SSR
}
Uninstall_SSR() {
clear && clear
msg -bar
[[ ! -e ${ssr_folder} ]] && echo -e "${Error} ShadowsocksR no esta instalado\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
echo -e "\e[1;97m Desinstalar ShadowsocksR [y/n]"
msg -bar
read -p "(Predeterminado: n):" unyn
msg -bar
[[ -z ${unyn} ]] && unyn="n"
if [[ ${unyn} == [Yy] ]]; then
check_pid
[[ ! -z "${PID}" ]] && kill -9 ${PID}
user_info=$(python mujson_mgr.py -l)
user_total=$(echo "${user_info}" | wc -l)
if [[ ! -z ${user_info} ]]; then
for ((integer = 1; integer <= ${user_total}; integer++)); do
port=$(echo "${user_info}" | sed -n "${integer}p" | awk '{print $4}')
Del_iptables
done
fi
if [[ ${release} = "centos" ]]; then
chkconfig --del ssrmu
else
update-rc.d -f ssrmu remove
fi
rm -rf ${ssr_folder} && rm -rf /etc/init.d/ssrmu
echo -e "\e[1;32 DESINSTALACION DE SSR COMPLETA "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
else
echo && echo "\e[1;31m Desinstalar cancelado ..." && echo
fi
}
Check_Libsodium_ver() {
echo -e "${Info} Descargando la ultima version de libsodium"
#Libsodiumr_ver=$(wget -qO- "https://github.com/jedisct1/libsodium/tags"|grep "/jedisct1/libsodium/releases/tag/"|head -1|sed -r 's/.*tag\/(.+)\">.*/\1/')
Libsodiumr_ver=1.0.17
[[ -z ${Libsodiumr_ver} ]] && Libsodiumr_ver=${Libsodiumr_ver_backup}
echo -e "${Info} La ultima version de libsodium es ${Green_font_prefix}${Libsodiumr_ver}${Font_color_suffix} !"
}
Install_Libsodium() {
if [[ -e ${Libsodiumr_file} ]]; then
echo -e "${Error} libsodium ya instalado, quieres actualizar?[y/N]"
read -p "(Default: n):" yn
[[ -z ${yn} ]] && yn="n"
if [[ ${yn} == [Nn] ]]; then
echo -e "Cancelado...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
else
echo -e "${Info} libsodium no instalado, instalacion iniciada ..."
fi
Check_Libsodium_ver
if [[ ${release} == "centos" ]]; then
yum -y actualizacion
echo -e "${Info} La instalacion depende de ..."
yum -y groupinstall "Herramientas de desarrollo"
echo -e "${Info} Descargar ..."
wget --no-check-certificate -N "https://github.com/jedisct1/libsodium/releases/download/${Libsodiumr_ver}/libsodium-${Libsodiumr_ver}.tar.gz"
echo -e "${Info} Descomprimir ..."
tar -xzf libsodium-${Libsodiumr_ver}.tar.gz && cd libsodium-${Libsodiumr_ver}
echo -e "${Info} Compilar e instalar ..."
./configure --disable-maintainer-mode && make -j2 && make install
echo /usr/local/lib >/etc/ld.so.conf.d/usr_local_lib.conf
else
apt-get update
echo -e "${Info} La instalacion depende de ..."
apt-get install -y build-essential
echo -e "${Info} Descargar ..."
wget --no-check-certificate -N "https://github.com/jedisct1/libsodium/releases/download/${Libsodiumr_ver}/libsodium-${Libsodiumr_ver}.tar.gz"
echo -e "${Info} Descomprimir ..."
tar -xzf libsodium-${Libsodiumr_ver}.tar.gz && cd libsodium-${Libsodiumr_ver}
echo -e "${Info} Compilar e instalar ..."
./configure --disable-maintainer-mode && make -j2 && make install
fi
ldconfig
cd .. && rm -rf libsodium-${Libsodiumr_ver}.tar.gz && rm -rf libsodium-${Libsodiumr_ver}
[[ ! -e ${Libsodiumr_file} ]] && echo -e "${Error} libsodium Instalacion fallida!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
echo && echo -e "${Info} libsodium exito de instalacion!" && echo
msg -bar
}
#Mostrar informaci<63>n de conexi<78>n
debian_View_user_connection_info() {
format_1=$1
user_info=$(python mujson_mgr.py -l)
user_total=$(echo "${user_info}" | wc -l)
[[ -z ${user_info} ]] && echo -e "${Error} No encontro, por favor compruebe!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
IP_total=$(netstat -anp | grep 'ESTABLISHED' | grep 'python' | grep 'tcp6' | awk '{print $5}' | awk -F ":" '{print $1}' | sort -u | wc -l)
user_list_all=""
for ((integer = 1; integer <= ${user_total}; integer++)); do
user_port=$(echo "${user_info}" | sed -n "${integer}p" | awk '{print $4}')
user_IP_1=$(netstat -anp | grep 'ESTABLISHED' | grep 'python' | grep 'tcp6' | grep ":${user_port} " | awk '{print $5}' | awk -F ":" '{print $1}' | sort -u)
if [[ -z ${user_IP_1} ]]; then
user_IP_total="0"
else
user_IP_total=$(echo -e "${user_IP_1}" | wc -l)
if [[ ${format_1} == "IP_address" ]]; then
get_IP_address
else
user_IP=$(echo -e "\n${user_IP_1}")
fi
fi
user_list_all=${user_list_all}"Puerto: ${Green_font_prefix}"${user_port}"${Font_color_suffix}, No IPs: ${Green_font_prefix}"${user_IP_total}"${Font_color_suffix}, Linked IP: ${Green_font_prefix}${user_IP}${Font_color_suffix}\n"
user_IP=""
done
echo -e "Total de usuarios: ${Green_background_prefix} "${user_total}" ${Font_color_suffix} Total de IPs vinculadas: ${Green_background_prefix} "${IP_total}" ${Font_color_suffix}\n"
echo -e "${user_list_all}"
msg -bar
}
centos_View_user_connection_info() {
format_1=$1
user_info=$(python mujson_mgr.py -l)
user_total=$(echo "${user_info}" | wc -l)
[[ -z ${user_info} ]] && echo -e "${Error} No encontrado, por favor revise!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
IP_total=$(netstat -anp | grep 'ESTABLISHED' | grep 'python' | grep 'tcp' | grep '::ffff:' | awk '{print $5}' | awk -F ":" '{print $4}' | sort -u | wc -l)
user_list_all=""
for ((integer = 1; integer <= ${user_total}; integer++)); do
user_port=$(echo "${user_info}" | sed -n "${integer}p" | awk '{print $4}')
user_IP_1=$(netstat -anp | grep 'ESTABLISHED' | grep 'python' | grep 'tcp' | grep ":${user_port} " | grep '::ffff:' | awk '{print $5}' | awk -F ":" '{print $4}' | sort -u)
if [[ -z ${user_IP_1} ]]; then
user_IP_total="0"
else
user_IP_total=$(echo -e "${user_IP_1}" | wc -l)
if [[ ${format_1} == "IP_address" ]]; then
get_IP_address
else
user_IP=$(echo -e "\n${user_IP_1}")
fi
fi
user_list_all=${user_list_all}"Puerto: ${Green_font_prefix}"${user_port}"${Font_color_suffix}, El numero total de IPs vinculadas: ${Green_font_prefix}"${user_IP_total}"${Font_color_suffix},Linked IP: ${Green_font_prefix}${user_IP}${Font_color_suffix}\n"
user_IP=""
done
echo -e "El numero total de usuarios: ${Green_background_prefix} "${user_total}" ${Font_color_suffix} El numero total de IPs vinculadas: ${Green_background_prefix} "${IP_total}" ${Font_color_suffix} "
echo -e "${user_list_all}"
}
View_user_connection_info() {
clear
SSR_installation_status
msg -bar
echo -e " Seleccione el formato para mostrar
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} Mostrar IP
${Green_font_prefix}2.${Font_color_suffix} Mostrar IP + Resolver el nombre DNS"
msg -bar
read -p "(Predeterminado: 1):" ssr_connection_info
msg -bar
[[ -z "${ssr_connection_info}" ]] && ssr_connection_info="1"
if [[ ${ssr_connection_info} == "1" ]]; then
View_user_connection_info_1 ""
elif [[ ${ssr_connection_info} == "2" ]]; then
echo -e "${Tip} Detectar IP (ipip.net)puede llevar mas tiempo si hay muchas IPs"
msg -bar
View_user_connection_info_1 "IP_address"
else
echo -e "${Error} Ingrese el numero correcto(1-2)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
View_user_connection_info_1() {
format=$1
if [[ ${release} = "centos" ]]; then
cat /etc/redhat-release | grep 7\..* | grep -i centos >/dev/null
if [[ $? = 0 ]]; then
debian_View_user_connection_info "$format"
else
centos_View_user_connection_info "$format"
fi
else
debian_View_user_connection_info "$format"
fi
}
get_IP_address() {
#echo "user_IP_1=${user_IP_1}"
if [[ ! -z ${user_IP_1} ]]; then
#echo "user_IP_total=${user_IP_total}"
for ((integer_1 = ${user_IP_total}; integer_1 >= 1; integer_1--)); do
IP=$(echo "${user_IP_1}" | sed -n "$integer_1"p)
#echo "IP=${IP}"
IP_address=$(wget -qO- -t1 -T2 http://freeapi.ipip.net/${IP} | sed 's/\"//g;s/,//g;s/\[//g;s/\]//g')
#echo "IP_address=${IP_address}"
user_IP="${user_IP}\n${IP}(${IP_address})"
#echo "user_IP=${user_IP}"
sleep 1s
done
fi
}
#Modificar la configuraci<63>n del usuario
Modify_port() {
msg -bar
List_port_user
while true; do
echo -e "Por favor ingrese el usuario (Puerto) que tiene que ser modificado"
msg -bar
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read ssr_port
[[ -z "${ssr_port}" ]] && echo -e "Cancelado ...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
Modify_user=$(cat "${config_user_mudb_file}" | grep '"port": '"${ssr_port}"',')
if [[ ! -z ${Modify_user} ]]; then
break
else
echo -e "${Error} Puerto Introduzca el Puerto correcto!"
fi
done
}
Modify_Config() {
clear
SSR_installation_status
msg -bar
echo -e " \e[1;93m ADMINISTRADOR DE CUENTAS SSR-SS \e[97m
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} Agregar y Configurar Usuario
${Green_font_prefix}2.${Font_color_suffix} Eliminar la Configuracion del Usuario
\e[34m————————— Modificar la Configuracion del Usuario ————
${Green_font_prefix}3.${Font_color_suffix} Modificar contrasena de Usuario
${Green_font_prefix}4.${Font_color_suffix} Modificar el metodo de Cifrado
${Green_font_prefix}5.${Font_color_suffix} Modificar el Protocolo
${Green_font_prefix}6.${Font_color_suffix} Modificar Ofuscacion
${Green_font_prefix}7.${Font_color_suffix} Modificar el Limite de Dispositivos
${Green_font_prefix}8.${Font_color_suffix} Modificar el Limite de Velocidad de un solo Hilo
${Green_font_prefix}9.${Font_color_suffix} Modificar limite de Velocidad Total del Usuario
${Green_font_prefix}10.${Font_color_suffix} Modificar el Trafico Total del Usuario
${Green_font_prefix}11.${Font_color_suffix} Modificar los Puertos Prohibidos Del usuario
${Green_font_prefix}12.${Font_color_suffix} Modificar la Configuracion Completa
\e[34m————————— Otras Configuraciones —————————
${Green_font_prefix}13.${Font_color_suffix} Modificar la IP o el nombre de dominio que\n se muestra en el perfil del usuario
$(msg -bar)
${Tip} El nombre de usuario y el puerto del usuario\n no se pueden modificar. Si necesita modificarlos, use\n el script para modificar manualmente la funcion !"
msg -bar
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read ssr_modify
[[ -z "${ssr_modify}" ]] && echo -e "Cancelado ...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${ssr_modify} == "1" ]]; then
Add_port_user
elif [[ ${ssr_modify} == "2" ]]; then
Del_port_user
elif [[ ${ssr_modify} == "3" ]]; then
Modify_port
Set_config_password
Modify_config_password
elif [[ ${ssr_modify} == "4" ]]; then
Modify_port
Set_config_method
Modify_config_method
elif [[ ${ssr_modify} == "5" ]]; then
Modify_port
Set_config_protocol
Modify_config_protocol
elif [[ ${ssr_modify} == "6" ]]; then
Modify_port
Set_config_obfs
Modify_config_obfs
elif [[ ${ssr_modify} == "7" ]]; then
Modify_port
Set_config_protocol_param
Modify_config_protocol_param
elif [[ ${ssr_modify} == "8" ]]; then
Modify_port
Set_config_speed_limit_per_con
Modify_config_speed_limit_per_con
elif [[ ${ssr_modify} == "9" ]]; then
Modify_port
Set_config_speed_limit_per_user
Modify_config_speed_limit_per_user
elif [[ ${ssr_modify} == "10" ]]; then
Modify_port
Set_config_transfer
Modify_config_transfer
elif [[ ${ssr_modify} == "11" ]]; then
Modify_port
Set_config_forbid
Modify_config_forbid
elif [[ ${ssr_modify} == "12" ]]; then
Modify_port
Set_config_all "Modify"
Modify_config_all
elif [[ ${ssr_modify} == "13" ]]; then
Set_user_api_server_pub_addr "Modify"
Modify_user_api_server_pub_addr
else
echo -e "${Error} Ingrese el numero correcto(1-13)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
List_port_user() {
user_info=$(python mujson_mgr.py -l)
user_total=$(echo "${user_info}" | wc -l)
[[ -z ${user_info} ]] && echo -e "${Error} No encontre al usuario, por favor verifica otra vez!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
user_list_all=""
for ((integer = 1; integer <= ${user_total}; integer++)); do
user_port=$(echo "${user_info}" | sed -n "${integer}p" | awk '{print $4}')
user_username=$(echo "${user_info}" | sed -n "${integer}p" | awk '{print $2}' | sed 's/\[//g;s/\]//g')
Get_User_transfer "${user_port}"
user_list_all=${user_list_all}"Nombre de usuario: ${Green_font_prefix} "${user_username}"${Font_color_suffix}\nPort: ${Green_font_prefix}"${user_port}"${Font_color_suffix}\nUso del trafico (Usado + Restante = Total):\n ${Green_font_prefix}${transfer_enable_Used_2}${Font_color_suffix} + ${Green_font_prefix}${transfer_enable_Used}${Font_color_suffix} = ${Green_font_prefix}${transfer_enable}${Font_color_suffix}\n--------------------------------------------\n "
done
msg -bar && echo -e "\e[93m ===== DETALLES DE LOS USUARIOS ===== ${Green_background_prefix} "${user_total}" ${Font_color_suffix}" && msg -bar
echo -e ${user_list_all}
}
Add_port_user() {
clear
lalal=$1
if [[ "$lalal" == "install" ]]; then
match_add=$(python mujson_mgr.py -a -u "${ssr_user}" -p "${ssr_port}" -k "${ssr_password}" -m "${ssr_method}" -O "${ssr_protocol}" -G "${ssr_protocol_param}" -o "${ssr_obfs}" -s "${ssr_speed_limit_per_con}" -S "${ssr_speed_limit_per_user}" -t "${ssr_transfer}" -f "${ssr_forbid}" | grep -w "add user info")
else
while true; do
Set_config_all
match_port=$(python mujson_mgr.py -l | grep -w "port ${ssr_port}$")
[[ ! -z "${match_port}" ]] && echo -e "${Error} El puerto [${ssr_port}] Ya existe, no lo agregue de nuevo !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
match_username=$(python mujson_mgr.py -l | grep -w "Usuario \[${ssr_user}]")
[[ ! -z "${match_username}" ]] && echo -e "${Error} Nombre de usuario [${ssr_user}] Ya existe, no lo agregues de nuevo !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
match_add=$(python mujson_mgr.py -a -u "${ssr_user}" -p "${ssr_port}" -k "${ssr_password}" -m "${ssr_method}" -O "${ssr_protocol}" -G "${ssr_protocol_param}" -o "${ssr_obfs}" -s "${ssr_speed_limit_per_con}" -S "${ssr_speed_limit_per_user}" -t "${ssr_transfer}" -f "${ssr_forbid}" | grep -w "add user info")
if [[ -z "${match_add}" ]]; then
echo -e "${Error} Usuario no se pudo agregar ${Green_font_prefix}[Nombre de usuario: ${ssr_user} , port: ${ssr_port}]${Font_color_suffix} "
break
else
Add_iptables
Save_iptables
msg -bar
echo -e "${Info} Usuario agregado exitosamente\n ${Green_font_prefix}[Nombre de usuario: ${ssr_user} , Puerto: ${ssr_port}]${Font_color_suffix} "
echo
read -p "Continuar para agregar otro Usuario?[y/n]:" addyn
[[ -z ${addyn} ]] && addyn="y"
if [[ ${addyn} == [Nn] ]]; then
Get_User_info "${ssr_port}"
View_User_info
break
else
echo -e "${Info} Continuar agregando configuracion de usuario ..."
fi
fi
done
fi
}
Del_port_user() {
List_port_user
while true; do
msg -bar
echo -e "Por favor ingrese el puerto de usuario para ser eliminado"
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read del_user_port
msg -bar
[[ -z "${del_user_port}" ]] && echo -e "Cancelado...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
del_user=$(cat "${config_user_mudb_file}" | grep '"port": '"${del_user_port}"',')
if [[ ! -z ${del_user} ]]; then
port=${del_user_port}
match_del=$(python mujson_mgr.py -d -p "${del_user_port}" | grep -w "delete user ")
if [[ -z "${match_del}" ]]; then
echo -e "${Error} La eliminación del usuario falló ${Green_font_prefix}[Puerto: ${del_user_port}]${Font_color_suffix} "
else
Del_iptables
Save_iptables
echo -e "${Info} Usuario eliminado exitosamente ${Green_font_prefix}[Puerto: ${del_user_port}]${Font_color_suffix} "
fi
break
else
echo -e "${Error} Por favor ingrese el puerto correcto !"
fi
done
msg -bar
}
Manually_Modify_Config() {
clear
msg -bar
SSR_installation_status
nano ${config_user_mudb_file}
echo "Si reiniciar ShadowsocksR ahora?[Y/n]" && echo
msg -bar
read -p "(Predeterminado: y):" yn
[[ -z ${yn} ]] && yn="y"
if [[ ${yn} == [Yy] ]]; then
Restart_SSR
fi
}
Clear_transfer() {
clear
msg -bar
SSR_installation_status
echo -e "Que quieres realizar?
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} Borrar el trafico de un solo usuario
${Green_font_prefix}2.${Font_color_suffix} Borrar todo el trafico de usuarios (irreparable)
${Green_font_prefix}3.${Font_color_suffix} Todo el trafico de usuarios se borra en el inicio
${Green_font_prefix}4.${Font_color_suffix} Deja de cronometrar todo el trafico de usuarios
${Green_font_prefix}5.${Font_color_suffix} Modificar la sincronizacion de todo el trafico de usuarios"
msg -bar
read -p "(Predeterminado:Cancelar):" ssr_modify
[[ -z "${ssr_modify}" ]] && echo "Cancelado ..." && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${ssr_modify} == "1" ]]; then
Clear_transfer_one
elif [[ ${ssr_modify} == "2" ]]; then
msg -bar
echo "Esta seguro de que desea borrar todo el trafico de usuario[y/n]" && echo
msg -bar
read -p "(Predeterminado: n):" yn
[[ -z ${yn} ]] && yn="n"
if [[ ${yn} == [Yy] ]]; then
Clear_transfer_all
else
echo "Cancelar ..."
fi
elif [[ ${ssr_modify} == "3" ]]; then
check_crontab
Set_crontab
Clear_transfer_all_cron_start
elif [[ ${ssr_modify} == "4" ]]; then
check_crontab
Clear_transfer_all_cron_stop
elif [[ ${ssr_modify} == "5" ]]; then
check_crontab
Clear_transfer_all_cron_modify
else
echo -e "${Error} Por favor numero de (1-5)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
Clear_transfer_one() {
List_port_user
while true; do
msg -bar
echo -e "Por favor ingrese el puerto de usuario para borrar el tráfico usado"
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read Clear_transfer_user_port
[[ -z "${Clear_transfer_user_port}" ]] && echo -e "Cancelado...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
Clear_transfer_user=$(cat "${config_user_mudb_file}" | grep '"port": '"${Clear_transfer_user_port}"',')
if [[ ! -z ${Clear_transfer_user} ]]; then
match_clear=$(python mujson_mgr.py -c -p "${Clear_transfer_user_port}" | grep -w "clear user ")
if [[ -z "${match_clear}" ]]; then
echo -e "${Error} El usuario no ha podido utilizar la compensación de tráfico ${Green_font_prefix}[Puerto: ${Clear_transfer_user_port}]${Font_color_suffix} "
else
echo -e "${Info} El usuario ha eliminado con éxito el tráfico utilizando cero. ${Green_font_prefix}[Puerto: ${Clear_transfer_user_port}]${Font_color_suffix} "
fi
break
else
echo -e "${Error} Por favor ingrese el puerto correcto !"
fi
done
}
Clear_transfer_all() {
clear
cd "${ssr_folder}"
user_info=$(python mujson_mgr.py -l)
user_total=$(echo "${user_info}" | wc -l)
[[ -z ${user_info} ]] && echo -e "${Error} No encontro, por favor compruebe!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
for ((integer = 1; integer <= ${user_total}; integer++)); do
user_port=$(echo "${user_info}" | sed -n "${integer}p" | awk '{print $4}')
match_clear=$(python mujson_mgr.py -c -p "${user_port}" | grep -w "clear user ")
if [[ -z "${match_clear}" ]]; then
echo -e "${Error} El usuario ha utilizado el trafico borrado fallido ${Green_font_prefix}[Port: ${user_port}]${Font_color_suffix} "
else
echo -e "${Info} El usuario ha utilizado el trafico para borrar con exito ${Green_font_prefix}[Port: ${user_port}]${Font_color_suffix} "
fi
done
echo -e "${Info} Se borra todo el trafico de usuarios!"
}
Clear_transfer_all_cron_start() {
crontab -l >"$file/crontab.bak"
sed -i "/ssrmu.sh/d" "$file/crontab.bak"
echo -e "\n${Crontab_time} /bin/bash $file/ssrmu.sh clearall" >>"$file/crontab.bak"
crontab "$file/crontab.bak"
rm -r "$file/crontab.bak"
cron_config=$(crontab -l | grep "ssrmu.sh")
if [[ -z ${cron_config} ]]; then
echo -e "${Error} Temporizacion de todo el trafico de usuarios borrado. !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Programacion de todos los tiempos de inicio claro exitosos!"
fi
}
Clear_transfer_all_cron_stop() {
crontab -l >"$file/crontab.bak"
sed -i "/ssrmu.sh/d" "$file/crontab.bak"
crontab "$file/crontab.bak"
rm -r "$file/crontab.bak"
cron_config=$(crontab -l | grep "ssrmu.sh")
if [[ ! -z ${cron_config} ]]; then
echo -e "${Error} Temporizado Todo el trafico de usuarios se ha borrado Parado fallido!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} Timing All Clear Stop Stop Successful!!"
fi
}
Clear_transfer_all_cron_modify() {
Set_crontab
Clear_transfer_all_cron_stop
Clear_transfer_all_cron_start
}
Set_crontab() {
clear
echo -e "Por favor ingrese el intervalo de tiempo de flujo
=== Formato ===
* * * * * Mes * * * * *
${Green_font_prefix} 0 2 1 * * ${Font_color_suffix} Representante 1er, 2:00, claro, trafico usado.
$(msg -bar)
${Green_font_prefix} 0 2 15 * * ${Font_color_suffix} Representativo El 1 2} representa el 15 2:00 minutos Punto de flujo usado despejado 0 minutos Borrar flujo usado<64>
$(msg -bar)
${Green_font_prefix} 0 2 */7 * * ${Font_color_suffix} Representante 7 dias 2: 0 minutos despeja el trafico usado.
$(msg -bar)
${Green_font_prefix} 0 2 * * 0 ${Font_color_suffix} Representa todos los domingos (7) para despejar el trafico utilizado.
$(msg -bar)
${Green_font_prefix} 0 2 * * 3 ${Font_color_suffix} Representante (3) Flujo de trafico usado despejado"
msg -bar
read -p "(Default: 0 2 1 * * 1 de cada mes 2:00):" Crontab_time
[[ -z "${Crontab_time}" ]] && Crontab_time="0 2 1 * *"
}
Start_SSR() {
clear
SSR_installation_status
check_pid
[[ ! -z ${PID} ]] && echo -e "${Error} ShadowsocksR se esta ejecutando!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
/etc/init.d/ssrmu start
}
Stop_SSR() {
clear
SSR_installation_status
check_pid
[[ -z ${PID} ]] && echo -e "${Error} ShadowsocksR no esta funcionando!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
/etc/init.d/ssrmu stop
}
Restart_SSR() {
clear
SSR_installation_status
check_pid
[[ ! -z ${PID} ]] && /etc/init.d/ssrmu stop
/etc/init.d/ssrmu start
}
View_Log() {
SSR_installation_status
[[ ! -e ${ssr_log_file} ]] && echo -e "${Error} El registro de ShadowsocksR no existe!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
echo && echo -e "${Tip} Presione ${Red_font_prefix}Ctrl+C ${Font_color_suffix} Registro de registro de terminacion" && echo
tail -f ${ssr_log_file}
}
#Afilado
Configure_Server_Speeder() {
clear
msg -bar
echo && echo -e "Que vas a hacer
${BARRA1}
${Green_font_prefix}1.${Font_color_suffix} Velocidad aguda
$(msg -bar)
${Green_font_prefix}2.${Font_color_suffix} Velocidad aguda
————————
${Green_font_prefix}3.${Font_color_suffix} Velocidad aguda
$(msg -bar)
${Green_font_prefix}4.${Font_color_suffix} Velocidad aguda
$(msg -bar)
${Green_font_prefix}5.${Font_color_suffix} Reinicie la velocidad aguda
$(msg -bar)
${Green_font_prefix}6.${Font_color_suffix} Estado agudo
$(msg -bar)
Nota: Sharp y LotServer no se pueden instalar / iniciar al mismo tiempo"
msg -bar
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read server_speeder_num
[[ -z "${server_speeder_num}" ]] && echo "Cancelado ..." && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${server_speeder_num} == "1" ]]; then
Install_ServerSpeeder
elif [[ ${server_speeder_num} == "2" ]]; then
Server_Speeder_installation_status
Uninstall_ServerSpeeder
elif [[ ${server_speeder_num} == "3" ]]; then
Server_Speeder_installation_status
${Server_Speeder_file} start
${Server_Speeder_file} status
elif [[ ${server_speeder_num} == "4" ]]; then
Server_Speeder_installation_status
${Server_Speeder_file} stop
elif [[ ${server_speeder_num} == "5" ]]; then
Server_Speeder_installation_status
${Server_Speeder_file} restart
${Server_Speeder_file} status
elif [[ ${server_speeder_num} == "6" ]]; then
Server_Speeder_installation_status
${Server_Speeder_file} status
else
echo -e "${Error} Por favor numero(1-6)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
Install_ServerSpeeder() {
[[ -e ${Server_Speeder_file} ]] && echo -e "${Error} Server Speeder esta instalado!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
#Prestamo de la version feliz de 91yun.rog
wget --no-check-certificate -qO /tmp/serverspeeder.sh https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder.sh
[[ ! -e "/tmp/serverspeeder.sh" ]] && echo -e "${Error} Prestamo de la version feliz de 91yun.rog!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
bash /tmp/serverspeeder.sh
sleep 2s
PID=$(ps -ef | grep -v grep | grep "serverspeeder" | awk '{print $2}')
if [[ ! -z ${PID} ]]; then
rm -rf /tmp/serverspeeder.sh
rm -rf /tmp/91yunserverspeeder
rm -rf /tmp/91yunserverspeeder.tar.gz
echo -e "${Info} La instalacion del servidor Speeder esta completa!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Error} Fallo la instalacion de Server Speeder!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
Uninstall_ServerSpeeder() {
clear
msg -bar
echo "yes para desinstalar Speed ??Speed ??(Server Speeder)[y/N]" && echo
msg -bar
read -p "(Predeterminado: n):" unyn
[[ -z ${unyn} ]] && echo && echo "Cancelado ..." && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${unyn} == [Yy] ]]; then
chattr -i /serverspeeder/etc/apx*
/serverspeeder/bin/serverSpeeder.sh uninstall -f
echo && echo "Server Speeder Desinstalacion completa!" && echo
fi
}
# LotServer
Configure_LotServer() {
clear
msg -bar
echo && echo -e "Que vas a hacer?
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} Instalar LotServer
$(msg -bar)
${Green_font_prefix}2.${Font_color_suffix} Desinstalar LotServer
————————
${Green_font_prefix}3.${Font_color_suffix} Iniciar LotServer
$(msg -bar)
${Green_font_prefix}4.${Font_color_suffix} Detener LotServer
$(msg -bar)
${Green_font_prefix}5.${Font_color_suffix} Reiniciar LotServer
$(msg -bar)
${Green_font_prefix}6.${Font_color_suffix} Ver el estado de LotServer
${BARRA1}
Nota: Sharp y LotServer no se pueden instalar / iniciar al mismo tiempo"
msg -bar
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read lotserver_num
[[ -z "${lotserver_num}" ]] && echo "Cancelado ..." && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${lotserver_num} == "1" ]]; then
Install_LotServer
elif [[ ${lotserver_num} == "2" ]]; then
LotServer_installation_status
Uninstall_LotServer
elif [[ ${lotserver_num} == "3" ]]; then
LotServer_installation_status
${LotServer_file} start
${LotServer_file} status
elif [[ ${lotserver_num} == "4" ]]; then
LotServer_installation_status
${LotServer_file} stop
elif [[ ${lotserver_num} == "5" ]]; then
LotServer_installation_status
${LotServer_file} restart
${LotServer_file} status
elif [[ ${lotserver_num} == "6" ]]; then
LotServer_installation_status
${LotServer_file} status
else
echo -e "${Error} Por favor numero(1-6)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
Install_LotServer() {
[[ -e ${LotServer_file} ]] && echo -e "${Error} LotServer esta instalado!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
#Github: https://github.com/0oVicero0/serverSpeeder_Install
wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh"
[[ ! -e "/tmp/appex.sh" ]] && echo -e "${Error} Fallo la descarga del script de instalacion de LotServer!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
bash /tmp/appex.sh 'install'
sleep 2s
PID=$(ps -ef | grep -v grep | grep "appex" | awk '{print $2}')
if [[ ! -z ${PID} ]]; then
echo -e "${Info} La instalacion de LotServer esta completa!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Error} Fallo la instalacion de LotServer!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
Uninstall_LotServer() {
clear && clear
msg -bar
echo "Desinstalar Para desinstalar LotServer[y/N]" && echo
msg -bar
read -p "(Predeterminado: n):" unyn
msg -bar
[[ -z ${unyn} ]] && echo && echo "Cancelado ..." && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${unyn} == [Yy] ]]; then
wget --no-check-certificate -qO /tmp/appex.sh "https://raw.githubusercontent.com/0oVicero0/serverSpeeder_Install/master/appex.sh" && bash /tmp/appex.sh 'uninstall'
echo && echo "La desinstalacion de LotServer esta completa!" && echo
fi
}
# BBR
Configure_BBR() {
clear && clear
msg -bar
echo -e " Que vas a hacer?
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} Instalar BBR
————————
${Green_font_prefix}2.${Font_color_suffix} Iniciar BBR
${Green_font_prefix}3.${Font_color_suffix} Dejar de BBR
${Green_font_prefix}4.${Font_color_suffix} Ver el estado de BBR"
msg -bar
echo -e "${Green_font_prefix} [Por favor, preste atencion antes de la instalacion] ${Font_color_suffix}
$(msg -bar)
1. Abra BBR, reemplace, hay un error de reemplazo (despues de reiniciar)
2. Este script solo es compatible con los nucleos de reemplazo de Debian / Ubuntu. OpenVZ y Docker no admiten el reemplazo de los nucleos.
3. Debian reemplaza el proceso del kernel [Desea finalizar el kernel de desinstalacion], seleccione ${Green_font_prefix} NO ${Font_color_suffix}"
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read bbr_num
msg -bar
[[ -z "${bbr_num}" ]] && echo -e "Cancelado...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${bbr_num} == "1" ]]; then
Install_BBR
elif [[ ${bbr_num} == "2" ]]; then
Start_BBR
elif [[ ${bbr_num} == "3" ]]; then
Stop_BBR
elif [[ ${bbr_num} == "4" ]]; then
Status_BBR
else
echo -e "${Error} Por favor numero(1-4)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
Install_BBR() {
[[ ${release} = "centos" ]] && echo -e "${Error} Este script de instalacion del sistema CentOS. BBR !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
BBR_installation_status
bash "${BBR_file}"
}
Start_BBR() {
BBR_installation_status
bash "${BBR_file}" start
}
Stop_BBR() {
BBR_installation_status
bash "${BBR_file}" stop
}
Status_BBR() {
BBR_installation_status
bash "${BBR_file}" status
}
BackUP_ssrr() {
clear && clear
msg -bar
msg -ama "HERRAMIENTA DE BACKUP SS-SSRR -BETA"
msg -bar
msg -azu "CREANDO BACKUP" "RESTAURAR BACKUP"
msg -bar
rm -rf /root/mudb.json >/dev/null 2>&1
cp /usr/local/shadowsocksr/mudb.json /root/mudb.json >/dev/null 2>&1
msg -azu "Procedimiento Hecho con Exito, Guardado en:"
echo -e "\033[1;31mBACKUP > [\033[1;32m/root/mudb.json\033[1;31m]"
msg -bar
}
RestaurarBackUp_ssrr() {
clear && clear
msg -bar
msg -ama "HERRAMIENTA DE RESTAURACION SS-SSRR -BETA"
msg -bar
msg -azu "Recuerde tener minimo una cuenta ya creada"
msg -azu "Copie el archivo mudb.json en la carpeta /root"
read -p " ►► Presione enter para continuar ◄◄"
msg -bar
msg -azu "Procedimiento Hecho con Exito"
read -p " ►► Presione enter para Reiniciar Panel SSRR ◄◄"
msg -bar
mv /root/mudb.json /usr/local/shadowsocksr/mudb.json
Restart_SSR
msg -bar
}
# Otros
Other_functions() {
clear && clear
msg -bar
echo -e "\e[1;93m Que vas a realizar?
$(msg -bar)
${Green_font_prefix}1.${Font_color_suffix} Configurar BBR
${Green_font_prefix}2.${Font_color_suffix} Velocidad de configuracion (ServerSpeeder)
${Green_font_prefix}3.${Font_color_suffix} Configurar LotServer (Rising Parent)
${Tip} Sharp / LotServer / BBR no es compatible con OpenVZ!
${Tip} Speed y LotServer no pueden coexistir!
————————————
${Green_font_prefix}4.${Font_color_suffix} Llave de bloqueo BT/PT/SPAM (iptables)
${Green_font_prefix}5.${Font_color_suffix} Llave de desbloqueo BT/PT/SPAM (iptables)
————————————
${Green_font_prefix}6.${Font_color_suffix} Cambiar modo de salida de registro ShadowsocksR
—— Modo bajo o verboso..
${Green_font_prefix}7.${Font_color_suffix} Supervisar el estado de ejecucion del servidor ShadowsocksR
—— NOTA: Supervisa que SSR este Activo
————————————
${Green_font_prefix}8.${Font_color_suffix} Backup SSRR
${Green_font_prefix}9.${Font_color_suffix} Restaurar Backup"
msg -bar
echo -ne "\033[97m (Predeterminado: cancelar): \033[1;32m" && read other_num
[[ -z "${other_num}" ]] && echo -e "Cancelado...\n$(msg -bar)" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
if [[ ${other_num} == "1" ]]; then
Configure_BBR
elif [[ ${other_num} == "2" ]]; then
Configure_Server_Speeder
elif [[ ${other_num} == "3" ]]; then
Configure_LotServer
elif [[ ${other_num} == "4" ]]; then
BanBTPTSPAM
elif [[ ${other_num} == "5" ]]; then
UnBanBTPTSPAM
elif [[ ${other_num} == "6" ]]; then
Set_config_connect_verbose_info
elif [[ ${other_num} == "7" ]]; then
Set_crontab_monitor_ssr
elif [[ ${other_num} == "8" ]]; then
BackUP_ssrr
elif [[ ${other_num} == "9" ]]; then
RestaurarBackUp_ssrr
else
echo -e "${Error} Por favor numero [1-9]" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
}
#Prohibido<64>BT PT SPAM
BanBTPTSPAM() {
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ban_iptables.sh && chmod +x ban_iptables.sh && bash ban_iptables.sh banall
rm -rf ban_iptables.sh
}
#Desbloquear BT PT SPAM
UnBanBTPTSPAM() {
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/ban_iptables.sh && chmod +x ban_iptables.sh && bash ban_iptables.sh unbanall
rm -rf ban_iptables.sh
}
Set_config_connect_verbose_info() {
clear && clear
msg -bar
SSR_installation_status
[[ ! -e ${jq_file} ]] && echo -e "${Error} JQ parser No, por favor, compruebe!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
connect_verbose_info=$(${jq_file} '.connect_verbose_info' ${config_user_file})
if [[ ${connect_verbose_info} = "0" ]]; then
echo && echo -e "Modo de registro actual: ${Green_font_prefix}Registro de errores en modo simple${Font_color_suffix}"
msg -bar
echo -e "yes para cambiar a ${Green_font_prefix}Modo detallado (registro de conexi<78>n + registro de errores)${Font_color_suffix}[y/N]"
msg -bar
read -p "(Predeterminado: n):" connect_verbose_info_ny
[[ -z "${connect_verbose_info_ny}" ]] && connect_verbose_info_ny="n"
if [[ ${connect_verbose_info_ny} == [Yy] ]]; then
ssr_connect_verbose_info="1"
Modify_config_connect_verbose_info
Restart_SSR
else
echo && echo " Cancelado ..." && echo
fi
else
echo && echo -e "Modo de registro actual: ${Green_font_prefix}Modo detallado (conexion de conexion + registro de errores)${Font_color_suffix}"
msg -bar
echo -e "yes para cambiar a ${Green_font_prefix}Modo simple ${Font_color_suffix}?[y/N]"
read -p "(Predeterminado: n):" connect_verbose_info_ny
[[ -z "${connect_verbose_info_ny}" ]] && connect_verbose_info_ny="n"
if [[ ${connect_verbose_info_ny} == [Yy] ]]; then
ssr_connect_verbose_info="0"
Modify_config_connect_verbose_info
Restart_SSR
else
echo && echo " Cancelado ..." && echo
fi
fi
}
Set_crontab_monitor_ssr() {
clear && clear
msg -bar
SSR_installation_status
crontab_monitor_ssr_status=$(crontab -l | grep "ssrmu.sh monitor")
if [[ -z "${crontab_monitor_ssr_status}" ]]; then
echo && echo -e "Modo de monitoreo actual: ${Green_font_prefix}No monitoreado${Font_color_suffix}"
msg -bar
echo -e "Ok para abrir ${Green_font_prefix}Servidor ShadowsocksR ejecutando monitoreo de estado${Font_color_suffix} Funcion? (Cuando el proceso R lado SSR R)[Y/n]"
msg -bar
read -p "(Predeterminado: y):" crontab_monitor_ssr_status_ny
[[ -z "${crontab_monitor_ssr_status_ny}" ]] && crontab_monitor_ssr_status_ny="y"
if [[ ${crontab_monitor_ssr_status_ny} == [Yy] ]]; then
crontab_monitor_ssr_cron_start
else
echo && echo " Cancelado ..." && echo
fi
else
echo && echo -e "Modo de monitoreo actual: ${Green_font_prefix}Abierto${Font_color_suffix}"
msg -bar
echo -e "Ok para apagar ${Green_font_prefix}Servidor ShadowsocksR ejecutando monitoreo de estado${Font_color_suffix} Funcion? (procesar servidor SSR)[y/N]"
msg -bar
read -p "(Predeterminado: n):" crontab_monitor_ssr_status_ny
[[ -z "${crontab_monitor_ssr_status_ny}" ]] && crontab_monitor_ssr_status_ny="n"
if [[ ${crontab_monitor_ssr_status_ny} == [Yy] ]]; then
crontab_monitor_ssr_cron_stop
else
echo && echo " Cancelado ..." && echo
fi
fi
}
crontab_monitor_ssr() {
SSR_installation_status
check_pid
if [[ -z ${PID} ]]; then
echo -e "${Error} [$(date "+%Y-%m-%d %H:%M:%S %u %Z")] Detectado que el servidor ShadowsocksR no esta iniciado, inicie..." | tee -a ${ssr_log_file}
/etc/init.d/ssrmu start
sleep 1s
check_pid
if [[ -z ${PID} ]]; then
echo -e "${Error} [$(date "+%Y-%m-%d %H:%M:%S %u %Z")] Fallo el inicio del servidor ShadowsocksR..." | tee -a ${ssr_log_file} && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} [$(date "+%Y-%m-%d %H:%M:%S %u %Z")] Inicio de inicio del servidor ShadowsocksR..." | tee -a ${ssr_log_file} && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
fi
else
echo -e "${Info} [$(date "+%Y-%m-%d %H:%M:%S %u %Z")] El proceso del servidor ShadowsocksR se ejecuta normalmente..." exit 0
fi
}
crontab_monitor_ssr_cron_start() {
crontab -l >"$file/crontab.bak"
sed -i "/ssrmu.sh monitor/d" "$file/crontab.bak"
echo -e "\n* * * * * /bin/bash $file/ssrmu.sh monitor" >>"$file/crontab.bak"
crontab "$file/crontab.bak"
rm -r "$file/crontab.bak"
cron_config=$(crontab -l | grep "ssrmu.sh monitor")
if [[ -z ${cron_config} ]]; then
echo -e "${Error} Fallo el arranque del servidor ShadowsocksR!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} El servidor ShadowsocksR esta ejecutando la monitorizacion del estado con exito!"
fi
}
crontab_monitor_ssr_cron_stop() {
crontab -l >"$file/crontab.bak"
sed -i "/ssrmu.sh monitor/d" "$file/crontab.bak"
crontab "$file/crontab.bak"
rm -r "$file/crontab.bak"
cron_config=$(crontab -l | grep "ssrmu.sh monitor")
if [[ ! -z ${cron_config} ]]; then
echo -e "${Error} Fallo la detencion del servidor ShadowsocksR!" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
else
echo -e "${Info} La supervision del estado de ejecucion del servidor de ShadowsocksR se detiene correctamente!"
fi
}
Update_Shell() {
clear && clear
msg -bar
echo -e "La version actual es [ ${sh_ver} ], Comienza a detectar la ultima version ..."
sh_new_ver=$(wget --no-check-certificate -qO- "https://raw.githubusercontent.com/hybtoy/ssrrmu/master/ssrrmu.sh" | grep 'sh_ver="' | awk -F "=" '{print $NF}' | sed 's/\"//g' | head -1) && sh_new_type="github"
[[ -z ${sh_new_ver} ]] && sh_new_ver=$(wget --no-check-certificate -qO- "https://raw.githubusercontent.com/hybtoy/ssrrmu/master/ssrrmu.sh" | grep 'sh_ver="' | awk -F "=" '{print $NF}' | sed 's/\"//g' | head -1) && sh_new_type="github"
[[ -z ${sh_new_ver} ]] && echo -e "${Error} Ultima version de deteccion !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
if [[ ${sh_new_ver} != ${sh_ver} ]]; then
echo -e "Descubrir nueva version[ ${sh_new_ver} ], Esta actualizado?[Y/n]"
msg -bar
read -p "(Predeterminado: y):" yn
[[ -z "${yn}" ]] && yn="y"
if [[ ${yn} == [Yy] ]]; then
cd "${file}"
if [[ $sh_new_type == "github" ]]; then
wget -N --no-check-certificate https://raw.githubusercontent.com/hybtoy/ssrrmu/master/ssrrmu.sh && chmod +x ssrrmu.sh
fi
echo -e "El script ha sido actualizado a la ultima version.[ ${sh_new_ver} ] !"
else
echo && echo " Cancelado ..." && echo
fi
else
echo -e "Actualmente es la ultima version.[ ${sh_new_ver} ] !"
fi
exit 0
}
# Mostrar el estado del menu
menu_status() {
if [[ -e ${ssr_folder} ]]; then
check_pid
if [[ ! -z "${PID}" ]]; then
echo -e " Estado actual: ${Green_font_prefix}Instalado${Font_color_suffix} y ${Green_font_prefix}Iniciado${Font_color_suffix}"
msg -bar
else
echo -e " Estado actual: ${Green_font_prefix}Instalado${Font_color_suffix} pero ${Red_font_prefix}no comenzo${Font_color_suffix}"
msg -bar
fi
cd "${ssr_folder}"
else
echo -e " Estado actual: ${Red_font_prefix}No Instalado${Font_color_suffix}"
msg -bar
fi
}
check_sys
[[ ${release} != "debian" ]] && [[ ${release} != "ubuntu" ]] && [[ ${release} != "centos" ]] && echo -e "${Error} el script no es compatible con el sistema actual ${release} !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && controlador_ssr
action=$1
if [[ "${action}" == "clearall" ]]; then
Clear_transfer_all
elif [[ "${action}" == "monitor" ]]; then
crontab_monitor_ssr
else
msg -tit
msg -bar
echo -e "\e[1;93m CONTROLADOR DE SHADOWSOCKR ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix}"
msg -bar
echo -ne "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97mINSTALAR" && echo -ne " \e[1;93m[\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97mACTUALIZAR \n"
echo -ne "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \e[1;97mDESINSTALAR " && echo -ne " \e[1;93m[\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97mINSTALAR LIBSODIUM\n"
echo -ne "\e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \e[1;97mINICIAR " && echo -ne " \e[1;93m[\e[1;32m6\e[1;93m]\033[1;31m > \e[1;97mDETENER\n"
echo -ne "\e[1;93m [\e[1;32m7\e[1;93m]\033[1;31m > \e[1;97mREINICIAR " && echo -ne " \e[1;93m[\e[1;32m8\e[1;93m]\033[1;31m > \e[1;97mVER NANO JSOn\n"
echo -e "\033[38;5;239m══════════════\e[100m\e[97m ADMINISTRAR CUENTAS \e[0m\e[38;5;239m══════════════"
echo -e "\e[1;93m [\e[1;32m9\e[1;93m]\033[1;31m > \e[1;97mAGREGAR | MODIFICAR | ELIMINAR [\e[1;93m CUENTAS \e[1;97m] "
echo -e "\e[1;93m [\e[1;32m10\e[1;93m]\033[1;31m > \e[1;97mMOSTRAR CONEXIONES"
echo -e "\e[1;93m [\e[1;32m11\e[1;93m]\033[1;31m > \e[1;97mMODIFICAR CUENTAS"
echo -e "\e[1;93m [\e[1;32m12\e[1;93m]\033[1;31m > \e[1;97mBORRAR EL TRAFICO USADO "
echo -e "\e[1;93m [\e[1;32m13\e[1;93m]\033[1;31m > \e[1;97mREGISTRO DE CONEXIONES"
echo -e "\e[1;93m [\e[1;32m14\e[1;93m]\033[1;31m > \e[1;97mOTRAS FUNCIONES / BACKUP'S"
msg -bar
echo -ne " \e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > " && echo -e "\e[97m\033[1;41m VOLVER \033[0;37m"
msg -bar
echo -ne "\033[1;97m └⊳ Seleccione una opcion [0-14]: \033[1;32m" && read num
msg -bar
case "$num" in
1)
Install_SSR
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
2)
Update_SSR
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
3)
Uninstall_SSR
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
4)
Install_Libsodium
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
5)
Start_SSR
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
6)
Stop_SSR
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
7)
Restart_SSR
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
8)
Manually_Modify_Config
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
9)
Modify_Config
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
10)
View_user_connection_info
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
11)
View_User
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
12)
Clear_transfer
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
13)
View_Log
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
14)
Other_functions
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
15)
read -t 240 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssr
;;
*)
menu
;;
esac
fi
exit 0
}
#--- CONTROLADOR SSH/SSL/DROPBEAR/OPENVPN
controlador_ssh() {
myip=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0' | head -n1)
myint=$(ifconfig | grep -B1 "inet addr:$myip" | head -n1 | awk '{print $1}')
declare -A TIMEUS
SCPdir="/etc/SCRIPT-LATAM"
SCPdir2="${SCPdir}/herramientas"
SCPusr="${SCPdir}/controlador"
USRdatabase="${SCPdir}/cuentassh"
VERY="$(ps aux | grep "/etc/SCRIPT-LATAM/menu.sh verificar" | grep -v grep)"
VERY2="$(ps aux | grep "/etc/SCRIPT-LATAM/menu.sh desbloqueo" | grep -v grep)"
# Open VPN
newclient() {
#Nome #Senha
usermod -p $(openssl passwd -1 $2) $1
while [[ ${newfile} != @(s|S|y|Y|n|N) ]]; do
msg -bar
read -p "Crear Archivo OpenVPN? [S/N]: " -e -i S newfile
tput cuu1 && tput dl1
done
if [[ ${newfile} = @(s|S) ]]; then
# Generates the custom client.ovpn
rm -rf /etc/openvpn/easy-rsa/pki/reqs/$1.req
rm -rf /etc/openvpn/easy-rsa/pki/issued/$1.crt
rm -rf /etc/openvpn/easy-rsa/pki/private/$1.key
cd /etc/openvpn/easy-rsa/
./easyrsa build-client-full $1 nopass >/dev/null 2>&1
cd
cp /etc/openvpn/client-common.txt ~/$1.ovpn
echo "<ca>" >>~/$1.ovpn
cat /etc/openvpn/easy-rsa/pki/ca.crt >>~/$1.ovpn
echo "</ca>" >>~/$1.ovpn
echo "<cert>" >>~/$1.ovpn
cat /etc/openvpn/easy-rsa/pki/issued/$1.crt >>~/$1.ovpn
echo "</cert>" >>~/$1.ovpn
echo "<key>" >>~/$1.ovpn
cat /etc/openvpn/easy-rsa/pki/private/$1.key >>~/$1.ovpn
echo "</key>" >>~/$1.ovpn
echo "<tls-auth>" >>~/$1.ovpn
cat /etc/openvpn/ta.key >>~/$1.ovpn
echo "</tls-auth>" >>~/$1.ovpn
while [[ ${ovpnauth} != @(s|S|y|Y|n|N) ]]; do
read -p "Colocar autenticacion de usuario en el archivo? [S/N]: " -e -i S ovpnauth
tput cuu1 && tput dl1
done
[[ ${ovpnauth} = @(s|S) ]] && sed -i "s;auth-user-pass;<auth-user-pass>\n$1\n$2\n</auth-user-pass>;g" ~/$1.ovpn
cd $HOME
zip ./$1.zip ./$1.ovpn >/dev/null 2>&1
rm ./$1.ovpn >/dev/null 2>&1
echo -e "\033[1;31mArchivo creado: ($HOME/$1.zip)"
fi
}
unlockall2() {
for user in $(cat /etc/passwd | awk -F : '$3 > 900 {print $1}' | grep -v "rick" | grep -vi "nobody"); do
userpid=$(ps -u $user | awk {'print $1'})
usermod -U $user &>/dev/null
done
}
eliminar_all() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;31m BORRAR TODOS LOS USUARIOS REGISTRADOS"
msg -bar
read -p " ►► Enter para Continuar o CTRL + C Cancelar ◄◄"
echo ""
for user in $(cat /etc/passwd | awk -F : '$3 > 900 {print $1}' | grep -v "rick" | grep -vi "nobody"); do
userdel --force $user
echo -e "\033[1;32mUSUARIO:\033[1;33m $user \033[1;31mEliminado"
done
rm -rf /etc/SCRIPT-LATAM/cuentassh &>/dev/null
rm -rf /etc/SCRIPT-LATAM/cuentahwid &>/dev/null
rm -rf /etc/SCRIPT-LATAM/cuentatoken &>/dev/null
service sshd restart &>/dev/null
service ssh restart &>/dev/null
service dropbear start &>/dev/null
service stunnel4 start &>/dev/null
service squid restart &>/dev/null
rm -rf /etc/SCRIPT-LATAM/temp/userlock &>/dev/null
rm -rf /etc/SCRIPT-LATAM/temp/Limiter.log &>/dev/null
unlockall2
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
reset_contador() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;33m REINICIAR CONTADOR DE BLOQUEOS"
msg -bar
echo -e "\033[1;97m !! Usar unicamente cuando en el apartado del contador\n marque alguna cantidad erronea. ¡¡"
echo ""
echo -e "\033[1;31m ## Cancelar Precione CTRL+C ## "
msg -bar
read -p " ►► Presione enter para continuar ◄◄"
rm -rf /etc/SCRIPT-LATAM/temp/userlock
rm -rf /etc/SCRIPT-LATAM/temp/Limiter.log
unlockall2
msg -bar
echo -e "\033[1;92m ¡¡CONTADORES REINICIADOS!!"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
droppids() {
local pids
local portasVAR=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
local NOREPEAT
local reQ
local Port
while read port; do
reQ=$(echo ${port} | awk '{print $1}')
Port=$(echo {$port} | awk '{print $9}' | awk -F ":" '{print $2}')
[[ $(echo -e $NOREPEAT | grep -w "$Port") ]] && continue
NOREPEAT+="$Port\n"
case ${reQ} in
dropbear)
[[ -z $DPB ]] && local DPB="\033[1;31m DROPBEAR: \033[1;32m"
DPB+="$Port "
;;
esac
done <<<"${portasVAR}"
[[ ! -z $DPB ]] && echo -e $DPB
local port_dropbear="$DPB"
#cat /var/log/auth.log|grep "$(date|cut -d' ' -f2,3)" > /var/log/authday.log
cat /var/log/auth.log | tail -1000 >/var/log/authday.log
local log=/var/log/authday.log
local loginsukses='Password auth succeeded'
[[ -z $port_dropbear ]] && return 1
for port in $(echo $port_dropbear); do
for pidx in $(ps ax | grep dropbear | grep "$port" | awk -F" " '{print $1}'); do
pids="${pids}$pidx\n"
done
done
for pid in $(echo -e "$pids"); do
pidlogs=$(grep $pid $log | grep "$loginsukses" | awk -F" " '{print $3}')
i=0
for pidend in $pidlogs; do
let i++
done
if [[ $pidend ]]; then
login=$(grep $pid $log | grep "$pidend" | grep "$loginsukses")
PID=$pid
user=$(echo $login | awk -F" " '{print $10}' | sed -r "s/'//g")
waktu=$(echo $login | awk -F" " '{print $2"-"$1,$3}')
[[ -z $user ]] && continue
echo "$user|$PID|$waktu"
fi
done
}
block_userfun() {
local USRloked="/etc/SCRIPT-LATAM/temp/userlock"
local LIMITERLOG="/etc/SCRIPT-LATAM/temp/Limiter.log"
local LIMITERLOG2="/etc/SCRIPT-LATAM/temp/Limiter2.log"
if [[ $2 = "-loked" ]]; then
[[ $(cat ${USRloked} | grep -w "$1") ]] && return 1
pkill -u $1 &>/dev/null
fi
if [[ $(cat ${USRloked} | grep -w "$1") ]]; then
usermod -U "$1" &>/dev/null
[[ -e ${USRloked} ]] && {
newbase=$(cat ${USRloked} | grep -w -v "$1")
[[ -e ${USRloked} ]] && rm ${USRloked}
for value in $(echo ${newbase}); do
echo $value >>${USRloked}
done
}
[[ -e ${LIMITERLOG} ]] && [[ $(cat ${LIMITERLOG} | grep -w "$1") ]] && {
newbase=$(cat ${LIMITERLOG} | grep -w -v "$1")
[[ -e ${LIMITERLOG} ]] && rm ${LIMITERLOG}
for value in $(echo ${newbase}); do
echo $value >>${LIMITERLOG}
echo $value >>${LIMITERLOG}
done
}
return 1
else
usermod -L "$1" &>/dev/null
pkill -u $1 &>/dev/null
# droplim=`droppids|grep -w "$1"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
droplim=$(dropbear_pids | grep -w "$1" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
echo $1 >>${USRloked}
return 0
fi
}
block_user() {
clear && clear
msg -bar
local USRloked="/etc/SCRIPT-LATAM/temp/userlock"
[[ ! -e ${USRloked} ]] && touch ${USRloked}
##-->>LECTOR DE CUENTAS
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
readarray -t usuarios_ativos1 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentassh)
readarray -t usuarios_ativosf2 < <(cut -d '|' -f2 /etc/SCRIPT-LATAM/cuentassh)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
readarray -t usuarios_ativos2 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentahwid)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
readarray -t usuarios_ativos3 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentatoken)
fi
##-->>GENERAR USUARIOS TOTALES
cat /etc/SCRIPT-LATAM/cuentassh /etc/SCRIPT-LATAM/cuentahwid /etc/SCRIPT-LATAM/cuentatoken 2>/dev/null | cut -d '|' -f1 >/etc/SCRIPT-LATAM/cuentasactivast
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
if [[ -z ${mostrar_totales[@]} ]]; then
msg -tit
msg -bar
msg -verm " BLOCK/UNBLOCK | Ningun Usuario Registrado"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
else
msg -tit
msg -bar
msg -ama " BLOCK/UNBLOCK | Usuarios Activos del Servidor"
#SSH
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
fi
Numb=0
for us in $(echo ${usuarios_ativos1[@]}); do
if [[ $(cat ${USRloked} | grep -w "${us}") ]]; then
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m >" && echo -e "\033[1;97m ${us} \033[1;31m[ Lock ]"
else
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m >" && echo -e "\033[1;97m ${us} \033[1;32m[ Unlock ]"
fi
let Numb++
done
#HWID
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON HWID \e[0m\e[38;5;239m════════════════"
fi
for us in $(echo ${usuarios_ativos2[@]}); do
if [[ $(cat ${USRloked} | grep -w "${us}") ]]; then
nomhwid="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${us}" | cut -d'|' -f5)"
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m >" && echo -e "\033[1;96m $nomhwid\n\033[1;97m ${us} \033[1;31m[ Lock ]"
else
nomhwid="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${us}" | cut -d'|' -f5)"
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m >" && echo -e "\033[1;96m $nomhwid\n\033[1;97m ${us} \033[1;32m[ Unlock ]"
fi
let Numb++
done
#TOKEN
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON TOKEN \e[0m\e[38;5;239m═══════════════"
fi
for us in $(echo ${usuarios_ativos3[@]}); do
if [[ $(cat ${USRloked} | grep -w "${us}") ]]; then
nomtoken="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${us}" | cut -d'|' -f5)"
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m >" && echo -e "\033[1;96m $nomtoken\n\033[1;97m ${us} \033[1;31m[ Lock ]"
else
nomtoken="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${us}" | cut -d'|' -f5)"
echo -ne "\e[1;93m [\e[1;32m$Numb\e[1;93m]\033[1;31m >" && echo -e "\033[1;96m $nomtoken\n\033[1;97m ${us} \033[1;32m[ Unlock ]"
fi
let Numb++
done
fi
msg -bar
echo -e "\e[1;97m Digite No de usuario a Bloquear/Desbloquear"
msg -bar
unset selection
while [[ ${selection} = "" ]]; do
echo -ne "\033[1;97m No. \e[1;32m" && read selection
tput cuu1 && tput dl1
done
if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then
usuario_del="${mostrar_totales[$selection]}"
else
usuario_del="$selection"
fi
[[ -z $usuario_del ]] && {
msg -verm "Error, Usuario Invalido"
msg -bar
return 1
}
[[ ! $(echo ${mostrar_totales[@]} | grep -w "$usuario_del") ]] && {
msg -verm "Error, Usuario Invalido"
msg -bar
return 1
}
msg -ne " " && echo -ne "\e[1;36m$usuario_del "
block_userfun "$usuario_del" && msg -verm "[ Bloqueado ]" || msg -verd "[ Desbloqueado ]"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
add_user() {
Fecha=$(date +%d-%m-%y-%R)
#nome senha Dias limite
[[ $(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 " +$3 days") && datexp=$(date "+%F" -d " + $3 days")
useradd -m -s /bin/false $1 -e ${valid} >/dev/null 2>&1 || return 1
(
echo $2
echo $2
) | passwd $1 2>/dev/null || {
userdel --force $1
return 1
}
echo "$1|$2|${datexp}|$4" >>/etc/SCRIPT-LATAM/cuentassh
echo "$1|$2|${datexp}|$4" >>/etc/SCRIPT-LATAM/regtotal
echo "" >/dev/null 2>&1
}
renew_user_fun() {
#USUARIO-DIAS
datexp=$(date "+%F" -d " + $2 days") && valid=$(date '+%C%y-%m-%d' -d " + $2 days")
chage -E $valid $1 2>/dev/null || return 1
sed -i '/'$1'/d' /etc/SCRIPT-LATAM/temp/userexp 2>/dev/null
##-->>LECTOR DE CUENTAS
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
readarray -t usuarios_ativos1 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentassh)
readarray -t usuarios_ativosf2 < <(cut -d '|' -f2 /etc/SCRIPT-LATAM/cuentassh)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
readarray -t usuarios_ativos2 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentahwid)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
readarray -t usuarios_ativos3 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentatoken)
fi
##-->>GENERAR USUARIOS TOTALES
cat /etc/SCRIPT-LATAM/cuentassh /etc/SCRIPT-LATAM/cuentahwid /etc/SCRIPT-LATAM/cuentatoken 2>/dev/null | cut -d '|' -f1 >/etc/SCRIPT-LATAM/cuentasactivast
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
#SSH
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
[[ $(grep -o -i $1 /etc/SCRIPT-LATAM/cuentassh) ]] && {
pass=$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "$1" | cut -d'|' -f2)
limit=$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "$1" | cut -d'|' -f4)
userb=$(cat /etc/SCRIPT-LATAM/cuentassh | grep -n -w $1 | cut -d'|' -f1 | cut -d':' -f1)
sed -i "${userb}d" /etc/SCRIPT-LATAM/cuentassh
echo "$1|$pass|${datexp}|$limit|$userb" >>/etc/SCRIPT-LATAM/cuentassh
}
fi
#HWID
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
[[ $(grep -o -i $1 /etc/SCRIPT-LATAM/cuentahwid) ]] && {
nomhwid="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "$1" | cut -d'|' -f5)"
sed -i '/'$1'/d' /etc/SCRIPT-LATAM/cuentahwid
echo "$1||${datexp}||$nomhwid" >>/etc/SCRIPT-LATAM/cuentahwid
}
fi
#TOKEN
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
[[ $(grep -o -i $1 /etc/SCRIPT-LATAM/cuentatoken) ]] && {
nomtoken="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "$1" | cut -d'|' -f5)"
sed -i '/'$1'/d' /etc/SCRIPT-LATAM/cuentatoken
echo "$1||${datexp}||$nomtoken" >>/etc/SCRIPT-LATAM/cuentatoken
}
fi
echo "" >/dev/null 2>&1
}
edit_user_fun() {
#nome senha dias limite
(
echo "$2"
echo "$2"
) | passwd $1 >/dev/null 2>&1 || return 1
datexp=$(date "+%F" -d " + $3 days") && valid=$(date '+%C%y-%m-%d' -d " + $3 days")
chage -E $valid $1 2>/dev/null || return 1
userb=$(cat /etc/SCRIPT-LATAM/cuentassh | grep -n -w $1 | cut -d'|' -f1 | cut -d':' -f1)
sed -i "${userb}d" /etc/SCRIPT-LATAM/cuentassh
echo "$1|$2|${datexp}|$4" >>/etc/SCRIPT-LATAM/cuentassh
}
rm_user() {
#nome
userdel --force "$1" &>/dev/null || return 1
echo "" >/dev/null 2>&1
}
mostrar_usuarios() {
for u in $(awk -F : '$3 > 900 { print $1 }' /etc/passwd | grep -v "nobody" | grep -vi polkitd | grep -vi system-); do
echo "$u"
done
}
dropbear_pids() {
local pids
local portasVAR=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
local NOREPEAT
local reQ
local Port
while read port; do
reQ=$(echo ${port} | awk '{print $1}')
Port=$(echo {$port} | awk '{print $9}' | awk -F ":" '{print $2}')
[[ $(echo -e $NOREPEAT | grep -w "$Port") ]] && continue
NOREPEAT+="$Port\n"
case ${reQ} in
dropbear)
[[ -z $DPB ]] && local DPB=""
DPB+="$Port "
;;
esac
done <<<"${portasVAR}"
[[ ! -z $DPB ]] && echo -e $DPB
#local port_dropbear="$DPB"
local port_dropbear=$(ps aux | grep dropbear | awk NR==1 | awk '{print $17;}')
cat /var/log/auth.log | grep -a -i dropbear | grep -a -i "Password auth succeeded" >/var/log/authday.log
#cat /var/log/auth.log|grep "$(date|cut -d' ' -f2,3)" > /var/log/authday.log
#cat /var/log/auth.log | tail -1000 >/var/log/authday.log
local log=/var/log/authday.log
local loginsukses='Password auth succeeded'
[[ -z $port_dropbear ]] && return 1
for port in $(echo $port_dropbear); do
for pidx in $(ps ax | grep dropbear | grep "$port" | awk -F" " '{print $1}'); do
pids="${pids}$pidx\n"
done
done
for pid in $(echo -e "$pids"); do
pidlogs=$(grep $pid $log | grep "$loginsukses" | awk -F" " '{print $3}')
i=0
for pidend in $pidlogs; do
let i++
done
if [[ $pidend ]]; then
login=$(grep $pid $log | grep "$pidend" | grep "$loginsukses")
PID=$pid
user=$(echo $login | awk -F" " '{print $10}' | sed -r "s/'//g")
waktu=$(echo $login | awk -F" " '{print $2"-"$1,$3}')
[[ -z $user ]] && continue
echo "$user|$PID|$waktu"
fi
done
}
openvpn_pids() {
#nome|#loguin|#rcv|#snd|#time
byte() {
while read B dummy; do
[[ "$B" -lt 1024 ]] && echo "${B} bytes" && break
KB=$(((B + 512) / 1024))
[[ "$KB" -lt 1024 ]] && echo "${KB} Kb" && break
MB=$(((KB + 512) / 1024))
[[ "$MB" -lt 1024 ]] && echo "${MB} Mb" && break
GB=$(((MB + 512) / 1024))
[[ "$GB" -lt 1024 ]] && echo "${GB} Gb" && break
echo $(((GB + 512) / 1024)) terabytes
done
}
for user in $(mostrar_usuarios); do
user="$(echo $user | sed -e 's/[^a-z0-9 -]//ig')"
[[ ! $(sed -n "/^${user},/p" /etc/openvpn/openvpn-status.log) ]] && continue
i=0
unset RECIVED
unset SEND
unset HOUR
while read line; do
IDLOCAL=$(echo ${line} | cut -d',' -f2)
RECIVED+="$(echo ${line} | cut -d',' -f3)+"
SEND+="$(echo ${line} | cut -d',' -f4)+"
DATESEC=$(date +%s --date="$(echo ${line} | cut -d',' -f5 | cut -d' ' -f1,2,3,4)")
TIMEON="$(($(date +%s) - ${DATESEC}))"
MIN=$(($TIMEON / 60)) && SEC=$(($TIMEON - $MIN * 60)) && HOR=$(($MIN / 60)) && MIN=$(($MIN - $HOR * 60))
HOUR+="${HOR}h:${MIN}m:${SEC}s\n"
let i++
done <<<"$(sed -n "/^${user},/p" /etc/openvpn/openvpn-status.log)"
RECIVED=$(echo $(echo ${RECIVED}0 | bc) | byte)
SEND=$(echo $(echo ${SEND}0 | bc) | byte)
HOUR=$(echo -e $HOUR | sort -n | tail -1)
echo -e "$user|$i|$RECIVED|$SEND|$HOUR"
done
}
err_fun() {
case $1 in
1)
msg -verm "Usuario Nulo - Regresando al Menu SSH"
sleep 3s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
2)
msg -verm "Usuario con nombre muy corto (5-15 Caracteres)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
3)
msg -verm "Usuario con nombre muy grande (5-15 Caracteres)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
4)
msg -verm "Contraseña Nula"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
5)
msg -verm "Contraseña muy corta (5-15 Caracteres)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
6)
msg -verm "Contraseña muy grande (5-15 Caracteres)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
7)
msg -verm "Duracion Nula"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
8)
msg -verm "Duracion invalida utilize numeros"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
9)
msg -verm "Duracion maxima y de un año"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
11)
msg -verm "Limite Nulo"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
12)
msg -verm "Limite invalido utilize numeros"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
13)
msg -verm "Limite maximo de 999"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
14)
msg -verm "Usuario Ya Existe"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
15)
msg -verm "HWID/Nombre Nulo (8-10 Caracteres)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
16)
msg -verm "HWID Ya Existe"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
17)
msg -verm "TOKEN/Nombre Nulo (8-10 Caracteres)"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
18)
msg -verm "TOKEN Ya Existe"
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
19)
msg -verm "User o Pass ya Ocupado reintente con Otro"
sleep 3s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
20)
msg -verm "No usar mismo user como pass y misma cantidad de caracteres "
sleep 2s
tput cuu1
tput dl1
tput cuu1
tput dl1
;;
esac
}
new_user() {
clear && clear
msg -bar
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
if [[ -z ${mostrar_totales[@]} ]]; then
msg -tit
msg -ama " AGREGAR USUARIO | Ningun Usuario Registrado"
msg -bar
else
msg -tit
msg -bar
msg -ama " AGREGAR USUARIO | Usuarios Activos en Servidor"
##-->>LECTOR DE CUENTAS
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
readarray -t usuarios_ativos1 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentassh)
readarray -t usuarios_ativosf2 < <(cut -d '|' -f2 /etc/SCRIPT-LATAM/cuentassh)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
readarray -t usuarios_ativos2 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentahwid)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
readarray -t usuarios_ativos3 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentatoken)
fi
##-->>GENERAR USUARIOS TOTALES
cat /etc/SCRIPT-LATAM/cuentassh /etc/SCRIPT-LATAM/cuentahwid /etc/SCRIPT-LATAM/cuentatoken 2>/dev/null | cut -d '|' -f1 >/etc/SCRIPT-LATAM/cuentasactivast
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
#SSH
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
fi
i=1
for us in $(echo ${usuarios_ativos1[@]}); do
echo -e " \e[1;32m$i\033[1;31m -\e[1;97m ${us}"
let i++
done
#HWID
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON HWID \e[0m\e[38;5;239m════════════════"
fi
i=1
for us in $(echo ${usuarios_ativos2[@]}); do
echo -e " \e[1;32m$i\033[1;31m -\e[1;97m ${us}"
let i++
done
#TOKEN
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON TOKEN \e[0m\e[38;5;239m═══════════════"
fi
i=1
for us in $(echo ${usuarios_ativos3[@]}); do
echo -e " \e[1;32m$i\033[1;31m -\e[1;97m ${us}"
let i++
done
fi
cuenta_normal() {
msg -bar
echo -e "\e[1;97m ----- CUENTA NORMAL ------"
msg -bar
while true; do
echo -ne "\e[1;93mDigite Nuevo Usuario: \e[1;32m" && read nomeuser
nomeuser="$(echo $nomeuser | sed -e 's/[^a-z0-9 -]//ig')"
if [[ -z $nomeuser ]]; then
err_fun 1 && controlador_ssh
elif [[ "${#nomeuser}" -lt "5" ]]; then
err_fun 2 && continue
elif [[ "${#nomeuser}" -gt "20" ]]; then
err_fun 3 && continue
elif [[ "$(echo ${usuarios_ativos1[@]} | grep -w "$nomeuser")" ]]; then
err_fun 14 && continue
elif [[ "$(echo ${usuarios_ativosf2[@]} | grep -w "$nomeuser")" ]]; then
err_fun 19 && continue
fi
break
done
while true; do
echo -ne "\e[1;93mDigite Nueva Contraseña: \e[1;32m" && read senhauser
if [[ -z $senhauser ]]; then
err_fun 4 && continue
elif [[ "${#senhauser}" -lt "5" ]]; then
err_fun 5 && continue
elif [[ "${#senhauser}" -gt "20" ]]; then
err_fun 6 && continue
elif [[ "${#senhauser}" -eq "${#nomeuser}" ]]; then
err_fun 20 && continue
elif [[ "$(echo ${usuarios_ativosf2[@]} | grep -w "$senhauser")" ]]; then
err_fun 19 && continue
fi
break
done
while true; do
echo -ne "\e[1;93mDigite Tiempo de Validez: \e[1;32m" && read diasuser
if [[ -z "$diasuser" ]]; then
err_fun 7 && continue
elif [[ "$diasuser" != +([0-9]) ]]; then
err_fun 8 && continue
elif [[ "$diasuser" -gt "360" ]]; then
err_fun 9 && continue
fi
break
done
while true; do
echo -ne "\e[1;93mDigite conexiones maximas: \e[1;32m" && read limiteuser
if [[ -z "$limiteuser" ]]; then
err_fun 11 && continue
elif [[ "$limiteuser" != +([0-9]) ]]; then
err_fun 12 && continue
elif [[ "$limiteuser" -gt "999" ]]; then
err_fun 13 && continue
fi
break
done
tput cuu1 && tput dl1
tput cuu1 && tput dl1
tput cuu1 && tput dl1
tput cuu1 && tput dl1
echo -ne "\e[38;5;202mIP del Servidor \e[1;97m" && echo -e "$(meu_ip)"
echo -ne "\e[38;5;202mUsuario: \e[1;97m" && echo -e "$nomeuser"
echo -ne "\e[38;5;202mContraseña: \e[1;97m" && echo -e "$senhauser"
echo -ne "\e[38;5;202mDias de Duracion: \e[1;97m" && echo -e "$diasuser"
echo -ne "\e[38;5;202mFecha de Expiracion: \e[1;97m" && echo -e "$(date "+%F" -d " + $diasuser days")"
echo -ne "\e[38;5;202mLimite de Conexiones: \e[1;97m" && echo -e "$limiteuser"
msg -bar
add_user "${nomeuser}" "${senhauser}" "${diasuser}" "${limiteuser}" && echo -e "\e[1;32m Usuario Creado con Exito" || msg -verm " Error, Usuario no creado" && msg -bar
[[ $(dpkg --get-selections | grep -w "openvpn" | head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && newclient "$nomeuser" "$senhauser"
rebootnb "backbaseu" 2>/dev/null
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
#####-----CUENTA HWID
cuenta_hwid() {
msg -bar
echo -e "\e[1;97m ----- CUENTA HWID ------"
msg -bar
while true; do
echo -ne "\e[1;93mDigite HWID: \e[1;32m" && read nomeuser
nomeuser="$(echo $nomeuser | sed -e 's/[^a-z0-9 -]//ig')"
if [[ -z $nomeuser ]]; then
err_fun 15 && controlador_ssh
elif [[ "${#nomeuser}" -lt "5" ]]; then
err_fun 15 && continue
elif [[ "${#nomeuser}" -gt "32" ]]; then
err_fun 15 && continue
elif [[ "$(echo ${usuarios_ativos2[@]} | grep -w "$nomeuser")" ]]; then
err_fun 16 && continue
fi
break
done
while true; do
echo -ne "\e[1;93mDigite Nombre: \e[1;32m" && read nickhwid
nickhwid="$(echo $nickhwid | sed -e 's/[^a-z0-9 -]//ig')"
if [[ -z $nickhwid ]]; then
err_fun 15 && continue
elif [[ "${#nickhwid}" -lt "5" ]]; then
err_fun 15 && continue
elif [[ "${#nickhwid}" -gt "15" ]]; then
err_fun 15 && continue
elif [[ "$(echo ${usuarios_ativos2[@]} | grep -w "$nickhwid")" ]]; then
err_fun 16 && continue
fi
break
done
while true; do
echo -ne "\e[1;93mDigite Tiempo de Validez: \e[1;32m" && read diasuser
if [[ -z "$diasuser" ]]; then
err_fun 7 && continue
elif [[ "$diasuser" != +([0-9]) ]]; then
err_fun 8 && continue
elif [[ "$diasuser" -gt "360" ]]; then
err_fun 9 && continue
fi
break
done
tput cuu1 && tput dl1
tput cuu1 && tput dl1
echo -ne "\e[38;5;202mIP del Servidor \e[1;97m" && echo -e "$(meu_ip)"
echo -ne "\e[38;5;202mHWID: \e[1;97m" && echo -e "$nomeuser"
echo -ne "\e[38;5;202mUsuario: \e[1;97m" && echo -e "$nickhwid"
echo -ne "\e[38;5;202mDias de Duracion: \e[1;97m" && echo -e "$diasuser"
echo -ne "\e[38;5;202mFecha de Expiracion: \e[1;97m" && echo -e "$(date "+%F" -d " + $diasuser days")"
msg -bar
[[ $(cat /etc/passwd | grep $nomeuser: | grep -vi [a-z]$nomeuser | grep -v [0-9]$nomeuser >/dev/null) ]] && {
msg -verm " Error, Usuario no creado"
return 0
}
valid=$(date '+%C%y-%m-%d' -d " +$diasuser days") && datexp=$(date "+%F" -d " + $diasuser days")
userdel $nomeuser >/dev/null 2>&1
useradd -m -s /bin/false $nomeuser -e ${valid} >/dev/null 2>&1 || {
msg -verm " Error, Usuario no creado"
return 0
}
(
echo $nomeuser
echo $nomeuser
) | passwd $nomeuser 2>/dev/null || {
userdel --force $nomeuser
return 1
}
echo "$nomeuser||${datexp}||${nickhwid}" >>/etc/SCRIPT-LATAM/cuentahwid
echo "$nomeuser||${datexp}||${nickhwid}" >>/etc/SCRIPT-LATAM/regtotal
msg -ama "\e[1;32m Usuario Creado con Exito"
msg -bar
rebootnb "backbaseu" 2>/dev/null
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
#####-----CUENTA TOKEN
cuenta_token() {
msg -bar
echo -e "\e[1;97m ----- CUENTA TOKEN ------"
msg -bar
passgeneral() {
echo -ne "\e[1;93mDIGITE SU TOKEN GENERAL:\e[1;32m " && read passgeneral
echo "$passgeneral" >/etc/SCRIPT-LATAM/temp/.passw
msg -bar
}
[[ -e "/etc/SCRIPT-LATAM/temp/.passw" ]] || passgeneral
while true; do
echo -ne "\e[1;93mDigite TOKEN: \e[1;32m" && read nomeuser
nomeuser="$(echo $nomeuser | sed -e 's/[^a-z0-9 -]//ig')"
if [[ -z $nomeuser ]]; then
err_fun 17 && controlador_ssh
elif [[ "${#nomeuser}" -lt "4" ]]; then
err_fun 17 && continue
elif [[ "${#nomeuser}" -gt "32" ]]; then
err_fun 17 && continue
elif [[ "$(echo ${usuarios_ativos3[@]} | grep -w "$nomeuser")" ]]; then
err_fun 18 && continue
fi
break
done
while true; do
echo -ne "\e[1;93mDigite Nombre: \e[1;32m" && read nickhwid
nickhwid="$(echo $nickhwid | sed -e 's/[^a-z0-9 -]//ig')"
if [[ -z $nickhwid ]]; then
err_fun 15 && continue
elif [[ "${#nickhwid}" -lt "5" ]]; then
err_fun 15 && continue
elif [[ "${#nickhwid}" -gt "15" ]]; then
err_fun 15 && continue
elif [[ "$(echo ${usuarios_ativos2[@]} | grep -w "$nickhwid")" ]]; then
err_fun 16 && continue
fi
break
done
while true; do
echo -ne "\e[1;93mDigite Tiempo de Validez: \e[1;32m" && read diasuser
if [[ -z "$diasuser" ]]; then
err_fun 7 && continue
elif [[ "$diasuser" != +([0-9]) ]]; then
err_fun 8 && continue
elif [[ "$diasuser" -gt "360" ]]; then
err_fun 9 && continue
fi
break
done
tput cuu1 && tput dl1
tput cuu1 && tput dl1
echo -ne "\e[38;5;202mIP del Servidor \e[1;97m" && echo -e "$(meu_ip)"
echo -ne "\e[38;5;202mToken: \e[1;97m" && echo -e "$nomeuser"
echo -ne "\e[38;5;202mUsuario: \e[1;97m" && echo -e "$nickhwid"
echo -ne "\e[38;5;202mDias de Duracion: \e[1;97m" && echo -e "$diasuser"
echo -ne "\e[38;5;202mFecha de Expiracion: \e[1;97m" && echo -e "$(date "+%F" -d " + $diasuser days")"
msg -bar
passtoken=$(cat /etc/SCRIPT-LATAM/temp/.passw | tr -d " \t\n\r")
[[ $(cat /etc/passwd | grep $nomeuser: | grep -vi [a-z]$nomeuser | grep -v [0-9]$nomeuser >/dev/null) ]] && {
msg -verm " Error, Usuario no creado"
return 0
}
valid=$(date '+%C%y-%m-%d' -d " +$diasuser days") && datexp=$(date "+%F" -d " + $diasuser days")
useradd -m -s /bin/false $nomeuser -e ${valid} >/dev/null 2>&1 || {
msg -verm " Error, Usuario no creado"
return 0
}
(
echo $passtoken
echo $passtoken
) | passwd $nomeuser 2>/dev/null || {
userdel --force $nomeuser
return 1
}
echo "$nomeuser||${datexp}||${nickhwid}" >>/etc/SCRIPT-LATAM/cuentatoken
echo "$nomeuser||${datexp}||${nickhwid}" >>/etc/SCRIPT-LATAM/regtotal
msg -ama "\e[1;32m Usuario Creado con Exito"
rebootnb "backbaseu" 2>/dev/null
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
msg -bar
echo -e "\033[1;36m -- Seleccione primero Tipo de Cuenta --"
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;93m NORMAL \e[97m "
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;93m HWID\e[97m "
echo -ne " \e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \033[1;93m TOKEN\e[97m \n"
msg -bar
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;97m"
msg -bar
echo -ne "\033[1;97m └⊳ Seleccione una Opcion [1-3]: \e[1;32m"
read opcao
case $opcao in
1)
cuenta_normal
;;
2)
cuenta_hwid
;;
3)
cuenta_token
;;
0)
controlador_ssh
;;
*)
msg -bar
controlador_ssh
;;
esac
}
remove_user() {
clear && clear
msg -bar
##-->>LECTOR DE CUENTAS
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
readarray -t usuarios_ativos1 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentassh)
readarray -t usuarios_ativosf2 < <(cut -d '|' -f2 /etc/SCRIPT-LATAM/cuentassh)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
readarray -t usuarios_ativos2 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentahwid)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
readarray -t usuarios_ativos3 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentatoken)
fi
##-->>GENERAR USUARIOS TOTALES
cat /etc/SCRIPT-LATAM/cuentassh /etc/SCRIPT-LATAM/cuentahwid /etc/SCRIPT-LATAM/cuentatoken 2>/dev/null | cut -d '|' -f1 >/etc/SCRIPT-LATAM/cuentasactivast
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
if [[ -z ${mostrar_totales[@]} ]]; then
msg -tit
msg -bar
msg -verm " BORAR USUARIO | Ningun usuario registrado "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
else
msg -tit
msg -bar
msg -ama " BORAR USUARIO | Usuarios Activos del Servidor"
#SSH
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
fi
i=0
for us in $(echo ${usuarios_ativos1[@]}); do
msg -ne "\e[1;93m [\e[1;32m$i\e[1;93m]\033[1;31m >" && echo -e "\e[1;97m ${us}"
let i++
done
#HWID
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON HWID \e[0m\e[38;5;239m════════════════"
fi
for us in $(echo ${usuarios_ativos2[@]}); do
nomhwid="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${us}" | cut -d'|' -f5)"
msg -ne "\e[1;93m [\e[1;32m$i\e[1;93m]\033[1;31m >" && echo -e "\e[1;97m ${us} \e[1;93m| \e[1;96m$nomhwid"
let i++
done
#TOKEN
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON TOKEN \e[0m\e[38;5;239m═══════════════"
fi
for us in $(echo ${usuarios_ativos3[@]}); do
nomtoken="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${us}" | cut -d'|' -f5)"
msg -ne "\e[1;93m [\e[1;32m$i\e[1;93m]\033[1;31m >" && echo -e "\e[1;97m ${us} \e[1;93m| \e[1;96m$nomtoken"
let i++
done
fi
msg -bar
echo -e "\e[1;97m Escriba o Seleccione un Usuario"
msg -bar
unset selection
while [[ -z ${selection} ]]; do
echo -ne "\033[1;37mSeleccione Una Opcion: \e[1;32m" && read selection
tput cuu1 && tput dl1
done
if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then
usuario_del="${mostrar_totales[$selection]}"
else
usuario_del="$selection"
fi
[[ -z $usuario_del ]] && {
msg -verm "Error, Usuario Invalido"
msg -bar
return 1
}
[[ ! $(echo ${mostrar_totales[@]} | grep -w "$usuario_del") ]] && {
msg -verm "error, Usuario Invalido"
msg -bar
return 1
}
msg -ne "Usuario Seleccionado: " && echo -ne "$usuario_del"
pkill -u $usuario_del
droplim=$(dropbear_pids | grep -w "$usuario_del" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
rm_user "$usuario_del" && msg -verd " [ Removido ]" || msg -verm " [ No Removido ]"
#SSH
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
[[ $(grep -o -i $usuario_del /etc/SCRIPT-LATAM/cuentassh) ]] && {
userb=$(cat /etc/SCRIPT-LATAM/cuentassh | grep -n -w $usuario_del | cut -d'|' -f1 | cut -d':' -f1)
sed -i "${userb}d" /etc/SCRIPT-LATAM/cuentassh >/dev/null 2>&1
}
fi
#HWID
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
[[ $(grep -o -i $usuario_del /etc/SCRIPT-LATAM/cuentahwid) ]] && {
sed -i '/'$usuario_del'/d' /etc/SCRIPT-LATAM/cuentahwid >/dev/null 2>&1
}
fi
#TOKEN
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
[[ $(grep -o -i $usuario_del /etc/SCRIPT-LATAM/cuentatoken) ]] && {
sed -i '/'$usuario_del'/d' /etc/SCRIPT-LATAM/cuentatoken >/dev/null 2>&1
}
fi
rm -rf /etc/SCRIPT-LATAM/temp/userlock
rm -rf /etc/SCRIPT-LATAM/temp/Limiter.log
unlockall2
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
renew_user() {
clear && clear
msg -bar
##-->>LECTOR DE CUENTAS
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
readarray -t usuarios_ativos1 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentassh)
readarray -t usuarios_ativosf2 < <(cut -d '|' -f2 /etc/SCRIPT-LATAM/cuentassh)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
readarray -t usuarios_ativos2 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentahwid)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
readarray -t usuarios_ativos3 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentatoken)
fi
##-->>GENERAR USUARIOS TOTALES
cat /etc/SCRIPT-LATAM/cuentassh /etc/SCRIPT-LATAM/cuentahwid /etc/SCRIPT-LATAM/cuentatoken 2>/dev/null | cut -d '|' -f1 >/etc/SCRIPT-LATAM/cuentasactivast
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
if [[ -z ${mostrar_totales[@]} ]]; then
msg -tit
msg -bar
msg -verm " RENOVAR USUARIO | Ningun usuario registrado "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
else
msg -tit
msg -bar
msg -ama " RENOVAR USUARIO | Usuarios Activos en el Servidor"
#SSH
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
fi
i=0
for us in $(echo ${usuarios_ativos1[@]}); do
VPSsec=$(date +%s)
DateExp="$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${us}" | cut -d'|' -f3)"
DataSec=$(date +%s --date="$DateExp")
if [[ "$VPSsec" -gt "$DataSec" ]]; then
EXPTIME="${red}[Exp]"
else
EXPTIME="${gren}[$(($(($DataSec - $VPSsec)) / 86400))]"
fi
msg -ne "\e[1;93m [\e[1;32m$i\e[1;93m]\033[1;31m >" && echo -e "\033[1;97m ${us} \e[1;93m| ${EXPTIME}"
let i++
done
#HWID
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON HWID \e[0m\e[38;5;239m════════════════"
fi
for us in $(echo ${usuarios_ativos2[@]}); do
VPSsec=$(date +%s)
DateExp="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${us}" | cut -d'|' -f3)"
DataSec=$(date +%s --date="$DateExp")
if [[ "$VPSsec" -gt "$DataSec" ]]; then
EXPTIME="${red}[Exp]"
else
EXPTIME="${gren}[$(($(($DataSec - $VPSsec)) / 86400))]"
fi
nomhwid="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${us}" | cut -d'|' -f5)"
msg -ne "\e[1;93m [\e[1;32m$i\e[1;93m]\033[1;31m >" && echo -e "\033[1;97m ${us} \e[1;93m| \033[1;96m${nomhwid} \e[1;93m| ${EXPTIME}"
let i++
done
#TOKEN
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON TOKEN \e[0m\e[38;5;239m═══════════════"
fi
for us in $(echo ${usuarios_ativos3[@]}); do
VPSsec=$(date +%s)
DateExp="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${us}" | cut -d'|' -f3)"
DataSec=$(date +%s --date="$DateExp")
if [[ "$VPSsec" -gt "$DataSec" ]]; then
EXPTIME="${red}[Exp]"
else
EXPTIME="${gren}[$(($(($DataSec - $VPSsec)) / 86400))]"
fi
nomtoken="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${us}" | cut -d'|' -f5)"
msg -ne "\e[1;93m [\e[1;32m$i\e[1;93m]\033[1;31m >" && echo -e "\033[1;97m ${us} \e[1;93m| \033[1;96m${nomtoken} \e[1;93m| ${EXPTIME}"
let i++
done
fi
msg -bar
echo -e "\e[1;97m Escriba o seleccione un Usuario"
msg -bar
unset selection
while [[ -z ${selection} ]]; do
echo -ne "\033[1;37mSeleccione una Opcion: \e[1;32m" && read selection
tput cuu1
tput dl1
done
if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then
useredit="${mostrar_totales[$selection]}"
else
useredit="$selection"
fi
[[ -z $useredit ]] && {
msg -verm "Error, Usuario Invalido"
msg -bar
return 1
}
[[ ! $(echo ${mostrar_totales[@]} | grep -w "$useredit") ]] && {
msg -verm "Error, Usuario Invalido"
msg -bar
return 1
}
while true; do
echo -ne "\e[1;97m Nueva Duracion\033[1;33m [\033[1;32m $useredit \033[1;33m]\033[1;97m: " && read diasuser
if [[ -z "$diasuser" ]]; then
echo -e '\n\n\n'
err_fun 7 && continue
elif [[ "$diasuser" != +([0-9]) ]]; then
echo -e '\n\n\n'
err_fun 8 && continue
elif [[ "$diasuser" -gt "360" ]]; then
echo -e '\n\n\n'
err_fun 9 && continue
fi
break
done
msg -bar
renew_user_fun "${useredit}" "${diasuser}" && echo -e "\e[1;32m Usuario Renovado Con Exito" || msg -verm "Error, Usuario no Modificado"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
edit_user() {
clear && clear
msg -bar
##-->>LECTOR DE CUENTAS
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
readarray -t usuarios_ativos1 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentassh)
readarray -t usuarios_ativosf2 < <(cut -d '|' -f2 /etc/SCRIPT-LATAM/cuentassh)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
readarray -t usuarios_ativos2 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentahwid)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
readarray -t usuarios_ativos3 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentatoken)
fi
##-->>GENERAR USUARIOS TOTALES
cat /etc/SCRIPT-LATAM/cuentassh /etc/SCRIPT-LATAM/cuentahwid /etc/SCRIPT-LATAM/cuentatoken 2>/dev/null | cut -d '|' -f1 >/etc/SCRIPT-LATAM/cuentasactivast
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
if [[ -z ${mostrar_totales[@]} ]]; then
msg -tit
msg -bar
msg -verm " EDITAR USUARIO | Ningun usuario registrado "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
else
msg -tit
msg -bar
msg -ama " EDITAR USER | Usuarios Activos del Servidor"
msg -bar
i=0
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
fi
for us in $(echo ${usuarios_ativos1[@]}); do
msg -ne "\e[1;93m [\e[1;32m$i\e[1;93m]\033[1;31m >" && echo -e "\033[1;33m ${us}"
let i++
done
msg -bar
fi
echo -e "\e[1;97m Seleccione No. del Usuario a Editar"
msg -bar
unset selection
while [[ -z ${selection} ]]; do
echo -ne "\033[1;37m No. " && read selection
tput cuu1
tput dl1
done
if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then
useredit="${mostrar_totales[$selection]}"
else
useredit="$selection"
fi
[[ -z $useredit ]] && {
msg -verm "Error, Usuario Invalido"
msg -bar
return 1
}
[[ ! $(echo ${mostrar_totales[@]} | grep -w "$useredit") ]] && {
msg -verm "Error, Usuario Invalido"
msg -bar
return 1
}
while true; do
echo -ne "\e[1;97m Usuario Seleccionado: " && echo -e "\e[1;32m [ $useredit ]"
echo -ne "\e[1;97m Nueva Contraseña de: \e[1;36m" && read senhauser
if [[ -z "$senhauser" ]]; then
err_fun 4 && continue
elif [[ "${#senhauser}" -lt "6" ]]; then
err_fun 5 && continue
elif [[ "${#senhauser}" -gt "20" ]]; then
err_fun 6 && continue
fi
break
done
while true; do
echo -ne "\e[1;97m Dias de Duracion de: \e[1;36m" && read diasuser
if [[ -z "$diasuser" ]]; then
err_fun 7 && continue
elif [[ "$diasuser" != +([0-9]) ]]; then
err_fun 8 && continue
elif [[ "$diasuser" -gt "360" ]]; then
err_fun 9 && continue
fi
break
done
while true; do
echo -ne "\e[1;97m Nuevo Limite de Conexion de: \e[1;36m" && read limiteuser
if [[ -z "$limiteuser" ]]; then
err_fun 11 && continue
elif [[ "$limiteuser" != +([0-9]) ]]; then
err_fun 12 && continue
elif [[ "$limiteuser" -gt "999" ]]; then
err_fun 13 && continue
fi
break
done
tput cuu1 && tput dl1
tput cuu1 && tput dl1
tput cuu1 && tput dl1
tput cuu1 && tput dl1
msg -ne "\e[38;5;202m Usuario: " && echo -e "$useredit"
msg -ne "\e[38;5;202m Contraseña: " && echo -e "$senhauser"
msg -ne "\e[38;5;202m Dias de Duracion: " && echo -e "$diasuser"
msg -ne "\e[38;5;202m Fecha de Expiracion: " && echo -e "$(date "+%F" -d " + $diasuser days")"
msg -ne "\e[38;5;202m Limite de Conexiones: " && echo -e "$limiteuser"
msg -bar
edit_user_fun "${useredit}" "${senhauser}" "${diasuser}" "${limiteuser}" && echo -e "\e[1;32m Usuario Modificado Con Exito" && rm -rf /etc/SCRIPT-LATAM/temp/Limiter.log || msg -verm "Error, Usuario nao Modificado"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
detail_user() {
clear && clear
##-->>LECTOR DE CUENTAS
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
readarray -t usuarios_ativos1 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentassh)
readarray -t usuarios_ativosf2 < <(cut -d '|' -f2 /etc/SCRIPT-LATAM/cuentassh)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
readarray -t usuarios_ativos2 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentahwid)
fi
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
readarray -t usuarios_ativos3 < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentatoken)
fi
##-->>GENERAR USUARIOS TOTALES
cat /etc/SCRIPT-LATAM/cuentassh /etc/SCRIPT-LATAM/cuentahwid /etc/SCRIPT-LATAM/cuentatoken 2>/dev/null | cut -d '|' -f1 >/etc/SCRIPT-LATAM/cuentasactivast
if [[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]]; then
readarray -t mostrar_totales < <(cut -d '|' -f1 /etc/SCRIPT-LATAM/cuentasactivast)
fi
if [[ -z ${mostrar_totales[@]} ]]; then
msg -bar
msg -tit
msg -bar
msg -verm " DETALLES USUARIO | Ningun usuario registrado "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
else
msg -bar
msg -tit
msg -bar
msg -ama " INFORMACION DE USUARIOS REGISTRADOS "
msg -bar
red=$(tput setaf 1)
gren=$(tput setaf 2)
yellow=$(tput setaf 3)
txtvar=$(printf '%-23s' "\e[1;97mUSUARIO")
txtvar+=$(printf '%-31s' "\e[1;33mCONTRASEÑA")
txtvar+=$(printf '%-17s' "\e[1;31mFECHA")
txtvar+=$(printf '%-15s' "\e[1;36mLIMITE")
echo -e "\033[1;33m${txtvar}"
VPSsec=$(date +%s)
#CUENTAS SSH
mostrar_usuariosssh() {
for u in $(cat /etc/SCRIPT-LATAM/cuentassh | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentassh" ]] && usuarios_ativos1=($(mostrar_usuariosssh))
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
while read user; do
data_user=$(chage -l "$user" | grep -i co | awk -F ":" '{print $2}')
txtvar=$(printf '%-25s' "\e[1;97m$user")
if [[ -e "/etc/SCRIPT-LATAM/cuentassh" ]]; then
if [[ $(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${user}") ]]; then
txtvar+="$(printf '%-22s' "${yellow}$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${user}" | cut -d'|' -f2)")"
DateExp="$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${user}" | cut -d'|' -f3)"
DataSec=$(date +%s --date="$DateExp")
if [[ "$VPSsec" -gt "$DataSec" ]]; then
EXPTIME="${red}[Exp]"
else
EXPTIME="${gren}[$(($(($DataSec - $VPSsec)) / 86400))]"
fi
txtvar+="$(printf '%-25s' "${red}${DateExp}${EXPTIME}")"
txtvar+="$(printf '%-1s' "\e[1;36m$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${user}" | cut -d'|' -f4)")"
else
txtvar+="$(printf '%-21s' "${red}")"
txtvar+="$(printf '%-29s' "${red}")"
txtvar+="$(printf '%-5s' "${red}")"
fi
fi
echo -e "$txtvar"
done <<<"$(mostrar_usuariosssh)"
fi
#--- CUENTAS HWDI
mostrar_usuarioshwid() {
for u in $(cat /etc/SCRIPT-LATAM/cuentahwid | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]] && usuarios_ativos2=($(mostrar_usuarioshwid))
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON HWID \e[0m\e[38;5;239m════════════════"
while read user; do
data_user=$(chage -l "$user" | grep -i co | awk -F ":" '{print $2}')
txtvar=$(printf '%-42s' "\e[1;97m$user")
nomhwid="$(printf '%-18s' "\e[1;36m$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${user}" | cut -d'|' -f5)")"
if [[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]]; then
if [[ $(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${user}") ]]; then
#txtvar+="$(printf '%-18s' "${yellow}$(cat ${USRdatabase} | grep -w "${user}" | cut -d'|' -f2)")"
DateExp="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${user}" | cut -d'|' -f3)"
DataSec=$(date +%s --date="$DateExp")
if [[ "$VPSsec" -gt "$DataSec" ]]; then
EXPTIME="${red}[Exp]"
else
EXPTIME="${gren}[$(($(($DataSec - $VPSsec)) / 86400))]"
fi
txtvar+="$(printf '%-25s' "${red}${DateExp}${EXPTIME}")"
txtvar+="$(printf '%-1s' "\e[1;36m$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${user}" | cut -d'|' -f4)")"
else
txtvar+="$(printf '%-21s' "${red}")"
txtvar+="$(printf '%-29s' "${red}")"
txtvar+="$(printf '%-5s' "${red}")"
fi
fi
echo -e "$nomhwid\n$txtvar"
done <<<"$(mostrar_usuarioshwid)"
fi
#--- CUENTAS TOKEN
mostrar_usuariotoken() {
for u in $(cat /etc/SCRIPT-LATAM/cuentatoken | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]] && usuarios_ativos3=($(mostrar_usuariotoken))
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON TOKEN \e[0m\e[38;5;239m═══════════════"
while read user; do
data_user=$(chage -l "$user" | grep -i co | awk -F ":" '{print $2}')
txtvar=$(printf '%-32s' "\e[1;97m$user")
if [[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]]; then
if [[ $(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${user}") ]]; then
#txtvar+="$(printf '%-18s' "${yellow}$(cat ${USRdatabase} | grep -w "${user}" | cut -d'|' -f2)")"
txtvar+="$(printf '%-18s' "\e[1;36m$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${user}" | cut -d'|' -f5)")"
DateExp="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${user}" | cut -d'|' -f3)"
DataSec=$(date +%s --date="$DateExp")
if [[ "$VPSsec" -gt "$DataSec" ]]; then
EXPTIME="${red}[Exp]"
else
EXPTIME="${gren}[$(($(($DataSec - $VPSsec)) / 86400))]"
fi
txtvar+="$(printf '%-25s' "${red}${DateExp}${EXPTIME}")"
txtvar+="$(printf '%-1s' "\e[1;36m$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${user}" | cut -d'|' -f4)")"
else
txtvar+="$(printf '%-21s' "${red}")"
txtvar+="$(printf '%-29s' "${red}")"
txtvar+="$(printf '%-5s' "${red}")"
fi
fi
echo -e "$txtvar"
done <<<"$(mostrar_usuariotoken)"
fi
fi
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
mostrar_usuariossh() {
for u in $(cat /etc/SCRIPT-LATAM/cuentassh | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariohwid() {
for u in $(cat /etc/SCRIPT-LATAM/cuentahwid | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariotoken() {
for u in $(cat /etc/SCRIPT-LATAM/cuentatoken | cut -d'|' -f1); do
echo "$u"
done
}
#MONITOR DE USER
monit_user() {
clear && clear
mostrar_usuariossh() {
for u in $(cat /etc/SCRIPT-LATAM/cuentassh | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariohwid() {
for u in $(cat /etc/SCRIPT-LATAM/cuentahwid | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariotoken() {
for u in $(cat /etc/SCRIPT-LATAM/cuentatoken | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentassh" ]] && usuarios_ativos1=($(mostrar_usuariossh))
[[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]] && usuarios_ativos2=($(mostrar_usuariohwid))
[[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]] && usuarios_ativos3=($(mostrar_usuariotoken))
for us in $(echo ${usuarios_ativos1[@]}); do
echo "${us}"
done >/etc/SCRIPT-LATAM/cuentasactivast
for us in $(echo ${usuarios_ativos2[@]}); do
echo "${us}"
done >>/etc/SCRIPT-LATAM/cuentasactivast
for us in $(echo ${usuarios_ativos3[@]}); do
echo "${us}"
done >>/etc/SCRIPT-LATAM/cuentasactivast
mostrar_totales() {
for u in $(cat /etc/SCRIPT-LATAM/cuentasactivast | cut -d'|' -f1); do
echo "$u"
done
}
usuarios_totales=($(mostrar_totales))
if [[ -z ${usuarios_totales[@]} ]]; then
msg -bar
msg -tit
msg -bar
msg -verm " MONITOR | Ningun usuario registrado "
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
else
msg -bar
msg -tit
msg -bar
yellow=$(tput setaf 3)
gren=$(tput setaf 2)
echo -e "\e[93m MONITOR DE CONEXIONES SSH/DROPBEAR/SSL/OPENVPN"
msg -bar
txtvar=$(printf '%-46s' "\e[1;97m USUARIO")
txtvar+=$(printf '%-10s' "\e[1;93m CONEXIONES")
#txtvar+=$(printf '%-16s' "TIME/ON")
echo -e "\033[1;92m${txtvar}"
#SSH
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
while read user; do
_=$(
PID="0+"
[[ $(dpkg --get-selections | grep -w "openssh" | head -1) ]] && PID+="$(ps aux | grep -v grep | grep sshd | grep -w "$user" | grep -v root | wc -l)+"
[[ $(dpkg --get-selections | grep -w "dropbear" | head -1) ]] && PID+="$(dropbear_pids | grep -w "${user}" | wc -l)+"
[[ $(dpkg --get-selections | grep -w "openvpn" | head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && [[ $(openvpn_pids | grep -w "$user" | cut -d'|' -f2) ]] && PID+="$(openvpn_pids | grep -w "$user" | cut -d'|' -f2)+"
PID+="0"
[[ -z $(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${user}") ]] && MAXUSER="?" || MAXUSER="$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${user}" | cut -d'|' -f4)"
[[ $(echo $PID | bc) -gt 0 ]] && user="$user \e[1;93m[\033[1;32m ON \e[1;93m]" || user="$user \e[1;93m[\033[1;31m OFF \e[1;93m]"
TOTALPID="$(echo $PID | bc)/$MAXUSER"
while [[ ${#user} -lt 67 ]]; do
user=$user" "
done
echo -e "\e[1;97m $user $TOTALPID " >&2
) &
pid=$!
sleep 0.5
done <<<"$(mostrar_usuariossh)"
while [[ -d /proc/$pid ]]; do
sleep 1s
done
fi
#HWID
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON HWID \e[0m\e[38;5;239m════════════════"
while read user; do
_=$(
PID="0+"
[[ $(dpkg --get-selections | grep -w "openssh" | head -1) ]] && PID+="$(ps aux | grep -v grep | grep sshd | grep -w "$user" | grep -v root | wc -l)+"
[[ $(dpkg --get-selections | grep -w "dropbear" | head -1) ]] && PID+="$(dropbear_pids | grep -w "${user}" | wc -l)+"
[[ $(dpkg --get-selections | grep -w "openvpn" | head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && [[ $(openvpn_pids | grep -w "$user" | cut -d'|' -f2) ]] && PID+="$(openvpn_pids | grep -w "$user" | cut -d'|' -f2)+"
PID+="0"
nomhwid="\e[1;96m$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${user}" | cut -d'|' -f5)"
[[ -z $(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${user}") ]] && MAXUSER="?" || MAXUSER="$(cat /etc/SCRIPT-LATAM/cuentahwid | grep -w "${user}" | cut -d'|' -f4)"
[[ $(echo $PID | bc) -gt 0 ]] && user="$user \e[1;93m[\033[1;32m ON \e[1;93m]" || user="$user \e[1;93m[\033[1;31m OFF \e[1;93m]"
TOTALPID="$(echo $PID | bc)"
while [[ ${#user} -lt 69 ]]; do
user=$user" "
done
echo -e "$nomhwid\e[1;97m\n$user $TOTALPID " >&2
) &
pid=$!
sleep 0.5s
done <<<"$(mostrar_usuariohwid)"
while [[ -d /proc/$pid ]]; do
sleep 1s
done
fi
#TOKEN
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS CON TOKEN \e[0m\e[38;5;239m═══════════════"
while read user; do
_=$(
PID="0+"
[[ $(dpkg --get-selections | grep -w "openssh" | head -1) ]] && PID+="$(ps aux | grep -v grep | grep sshd | grep -w "$user" | grep -v root | wc -l)+"
[[ $(dpkg --get-selections | grep -w "dropbear" | head -1) ]] && PID+="$(dropbear_pids | grep -w "${user}" | wc -l)+"
[[ $(dpkg --get-selections | grep -w "openvpn" | head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && [[ $(openvpn_pids | grep -w "$user" | cut -d'|' -f2) ]] && PID+="$(openvpn_pids | grep -w "$user" | cut -d'|' -f2)+"
PID+="0"
nomtoken="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${user}" | cut -d'|' -f5)"
[[ -z $(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${user}") ]] && MAXUSER="?" || MAXUSER="$(cat /etc/SCRIPT-LATAM/cuentatoken | grep -w "${user}" | cut -d'|' -f4)"
[[ $(echo $PID | bc) -gt 0 ]] && user="$user \e[1;96m$nomtoken \e[1;93m[\033[1;32m ON \e[1;93m]" || user="$user \e[1;96m$nomtoken \e[1;93m[\033[1;31m OFF \e[1;93m]"
TOTALPID="$(echo $PID | bc)"
while [[ ${#user} -lt 76 ]]; do
user=$user" "
done
echo -e "\e[1;97m $user $TOTALPID " >&2
) &
pid=$!
sleep 0.5s
done <<<"$(mostrar_usuariotoken)"
while [[ -d /proc/$pid ]]; do
sleep 1s
done
fi
fi
# while read user; do
# [[ $(dpkg --get-selections | grep -w "openssh" | head -1) ]] && SSH=ON || SSH=OFF
# [[ $(dpkg --get-selections | grep -w "dropbear" | head -1) ]] && DROP=ON || DROP=OFF
# [[ $(dpkg --get-selections | grep -w "openvpn" | head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && OPEN=ON || OPEN=OFF
# #----CONTADOR DE ONLINES
# totalo=$(
# PID="0"
# [[ $SSH = ON ]] && PID+="$(ps aux | grep -v grep | grep sshd | grep -w "$user" | grep -v root | wc -l 2>/dev/null)+"
# [[ $DROP = ON ]] && PID+="$(dropbear_pids | grep -w "$user" | wc -l 2>/dev/null)+"
# [[ $OPEN = ON ]] && [[ $(openvpn_pids | grep -w "$user" | cut -d'|' -f2) ]] && PID+="$(openvpn_pids | grep -w "$user" | cut -d'|' -f2)+"
# ONLINES+="$(echo ${PID}0 | bc)+"
# echo "${ONLINES}0" | bc >/etc/SCRIPT-LATAM/temp/Tonli
# ) &
# readonlit=$totalo
# done <<<"$(mostrar_totales)"
rebootnb "contadortotal" 2>/dev/null
onlinest=$(cat /etc/SCRIPT-LATAM/temp/Tonli)
msg -bar
echo -e "\033[1;32m TOTAL DE CONECTADOS:\033[1;36m[\e[97m $onlinest \033[1;36m]"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
rm_vencidos() {
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " BORRANDO USUARIOS EXPIRADOS "
msg -bar
red=$(tput setaf 1)
gren=$(tput setaf 2)
yellow=$(tput setaf 3)
txtvar=$(printf '%-42s' "\e[1;97m USUARIOS")
txtvar+=$(printf '%-1s' "\e[1;32m VALIDIDEZ")
echo -e "\033[1;92m${txtvar}"
expired="${red}Usuario Expirado"
valid="${gren}Usuario Vigente"
never="${yellow}Usuario Ilimitado"
removido="${red}Eliminado"
DataVPS=$(date +%s)
#CUENTAS SSH
mostrar_usuariosssh() {
for u in $(cat /etc/SCRIPT-LATAM/cuentassh | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentassh" ]] && usuarios_ativos1=($(mostrar_usuariosssh))
if [[ -z ${usuarios_ativos1[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m════════════════\e[100m\e[97m CUENTAS NORMALES \e[0m\e[38;5;239m════════════════"
while read user; do
DataUser=$(chage -l "${user}" | grep -i co | awk -F ":" '{print $2}')
usr=$user
while [[ ${#usr} -lt 34 ]]; do
usr=$usr" "
done
[[ "$DataUser" = " never" ]] && {
echo -e "\e[1;97m$usr $never"
continue
}
DataSEC=$(date +%s --date="$DataUser")
if [[ "$DataSEC" -lt "$DataVPS" ]]; then
echo -ne "\e[1;97m$usr $expired"
pkill -u $user &>/dev/null
droplim=$(dropbear_pids | grep -w "$user" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
# droplim=`droppids|grep -w "$user"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
rm_user "$user" && echo -e " y ($removido)"
userb=$(cat /etc/SCRIPT-LATAM/cuentassh | grep -n -w $user | cut -d'|' -f1 | cut -d':' -f1)
sed -i "${userb}d" /etc/SCRIPT-LATAM/cuentassh
else
echo -e "\e[1;97m$usr $valid"
fi
done <<<"$(mostrar_usuariosssh)"
fi
#---SSH HWID
mostrar_usuarioshwid() {
for u in $(cat /etc/SCRIPT-LATAM/cuentahwid | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]] && usuarios_ativos2=($(mostrar_usuarioshwid))
if [[ -z ${usuarios_ativos2[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m═════════════════\e[100m\e[97m CUENTAS HWID \e[0m\e[38;5;239m═════════════════"
while read user; do
DataUser=$(chage -l "${user}" | grep -i co | awk -F ":" '{print $2}')
usr=$user
while [[ ${#usr} -lt 34 ]]; do
usr=$usr" "
done
[[ "$DataUser" = " never" ]] && {
echo -e "\e[1;97m$usr $never"
continue
}
DataSEC=$(date +%s --date="$DataUser")
if [[ "$DataSEC" -lt "$DataVPS" ]]; then
echo -ne "\e[1;97m$usr $expired"
pkill -u $user &>/dev/null
droplim=$(dropbear_pids | grep -w "$user" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
# droplim=`droppids|grep -w "$user"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
rm_user "$user" && echo -e " y ($removido)"
sed -i '/'$user'/d' /etc/SCRIPT-LATAM/cuentahwid
else
echo -e "\e[1;97m$usr $valid"
fi
done <<<"$(mostrar_usuarioshwid)"
fi
#--- CUENTAS TOKEN
mostrar_usuariotoken() {
for u in $(cat /etc/SCRIPT-LATAM/cuentatoken | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]] && usuarios_ativos3=($(mostrar_usuariotoken))
if [[ -z ${usuarios_ativos3[@]} ]]; then
echo "" >/dev/null 2>&1
else
echo -e "\033[38;5;239m═════════════════\e[100m\e[97m CUENTAS TOKEN \e[0m\e[38;5;239m═════════════════"
while read user; do
DataUser=$(chage -l "${user}" | grep -i co | awk -F ":" '{print $2}')
usr=$user
while [[ ${#usr} -lt 34 ]]; do
usr=$usr" "
done
[[ "$DataUser" = " never" ]] && {
echo -e "\e[1;97m$usr $never"
continue
}
DataSEC=$(date +%s --date="$DataUser")
if [[ "$DataSEC" -lt "$DataVPS" ]]; then
echo -ne "\e[1;97m$usr $expired"
pkill -u $user &>/dev/null
droplim=$(dropbear_pids | grep -w "$user" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
# droplim=`droppids|grep -w "$user"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
rm_user "$user" && echo -e "y ($removido)"
sed -i '/'$user'/d' /etc/SCRIPT-LATAM/cuentatoken
else
echo -e "\e[1;97m$usr $valid"
fi
done <<<"$(mostrar_usuariotoken)"
fi
rm -rf /etc/SCRIPT-LATAM/temp/userlock
rm -rf /etc/SCRIPT-LATAM/temp/userexp
unlockall2
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
#BACKUP USER SSH
backup_fun() {
clear && clear
backupssh() {
rm -rf /root/backup-latam/ >/dev/null 2>&1
apt install sshpass >/dev/null 2>&1
mkdir /root/backup-latam/
export UGIDLIMIT=1000
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd >/root/backup-latam/passwd.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group >/root/backup-latam/group.mig
awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd | tee - | egrep -f - /etc/shadow >/root/backup-latam/shadow.mig
cp /etc/gshadow /root/backup-latam/gshadow.mig >/dev/null 2>&1
cp /etc/SCRIPT-LATAM/cuentassh /root/backup-latam/cuentassh >/dev/null 2>&1
cp /etc/SCRIPT-LATAM/cuentahwid /root/backup-latam/cuentahwid >/dev/null 2>&1
cp /etc/SCRIPT-LATAM/cuentatoken /root/backup-latam/cuentatoken >/dev/null 2>&1
cp /etc/SCRIPT-LATAM/temp/.passw /root/backup-latam/.passw >/dev/null 2>&1
tar -zcvpf /root/backup-latam/home.tar.gz /home >/dev/null 2>&1
echo -ne "\e[1;97mDigite usuario root del Nuevo VPS:\033[1;92m " && read useroot
echo -ne "\e[1;97mDigite IP del Nuevo VPS:\033[1;92m " && read ipvps
echo -ne "\e[1;97mDigite Contraseña del Nuevo VPS:\033[1;92m " && read passvps
echo ""
sshpass -p "$passvps" scp -o "StrictHostKeyChecking no" -r /root/backup-latam/ "$useroot"@"$ipvps":/root/
msg -azu " Procedimiento Hecho con Exito, Guardado en:"
echo ""
echo -e "\033[1;31m BACKUP > [\033[1;32m/root/backup-latam/\033[1;31m]"
}
restaurarback() {
echo -ne "\033[1;37m ¡¡Recomiendo DESACTIVAR LIM/DES!!\n"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m Presiona enter para Continuar \n'
[[ -e /root/Backup-Latam.tar.gz ]] && {
rm -rf /root/backup-latam
tar -xzvf Backup-Latam.tar.gz
}
msg -bar
mkdir /root/users.bk
cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/users.bk
cd /root/backup-latam/
cat passwd.mig >>/etc/passwd
cat group.mig >>/etc/group
cat shadow.mig >>/etc/shadow
/bin/cp gshadow.mig /etc/gshadow
cat cuentassh >/etc/SCRIPT-LATAM/cuentassh
cat cuentahwid >/etc/SCRIPT-LATAM/cuentahwid
cat cuentatoken >/etc/SCRIPT-LATAM/cuentatoken
cat .passw >/etc/SCRIPT-LATAM/temp/.passw
cd /
tar -zxvf /root/backup-latam/home.tar.gz
echo ""
msg -azu " Procedimiento Hecho con Exito, Reinicie su VPS"
}
msg -bar
msg -tit
msg -bar
msg -ama " HERRAMIENTA DE BACKUP DE USUARIOS"
msg -bar
echo -e "\e[1;31m >>\e[1;97m Se generara un backup y enviara a la VPS Nueva\033[1;92m "
echo -e "\e[1;31m >>\e[1;97m Tenga su VPS Nueva ya configurada \033[1;92m "
msg -bar
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m CREAR BACKUP REMOTO \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m RESTAURAR BACKUP\e[97m \n"
msg -bar
unset selection
while [[ ${selection} != @([1-2]) ]]; do
echo -ne "\033[1;37mSeleccione una Opcion: " && read selection
tput cuu1 && tput dl1
done
case ${selection} in
1)
backupssh
;;
2)
restaurarback
;;
esac
echo ""
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
##LIMITADOR
verif_funx() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;32m LIMITADOR DE CUENTAS"
msg -bar
echo -e "Esta Opcion Limita las Conexiones de SSH/SSL/DROPBEAR"
PIDVRF="$(ps aux | grep "/etc/SCRIPT-LATAM/menu.sh verificar" | grep -v grep | awk '{print $2}')"
if [[ -z $PIDVRF ]]; then
msg -bar
echo -ne "\033[1;96m ¿Cada cuantos segundos ejecutar el limitador?\n\033[1;97m +Segundos = -Uso de CPU | -Segundos = +Uso de CPU\033[0;92m \n Predeterminado:\033[1;37m 120s\n Cuantos Segundos (Numeros Unicamente): " && read tiemlim
error() {
msg -verm "Tiempo invalido,se ajustara a 120s (Tiempo por Defeto)"
sleep 5s
tput cuu1
tput dl1
tput cuu1
tput dl1
tiemlim="120"
echo "${tiemlim}" >/etc/SCRIPT-LATAM/temp/T-Lim
}
#[[ -z "$tiemlim" ]] && tiemlim="120"
if [[ "$tiemlim" != +([0-9]) ]]; then
error
fi
[[ -z "$tiemlim" ]] && tiemlim="120"
if [ "$tiemlim" -lt "120" ]; then
error
fi
echo "${tiemlim}" >/etc/SCRIPT-LATAM/temp/T-Lim
screen -dmS limitador watch -n $tiemlim /etc/SCRIPT-LATAM/menu.sh "verificar"
else
for pid in $(echo $PIDVRF); do
screen -S limitador -p 0 -X quit
done
[[ -e /etc/SCRIPT-LATAM/temp/USRonlines ]] && rm /etc/SCRIPT-LATAM/temp/USRonlines
[[ -e /etc/SCRIPT-LATAM/temp/USRexpired ]] && rm /etc/SCRIPT-LATAM/temp/USRexpired
[[ -e /etc/SCRIPT-LATAM/temp/USRbloqueados ]] && rm /etc/SCRIPT-LATAM/temp/USRbloqueados
fi
msg -bar
[[ -z ${VERY} ]] && verificar="\033[1;32m ACTIVADO " || verificar="\033[1;31m DESACTIVADO "
echo -e " $verificar -- CON EXITO"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
##DESBLOEUEAR
verif2_funx() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\033[1;32m DESBLOQUEO AUT. Y LIMPIADOR DE EXPIARDOS"
msg -bar
echo -e "Esta opcion desbloquea a usuarios bloqueados por \nel limitador y limpia los usuarios expirados"
PIDVRF2="$(ps aux | grep "/etc/SCRIPT-LATAM/menu.sh desbloqueo" | grep -v grep | awk '{print $2}')"
if [[ -z $PIDVRF2 ]]; then
msg -bar
echo -ne "\033[1;96m ¿Cada cuantos segundos ejecutar el desbloqueador?\n\033[1;97m +Segundos = -Uso de CPU | -Segundos = +Uso de CPU\033[0;92m \n Predeterminado:\033[1;37m 120s\n Cuantos Segundos (Numeros Unicamente): " && read tiemdes
error() {
msg -verm "Tiempo invalido,se ajustara a 120s (Tiempo por Defeto)"
sleep 5s
tput cuu1
tput dl1
tput cuu1
tput dl1
tiemdes="120"
echo "${tiemdes}" >/etc/SCRIPT-LATAM/temp/T-Des
}
#[[ -z "$tiemdes" ]] && tiemdes="120"
if [[ "$tiemdes" != +([0-9]) ]]; then
error
fi
[[ -z "$tiemdes" ]] && tiemdes="120"
if [ "$tiemdes" -lt "120" ]; then
error
fi
echo "${tiemdes}" >/etc/SCRIPT-LATAM/temp/T-Des
screen -dmS desbloqueador watch -n $tiemdes /etc/SCRIPT-LATAM/menu.sh "desbloqueo"
#screen -dmS very2 /etc/SCRIPT-LATAM/menu.sh desbloqueo
else
for pid in $(echo $PIDVRF2); do
screen -S desbloqueador -p 0 -X quit
done
fi
msg -bar
[[ -z ${VERY2} ]] && desbloqueo="\033[1;32m ACTIVADO " || desbloqueo="\033[1;31m DESACTIVADO "
echo -e " $desbloqueo -- CON EXITO"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
baner_fun() {
banner_on() {
clear && clear
local="/etc/SCRIPT-LATAM/bannerssh"
rm -rf $local >/dev/null 2>&1
local2="/etc/dropbear/banner"
chk=$(cat /etc/ssh/sshd_config | grep Banner)
if [ "$(echo "$chk" | grep -v "#Banner" | grep Banner)" != "" ]; then
local=$(echo "$chk" | grep -v "#Banner" | grep Banner | awk '{print $2}')
else
echo "" >>/etc/ssh/sshd_config
echo "Banner /etc/SCRIPT-LATAM/bannerssh" >>/etc/ssh/sshd_config
local="/etc/SCRIPT-LATAM/bannerssh"
fi
msg -bar
msg -tit
msg -bar
msg -ama " AGREGAR BANNER SSH/SSL/DROPBEAR"
msg -bar
msg -ne "Inserte el BANNER de preferencia en HTML sin saltos: \n\n" && read ban_ner
echo ""
msg -bar
credi="$(less /etc/SCRIPT-LATAM/message.txt)"
echo "$ban_ner" >>$local
echo '<p style="text-align: center;"><strong><span style="color: #993300;">'$credi'</span></strong></p>' >>$local
echo '<p style="text-align: center;"><strong>SCRIPT <span style="color: #ff0000;">|</span><span style="color: #ffcc00;"> LATAM</span></strong></p>' >>$local
if [[ -e "$local2" ]]; then
rm $local2 >/dev/null 2>&1
cp $local $local2 >/dev/null 2>&1
fi
msg -verd " BANNER AGREGADO CON !! EXITO ¡¡" && msg -bar
service ssh restart 2>/dev/null
service dropbear stop 2>/dev/null
sed -i "s/=1/=0/g" /etc/default/dropbear
service dropbear restart
sed -i "s/=0/=1/g" /etc/default/dropbear
}
banner_off() {
clear && clear
msg -bar
msg -ama " ELIMINANDO BANNER SSH/SSL/DROPBEAR"
msg -bar
sed -i '/'Banner'/d' /etc/ssh/sshd_config
sed -i -e 's/^[ \t]*//; s/[ \t]*$//; /^$/d' /etc/ssh/sshd_config
echo "" >>/etc/ssh/sshd_config
rm -rf /etc/dropbear/banner >/dev/null 2>&1
echo "" >/etc/dropbear/banner >/dev/null 2>&1
service ssh restart 2>/dev/null
service dropbear stop 2>/dev/null
sed -i "s/=1/=0/g" /etc/default/dropbear
service dropbear restart
sed -i "s/=0/=1/g" /etc/default/dropbear
echo -e "\033[1;92m BANNER ELIMINADO !! EXITO ¡¡ "
msg -bar
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " AGREGAR BANNER SSH/SSL/DROPBEAR"
msg -bar
echo -e "${cor[1]} Escoja la opcion deseada."
msg -bar
echo -e "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m AGREGAR BANNER SSH/SSL/DROPBEAR "
echo -e "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97m ELIMINAR Y DESACTIVAR BANNER "
msg -bar
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;37m"
msg -bar
echo -ne "\033[1;37mDigite solo el numero segun su respuesta: \033[1;32m"
read opcao
case $opcao in
1)
msg -bar
banner_on
;;
2)
msg -bar
banner_off
;;
*)
msg -bar
;;
esac
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
rec_total() {
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " REGISTRO TOTAL DE CUENTAS VIEJAS Y NUEVAS"
msg -bar
cat /etc/SCRIPT-LATAM/regtotal
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
demo_ssh() {
rm -rf /etc/SCRIPT-LATAM/temp/demo-ssh 2>/dev/null
mkdir /etc/SCRIPT-LATAM/temp/demo-ssh 2>/dev/null
SCPdir="/etc/SCRIPT-LATAM"
declare -A cor=([0]="\033[1;37m" [1]="\033[1;34m" [2]="\033[1;31m" [3]="\033[1;33m" [4]="\033[1;32m")
tmpusr() {
time="$1"
timer=$(($time * 60))
timer2="'$timer's"
echo "#!/bin/bash
sleep $timer2
kill"' $(ps -u '"$2 |awk '{print"' $1'"}') 1> /dev/null 2> /dev/null
userdel --force $2
rm -rf /tmp/$2
exit" >/tmp/$2
}
tmpusr2() {
time="$1"
timer=$(($time * 60))
timer2="'$timer's"
echo "#!/bin/bash
sleep $timer2
kill=$(dropb | grep "$2" | awk '{print $2}')
kill $kill
userdel --force $2
rm -rf /tmp/$2
exit" >/tmp/$2
}
clear && clear
msg -bar
msg -tit
msg -bar
msg -ama " CREAR USUARIO POR TIEMPO (Minutos)"
msg -bar
echo -e "\033[1;97m Los Usuarios que cres en esta opcion se eliminaran\n automaticamete pasando el tiempo designado.\033[0m"
msg -bar
echo -ne "\033[1;91m [1]- \033[1;93mDigite Nuevo Usuario:\033[1;32m " && read name
if [[ -z $name ]]; then
echo "No a digitado el Nuevo Usuario"
exit
fi
if cat /etc/passwd | grep $name: | grep -vi [a-z]$name | grep -v [0-9]$name >/dev/null; then
echo -e "\033[1;31mUsuario $name ya existe\033[0m"
exit
fi
echo -ne "\033[1;91m [2]- \033[1;93mDigite Nueva Contraseña:\033[1;32m " && read pass
echo -ne "\033[1;91m [3]- \033[1;93mDigite Tiempo (Minutos):\033[1;32m " && read tmp
if [ "$tmp" = "" ]; then
tmp="30"
echo -e "\033[1;32mFue Definido 30 minutos Por Defecto!\033[0m"
msg -bar
sleep 2s
fi
useradd -m -s /bin/false $name
(
echo $pass
echo $pass
) | passwd $name 2>/dev/null
touch /tmp/$name
tmpusr $tmp $name
chmod 777 /tmp/$name
touch /tmp/cmd
chmod 777 /tmp/cmd
echo "nohup /tmp/$name & >/dev/null" >/tmp/cmd
/tmp/cmd 2>/dev/null 1>/dev/null
rm -rf /tmp/cmd
touch /etc/SCRIPT-LATAM/temp/demo-ssh/$name
echo "senha: $pass" >>/etc/SCRIPT-LATAM/temp/demo-ssh/$name
echo "data: ($tmp)Minutos" >>/etc/SCRIPT-LATAM/temp/demo-ssh/$name
msg -bar2
echo -e "\033[1;93m ¡¡ USUARIO TEMPORAL x MINUTOS !!\033[1;0m"
msg -bar2
echo -e "\033[1;97m\e[38;5;202m IP del Servidor: \033[1;32m$(meu_ip) "
echo -e "\e[38;5;202m Usuario: \033[1;32m$name"
echo -e "\e[38;5;202m Contraseña: \033[1;32m$pass"
echo -e "\e[38;5;202m Minutos de Duración: \033[1;32m$tmp"
msg -bar2
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
}
[[ -z ${VERY} ]] && verificar="\e[1;93m[\033[1;31m DESACTIVADO \e[1;93m]" || verificar="\e[1;93m[\033[1;32m ACTIVO \e[1;93m]"
[[ -z ${VERY2} ]] && desbloqueo="\e[1;93m[\033[1;31m DESACTIVADO \e[1;93m]" || desbloqueo="\e[1;93m[\033[1;32m ACTIVO \e[1;93m]"
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m CONTROLADOR DE CUENTAS SSL/SSH/DROPBEAR"
msg -bar
echo -ne "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97mCREAR CUENTA" && echo -e " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97mCREAR CUENTA TEMP"
echo -ne "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \e[1;97mREMOVER USUARIO" && echo -e "\e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97mBLOQUEAR | DESBLOQUEAR "
echo -ne "\e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \e[1;97mEDITAR CUENTA" && echo -e " \e[1;93m [\e[1;32m6\e[1;93m]\033[1;31m > \e[1;97mRENOVAR CUENTA"
echo -e "\e[1;93m [\e[1;32m7\e[1;93m]\033[1;31m > \e[1;97mDETALLES DE TODOS USUARIOS"
echo -e "\e[1;93m [\e[1;32m8\e[1;93m]\033[1;31m > \e[1;97mMONITOR DE USUARIOS CONECTADOS"
echo -e "\e[1;93m [\e[1;32m9\e[1;93m]\033[1;31m > \e[1;97mELIMINAR USUARIOS VENCIDOS"
echo -e "\033[38;5;239m══════════════════\e[100m\e[97m CONTROLADORES \e[0m\e[38;5;239m══════════════════"
echo -e "\e[1;93m [\e[1;32m10\e[1;93m]\033[1;31m > \e[1;97mREINICIAR CONTADOR DE BLOQUEADOS y EXPIRADOS"
echo -e "\e[1;93m [\e[1;32m11\e[1;93m]\033[1;31m > \e[1;97mBACKUP USUARIOS"
echo -e "\e[1;93m [\e[1;32m12\e[1;93m]\033[1;31m > \e[1;97mAGREGAR/ELIMINAR BANNER"
echo -e "\e[1;93m [\e[1;32m13\e[1;93m]\033[1;31m > \e[1;97m⚠ELIMINAR TODOS LOS USUARIOS⚠"
echo -e "\e[1;93m [\e[1;32m14\e[1;93m]\033[1;31m > \e[1;97m🔒 LIMITADOR-DE-CUENTAS 🔒 -- $verificar"
echo -e "\e[1;93m [\e[1;32m15\e[1;93m]\033[1;31m > \e[1;97m🔓 DESBLOQUEO-AUTOMATICO 🔓 - $desbloqueo"
echo -e "\e[1;93m [\e[1;32m16\e[1;93m]\033[1;31m > \e[1;97mLOG DE CUENTAS REGISTRADAS"
echo -e "\e[1;93m [\e[1;32m17\e[1;93m]\033[1;31m > \e[1;97mLIMPIAR LOG DE LIMITADOR "
[[ -e "/etc/SCRIPT-LATAM/temp/Limiter2.log" ]] && echo -e "\e[1;93m [\e[1;32m18\e[1;93m]\033[1;31m > \e[1;97mVER LOG DE LIMITADOR "
msg -bar
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;97m"
msg -bar
echo -ne "\033[1;97m └⊳ Seleccione una Opcion [1-18]: \033[1;32m" && read num
msg -bar
case "$num" in
1) new_user ;;
2) demo_ssh ;;
3) remove_user ;;
4) block_user ;;
5) edit_user ;;
6) renew_user ;;
7) detail_user ;;
8) monit_user ;;
9) rm_vencidos ;;
10) reset_contador ;;
11) backup_fun ;;
12) baner_fun ;;
13) eliminar_all ;;
14) verif_funx ;;
15) verif2_funx ;;
16) rec_total ;;
17)
rm -rf /etc/SCRIPT-LATAM/temp/Limiter2.log
echo -e "\033[1;32m LOG ELIMINADO CON EXITO"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
;;
18)
clear && clear
msg -bar
sed -i -e 's/^[ \t]*//; s/[ \t]*$//; /^$/d' /etc/SCRIPT-LATAM/temp/Limiter2.log
[[ -e "/etc/SCRIPT-LATAM/temp/Limiter2.log" ]] && {
msg -tit
msg -bar
msg -ama " REGISTRO DEL LIMITADOR "
msg -bar
cat /etc/SCRIPT-LATAM/temp/Limiter2.log
msg -bar
}
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
controlador_ssh
;;
*)
menu
;;
esac
exit 0
}
#--- MONITOR HTOP
monhtop() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -ne " \033[1;93m MONITOR DE PROCESOS HTOP\n"
msg -bar
msg -bra " RECUERDA SALIR CON : \033[1;96m CTRL + C o FIN + F10 "
[[ $(dpkg --get-selections | grep -w "htop" | head -1) ]] || apt-get install htop -y &>/dev/null
msg -bar
read -t 10 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
clear && clear
sudo htop
msg -bar
msg -tit
msg -bar
echo -ne " \033[1;93m MONITOR DE PROCESOS HTOP\n"
msg -bar
echo -e "\e[97m FIN DEL MONITOR"
msg -bar
}
#--------------------------------========MONITOR DE LOGIN, CADUCIDAD Y NOTI BOT========-------------------------------------
##----PIDS DROPBEAR
dropbear_pids() {
local pids
local portasVAR=$(lsof -V -i tcp -P -n | grep -v "ESTABLISHED" | grep -v "COMMAND" | grep "LISTEN")
local NOREPEAT
local reQ
local Port
while read port; do
reQ=$(echo ${port} | awk '{print $1}')
Port=$(echo {$port} | awk '{print $9}' | awk -F ":" '{print $2}')
[[ $(echo -e $NOREPEAT | grep -w "$Port") ]] && continue
NOREPEAT+="$Port\n"
case ${reQ} in
dropbear)
[[ -z $DPB ]] && local DPB=""
DPB+="$Port "
;;
esac
done <<<"${portasVAR}"
[[ ! -z $DPB ]] && echo -e $DPB
#local port_dropbear="$DPB"
port_drop=$(netstat -nlpt | grep -i dropbear | grep -i 0.0.0.0 | awk '{print $4}' | cut -d: -f2 | xargs | sed -e 's/ /, /g')
port_dropbear="$port_drop"
cat /var/log/auth.log | grep -a -i dropbear | grep -a -i "Password auth succeeded" >/var/log/authday.log
#cat /var/log/auth.log|grep "$(date|cut -d' ' -f2,3)" > /var/log/authday.log
#cat /var/log/auth.log | tail -1000 >/var/log/authday.log
local log=/var/log/authday.log
local loginsukses='Password auth succeeded'
[[ -z $port_dropbear ]] && return 1
for port in $(echo $port_dropbear); do
for pidx in $(ps ax | grep dropbear | grep "$port" | awk -F" " '{print $1}'); do
pids="${pids}$pidx\n"
done
done
for pid in $(echo -e "$pids"); do
pidlogs=$(grep $pid $log | grep "$loginsukses" | awk -F" " '{print $3}')
i=0
for pidend in $pidlogs; do
let i++
done
if [[ $pidend ]]; then
login=$(grep $pid $log | grep "$pidend" | grep "$loginsukses")
PID=$pid
user=$(echo $login | awk -F" " '{print $10}' | sed -r "s/'//g")
waktu=$(echo $login | awk -F" " '{print $2"-"$1,$3}')
[[ -z $user ]] && continue
echo "$user|$PID|$waktu"
fi
done
}
##----PIDS OPENVPN
openvpn_pids() {
#nome|#loguin|#rcv|#snd|#time
byte() {
while read B dummy; do
[[ "$B" -lt 1024 ]] && echo "${B} bytes" && break
KB=$(((B + 512) / 1024))
[[ "$KB" -lt 1024 ]] && echo "${KB} Kb" && break
MB=$(((KB + 512) / 1024))
[[ "$MB" -lt 1024 ]] && echo "${MB} Mb" && break
GB=$(((MB + 512) / 1024))
[[ "$GB" -lt 1024 ]] && echo "${GB} Gb" && break
echo $(((GB + 512) / 1024)) terabytes
done
}
mostrar_usuariossh() {
for u in $(cat /etc/SCRIPT-LATAM/cuentassh | cut -d'|' -f1); do
echo "$u"
done
}
for user in $(mostrar_usuariossh); do
user="$(echo $user | sed -e 's/[^a-z0-9 -]//ig')"
[[ ! $(sed -n "/^${user},/p" /etc/openvpn/openvpn-status.log) ]] && continue
i=0
unset RECIVED
unset SEND
unset HOUR
while read line; do
IDLOCAL=$(echo ${line} | cut -d',' -f2)
RECIVED+="$(echo ${line} | cut -d',' -f3)+"
SEND+="$(echo ${line} | cut -d',' -f4)+"
DATESEC=$(date +%s --date="$(echo ${line} | cut -d',' -f5 | cut -d' ' -f1,2,3,4)")
TIMEON="$(($(date +%s) - ${DATESEC}))"
MIN=$(($TIMEON / 60)) && SEC=$(($TIMEON - $MIN * 60)) && HOR=$(($MIN / 60)) && MIN=$(($MIN - $HOR * 60))
HOUR+="${HOR}h:${MIN}m:${SEC}s\n"
let i++
done <<<"$(sed -n "/^${user},/p" /etc/openvpn/openvpn-status.log)"
RECIVED=$(echo $(echo ${RECIVED}0 | bc) | byte)
SEND=$(echo $(echo ${SEND}0 | bc) | byte)
HOUR=$(echo -e $HOUR | sort -n | tail -1)
echo -e "$user|$i|$RECIVED|$SEND|$HOUR"
done
}
notibot_expirado() {
NOM=$(less /etc/SCRIPT-LATAM/temp/idtelegram) >/dev/null 2>&1
ID=$(echo $NOM) >/dev/null 2>&1
NOM2=$(less /etc/SCRIPT-LATAM/temp/vpstelegram) >/dev/null 2>&1
VPS=$(echo $NOM2) >/dev/null 2>&1
KEY="5179637690:AAExt2gHMurxUgfgghBdKJ6BCHg-D0Uzlt0rM"
TIMEOUT="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"
SONIDO="0"
TEXTO="❗️═════ *-CUENTA-* ═════ ❗️\n▫ *>* _$1_\n▫ *>* VPS: *$VPS* \n🕰 ════ _- EXPIRADA -_ ════ 🕰"
curl -s --max-time $TIMEOUT -d "parse_mode=Markdown&disable_notification=$SONIDO&chat_id=$ID&disable_web_page_preview=1&text=$(echo -e "$TEXTO")" $URL
echo "" &>/dev/null
}
notibot_block() {
NOM=$(less /etc/SCRIPT-LATAM/temp/idtelegram) >/dev/null 2>&1
ID=$(echo $NOM) >/dev/null 2>&1
NOM2=$(less /etc/SCRIPT-LATAM/temp/vpstelegram) >/dev/null 2>&1
VPS=$(echo $NOM2) >/dev/null 2>&1
KEY="5179637690:AAExt2gHMurxUmuJBdKJ6BCHg-D0Uzlt0rM"
TIMEOUT="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"
SONIDO="0"
TEXTO="❗️═════ *-CUENTA-* ═════ ❗️\n▫ *>* _$1_\n▫ *>* VPS :*$VPS* \n📵 ════ _BLOQUEADA_ ════ 📵"
curl -s --max-time $TIMEOUT -d "parse_mode=Markdown&disable_notification=$SONIDO&chat_id=$ID&disable_web_page_preview=1&text=$(echo -e "$TEXTO")" $URL
echo "" &>/dev/null
}
#-BLOQUEO
block_userfun() {
local USRloked="/etc/SCRIPT-LATAM/temp/userlock"
local LIMITERLOG="/etc/SCRIPT-LATAM/temp/Limiter.log"
local LIMITERLOG2="/etc/SCRIPT-LATAM/temp/Limiter2.log"
if [[ $2 = "-loked" ]]; then
[[ $(cat ${USRloked} | grep -w "$1") ]] && return 1
pkill -u $1 &>/dev/null
fi
if [[ $(cat ${USRloked} | grep -w "$1") ]]; then
usermod -U "$1" &>/dev/null
[[ -e ${USRloked} ]] && {
newbase=$(cat ${USRloked} | grep -w -v "$1")
[[ -e ${USRloked} ]] && rm ${USRloked}
for value in $(echo ${newbase}); do
echo $value >>${USRloked}
done
}
[[ -e ${LIMITERLOG} ]] && [[ $(cat ${LIMITERLOG} | grep -w "$1") ]] && {
newbase=$(cat ${LIMITERLOG} | grep -w -v "$1")
[[ -e ${LIMITERLOG} ]] && rm ${LIMITERLOG}
for value in $(echo ${newbase}); do
echo $value >>${LIMITERLOG}
echo $value >>${LIMITERLOG}
done
}
return 1
else
usermod -L "$1" &>/dev/null
pkill -u $1 &>/dev/null
# droplim=`droppids|grep -w "$1"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
droplim=$(dropbear_pids | grep -w "$1" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
openlim=$(openvpn_pids | grep -w "$1" | cut -d'|' -f2)
kill -9 $openlim &>/dev/null
echo $1 >>${USRloked}
return 0
fi
}
verif_fun() {
local conexao
local limite
local TIMEUS
declare -A conexao
declare -A limite
declare -A TIMEUS
local USRloked="/etc/SCRIPT-LATAM/temp/userlock"
local LIMITERLOG="/etc/SCRIPT-LATAM/temp/Limiter.log"
local LIMITERLOG2="/etc/SCRIPT-LATAM/temp/Limiter2.log"
[[ $(dpkg --get-selections | grep -w "openssh" | head -1) ]] && local SSH=ON || local SSH=OFF
[[ $(dpkg --get-selections | grep -w "dropbear" | head -1) ]] && local DROP=ON || local DROP=OFF
[[ $(dpkg --get-selections | grep -w "openvpn" | head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && local OPEN=ON || local OPEN=OFF
unset EXPIRED
unset ONLINES
unset BLOQUEADO
local TimeNOW=$(date +%s)
# INICIA VERIFICAȃOINICIANDO VERIFICACION
mostrar_usuariossh() {
for u in $(cat /etc/SCRIPT-LATAM/cuentassh | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariohwid() {
for u in $(cat /etc/SCRIPT-LATAM/cuentahwid | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariotoken() {
for u in $(cat /etc/SCRIPT-LATAM/cuentatoken | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentassh" ]] && usuarios_ativos1=($(mostrar_usuariossh))
[[ -e "/etc/SCRIPT-LATAM/cuentahwid" ]] && usuarios_ativos2=($(mostrar_usuariohwid))
[[ -e "/etc/SCRIPT-LATAM/cuentatoken" ]] && usuarios_ativos3=($(mostrar_usuariotoken))
for us in $(echo ${usuarios_ativos1[@]}); do
echo "${us}"
done >/etc/SCRIPT-LATAM/cuentasactivast
for us in $(echo ${usuarios_ativos2[@]}); do
echo "${us}"
done >>/etc/SCRIPT-LATAM/cuentasactivast
for us in $(echo ${usuarios_ativos3[@]}); do
echo "${us}"
done >>/etc/SCRIPT-LATAM/cuentasactivast
mostrar_totales() {
for u in $(cat /etc/SCRIPT-LATAM/cuentasactivast | cut -d'|' -f1); do
echo "$u"
done
}
[[ -e "/etc/SCRIPT-LATAM/cuentasactivast" ]] && usuarios_totales=($(mostrar_totales))
if [[ -z ${usuarios_totales[@]} ]]; then
echo "" >/dev/null 2>&1
else
while read user; do
##EXPIRADOS
local DataUser=$(chage -l "${user}" | grep -i co | awk -F ":" '{print $2}')
if [[ ! -z "$(echo $DataUser | grep never)" ]]; then
echo -e "\033[1;31mILIMITADO"
continue
fi
local DataSEC=$(date +%s --date="$DataUser")
if [[ "$DataSEC" -lt "$TimeNOW" ]]; then
EXPIRED="1+"
[[ $(cat ${USRloked} | grep -w "$user") ]] || {
notibot_expirado $user
echo "$user" >>/etc/SCRIPT-LATAM/temp/userexp
echo "$user (EXPIRADO) $(date +%r--%d/%m/%y)" >>$LIMITERLOG2
echo "USER: $user (LOKED - EXPIRED) $(date +%r)" >>$LIMITERLOG
}
block_userfun $user -loked
continue
fi
#----CONTADOR DE ONLINES
local PID="0+"
[[ $SSH = ON ]] && PID+="$(ps aux | grep -v grep | grep sshd | grep -w "$user" | grep -v root | wc -l 2>/dev/null)+"
[[ $DROP = ON ]] && PID+="$(dropbear_pids | grep -w "$user" | wc -l 2>/dev/null)+"
[[ $OPEN = ON ]] && [[ $(openvpn_pids | grep -w "$user" | cut -d'|' -f2) ]] && PID+="$(openvpn_pids | grep -w "$user" | cut -d'|' -f2)+"
local ONLINES+="$(echo ${PID}0 | bc)+"
echo "${ONLINES}0" | bc >/etc/SCRIPT-LATAM/temp/USRonlines
#----CONTADOR DE LIMITE X USER
local conexao[$user]="$(echo ${PID}0 | bc)"
local limite[$user]="$(cat /etc/SCRIPT-LATAM/cuentassh | grep -w "${user}" | cut -d'|' -f4)"
[[ -z "${limite[$user]}" ]] && continue
[[ "${limite[$user]}" != +([0-9]) ]] && continue
if [[ "${conexao[$user]}" -gt "${limite[$user]}" ]]; then
local lock=$(block_userfun $user -loked)
usermod -L "$user" &>/dev/null
notibot_block $user
# pkill -u $user
# droplim=$(dropbear_pids | grep -w "$user" | cut -d'|' -f2)
# kill -9 $droplim &>/dev/null
# openlim=$(openvpn_pids | grep -w "$user" | cut -d'|' -f2)
# kill -9 $openlim &>/dev/null
echo "$user (LIM-MAXIMO) $(date +%r--%d/%m/%y)" >>$LIMITERLOG
echo "$user (LIM-MAXIMO) $(date +%r--%d/%m/%y)" >>$LIMITERLOG2
continue
fi
echo "${EXPIRED}0" | bc >/etc/SCRIPT-LATAM/temp/USRexpired
done <<<"$(mostrar_totales)"
fi
sed -i '/'-loked'/d' /etc/SCRIPT-LATAM/temp/userlock
BLOQUEADO="$(wc -l /etc/SCRIPT-LATAM/temp/userlock | awk '{print $1}')"
BLOQUEADO2="$(echo ${BLOQUEADO} | bc)0"
BLOQUEADO3="/10"
echo "${BLOQUEADO2}${BLOQUEADO3}" | bc >/etc/SCRIPT-LATAM/temp/USRbloqueados
sed -i -e 's/^[ \t]*//; s/[ \t]*$//; /^$/d' /etc/SCRIPT-LATAM/temp/userexp
EXPIRADO="$(wc -l /etc/SCRIPT-LATAM/temp/userexp | awk '{print $1}')"
EXPIRADO2="$(echo ${EXPIRADO} | bc)0"
EXPIRADO3="/10"
echo "${EXPIRADO2}${EXPIRADO3}" | bc >/etc/SCRIPT-LATAM/temp/USRexpired
clear
}
# DESBLOQUEO Y LIMPIEZA
desbloqueo_auto() {
unlockall3() {
for user in $(cat /etc/passwd | awk -F : '$3 > 900 {print $1}' | grep -v "rick" | grep -vi "nobody"); do
userpid=$(ps -u $user | awk {'print $1'})
usermod -U $user &>/dev/null
done
}
mostrar_totales() {
for u in $(cat /etc/SCRIPT-LATAM/cuentasactivast | cut -d'|' -f1); do
echo "$u"
done
}
rm_user() {
userdel --force "$1" &>/dev/null
}
rm_vencidos() {
red=$(tput setaf 1)
gren=$(tput setaf 2)
yellow=$(tput setaf 3)
txtvar=$(printf '%-42s' "\e[1;97m USUARIOS")
txtvar+=$(printf '%-1s' "\e[1;32m VALIDIDEZ")
echo -e "\033[1;92m${txtvar}"
expired="${red}Usuario Expirado"
valid="${gren}Usuario Vigente"
never="${yellow}Usuario Ilimitado"
removido="${red}Eliminado"
DataVPS=$(date +%s)
mostrar_usuariossh() {
for u in $(cat /etc/SCRIPT-LATAM/cuentassh | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariohwid() {
for u in $(cat /etc/SCRIPT-LATAM/cuentahwid | cut -d'|' -f1); do
echo "$u"
done
}
mostrar_usuariotoken() {
for u in $(cat /etc/SCRIPT-LATAM/cuentatoken | cut -d'|' -f1); do
echo "$u"
done
}
#---SSH NORMAL
while read user; do
DataUser=$(chage -l "${user}" | grep -i co | awk -F ":" '{print $2}')
usr=$user
while [[ ${#usr} -lt 34 ]]; do
usr=$usr" "
done
[[ "$DataUser" = " never" ]] && {
echo -e "\e[1;97m$usr $never"
continue
}
DataSEC=$(date +%s --date="$DataUser")
if [[ "$DataSEC" -lt "$DataVPS" ]]; then
echo -ne "\e[1;97m$usr $expired"
pkill -u $user &>/dev/null
droplim=$(dropbear_pids | grep -w "$user" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
# droplim=`droppids|grep -w "$user"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
rm_user "$user" && echo -e " y ($removido)"
userb=$(cat /etc/SCRIPT-LATAM/cuentassh | grep -n -w $user | cut -d'|' -f1 | cut -d':' -f1)
sed -i "${userb}d" /etc/SCRIPT-LATAM/cuentassh
else
echo -e "\e[1;97m$usr $valid"
fi
done <<<"$(mostrar_usuariossh)"
#---SSH HWID
while read user; do
DataUser=$(chage -l "${user}" | grep -i co | awk -F ":" '{print $2}')
usr=$user
while [[ ${#usr} -lt 34 ]]; do
usr=$usr" "
done
[[ "$DataUser" = " never" ]] && {
echo -e "\e[1;97m$usr $never"
continue
}
DataSEC=$(date +%s --date="$DataUser")
if [[ "$DataSEC" -lt "$DataVPS" ]]; then
echo -ne "\e[1;97m$usr $expired"
pkill -u $user &>/dev/null
droplim=$(dropbear_pids | grep -w "$user" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
# droplim=`droppids|grep -w "$user"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
rm_user "$user" && echo -e " y ($removido)"
sed -i '/'$user'/d' /etc/SCRIPT-LATAM/cuentahwid
else
echo -e "\e[1;97m$usr $valid"
fi
done <<<"$(mostrar_usuariohwid)"
#---SSH TOKEN
while read user; do
DataUser=$(chage -l "${user}" | grep -i co | awk -F ":" '{print $2}')
usr=$user
while [[ ${#usr} -lt 34 ]]; do
usr=$usr" "
done
[[ "$DataUser" = " never" ]] && {
echo -e "\e[1;97m$usr $never"
continue
}
DataSEC=$(date +%s --date="$DataUser")
if [[ "$DataSEC" -lt "$DataVPS" ]]; then
echo -ne "\e[1;97m$usr $expired"
pkill -u $user &>/dev/null
droplim=$(dropbear_pids | grep -w "$user" | cut -d'|' -f2)
kill -9 $droplim &>/dev/null
# droplim=`droppids|grep -w "$user"|cut -d'|' -f2`
# kill -9 $droplim &>/dev/null
rm_user "$user" && echo -e "y ($removido)"
sed -i '/'$user'/d' /etc/SCRIPT-LATAM/cuentatoken
else
echo -e "\e[1;97m$usr $valid"
fi
done <<<"$(mostrar_usuariotoken)"
rm -rf /etc/SCRIPT-LATAM/temp/userlock
rm -rf /etc/SCRIPT-LATAM/temp/userexp
unlockall2
}
unlockall3 &>/dev/null
rm_vencidos &>/dev/null
}
#--- LIMITADOR V2RAY
lim_expv2ray() {
expirados() {
VPSsec=$(date +%s)
local HOST="/etc/SCRIPT-LATAM/RegV2ray"
local HOST2="/etc/SCRIPT-LATAM/RegV2ray"
local RETURN="$(cat $HOST | cut -d'|' -f2)"
local IDEUUID="$(cat $HOST | cut -d'|' -f1)"
if [[ -z $RETURN ]]; then
echo ""
return 0
else
i=1
while read hostreturn; do
delbug() {
invaliduuid() {
exit
}
[[ $(sed -n '/'${hostreturn}'/=' /etc/v2ray/config.json | head -1) ]] || invaliduuid
lineP=$(sed -n '/'${hostreturn}'/=' /etc/v2ray/config.json)
linePre=$(sed -n '/'${hostreturn}'/=' /etc/SCRIPT-LATAM/RegV2ray)
sed -i "${linePre}d" /etc/SCRIPT-LATAM/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
}
DateExp="$(cat /etc/SCRIPT-LATAM/RegV2ray | grep -w "$hostreturn" | cut -d'|' -f3)"
if [[ ! -z $DateExp ]]; then
DataSec=$(date +%s --date="$DateExp")
[[ "$VPSsec" -gt "$DataSec" ]] && EXPTIME= delbug || EXPTIME="\e[92m[$(($(($DataSec - $VPSsec)) / 86400))]\e[97m Dias"
else
EXPTIME="\e[91m[ S/R ]"
fi
local contador_secuencial+="\e[93m$hostreturn \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/SCRIPT-LATAM/RegV2ray | wc -l)
echo -e "$contador_secuencial "
}
fi
}
expirados
v2ray restart >/dev/null 2>&1
}
# LIMITADOR AUTO
if [[ "$1" = "verificar" ]]; then
verif_fun
exit
fi
# DESBLOQUEO AUTO
if [[ "$1" = "desbloqueo" ]]; then
desbloqueo_auto
exit
fi
# LIMMITADOR V2RAY
if [[ "$1" = "exlimv2ray" ]]; then
lim_expv2ray
exit
fi
#--- FIREWALL
firewall_fun() {
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
declare -A cor=([0]="\033[1;37m" [1]="\033[1;34m" [2]="\033[1;31m" [3]="\033[1;33m" [4]="\033[1;32m")
sh_ver="1.0.11"
Green_font_prefix="\033[32m" && Red_font_prefix="\033[31m" && Green_background_prefix="\033[42;37m" && Red_background_prefix="\033[41;37m" && Font_color_suffix="\033[0m"
Info="${Green_font_prefix}[Informacion]${Font_color_suffix}"
Error="${Red_font_prefix}[Error]${Font_color_suffix}"
smtp_port="25,26,465,587"
pop3_port="109,110,995"
imap_port="143,218,220,993"
other_port="24,50,57,105,106,158,209,1109,24554,60177,60179"
bt_key_word="torrent
.torrent
peer_id=
announce
info_hash
get_peers
find_node
BitTorrent
announce_peer
BitTorrent protocol
announce.php?passkey=
magnet:
xunlei
sandai
Thunder
XLLiveUD"
check_sys() {
if [[ -f /etc/redhat-release ]]; then
release="centos"
elif cat /etc/issue | grep -q -E -i "debian"; then
release="debian"
elif cat /etc/issue | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
elif cat /proc/version | grep -q -E -i "debian"; then
release="debian"
elif cat /proc/version | grep -q -E -i "ubuntu"; then
release="ubuntu"
elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
release="centos"
fi
bit=$(uname -m)
}
check_BT() {
Cat_KEY_WORDS
BT_KEY_WORDS=$(echo -e "$Ban_KEY_WORDS_list" | grep "torrent")
}
check_SPAM() {
Cat_PORT
SPAM_PORT=$(echo -e "$Ban_PORT_list" | grep "${smtp_port}")
}
Cat_PORT() {
Ban_PORT_list=$(iptables -t filter -L OUTPUT -nvx --line-numbers | grep "REJECT" | awk '{print $13}')
}
Cat_KEY_WORDS() {
Ban_KEY_WORDS_list=""
Ban_KEY_WORDS_v6_list=""
if [[ ! -z ${v6iptables} ]]; then
Ban_KEY_WORDS_v6_text=$(${v6iptables} -t mangle -L OUTPUT -nvx --line-numbers | grep "DROP")
Ban_KEY_WORDS_v6_list=$(echo -e "${Ban_KEY_WORDS_v6_text}" | sed -r 's/.*\"(.+)\".*/\1/')
fi
Ban_KEY_WORDS_text=$(${v4iptables} -t mangle -L OUTPUT -nvx --line-numbers | grep "DROP")
Ban_KEY_WORDS_list=$(echo -e "${Ban_KEY_WORDS_text}" | sed -r 's/.*\"(.+)\".*/\1/')
}
View_PORT() {
clear && clear
msg -bar
msg -tit
msg -bar
Cat_PORT
echo -e "\e[97m=========${Red_background_prefix} Puerto Bloqueado Actualmente ${Font_color_suffix}==========="
echo -e "$Ban_PORT_list"
}
View_KEY_WORDS() {
Cat_KEY_WORDS
echo -e "\e[97m=============${Red_background_prefix} Actualmente Prohibido ${Font_color_suffix}=============="
echo -e "$Ban_KEY_WORDS_list"
}
View_ALL() {
echo
View_PORT
View_KEY_WORDS
msg -bar2
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
firewall_fun
}
Save_iptables_v4_v6() {
if [[ ${release} == "centos" ]]; then
if [[ ! -z "$v6iptables" ]]; then
service ip6tables save
chkconfig --level 2345 ip6tables on
fi
service iptables save
chkconfig --level 2345 iptables on
else
if [[ ! -z "$v6iptables" ]]; then
ip6tables-save >/etc/ip6tables.up.rules
echo -e "#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules\n/sbin/ip6tables-restore < /etc/ip6tables.up.rules" >/etc/network/if-pre-up.d/iptables
else
echo -e "#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules" >/etc/network/if-pre-up.d/iptables
fi
iptables-save >/etc/iptables.up.rules
chmod +x /etc/network/if-pre-up.d/iptables
fi
}
Set_key_word() {
$1 -t mangle -$3 OUTPUT -m string --string "$2" --algo bm --to 65535 -j DROP
}
Set_tcp_port() {
[[ "$1" = "$v4iptables" ]] && $1 -t filter -$3 OUTPUT -p tcp -m multiport --dports "$2" -m state --state NEW,ESTABLISHED -j REJECT --reject-with icmp-port-unreachable
[[ "$1" = "$v6iptables" ]] && $1 -t filter -$3 OUTPUT -p tcp -m multiport --dports "$2" -m state --state NEW,ESTABLISHED -j REJECT --reject-with tcp-reset
}
Set_udp_port() { $1 -t filter -$3 OUTPUT -p udp -m multiport --dports "$2" -j DROP; }
Set_SPAM_Code_v4() {
for i in ${smtp_port} ${pop3_port} ${imap_port} ${other_port}; do
Set_tcp_port $v4iptables "$i" $s
Set_udp_port $v4iptables "$i" $s
done
}
Set_SPAM_Code_v4_v6() {
for i in ${smtp_port} ${pop3_port} ${imap_port} ${other_port}; do
for j in $v4iptables $v6iptables; do
Set_tcp_port $j "$i" $s
Set_udp_port $j "$i" $s
done
done
}
Set_PORT() {
if [[ -n "$v4iptables" ]] && [[ -n "$v6iptables" ]]; then
Set_tcp_port $v4iptables $PORT $s
Set_udp_port $v4iptables $PORT $s
Set_tcp_port $v6iptables $PORT $s
Set_udp_port $v6iptables $PORT $s
elif [[ -n "$v4iptables" ]]; then
Set_tcp_port $v4iptables $PORT $s
Set_udp_port $v4iptables $PORT $s
fi
Save_iptables_v4_v6
}
Set_KEY_WORDS() {
key_word_num=$(echo -e "${key_word}" | wc -l)
for ((integer = 1; integer <= ${key_word_num}; integer++)); do
i=$(echo -e "${key_word}" | sed -n "${integer}p")
Set_key_word $v4iptables "$i" $s
[[ ! -z "$v6iptables" ]] && Set_key_word $v6iptables "$i" $s
done
Save_iptables_v4_v6
}
Set_BT() {
key_word=${bt_key_word}
Set_KEY_WORDS
Save_iptables_v4_v6
}
Set_SPAM() {
if [[ -n "$v4iptables" ]] && [[ -n "$v6iptables" ]]; then
Set_SPAM_Code_v4_v6
elif [[ -n "$v4iptables" ]]; then
Set_SPAM_Code_v4
fi
Save_iptables_v4_v6
}
Set_ALL() {
Set_BT
Set_SPAM
}
Ban_BT() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m PANEL DE FIREWALL LATAM"
msg -bar
check_BT
[[ ! -z ${BT_KEY_WORDS} ]] && echo -e "${Error} Torrent bloqueados y Palabras Claves, no es\nnecesario volver a prohibirlas !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
s="A"
Set_BT
View_ALL
echo -e "${Info} Torrent bloqueados y Palabras Claves !"
msg -bar2
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
firewall_fun
}
Ban_SPAM() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m PANEL DE FIREWALL LATAM"
msg -bar
check_SPAM
[[ ! -z ${SPAM_PORT} ]] && echo -e "${Error} Se detectó un puerto SPAM bloqueado, no es\nnecesario volver a bloquear !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
s="A"
Set_SPAM
View_ALL
echo -e "${Info} Puertos SPAM Bloqueados !"
msg -bar2
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
firewall_fun
}
Ban_ALL() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m PANEL DE FIREWALL LATAM"
msg -bar
check_BT
check_SPAM
s="A"
if [[ -z ${BT_KEY_WORDS} ]]; then
if [[ -z ${SPAM_PORT} ]]; then
Set_ALL
View_ALL
echo -e "${Info} Torrent bloqueado, Palabras Claves y Puertos SPAM !"
msg -bar2
else
Set_BT
View_ALL
echo -e "${Info} Torrent bloqueado y Palabras Claves !"
fi
else
if [[ -z ${SPAM_PORT} ]]; then
Set_SPAM
View_ALL
echo -e "${Info} Puerto SPAM (spam) prohibido !"
else
echo -e "${Error} Torrent Bloqueado, Palabras Claves y\n Puertos SPAM,no es necesario volver a prohibir !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
fi
fi
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
firewall_fun
}
UnBan_BT() {
check_BT
[[ -z ${BT_KEY_WORDS} ]] && echo -e "${Error} Torrent y Palabras Claves no bloqueadas, verifique !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
s="D"
Set_BT
View_ALL
echo -e "${Info} Torrent Desbloqueados y Palabras Claves !"
msg -bar2
}
UnBan_SPAM() {
check_SPAM
[[ -z ${SPAM_PORT} ]] && echo -e "${Error} Puerto SPAM no detectados, verifique !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
s="D"
Set_SPAM
View_ALL
echo -e "${Info} Puertos de SPAM Desbloqueados !"
msg -bar2
}
UnBan_ALL() {
check_BT
check_SPAM
s="D"
if [[ ! -z ${BT_KEY_WORDS} ]]; then
if [[ ! -z ${SPAM_PORT} ]]; then
Set_ALL
View_ALL
echo -e "${Info} Torrent, Palabras Claves y Puertos SPAM Desbloqueados !"
msg -bar2
else
Set_BT
View_ALL
echo -e "${Info} Torrent, Palabras Claves Desbloqueados !"
msg -bar2
fi
else
if [[ ! -z ${SPAM_PORT} ]]; then
Set_SPAM
View_ALL
echo -e "${Info} Puertos SPAM Desbloqueados !"
msg -bar2
else
echo -e "${Error} No se detectan Torrent, Palabras Claves y \nPuertos SPAM Bloqueados, verifique !" && msg -bar && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
fi
fi
}
ENTER_Ban_KEY_WORDS_type() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m PANEL DE FIREWALL LATAM"
msg -bar
Type=$1
Type_1=$2
if [[ $Type_1 != "ban_1" ]]; then
echo -e "Por favor seleccione un tipo de entrada:"
echo ""
echo -ne " \e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m ENTRADA MANUAL \e[97m \n"
echo -ne " \e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \033[1;97m LECTURA LOCAL DE ARCHIVOS\e[97m \n"
echo -ne " \e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \033[1;97m LECTURA DESDE DIRECCION DE RED\e[97m \n"
echo""
msg -bar
echo -ne "\e[1;97m(Por defecto: 1. Entrada manual):\033[1;92m " && read key_word_type
fi
[[ -z "${key_word_type}" ]] && key_word_type="1"
if [[ ${key_word_type} == "1" ]]; then
if [[ $Type == "ban" ]]; then
ENTER_Ban_KEY_WORDS
else
ENTER_UnBan_KEY_WORDS
fi
elif [[ ${key_word_type} == "2" ]]; then
ENTER_Ban_KEY_WORDS_file
elif [[ ${key_word_type} == "3" ]]; then
ENTER_Ban_KEY_WORDS_url
else
if [[ $Type == "ban" ]]; then
ENTER_Ban_KEY_WORDS
else
ENTER_UnBan_KEY_WORDS
fi
fi
}
ENTER_Ban_PORT() {
clear && clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m PANEL DE FIREWALL LATAM"
msg -bar
echo -e "\e[1;97mIngrese el puerto que desea Bloquear"
if [[ ${Ban_PORT_Type_1} != "1" ]]; then
echo -e "
${Green_font_prefix}======== Ejemplo Descripción ========${Font_color_suffix}
\e[1;97m-Puerto único: 25
-Multipuerto: 25, 26, 465, 587
-Segmento de puerto: 25:587 " && echo
fi
msg -bar
echo -ne "\e[1;97m(Preciona Intro y Cancela):\033[1;92m " && read PORT
[[ -z "${PORT}" ]] && echo "Cancelado..." && View_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
}
ENTER_Ban_KEY_WORDS() {
if [[ ${Type_1} != "ban_1" ]]; then
echo ""
echo -e " ${Green_font_prefix}======== Ejemplo Descripción ========${Font_color_suffix}
-Palabra : youtube o youtube.com o www.youtube.com
-Palabra : .zip o .tar " && echo
fi
echo -ne "\e[1;97m(Intro se cancela por defecto):\033[1;92m " && read key_word
[[ -z "${key_word}" ]] && echo "Cancelado ..." && View_ALL && echo -ne "\e[1;97m(Intro se cancela por defecto):\033[1;92m " && read portbg
}
ENTER_Ban_KEY_WORDS_file() {
echo""
echo -e "\e[1;97mIngrese el archivo local de palabras en root"
echo -ne "\e[1;97m(Leer key_word.txt o ruta):\033[1;92m " && read key_word
[[ -z "${key_word}" ]] && key_word="/root/key_word.txt"
if [[ -e "${key_word}" ]]; then
key_word=$(cat "${key_word}")
[[ -z ${key_word} ]] && echo -e "${Error} El contenido del archivo está vacío. !" && View_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
else
echo -e "${Error} Archivo no encontrado ${key_word} !" && View_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
fi
}
ENTER_Ban_KEY_WORDS_url() {
echo ""
echo -e "\e[1;97mIngrese la dirección del archivo de red de palabras \nclave que se prohibirá / desbloqueará \n(Ejemplo, http: //xxx.xx/key_word.txt)" && echo
echo -ne "\e[1;97m(Intro se cancela por defecto):\033[1;92m " && read key_word
[[ -z "${key_word}" ]] && echo "Cancelado ..." && View_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
key_word=$(wget --no-check-certificate -t3 -T5 -qO- "${key_word}")
[[ -z ${key_word} ]] && echo -e "${Error} El contenido del archivo de red está vacío o se agotó el tiempo de acceso !" && View_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
}
ENTER_UnBan_KEY_WORDS() {
View_KEY_WORDS
echo""
echo -e "Ingrese la palabra clave que desea desbloquear" && echo
read -e -p "(Intro se cancela por defecto):" key_word
[[ -z "${key_word}" ]] && echo "Cancelado ..." && View_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
}
ENTER_UnBan_PORT() {
msg -bar
echo -e "Ingrese el puerto que desea desempaquetar:\n"
echo -ne "\e[1;97m(Intro se cancela por defecto):\033[1;92m " && read PORT
[[ -z "${PORT}" ]] && echo "Cancelado ..." && View_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
}
Ban_PORT() {
s="A"
ENTER_Ban_PORT
Set_PORT
echo -e "${Info} Puerto bloqueado [ ${PORT} ] !\n"
Ban_PORT_Type_1="1"
while true; do
ENTER_Ban_PORT
Set_PORT
echo -e "${Info} Puerto bloqueado [ ${PORT} ] !\n"
done
View_ALL
}
Ban_KEY_WORDS() {
s="A"
ENTER_Ban_KEY_WORDS_type "ban"
Set_KEY_WORDS
echo -e "${Info} Palabras clave bloqueadas [ ${key_word} ] !\n"
while true; do
ENTER_Ban_KEY_WORDS_type "ban" "ban_1"
Set_KEY_WORDS
echo -e "${Info} Palabras clave bloqueadas [ ${key_word} ] !\n"
done
View_ALL
}
UnBan_PORT() {
s="D"
View_PORT
[[ -z ${Ban_PORT_list} ]] && echo -e "${Error} Se detecta cualquier puerto no bloqueado !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
ENTER_UnBan_PORT
Set_PORT
echo -e "${Info} Puerto decapsulado [ ${PORT} ] !\n"
while true; do
View_PORT
[[ -z ${Ban_PORT_list} ]] && echo -e "${Error} No se detecta puertos bloqueados !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
ENTER_UnBan_PORT
Set_PORT
echo -e "${Info} Puerto decapsulado [ ${PORT} ] !\n"
done
View_ALL
}
UnBan_KEY_WORDS() {
s="D"
Cat_KEY_WORDS
[[ -z ${Ban_KEY_WORDS_list} ]] && echo -e "${Error} No se ha detectado ningún bloqueo !" && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
ENTER_Ban_KEY_WORDS_type "unban"
Set_KEY_WORDS
echo -e "${Info} Palabras clave desbloqueadas [ ${key_word} ] !\n"
while true; do
Cat_KEY_WORDS
[[ -z ${Ban_KEY_WORDS_list} ]] && echo -e "${Error} No se ha detectado ningún bloqueo !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
ENTER_Ban_KEY_WORDS_type "unban" "ban_1"
Set_KEY_WORDS
echo -e "${Info} Palabras clave desbloqueadas [ ${key_word} ] !\n"
done
View_ALL
}
UnBan_KEY_WORDS_ALL() {
Cat_KEY_WORDS
[[ -z ${Ban_KEY_WORDS_text} ]] && echo -e "${Error} No se detectó ninguna clave, verifique !" && msg -bar2 && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
if [[ ! -z "${v6iptables}" ]]; then
Ban_KEY_WORDS_v6_num=$(echo -e "${Ban_KEY_WORDS_v6_list}" | wc -l)
for ((integer = 1; integer <= ${Ban_KEY_WORDS_v6_num}; integer++)); do
${v6iptables} -t mangle -D OUTPUT 1
done
fi
Ban_KEY_WORDS_num=$(echo -e "${Ban_KEY_WORDS_list}" | wc -l)
for ((integer = 1; integer <= ${Ban_KEY_WORDS_num}; integer++)); do
${v4iptables} -t mangle -D OUTPUT 1
done
Save_iptables_v4_v6
View_ALL
echo -e "${Info} Todas las palabras clave han sido desbloqueadas !"
}
check_iptables() {
v4iptables=$(iptables -V)
v6iptables=$(ip6tables -V)
if [[ ! -z ${v4iptables} ]]; then
v4iptables="iptables"
if [[ ! -z ${v6iptables} ]]; then
v6iptables="ip6tables"
fi
else
echo -e "${Error} El firewall de iptables no está instalado !
Por favor, instale el firewall de iptables:
CentOS Sistema yum install iptables -y
Debian / Ubuntu Sistema apt-get install iptables -y"
fi
}
resetiptables() {
msg -bar
echo -e "\e[1;97m Reiniciando Ipetables Espere"
iptables -F && iptables -X && iptables -t nat -F && iptables -t nat -X && iptables -t mangle -F && iptables -t mangle -X && iptables -t raw -F && iptables -t raw -X && iptables -t security -F && iptables -t security -X && iptables -P INPUT ACCEPT && iptables -P FORWARD ACCEPT && iptables -P OUTPUT ACCEPT
echo -e "\e[1;92m >> IPTABLES reiniciadas con EXITO <<"
msg -bar
read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n'
firewall_fun
}
check_sys
check_iptables
action=$1
if [[ ! -z $action ]]; then
[[ $action = "banbt" ]] && Ban_BT && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
[[ $action = "banspam" ]] && Ban_SPAM && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
[[ $action = "banall" ]] && Ban_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
[[ $action = "unbanbt" ]] && UnBan_BT && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
[[ $action = "unbanspam" ]] && UnBan_SPAM && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
[[ $action = "unbanall" ]] && UnBan_ALL && read -t 60 -n 1 -rsp $'\033[1;39m << Presiona enter para Continuar >>\n' && firewall_fun
fi
clear
clear
msg -bar
msg -tit
msg -bar
echo -e "\e[1;93m PANEL DE FIREWALL LATAM"
echo -e "\033[38;5;239m═══════════════════\e[48;5;1m\e[38;5;230m BLOQUEAR \e[0m\e[38;5;239m═════════════════════"
echo -e "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m > \e[1;97m TORRENT Y PALABRAS CLAVE" #Ban_BT
echo -e "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m > \e[1;97m PUERTOS SPAM " #Ban_SPAM
echo -e "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m > \e[1;97m TORRENT PALABRAS CLAVE Y PUERTOS SPAM" #Ban_ALL
echo -e "\e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97m PUERTO PERSONALIZADO" #Ban_PORT
echo -e "\e[1;93m [\e[1;32m5\e[1;93m]\033[1;31m > \e[1;97m PALABRAS CLAVE PERSONALIZADAS" #Ban_KEY_WORDS
echo -e "\033[38;5;239m═════════════════\e[48;5;2m\e[38;5;22m DESBLOQUEAR \e[0m\e[38;5;239m════════════════════"
echo -e "\e[1;93m [\e[1;32m6\e[1;93m]\033[1;31m > \e[1;97m TORRENT Y PALABRAS CLAVE" #UnBan_BT
echo -e "\e[1;93m [\e[1;32m7\e[1;93m]\033[1;31m > \e[1;97m PUERTOS SPAM" #UnBan_SPAM
echo -e "\e[1;93m [\e[1;32m8\e[1;93m]\033[1;31m > \e[1;97m TORRENT PALABRAS CLAVE Y PUERTOS SPAM" #UnBan_ALL
echo -e "\e[1;93m [\e[1;32m9\e[1;93m]\033[1;31m > \e[1;97m PUERTO PERSONALIZADO" #UnBan_PORT
echo -e "\e[1;93m [\e[1;32m10\e[1;93m]\033[1;31m > \e[1;97m PALABRA CLAVE PERSONALIZADAS" #UnBan_KEY_WORDS
echo -e "\e[1;93m [\e[1;32m11\e[1;93m]\033[1;31m > \e[1;97m TODAS LAS PALABRAS CLAVE PERSONALIZADAS" #UnBan_KEY_WORDS_ALL
echo -e "\e[1;93m [\e[1;32m12\e[1;93m]\033[1;31m > \e[1;92m REINICIAR TOTAS LAS IPTABLES" #UnBan_KEY_WORDS_ALL
echo -e "\033[38;5;239m════════════════════════════════════════════════════"
echo -e "\e[1;93m [\e[1;32m13\e[1;93m]\033[1;31m > \e[1;93m VER LA LISTA ACTUAL DE PROHIBIDOS" #View_ALL
msg -bar
echo -e " \e[97m\033[1;41m ENTER SIN RESPUESTA REGRESA A MENU ANTERIOR \033[0;97m"
msg -bar
echo -ne "\033[1;97m └⊳ Seleccione una opcion [0-18]: \033[1;32m" && read num
case "$num" in
1)
Ban_BT
;;
2)
Ban_SPAM
;;
3)
Ban_ALL
;;
4)
Ban_PORT
;;
5)
Ban_KEY_WORDS
;;
6)
UnBan_BT
;;
7)
UnBan_SPAM
;;
8)
UnBan_ALL
;;
9)
UnBan_PORT
;;
10)
UnBan_KEY_WORDS
;;
11)
UnBan_KEY_WORDS_ALL
;;
12)
resetiptables
;;
13)
View_ALL
;;
*)
menu
;;
esac
exit 0
}
#--- ACTUALIZADOR REMOTO
actulizar_fun() {
clear && clear
actu_fun() {
v1=$(curl -sSL "https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Version")
echo "$v1" >/etc/SCRIPT-LATAM/temp/version_instalacion
wget -O /etc/SCRIPT-LATAM/menu.sh https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Codigo-Base/menu.sh &>/dev/null
chmod +rwx /etc/SCRIPT-LATAM/menu.sh
wget -O /bin/rebootnb https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/Ejecutables/rebootnb.sh &>/dev/null
chmod +rwx /bin/rebootnb
}
msg -bar
msg -tit
msg -bar
echo -e "\a\a\a\a\e[1;93m >>> ACTULIZAR SCRIPT-LATAM <<< "
msg -bar
echo -e "\e[1;97m Cambios Actuales"
registro=$(curl -sSL "https://raw.githubusercontent.com/NetVPS/LATAM_Oficial/main/cambios")
echo -ne "$registro"
echo ""
echo -e "\e[1;97m Proceder con la Actulizacion?"
msg -bar
echo -ne "\033[1;97m Seleccione \033[1;31m[\033[1;93m S \033[1;31m/\033[1;93m N \033[1;31m]\033[1;97m: \033[1;93m" && read tu_ip
[[ "$tu_ip" = "s" || "$tu_ip" = "S" ]] && actu_fun &>/dev/null && tput cuu1 && tput dl1 && echo -e " \e[1;32m >> ACTUALIZACION COMPLETA <<" | pv -qL 10
msg -bar
}
[[ ! -e /etc/SCRIPT-LATAM/temp/version_instalacion ]] && echo 1 >/etc/SCRIPT-LATAM/temp/version_instalacion
v11=$(cat /etc/SCRIPT-LATAM/temp/version_actual)
v22=$(cat /etc/SCRIPT-LATAM/temp/version_instalacion)
[[ $v11 = $v22 ]] && checkver="\e[1;32m---------| ACTUALIZAR SCRIPT |-----------" || checkver="\e[1;31m----------| ACTUALIZAR SCRIPT |----------"
#MENU PRINCIPAL
echo -e "\033[38;5;239m═══════════════\e[100m\e[97m CONTROL DE CUENTAS \e[0m\e[38;5;239m═══════════════"
echo -ne "\e[1;93m [\e[1;32m1\e[1;93m]\033[1;31m >\e[1;38;5;220m SSH/OPENVPN \e[1;97m|\e[0;97m" && echo -ne "\e[1;93m [\e[1;32m2\e[1;93m]\033[1;31m >\e[1;38;5;220m SS/SSR \e[1;97m|\e[0;97m" && echo -ne "\e[1;93m [\e[1;32m3\e[1;93m]\033[1;31m >\e[1;38;5;220m V2RAY\e[0;97m\n"
echo -e "\e[38;5;239m════════════════════════════════════════════════════"
echo -ne "\e[1;93m [\e[1;32m4\e[1;93m]\033[1;31m > \e[1;97mINSTALAR PROTOCOLOS\e[0;97m " && echo -ne "\e[1;93m[\e[1;32m5\e[1;93m]\033[1;31m >\e[38;5;76m PUERTOS ACTIVOS \e[0;97m\n"
echo -ne "\e[1;93m [\e[1;32m6\e[1;93m]\033[1;31m > \e[1;97mHERRAMIENTAS \e[97m " && echo -ne "\e[1;93m[\e[1;32m7\e[1;93m]\033[1;31m >\e[38;5;42m MONITOR HTOP \e[0;97m\n"
echo -ne "\e[1;93m [\e[1;32m8\e[1;93m]\033[1;31m > \e[1;97mAJUSTES BASICOS DE FIREWALL\e[97m \n"
echo -ne "\e[1;93m [\e[1;32m9\e[1;93m]\033[1;31m > \e[1;97mMONITOR DE PROTOCOLOS ----------> ${monitorservi} \e[97m \n"
echo -ne "\e[1;93m [\e[1;32m10\e[1;93m]\033[1;31m > \e[1;97mAUTO MANTENIMIENTO -------------> ${autolim} \e[97m \n"
echo -ne "\e[1;93m [\e[1;32m11\e[1;93m]\033[1;31m > \e[1;97mAUTO INICIAR SCRIPT ------------> $AutoRun \e[97m \n"
echo -ne "\e[1;93m [\e[1;32m12\e[1;93m]\033[1;31m > \e[1;32m$checkver\n"
#msg -bar
echo -ne "\e[1;93m [\e[1;32m13\e[1;93m]\033[1;31m > \e[1;90m-------| TERMINOS Y CONDICIONES |-------- \n"
msg -bar
echo -ne "\e[1;93m [\e[1;32m14\e[1;93m]\033[1;31m > |-DESINSTALAR-| " && echo -ne "\e[1;93m [\e[1;32m0\e[1;93m]\033[1;31m > \033[1;41m ❗️\e[1;97m SALIR ❗️ \e[0m\n"
msg -bar
selection=$(selection_fun 14)
case ${selection} in
1) controlador_ssh ;;
2) controlador_ssr ;;
3) control_v2ray ;;
4) menu_inst ;;
5) mine_port ;;
6) herramientas_fun ;;
7) monhtop ;;
8) firewall_fun ;;
9) monservi_fun ;;
10) autolimpieza_fun ;;
11) fun_autorun ;;
12) actulizar_fun ;;
13) creditoss ;;
14) remove_script ;;
0)
cd $HOME && clear
clear
exit 0
;;
esac
#msg -ne "Enter Para Continuar" && read enter
${SCPdir}/menu.sh