elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Comunicaciones
| |-+  Dispositivos Móviles (PDA's, Smartphones, Tablets)
| | |-+  Android
| | | |-+  Como hacer público un servidor web express sobre node en arch linux termux android sin root.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como hacer público un servidor web express sobre node en arch linux termux android sin root.  (Leído 3,209 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Como hacer público un servidor web express sobre node en arch linux termux android sin root.
« en: 31 Marzo 2021, 01:51 am »

Como hacer público un servidor web express sobre node en arch linux termux android sin root.

1 - Instalar termux.
Puedes instalar termux directamente desde la PlayStore https://play.google.com/store/apps/details?id=com.termux

Si tu dipositivo no tiene PlayStore puedes descargar Termux en el siguiente enlace https://apps.evozi.com/apk-downloader/?id=com.termux

2 - Configurar Termux
Abre la app, escribe el comando termux-setup-storage y dale enter.
Te recomiendo también instalar los siguientes paquetes que utilizo para facilitar la instalación:
Código:
pkg install vim
pkg install quickjs
pkg install g++
pkg install nodejs                                                    
pkg install git
pkg install make
                                                                                                                         
Y también instalar el repo pointless donde se da soporte a paquetes como mongodb que no están disponibles directamente en los repos de Termux.
Código:
curl https://raw.githubusercontent.com/its-pointless/its-pointless.github.io/master/setup-pointless-repo.sh -o ~/../usr/spr.sh && cd ~/../usr/ && chmod +775 spr.sh && ./spr.sh && rm spr.sh
                     

3 - Instalar Arch Linux usando proot                                  
Proot emula las carpetas y utiliza algunos trucos para poder instalar una distribución de Linux sin necesidad de rootear. Escribe el siguiente comando y dale enter.                                                
Código:
pkg install proot && pkg install proot-distro && proot-distro install archlinux && proot-distro login archlinux
Aquí tienes más información si tienes curiosidad. https://wiki.termux.com/wiki/PRoot

4 - Añadir extensión a la Shell                                        
Nota: Este paso es totalmente prescindible. Es un programa que hice yo para manejar de forma más cómoda la shell y diferenciarla de otras. Vete al punto 5 si no te interesa.

Veras que cambia el mensaje de consola indicando que ya estás en Arch Linux [root@localhost]. El siguiente paso que voy a realizar es descargar una extensión para bash que trae atajos y otras utilidades. Este paso es opcional. Para instalar la extensión corre el comando:
Código:
curl https://raw.githubusercontent.com/StringManolo/SMBSE/main/.bashrc -o .bashrc && source .bashrc
Como utilizo este programa en distintos sistemas, incluyendo el propio termux, voy a modificar el archivo para que me muestre el nombre del sistema actual para el usuario root.
Corre el comando
Código:
v .bashrc && source .bashrc
Para que se abra el archivo a editar
Si ahora escribes /PS1 y presionas enter, se te movera el archivo a la parte del documento donde hay un código tal que:
Código:
PS1='\n\n${underlinedarkgray}${darkgray}(${blue}$(date +%H${darkgray}:${blue}%M${darkgray}:${blue}%S${darkgray}:${blue}%4N)${darkgray}) ${gree
n}$(pwd)${endc}\n> ';

Ahí voy a sustituir ${underlinegray} por ${darkblue}Arch Linux ${endc}
Si no sabes usar vim puedes borrar esa linea y pegar esto:
Código:
PS1='\n\n${darkblue}Arch Linux ${endc}${darkgray}(${blue}$(date +%H${darkgray}:${blue}%M${darkgray}:${blue}%S${darkgray}:${blue}%4N)${darkgray}) ${green}$(pwd)${endc}\n> ';

Para borrar la linea con vim posiciona el cursor encima del primer PS1=... y presiona dos veces la tecla d
Después manten pulsado el botón en el centro de la pantalla para que salga la opción de pegar.
El resultado tiene que quedar tal que:
Código:
# Custom Console                                                      
SMBSE_LOGME 'Setting PS1 and PS2 terminal indicators'
PS1='\n\n${darkblue}Arch Linux ${endc}${darkgray}(${blue}$(date +%H${darkgray}:${blue}%M${darkgray}:${blue}%S${darkgray}:${blue}%4N)${darkgray}) ${green}$(pwd)${endc}\n> ';
#PS1='\n\n[${blue}$(date +%H${endc}:${blue}%M${endc}:${blue}%S${endc}:${blue}%4N)${endc}] ${green}$(pwd)${endc}\n${blue}>${endc} '
PS2='${blue}.${endc}  ';

Una vez está así escribe :x
Y presiona enter para guardar los cambios.
Te quedará el mensaje de consola tal que:
Código:
Arch Linux (17:41:26:1553) /root
>

5 - Crear servidor con express y node.
Crea una carpeta para el servidor.
Código:
mkdir /srv/http/myNodeServer && cd /srv/http/myNodeServer
Crea el proyecto del servidor con el comando npm init
Rellena los datos que quieras. Yo solo he puesto archnode y presionado enter repetidamente.

Añade express al proyecto con el comando
Código:
npm install express

Modifica el código del servidor remplazando stringmanoloarch.tk por tu dominio en el siguiente comando (si es un comando) antes de correrlo:
Código:
echo 'const fs = require("fs");
const http = require("http");
const https = require("https");
const privateKey  = fs.readFileSync("/etc/letsencrypt/live/stringmanoloarch.tk/privkey.pem", "utf-8");
const certificate = fs.readFileSync("/etc/letsencrypt/live/stringmanoloarch.tk/fullchain.pem", "utf-8");
const ca = fs.readFileSync("const ca = fs.readFileSync("/etc/letsencrypt/live/stringmanoloarch.tk/chain.pem", "utf8");



const credentials = {key: privateKey, cert: certificate, ca: ca};
const express = require("express");
const app = express();

const cli = {};
for (let i in process.argv) {
  switch(process.argv[i]) {
    case "-p":
    case "--port-http":
      cli.port = process.argv[1 + +i];
    break;

    case "-p2":
    case "--port-https":
      cli.portHttps = process.argv[1 + +i];
    break;

    case "--host":
      cli.host = process.argv[1 + +i];
    break;
  }
}


if (!cli.port) cli.port = 8080;
if (!cli.portHttps) cli.portHttps = 8443;
if (!cli.host) cli.host = "127.0.0.1";

app.use(express.static("public"));

const httpServer = http.createServer(app);
const httpsServer = https.createServer(credentials, app);

httpServer.listen(cli.port);
httpsServer.listen(cli.portHttps);' > index.js

Crea también la carpeta desde la cual se serviran los archivos con el comando mkdir public y mete dentro una web de ejemplo tal que:
Código:
mkdir public && echo 'Hello!' > public/index.html

6 - Crea un dominio con freenom.
Ve a la web https://my.freenom.com/clientarea.php?action=domains registrate y crea un nuevo dominio.
Una vez loggeado dentro vete al apartado dominios https://my.freenom.com/domains.php e introduce ahí el nombre de dominio que quieras. Por ejemplo yo usaré stringmanoloarch.tk muchos nombres ya están siendo utilizados o no se pueden registrar gratuitamente, pero si poner tu nombre y una palabra por ejemplo, seguro que está disponible. Dale a chekout para confirmar la adquisición del nuevo dominio y en el menu desplegable donde dice 3 Months free cámbialo a 12 Months free. Marca la casilla para aceptar condiciones y términos y dale a Complete Order.
Ahora si vas al apartado https://my.freenom.com/clientarea.php?action=domains ahí tienes tu nuevo dominio para gestionarlo.

7 - Crear certificado.
Actualiza el sistema y los paquetes con el comando
Código:
pacman -Syu
Di que sí a las opciones de remplazo que te pregunte escribiendo y
Instala certbot
Código:
pacman -S certbot
Acepta la instalación escribiendo y

Genera un certificado manualmente con el comando
Código:
certbot certonly --manual --preferred-challenges dns
Te pedira el dominio, pon el que registrate en freenom.
Es posible que te pida el correo, introduce tu correo.
Escribe y para aceptar los terminos de uso
Escribe n para no compartir tu email publicamente

Entonces te saldrá un mensaje diciendo que demuestres que tienes control sobre el dominio de freenom con un registro TXT.
Para ello haces lo siguiente:
Ve a https://my.freenom.com/clientarea.php?action=domain
Pincha en manage freenom dns.
Pincha en edit nameservers.
Selecciona use default nameservers y pulsa en change nameservers.
Vuelve otra vez a darle en manage nameservers y ahora podrás agregar registros DNS a los servidores de freenom.

En el primer apartado pon el nombre del registro que indica certbot. En mi caso es _acme-challenge.stringmanoloarch.t
En el segundo apartado selecciona TXT como tipo de registro.
El tercer apartado (3600) no hace falta que lo cambies.
En el cuarto y último, debes añadir la cadena de caracteres que indica el certbot, en mi caso algo tal que 0V8MBE1iGEcgljH3PIox8Od_XaI-7FvjJi-BkM3beJY

Dale a save changes.

Antes de darle a enter al certbot, espera unos segundos para que se haga el registro público.

Tras dar enter recibirás un mensaje tal que:
Código:
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/stringmanoloarch.tk/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/stringmanoloarch.tk/privkey.pem
   Your certificate will expire on 2021-05-23. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:


8 - Usando freenom como ddns.

Haz clone y make del siguiente script que renueva dominios y actualiza la ip dinámica
Código:
git clone https://github.com/mkorthof/freenom-script.git && cd freenom-script

Edita el archivo freenom.conf y añade tu email y contraseña de la cuente de freenom
Código:
v freenom.conf

Una vez finalices corre el siguiente comando con tu dominio, en mi caso es:
Código:
./freenom.sh -c freenom.conf -u stringmanoloarch.tk

Si vas a los registros de freenom podras comprobar que se generó un registro A para tu dominio.

Pon live tu servidor volviendo a la carpeta anterior con cd ../ y corriendo el comando:
Código:
node index.js

Por defecto usa el puerto 8080 para http y 8443 para https.

Puedes pasar los puertos como argumentos del commando, por ejemplo.
Código:
node index.js -p 8081 -p2 8444

Si tienes los puertos abiertos podrás ver la web en el puerto correspondiente y tu dominio, si usas https verás el candadito verde. En mi caso: https://stringmanoloarch.tk:8443/

Si los configuraste y no puedes ver la web, utiliza el comando nmap para comprabar si están abiertos o no:
Código:
nmap tuIp -p80,443

9 - Apertura de puertos.
La forma de abrir puertos difiere entre routers o tipos de redes. Por lo cual no te puedo decir exactamente como debes hacerlo tu.
Si usas wifi: La forma usual de hacerlo es revisando la parte inferior del router donde vienen el usuario, contraseña y la dirección del panel de administración del router. Suelen ser http://192.168.0.1 o http://192.168.1.1
Una vez consigas acceder, dentro tendrás que buscar el apartado que te permita abrir los puertos. El apartado suele tener varias opciones. Puerto externo, Puerto interno, protocolo del puerto, dirección ip local...
El puerto externo es el puerto que deben poner los usuarios que quieran ver tu web. El navegador omite los puertos 80 y 443 para http y https en las urls, asique son esos los que probablemente te interese abrir. En el protocolo del puerto selecciona TCP si tienes la opción. En dirección ip te pide la dirección ip local del computador. Esta opción es para que el router sepa a que dispositivo de tu red enviar la conexión. Puedes buscarlo en el propio panel del router o usar el comando ipconfig para ver la dirección. Suele empezar por 192... Ponla, guarda los cambios y debería estar todo listo.

En caso de que uses datos móviles tienes 2 opciones. Preguntar a tu operador o buscar por internet si es posible (en tu compañía) abrir puertos con datos. O utilizar el programa ngrok.
Sigue los pasos de configuración del programa en su web, crea cuenta y añade el identificador que te dan en la web al ngrok. Depués solo tienes que correr el servidor web (dejarlo abierto) y correr el comando
Código:
ngrok http 80


« Última modificación: 31 Marzo 2021, 02:21 am por @XSStringManolo » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

Danielㅤ


Desconectado Desconectado

Mensajes: 1.667


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: Como hacer público un servidor web express sobre node en arch linux termux android sin root.
« Respuesta #1 en: 31 Marzo 2021, 02:05 am »

Hola estimado StringManolo, que gran aporte, que pedazo de explicación!!

Gracias por compartir tu aporte!!  ;-) ;-) ;-)


Saludos


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines