#!/bin/bash # Por C0nt05 versaoLocal="1.4.1" revproxyInstalado=false versaoRemota_url="https://raw.githubusercontent.com/talesam/revproxy/main/versao.txt" # Verifica se o script está sendo executado como root if [[ $EUID -ne 0 ]]; then dialog --title "Erro" --msgbox "Este script deve ser executado como root ou com sudo." 5 60 exit 1 fi # Verifica se o dialog está instalado if ! command -v dialog &> /dev/null; then echo "O pacote 'dialog' não está instalado. Tentando instalar..." # Verifica se o script está sendo executado como root if [[ $EUID -ne 0 ]]; then echo "Você precisa ser root para instalar o 'dialog'. Por favor, execute o script como root ou use sudo." exit 1 fi # Tenta instalar o dialog apt-get update && apt-get install dialog -y # Verifica se a instalação foi bem-sucedida if ! command -v dialog &> /dev/null; then echo "Falha ao instalar o 'dialog'. Por favor, instale manualmente e tente novamente." exit 1 fi fi # Verifica se o arquivo /usr/local/bin/revproxy já existe if [ -f /usr/local/bin/revproxy ]; then revproxyInstalado=true fi install_revproxy() { clear if [ ! -f /usr/local/bin/revproxy ]; then dialog --title "Instalação" --infobox "Instalando revproxy..." 5 50 sleep 1 wget -q -O /usr/local/bin/revproxy https://raw.githubusercontent.com/talesam/revproxy/main/revproxy chmod +x /usr/local/bin/revproxy # Chama a função para instalar o proxy install_proxy revproxyInstalado=true dialog --title "Instalação" --msgbox "revproxy instalado com sucesso! Para executar use o comando 'revproxy'" 6 50 else dialog --title "Informação" --msgbox "RevProxy já está instalado." 5 50 fi } # Função para verificar e atualizar a versão do script check_update() { clear versaoRemota=$(wget -qO- "$versaoRemota_url") if [ "$versaoRemota" != "$versaoLocal" ]; then dialog --title "Atualização Disponível" --yesno "Versão Atual: $versaoLocal\nNova Versão: $versaoRemota\nDeseja atualizar o script?" 7 50 response=$? if [ $response -eq 0 ]; then wget -q -O /usr/local/bin/revproxy https://raw.githubusercontent.com/talesam/revproxy/main/revproxy chmod +x /usr/local/bin/revproxy dialog --title "Atualização" --msgbox "Script atualizado para a versão $versaoRemota. Por favor, execute-o novamente." 6 50 exit 0 fi else dialog --title "Atualização" --msgbox "Você já está na versão mais recente ($versaoLocal)." 5 50 fi } # Função para solicitar e validar a porta get_port() { local port port=$(dialog --title "Insira a Porta" --inputbox "Digite a porta (padrão 80):" 8 40 80 3>&1 1>&2 2>&3) if ! [[ $port =~ ^[0-9]+$ ]] || [ $port -le 0 ] || [ $port -gt 65535 ]; then dialog --title "Erro" --msgbox "Porta inválida. Por favor, insira um número entre 1 e 65535." 5 50 return 1 fi echo $port } # Função para solicitar o nome da VPN get_vpn_name() { local nomeVpn nomeVpn=$(dialog --title "Nome da VPN" --inputbox "Digite o nome da VPN:" 8 40 3>&1 1>&2 2>&3) if [ -z "$nomeVpn" ]; then dialog --title "Erro" --msgbox "Nome da VPN não pode ser vazio." 5 50 return 1 fi echo $nomeVpn } # Função para instalar o proxy install_proxy() { clear if [ -f /usr/bin/proxy.bak ]; then dialog --title "Instalação Cancelada" --msgbox "Um backup do proxy já existe. Instalação cancelada para evitar sobrescrever o backup." 6 50 return fi if [ -f /usr/bin/proxy ]; then mv /usr/bin/proxy /usr/bin/proxy.bak dialog --title "Backup" --msgbox "Backup do proxy atual salvo como proxy.bak" 5 50 fi curl -s -L -o /tmp/proxy https://github.com/talesam/revproxy/raw/main/proxy chmod +x /usr/bin/proxy dialog --title "Instalação" --msgbox "Proxy instalado com sucesso!" 5 50 } # Função para restaurar o proxy original restore_proxy() { clear echo "" if [ -f /usr/bin/proxy.bak ]; then mv /usr/bin/proxy.bak /usr/bin/proxy dialog --title "Restauração" --msgbox "Proxy original restaurado com sucesso." 5 50 revproxyInstalado=false else dialog --title "Erro" --msgbox "Backup do proxy não encontrado." 5 50 fi } list_ports() { local ports=$(netstat -tuln | grep LISTEN) echo "$ports" > /tmp/port_list.txt dialog --title "Portas em Execução" --textbox /tmp/port_list.txt 20 70 rm /tmp/port_list.txt } # Função para matar processo em uma porta específica kill_port() { local port port=$(dialog --title "Encerrar Processo" --inputbox "Digite a porta para encerrar o processo:" 8 40 3>&1 1>&2 2>&3) pid=$(lsof -t -i:$port) if [ -n "$pid" ]; then kill $pid dialog --title "Sucesso" --msgbox "Processo na porta $port encerrado." 5 50 else dialog --title "Erro" --msgbox "Nenhum processo encontrado na porta $port." 5 50 fi } run_proxy() { dialog --title "Configuração do Proxy" --infobox "Iniciando configuração do proxy..." 5 50 sleep 1 local port=$(get_port) if [ $? -ne 0 ]; then dialog --title "Erro" --msgbox "Erro ao obter a porta." 5 50 return fi local nomeVpn=$(get_vpn_name) if [ $? -ne 0 ]; then dialog --title "Erro" --msgbox "Erro ao obter o nome da VPN." 5 50 return fi local mode=$1 local command="/usr/bin/proxy --port $port --http --response $nomeVpn" case $mode in "ssh") command="$command --ssh-only" ;; "openvpn") command="$command --openvpn-port" ;; esac dialog --title "Executando Proxy" --msgbox "Proxy executando na porta $port com configuração: $mode e VPN: $nomeVpn" 6 50 screen -dmS proxy $command } # Menu principal while true; do exec 3>&1 selection=$(dialog \ --backtitle "RevProxy - $versaoLocal" \ --title "Menu Principal" \ --clear \ --cancel-label "Sair" \ --menu "Escolha uma opção:" 20 70 10 \ "1" "Instalar Proxy" \ "2" "Restaurar Proxy Original" \ "3" "Proxy com HTTP e SSH (APENAS)" \ "4" "Proxy com HTTP e OpenVPN (TUDO)" \ "5" "Listar portas em execução" \ "6" "Encerrar processo em uma porta" \ "7" "Verificar atualizações do script" \ 2>&1 1>&3) exit_status=$? exec 3>&- if [ $exit_status = 1 ]; then break fi case $selection in 1) install_revproxy ;; 2) restore_proxy ;; 3) [ "$revproxyInstalado" = true ] && run_proxy "ssh" ;; 4) [ "$revproxyInstalado" = true ] && run_proxy "openvpn" ;; 5) list_ports ;; 6) kill_port ;; 7) check_update ;; esac done # Limpa a tela ao sair clear