Untitled


SUBMITTED BY: Guest

DATE: Dec. 20, 2023, 12:15 a.m.

FORMAT: Text only

SIZE: 7.0 kB

HITS: 382

  1. #!/bin/bash
  2. # Por C0nt05
  3. versaoLocal="1.4.1"
  4. revproxyInstalado=false
  5. versaoRemota_url="https://raw.githubusercontent.com/talesam/revproxy/main/versao.txt"
  6. # Verifica se o script está sendo executado como root
  7. if [[ $EUID -ne 0 ]]; then
  8. dialog --title "Erro" --msgbox "Este script deve ser executado como root ou com sudo." 5 60
  9. exit 1
  10. fi
  11. # Verifica se o dialog está instalado
  12. if ! command -v dialog &> /dev/null; then
  13. echo "O pacote 'dialog' não está instalado. Tentando instalar..."
  14. # Verifica se o script está sendo executado como root
  15. if [[ $EUID -ne 0 ]]; then
  16. echo "Você precisa ser root para instalar o 'dialog'. Por favor, execute o script como root ou use sudo."
  17. exit 1
  18. fi
  19. # Tenta instalar o dialog
  20. apt-get update && apt-get install dialog -y
  21. # Verifica se a instalação foi bem-sucedida
  22. if ! command -v dialog &> /dev/null; then
  23. echo "Falha ao instalar o 'dialog'. Por favor, instale manualmente e tente novamente."
  24. exit 1
  25. fi
  26. fi
  27. # Verifica se o arquivo /usr/local/bin/revproxy já existe
  28. if [ -f /usr/local/bin/revproxy ]; then
  29. revproxyInstalado=true
  30. fi
  31. install_revproxy() {
  32. clear
  33. if [ ! -f /usr/local/bin/revproxy ]; then
  34. dialog --title "Instalação" --infobox "Instalando revproxy..." 5 50
  35. sleep 1
  36. wget -q -O /usr/local/bin/revproxy https://raw.githubusercontent.com/talesam/revproxy/main/revproxy
  37. chmod +x /usr/local/bin/revproxy
  38. # Chama a função para instalar o proxy
  39. install_proxy
  40. revproxyInstalado=true
  41. dialog --title "Instalação" --msgbox "revproxy instalado com sucesso! Para executar use o comando 'revproxy'" 6 50
  42. else
  43. dialog --title "Informação" --msgbox "RevProxy já está instalado." 5 50
  44. fi
  45. }
  46. # Função para verificar e atualizar a versão do script
  47. check_update() {
  48. clear
  49. versaoRemota=$(wget -qO- "$versaoRemota_url")
  50. if [ "$versaoRemota" != "$versaoLocal" ]; then
  51. dialog --title "Atualização Disponível" --yesno "Versão Atual: $versaoLocal\nNova Versão: $versaoRemota\nDeseja atualizar o script?" 7 50
  52. response=$?
  53. if [ $response -eq 0 ]; then
  54. wget -q -O /usr/local/bin/revproxy https://raw.githubusercontent.com/talesam/revproxy/main/revproxy
  55. chmod +x /usr/local/bin/revproxy
  56. dialog --title "Atualização" --msgbox "Script atualizado para a versão $versaoRemota. Por favor, execute-o novamente." 6 50
  57. exit 0
  58. fi
  59. else
  60. dialog --title "Atualização" --msgbox "Você já está na versão mais recente ($versaoLocal)." 5 50
  61. fi
  62. }
  63. # Função para solicitar e validar a porta
  64. get_port() {
  65. local port
  66. port=$(dialog --title "Insira a Porta" --inputbox "Digite a porta (padrão 80):" 8 40 80 3>&1 1>&2 2>&3)
  67. if ! [[ $port =~ ^[0-9]+$ ]] || [ $port -le 0 ] || [ $port -gt 65535 ]; then
  68. dialog --title "Erro" --msgbox "Porta inválida. Por favor, insira um número entre 1 e 65535." 5 50
  69. return 1
  70. fi
  71. echo $port
  72. }
  73. # Função para solicitar o nome da VPN
  74. get_vpn_name() {
  75. local nomeVpn
  76. nomeVpn=$(dialog --title "Nome da VPN" --inputbox "Digite o nome da VPN:" 8 40 3>&1 1>&2 2>&3)
  77. if [ -z "$nomeVpn" ]; then
  78. dialog --title "Erro" --msgbox "Nome da VPN não pode ser vazio." 5 50
  79. return 1
  80. fi
  81. echo $nomeVpn
  82. }
  83. # Função para instalar o proxy
  84. install_proxy() {
  85. clear
  86. if [ -f /usr/bin/proxy.bak ]; then
  87. dialog --title "Instalação Cancelada" --msgbox "Um backup do proxy já existe. Instalação cancelada para evitar sobrescrever o backup." 6 50
  88. return
  89. fi
  90. if [ -f /usr/bin/proxy ]; then
  91. mv /usr/bin/proxy /usr/bin/proxy.bak
  92. dialog --title "Backup" --msgbox "Backup do proxy atual salvo como proxy.bak" 5 50
  93. fi
  94. curl -s -L -o /tmp/proxy https://github.com/talesam/revproxy/raw/main/proxy
  95. chmod +x /usr/bin/proxy
  96. dialog --title "Instalação" --msgbox "Proxy instalado com sucesso!" 5 50
  97. }
  98. # Função para restaurar o proxy original
  99. restore_proxy() {
  100. clear
  101. echo ""
  102. if [ -f /usr/bin/proxy.bak ]; then
  103. mv /usr/bin/proxy.bak /usr/bin/proxy
  104. dialog --title "Restauração" --msgbox "Proxy original restaurado com sucesso." 5 50
  105. revproxyInstalado=false
  106. else
  107. dialog --title "Erro" --msgbox "Backup do proxy não encontrado." 5 50
  108. fi
  109. }
  110. list_ports() {
  111. local ports=$(netstat -tuln | grep LISTEN)
  112. echo "$ports" > /tmp/port_list.txt
  113. dialog --title "Portas em Execução" --textbox /tmp/port_list.txt 20 70
  114. rm /tmp/port_list.txt
  115. }
  116. # Função para matar processo em uma porta específica
  117. kill_port() {
  118. local port
  119. port=$(dialog --title "Encerrar Processo" --inputbox "Digite a porta para encerrar o processo:" 8 40 3>&1 1>&2 2>&3)
  120. pid=$(lsof -t -i:$port)
  121. if [ -n "$pid" ]; then
  122. kill $pid
  123. dialog --title "Sucesso" --msgbox "Processo na porta $port encerrado." 5 50
  124. else
  125. dialog --title "Erro" --msgbox "Nenhum processo encontrado na porta $port." 5 50
  126. fi
  127. }
  128. run_proxy() {
  129. dialog --title "Configuração do Proxy" --infobox "Iniciando configuração do proxy..." 5 50
  130. sleep 1
  131. local port=$(get_port)
  132. if [ $? -ne 0 ]; then
  133. dialog --title "Erro" --msgbox "Erro ao obter a porta." 5 50
  134. return
  135. fi
  136. local nomeVpn=$(get_vpn_name)
  137. if [ $? -ne 0 ]; then
  138. dialog --title "Erro" --msgbox "Erro ao obter o nome da VPN." 5 50
  139. return
  140. fi
  141. local mode=$1
  142. local command="/usr/bin/proxy --port $port --http --response $nomeVpn"
  143. case $mode in
  144. "ssh") command="$command --ssh-only" ;;
  145. "openvpn") command="$command --openvpn-port" ;;
  146. esac
  147. dialog --title "Executando Proxy" --msgbox "Proxy executando na porta $port com configuração: $mode e VPN: $nomeVpn" 6 50
  148. screen -dmS proxy $command
  149. }
  150. # Menu principal
  151. while true; do
  152. exec 3>&1
  153. selection=$(dialog \
  154. --backtitle "RevProxy - $versaoLocal" \
  155. --title "Menu Principal" \
  156. --clear \
  157. --cancel-label "Sair" \
  158. --menu "Escolha uma opção:" 20 70 10 \
  159. "1" "Instalar Proxy" \
  160. "2" "Restaurar Proxy Original" \
  161. "3" "Proxy com HTTP e SSH (APENAS)" \
  162. "4" "Proxy com HTTP e OpenVPN (TUDO)" \
  163. "5" "Listar portas em execução" \
  164. "6" "Encerrar processo em uma porta" \
  165. "7" "Verificar atualizações do script" \
  166. 2>&1 1>&3)
  167. exit_status=$?
  168. exec 3>&-
  169. if [ $exit_status = 1 ]; then
  170. break
  171. fi
  172. case $selection in
  173. 1) install_revproxy ;;
  174. 2) restore_proxy ;;
  175. 3) [ "$revproxyInstalado" = true ] && run_proxy "ssh" ;;
  176. 4) [ "$revproxyInstalado" = true ] && run_proxy "openvpn" ;;
  177. 5) list_ports ;;
  178. 6) kill_port ;;
  179. 7) check_update ;;
  180. esac
  181. done
  182. # Limpa a tela ao sair
  183. clear

comments powered by Disqus