337 lines
11 KiB
Bash
337 lines
11 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
#====FUNCIONES==========
|
||
|
|
|
||
|
|
# SI USAS ESTE FORMATO, RECUERDA CAMBIAR TUS ZONAS ID DE TU DOMINIO #
|
||
|
|
# INCLUIDO CON EL TOKEN DE TU ZONA DIRIGIDO A TU DOMINIO #
|
||
|
|
# NO SEAS RATA Y CONFIERE SOLICITUD DIRECTO CON EL DESARROLLADOR !! #
|
||
|
|
|
||
|
|
source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Recursos/module)
|
||
|
|
source <(curl -sSL https://gitea.com/drowkid01/scriptdk1/raw/branch/main/msg-bar/msg)
|
||
|
|
ADM_crt=''
|
||
|
|
Key="$(cat /etc/cghkey)"
|
||
|
|
#jq
|
||
|
|
|
||
|
|
fssl() {
|
||
|
|
msg -bar
|
||
|
|
echo ""
|
||
|
|
echo -e " INSTALL SERVICIOS NECESARIOS "
|
||
|
|
echo ""
|
||
|
|
msg -bar
|
||
|
|
[[ $(dpkg --get-selections|grep -w "jq"|head -1) ]] || apt-get install jq -y &>/dev/null
|
||
|
|
[[ $(dpkg --get-selections|grep -w "jq"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null
|
||
|
|
[[ $(dpkg --get-selections|grep -w "jq"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null
|
||
|
|
echo -e "\033[97m # apt-get install jq ................. $ESTATUS "
|
||
|
|
[[ $(dpkg --get-selections|grep -w "nodejs"|head -1) ]] || apt-get install nodejs -y &>/dev/null
|
||
|
|
[[ $(dpkg --get-selections|grep -w "nodejs"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null
|
||
|
|
[[ $(dpkg --get-selections|grep -w "nodejs"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null
|
||
|
|
echo -e "\033[97m # apt-get install nodejs .............. $ESTATUS "
|
||
|
|
[[ $(dpkg --get-selections|grep -w "npm"|head -1) ]] || apt-get install npm -y &>/dev/null
|
||
|
|
[[ $(dpkg --get-selections|grep -w "npm"|head -1) ]] || ESTATUS=`echo -e "\033[91mFALLO DE INSTALACION"` &>/dev/null
|
||
|
|
[[ $(dpkg --get-selections|grep -w "npm"|head -1) ]] && ESTATUS=`echo -e "\033[92mINSTALADO"` &>/dev/null
|
||
|
|
echo -e "\033[97m # apt-get install npm ................ $ESTATUS "
|
||
|
|
echo "" > /etc/fixcssl
|
||
|
|
}
|
||
|
|
|
||
|
|
[[ -e /etc/fixcssl ]] || fssl
|
||
|
|
|
||
|
|
cert_install(){
|
||
|
|
#apt install socat netcat -y
|
||
|
|
if [[ ! -e $HOME/.acme.sh/acme.sh ]];then
|
||
|
|
msg -bar3
|
||
|
|
msg -ama " Instalando script acme.sh"
|
||
|
|
curl -s "https://get.acme.sh" | sh &>/dev/null
|
||
|
|
fi
|
||
|
|
if [[ ! -z "${mail}" ]]; then
|
||
|
|
title "LOGEANDO EN Zerossl"
|
||
|
|
sleep 3
|
||
|
|
$HOME/.acme.sh/acme.sh --register-account -m ${mail} --server zerossl
|
||
|
|
$HOME/.acme.sh/acme.sh --set-default-ca --server zerossl
|
||
|
|
enter
|
||
|
|
else
|
||
|
|
title "APLICANDO SERVIDOR letsencrypt"
|
||
|
|
sleep 3
|
||
|
|
$HOME/.acme.sh/acme.sh --set-default-ca --server letsencrypt
|
||
|
|
enter
|
||
|
|
fi
|
||
|
|
title "GENERANDO CERTIFICADO SSL"
|
||
|
|
sleep 3
|
||
|
|
if "$HOME"/.acme.sh/acme.sh --issue -d "${domain}" --standalone -k ec-256 --force; then
|
||
|
|
"$HOME"/.acme.sh/acme.sh --installcert -d "${domain}" --fullchainpath ${ADM_crt}/${domain}.crt --keypath ${ADM_crt}/${domain}.key --ecc --force &>/dev/null
|
||
|
|
[[ ! -d /data ]] && mkdir /data
|
||
|
|
[[ -e ${ADM_crt}/${domain}.crt ]] && cp ${ADM_crt}/${domain}.crt /data/cert.crt
|
||
|
|
[[ -e ${ADM_crt}/${domain}.key ]] && cp ${ADM_crt}/${domain}.key /data/cert.key
|
||
|
|
[[ -e ${ADM_crt}/ca.cer ]] && cp ${ADM_crt}/ca.cer /data/ca.crt
|
||
|
|
rm -rf $HOME/.acme.sh/${domain}_ecc
|
||
|
|
msg -bar
|
||
|
|
print_center -verd "Certificado SSL se genero con éxito"
|
||
|
|
#echo "${ADM_crt}/${domain}.crt "
|
||
|
|
_mssBOT "CERTIFICADO EMTIDO EXITOSAMENTE" "$domain"
|
||
|
|
enter
|
||
|
|
else
|
||
|
|
rm -rf "$HOME/.acme.sh/${domain}_ecc"
|
||
|
|
msg -bar
|
||
|
|
print_center -verm2 "Error al generar el certificado SSL"
|
||
|
|
_mssBOT " ERROR AL EMITIR CERTIFICADO " "$domain"
|
||
|
|
msg -bar
|
||
|
|
msg -ama " verifique los posibles error"
|
||
|
|
msg -ama " e intente de nuevo"
|
||
|
|
enter
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
ext_cert(){
|
||
|
|
unset cert
|
||
|
|
declare -A cert
|
||
|
|
title "INTALADOR DE CERTIFICADO EXTERNO"
|
||
|
|
print_center -azu "Requiere tener a mano su certificado ssl"
|
||
|
|
print_center -azu "junto a su correspondiente clave privada"
|
||
|
|
msg -bar
|
||
|
|
msg -ne " Continuar...[S/N]: "
|
||
|
|
read opcion
|
||
|
|
[[ $opcion != @(S|s|Y|y) ]] && return 1
|
||
|
|
|
||
|
|
|
||
|
|
title "INGRESE EL CONTENIDO DE SU CERTIFICADO SSL"
|
||
|
|
msg -ama ' a continuacion se abrira el editor de texto nano
|
||
|
|
ingrese el contenido de su certificado
|
||
|
|
guardar precionando "CTRL+x"
|
||
|
|
luego "S o Y" segun el idioma
|
||
|
|
y por ultimo "enter"'
|
||
|
|
msg -bar
|
||
|
|
msg -ne " Continuar...[S/N]: "
|
||
|
|
read opcion
|
||
|
|
[[ $opcion != @(S|s|Y|y) ]] && return 1
|
||
|
|
rm -rf ${ADM_tmp}/tmp.crt
|
||
|
|
clear
|
||
|
|
nano ${ADM_tmp}/tmp.crt
|
||
|
|
|
||
|
|
title "INGRESE EL CONTENIDO DE CLAVE PRIVADA"
|
||
|
|
msg -ama ' a continuacion se abrira el editor de texto nano
|
||
|
|
ingrese el contenido de su clave privada.
|
||
|
|
guardar precionando "CTRL+x"
|
||
|
|
luego "S o Y" segun el idioma
|
||
|
|
y por ultimo "enter"'
|
||
|
|
msg -bar
|
||
|
|
msg -ne " Continuar...[S/N]: "
|
||
|
|
read opcion
|
||
|
|
[[ $opcion != @(S|s|Y|y) ]] && return 1
|
||
|
|
${ADM_tmp}/tmp.key
|
||
|
|
clear
|
||
|
|
nano ${ADM_tmp}/tmp.key
|
||
|
|
|
||
|
|
if openssl x509 -in ${ADM_tmp}/tmp.crt -text -noout &>/dev/null ; then
|
||
|
|
DNS=$(openssl x509 -in ${ADM_tmp}/tmp.crt -text -noout | grep 'DNS:'|sed 's/, /\n/g'|sed 's/DNS:\| //g')
|
||
|
|
rm -rf ${ADM_crt}/*
|
||
|
|
if [[ $(echo "$DNS"|wc -l) -gt "1" ]]; then
|
||
|
|
DNS="multi-domain"
|
||
|
|
fi
|
||
|
|
mv ${ADM_tmp}/tmp.crt ${ADM_crt}/$DNS.crt
|
||
|
|
mv ${ADM_tmp}/tmp.key ${ADM_crt}/$DNS.key
|
||
|
|
|
||
|
|
title "INSTALACION COMPLETA"
|
||
|
|
echo -e "$(msg -verm2 "Domi: ")$(msg -ama "$DNS")"
|
||
|
|
echo -e "$(msg -verm2 "Emit: ")$(msg -ama "$(openssl x509 -noout -in ${ADM_crt}/$DNS.crt -startdate|sed 's/notBefore=//g')")"
|
||
|
|
echo -e "$(msg -verm2 "Expi: ")$(msg -ama "$(openssl x509 -noout -in ${ADM_crt}/$DNS.crt -enddate|sed 's/notAfter=//g')")"
|
||
|
|
echo -e "$(msg -verm2 "Cert: ")$(msg -ama "$(openssl x509 -noout -in ${ADM_crt}/$DNS.crt -issuer|sed 's/issuer=//g'|sed 's/ = /=/g'|sed 's/, /\n /g')")"
|
||
|
|
msg -bar
|
||
|
|
echo "$DNS" > ${ADM_src}/dominio.txt
|
||
|
|
read foo
|
||
|
|
else
|
||
|
|
rm -rf ${ADM_tmp}/tmp.crt
|
||
|
|
rm -rf ${ADM_tmp}/tmp.key
|
||
|
|
clear
|
||
|
|
msg -bar
|
||
|
|
print_center -verm2 "ERROR DE DATOS"
|
||
|
|
msg -bar
|
||
|
|
msg -ama " Los datos ingresados no son validos.\n por favor verifique.\n e intente de nuevo!!"
|
||
|
|
msg -bar
|
||
|
|
read foo
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
stop_port(){
|
||
|
|
msg -bar3
|
||
|
|
msg -ama " Comprovando puertos..."
|
||
|
|
ports=('80' '443')
|
||
|
|
|
||
|
|
for i in ${ports[@]}; do
|
||
|
|
if [[ 0 -ne $(lsof -i:$i | grep -i -c "listen") ]]; then
|
||
|
|
msg -bar3
|
||
|
|
echo -ne "$(msg -ama " Liberando puerto: $i")"
|
||
|
|
lsof -i:$i | awk '{print $2}' | grep -v "PID" | xargs kill -9
|
||
|
|
sleep 2s
|
||
|
|
if [[ 0 -ne $(lsof -i:$i | grep -i -c "listen") ]];then
|
||
|
|
tput cuu1 && tput dl1
|
||
|
|
print_center -verm2 "ERROR AL LIBERAR PURTO $i"
|
||
|
|
msg -bar3
|
||
|
|
msg -ama " Puerto $i en uso."
|
||
|
|
msg -ama " auto-liberacion fallida"
|
||
|
|
msg -ama " detenga el puerto $i manualmente"
|
||
|
|
msg -ama " e intentar nuevamente..."
|
||
|
|
msg -bar
|
||
|
|
read foo
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
ger_cert(){
|
||
|
|
clear
|
||
|
|
case $1 in
|
||
|
|
1) title "Generador De Certificado Let's Encrypt";;
|
||
|
|
2) title "Generador De Certificado Zerossl";;
|
||
|
|
esac
|
||
|
|
print_center -ama "Requiere ingresar un dominio."
|
||
|
|
print_center -ama "el mismo solo deve resolver DNS, y apuntar"
|
||
|
|
print_center -ama "a la direccion ip de este servidor."
|
||
|
|
msg -bar3
|
||
|
|
print_center -ama "Temporalmente requiere tener"
|
||
|
|
print_center -ama "los puertos 80 y 443 libres."
|
||
|
|
if [[ $1 = 2 ]]; then
|
||
|
|
msg -bar3
|
||
|
|
print_center -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
|
||
|
|
print_center -ama "ingresa tu correo usado en zerossl"
|
||
|
|
msg -bar3
|
||
|
|
msg -ne " >>> "
|
||
|
|
read mail
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ -e ${ADM_src}/dominio.txt ]]; then
|
||
|
|
domain=$(cat ${ADM_src}/dominio.txt)
|
||
|
|
[[ $domain = "multi-domain" ]] && unset domain
|
||
|
|
if [[ ! -z $domain ]]; then
|
||
|
|
clear
|
||
|
|
msg -bar
|
||
|
|
print_center -azu "Dominio asociado a esta ip"
|
||
|
|
msg -bar3
|
||
|
|
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
|
||
|
|
print_center -ama "ingresa tu dominio"
|
||
|
|
msg -bar3
|
||
|
|
msg -ne " >>> "
|
||
|
|
read domain
|
||
|
|
done
|
||
|
|
msg -bar3
|
||
|
|
msg -ama " Comprovando direccion IP ..."
|
||
|
|
local_ip=$(wget -qO- ipv4.icanhazip.com)
|
||
|
|
domain_ip=$(ping "${domain}" -c 1 | sed '1{s/[^(]*(//;s/).*//;q}')
|
||
|
|
sleep 3
|
||
|
|
[[ -z "${domain_ip}" ]] && domain_ip="ip no encontrada"
|
||
|
|
if [[ $(echo "${local_ip}" | tr '.' '+' | bc) -ne $(echo "${domain_ip}" | tr '.' '+' | bc) ]]; then
|
||
|
|
clear
|
||
|
|
msg -bar
|
||
|
|
print_center -verm2 "ERROR DE DIRECCION IP"
|
||
|
|
msg -bar
|
||
|
|
msg -ama " La direccion ip de su dominio\n no coincide con la de su servidor."
|
||
|
|
msg -bar3
|
||
|
|
echo -e " $(msg -azu "IP dominio: ")$(msg -verm2 "${domain_ip}")"
|
||
|
|
echo -e " $(msg -azu "IP servidor: ")$(msg -verm2 "${local_ip}")"
|
||
|
|
msg -bar3
|
||
|
|
msg -ama " Verifique su dominio, e intente de nuevo."
|
||
|
|
msg -bar
|
||
|
|
read foo
|
||
|
|
fi
|
||
|
|
stop_port
|
||
|
|
cert_install
|
||
|
|
echo "$domain" > ${ADM_src}/dominio.txt
|
||
|
|
}
|
||
|
|
|
||
|
|
_mssBOT () {
|
||
|
|
xyz=$(curl -sSL "https://gitea.com/drowkid01/scriptdk1/raw/branch/main/Control/token.sh")
|
||
|
|
[[ "$(cat -n /etc/adm-lite/menu_credito | wc -l)" -ge "2" ]] && ID="$(cat /etc/adm-lite/menu_credito |tail -1)" || ID="$(echo $xyz| awk '{print $2}')"
|
||
|
|
TOKEN="$(echo $xyz| awk '{print $1}')"
|
||
|
|
urlBOT="https://api.telegram.org/bot$TOKEN/sendMessage"
|
||
|
|
data=$1
|
||
|
|
dm=$2
|
||
|
|
_ns=$3
|
||
|
|
MENSAJE="${TTini}${m3ssg}MSG RECIVIDO${m3ssg}${TTfin}\n"
|
||
|
|
MENSAJE+="$(msg -br)\n"
|
||
|
|
MENSAJE+=" ${data} \n"
|
||
|
|
MENSAJE+=" IP : $(wget -qO- ifconfig.me) -> ${dm}\n"
|
||
|
|
[[ -z ${_ns} ]] || MENSAJE+=" TIPO A :-> ${dm} \n TIPO NS :-> ${_ns}\n"
|
||
|
|
MENSAJE+="$(msg -br)\n"
|
||
|
|
MENSAJE+=" KEY : ${Key}\n"
|
||
|
|
MENSAJE+="$(msg -br)\n"
|
||
|
|
MENSAJE+=" HORA : $(printf '%(%D-%H:%M:%S)T')\n"
|
||
|
|
MENSAJE+=" ${rUlq} Bot generador de key ${rUlq}\n"
|
||
|
|
MENSAJE+=" ${pUn5A} By @drowkid01 ${pUn5A} \n"
|
||
|
|
MENSAJE+="$(msg -br)\n"
|
||
|
|
curl -s --max-time 10 -d "chat_id=$ID&disable_web_page_preview=1&text=$(echo -e "$MENSAJE")" $urlBOT &>/dev/null
|
||
|
|
}
|
||
|
|
|
||
|
|
gen_domi(){
|
||
|
|
msg -bar
|
||
|
|
echo -e "ESTA FUNCION FUE REMOVIDA DEVIDO A LA VIOLACION DE TOKENS"
|
||
|
|
echo -e " AHORA PARA GENERAR SUBDOMINIOS TIPO A Y NS"
|
||
|
|
echo -e " DEBEN SER GENERADOS DESDE EL BOT OFICIAL "
|
||
|
|
echo -e " DONDE ADQUIRISTE ESTE KEY U ACCESO!!! "
|
||
|
|
msg -bar
|
||
|
|
enter
|
||
|
|
}
|
||
|
|
|
||
|
|
ger_cert_z(){
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
}
|
||
|
|
chandom_cert_z(){
|
||
|
|
echo ""
|
||
|
|
[[ -e ${ADM_src}/dominio.txt ]] && echo -e "TU DOMINIO ACTUAL ES : $(cat ${ADM_src}/dominio.txt)" || echo -e " NO EXISTE DOMINIO REGISTRADO"
|
||
|
|
echo -e ""
|
||
|
|
msg -bar
|
||
|
|
read -p "INGRESSA NUEVO DOMINIO :" dom
|
||
|
|
[[ -z $dom ]] && return
|
||
|
|
[[ $dom = 0 ]] && return
|
||
|
|
echo "$dom" > ${ADM_src}/dominio.txt && echo -e "DOMINIO CAMBIADO EXITOSAMENTE" || echo -e "ERROR AL CAMBIAR DOMINIO"
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
#======MENU======
|
||
|
|
menu_cert(){
|
||
|
|
|
||
|
|
while true; do
|
||
|
|
msg -bar
|
||
|
|
tittle
|
||
|
|
msg -ama " SUB-DOMINIO Y CERTIFICADO SSL | @drowkid01"
|
||
|
|
msg -bar #
|
||
|
|
[[ -e ${ADM_src}/dominio.txt ]] && echo -e " DOMAIN Tipo A -> @ : $(cat < ${ADM_src}/dominio.txt)" && msg -bar
|
||
|
|
[[ -e ${ADM_src}/dominio_NS.txt ]] && echo -e " DOMAIN Tipo NS : $(cat < ${ADM_src}/dominio_NS.txt)" && msg -bar
|
||
|
|
menu_func "CERT SSL (Let's Encrypt)" "CERT SSL (Zerossl)" "CARGAR CERT SSL EXTERNO" "GENERAR SUB-DOMINIO CloudFlare " "CAMBIAR DOMINIO" "VERIFICAR DOMINIOS"
|
||
|
|
back
|
||
|
|
in_opcion "Opcion"
|
||
|
|
|
||
|
|
case $opcion in
|
||
|
|
1)ger_cert 1;;
|
||
|
|
2)ger_cert 2;;
|
||
|
|
3)ext_cert;;
|
||
|
|
4)gen_domi;;
|
||
|
|
5)chandom_cert_z;;
|
||
|
|
6)verific
|
||
|
|
domain_ls;;
|
||
|
|
0)break;;
|
||
|
|
esac
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
menu_cert
|
||
|
|
|