En no pocas ocasiones tenemos que acabar contratando un hosting o servidor por no disponer de medios para realizar pruebas. Además los ISP (proveedores de servicios de Internet) actualmente te asignan una IP pública dinámica o trabajan con CGNAT. Existen opciones gratuitas, utilizando software libre para que podáis montar vuestro servidor de pruebas y acceder desde Internet. Te vamos a enseñar a instalar y configurar un servidor Nginx gratuito para servir tu página web o realizar tus trabajos de pentesting y hacking ético.
Al igual que hemos hecho con artículos como Configurar una VPN con Wireguard, Lineage OS guía de instalación o Programas gratis que no pueden faltar en tu PC hoy te traemos una guía completa. Vamos a intentar no utilizar un lenguaje difícil de comprender y explicar para que sirve cada comando. La guía está pensada para que la leas despacio. Aunque no hace falta unos conocimientos avanzados de Linux, es necesario saber manejar la línea de comandos y estar familiarizado con ella.
Instalando un Servidor Nginx.
La herramienta de este artículo se llama Nginx y lo podemos definir como un servidor web/proxy inverso ligero de alto rendimiento y un proxy para protocolos de correo electrónico IMAP/POP3. Es software libre y de código abierto. Es multiplataforma, por lo que corre en sistemas tipo Unix (GNU/Linux, BSD, Solaris, Mac OS X, etc.) y Windows.
FUENTE: Wikipedia.
Instalando Nginx.
Para la instalación de Nginx vamos a utilizar una máquina virtual Ubuntu 22.04. Podrías utilizar una Raspberry Pi, un NAS o un servidor que tengáis por casa. También por supusto, puedes utilizar un hosting o VPS. No obstante nosotros lo hacemos en Virtual Box según lo expuesto a coste cero. Suponemos que tenéis ya vuestro server listo con una distro Ubuntu 22.04 o alguna otra basada en Debian:
Desde nuestra terminal Ubuntu damos las siguientes órdenes:
sudo apt update sudo apt install nginx
Vamos a configurar el cortafuegos, por facilidad utilizamos el archiconocido gestor de cortafuegos UFW, que tendréis deshabilitado si es una intalación nueva. Abriremos los puertos de OpenSSH y los puertos necesarios para servir un sitio web con Nginx con las siguientes órdenes en la consola:
sudo ufw allow 'OpenSSH' sudo ufw allow 'Nginx Full' sudo ufw allow 'Nginx HTTP' sudo ufw allow 'Nginx HTTPS'
Una vez hecho esto habilitaremos UFW tecleando en la terminal “sudo ufw enable” y comprobaremos el estado con “sudo ufw status”. Nos debería devolver lo siguiente:
Status: active To Action From -- ------ ---- Nginx HTTP ALLOW Anywhere OpenSSH ALLOW Anywhere Nginx HTTPS ALLOW Anywhere Nginx Full ALLOW Anywhere Nginx HTTP (v6) ALLOW Anywhere (v6) OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTPS (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)
Comprobaremos que Nginx se encuentra activo utilizando “systemctl status nginx” y nos debería devolver algo así:
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-05-07 15:26:08 UTC; 58min ago Docs: man:nginx(8) Process: 2787 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 2788 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 2789 (nginx) Tasks: 2 (limit: 1034) Memory: 5.0M CPU: 542ms CGroup: /system.slice/nginx.service ├─2789 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;" └─2861 "nginx: worker process"
Esto nos indica que el servidor está activo.
Órdenes para administrar los procesos.
Como hemos visto más arriba con “systemctl” podemos administrar los procesos en Nginx. Las órdenes y sus funciones son las siguientes:
Para iniciar el servicio:
sudo systemctl start nginx
Para parar el servicio:
sudo systemctl stop nginx
Para reiniciar el servicio:
sudo systemctl restart nginx
Para recargar el servicio sin perder las conexiones:
sudo systemctl reload nginx
Para deshabilitar el servicio:
sudo systemctl disable nginx
Y para habilitarlo:
sudo systemctl enable nginx
Es idéntico a cualquier proceso administrado con “systemctl”.
Miniguía para configurar bloques de servidor en Nginx.
Para poder servir varías páginas webs desde nuestro servidor Nginx tenemos disponibles los bloques de servidor. Si anteriormente has trabajado con Apache, los bloques de servidor son algo paracidos a los Hosts Virtuales de Apache.
Nginx por defecto trae configurado un directorio en /var/www/html donde tiene habilitado un bloque de servidor. Para un sólo sitio web, en principio sería suficiente. No obstante vamos a crear más directorios por si necesitamos crear más sitios web. En lugar de modificar el directorio por defecto /var/www/html , vamos a crear algunos directorios dentro de la ruta var/www para nuestro sitio web al que vamos a llamar como ejemplo midominio.
Creamos un directorio para nuestro dominio:
sudo mkdir -p /var/www/midominio/html
Asignamos la propierdad a $USER con la siguiente orden:
sudo chown -R $USER:$USER /var/www/midominio/html/
Asignamos los permisos con el comando chmod:
sudo chmod -R 755 /var/www/midominio/
Creamos una página de ejemplo con el editor de textos, en mi caso nano:
sudo nano /var/www/midominio/html/index.html
Dentro de la página de ejemplo vamos a agregar el siguiente código de prueba:
<html>
<head>
<title>¡Bienvenido a midominio!</title>
</head>
<body>
<h1>¡Éxito! ¡El servidor de bloques midominio está trabajando!</h1>
</body>
</html>
Guardamos con las teclas Ctrl+O y salimos con Ctrl+X.
Continuamos aplicando las órdenes correctas en el bloque del servidor, para ello crearemos un nuevo archivo:
sudo nano /etc/nginx/sites-available/midominio
Ahora pegamos el siguiente código:
server { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name midominio www.midominio; location / { try_files $uri $uri/ =404; } }
Un pequeño apunte aquí ya que puede inducir a error y no presentarnos la página a la hora de cargarla. Donde pone midominio lo pondremos completo, es decir midominio.com, mi dominio.es, midominio.org.
Ahora hay que crear un enlace entre el directorio y el archivo para habilitarlo:
sudo ln -s /etc/nginx/sites-available/midominio/etc/nginx/sites-enabled/
Para evitar problemas de memoria de depósito de hash aplicaremos el siguiente ajuste en el archivo nginx.conf
sudo nano /etc/nginx/nginx.conf
Reiniciando el servicio en Nginx.
Dentro de este archivo buscamos la línea que pone server_names_hash_bucket_size y la descomentamos borrando el carácter # de la línea. Guardamos con Ctrl+O y cerramos con Ctrl+X.
Procedemos a comprobar que no existen errores de sintaxis:
sudo nginx -t
Si todo ha sido correcto reiniciamos el servicio de Nginx con:
sudo systemctl restart nginx
Si todo ha sido correcto, visitamos midominio y deberíamos ver:
¡Éxito! ¡El servidor de bloques midominio está trabajando!
Consiguiendo un dominio para nuestro server con DuckDNS.
Se puede dar el caso de que estemos utilizando nuestro servidor para ejercicios de pentesting, ethical hacking o para alguna campaña de Red Team en nuestra empresa. Aunque tenemos servicios como Freenon que nos pueden hacer el papel en nuestros test, el registro de estos dominios es cada vez más engorroso. Aquí es donde podemos aprovechar el artículo Duck DNS una dirección fija para tu IP dinámica de manera que podamos apuntar nuestra IP a un dominio del tipo duckdns.org.
Buenas tardes amigo muy buena tu explicación necesito armar un proyecto similar pero en entorno windows me podrias explicar mas o menos como puedo hacerlo? ya tengo un dominio por Duckddns si me puedes ayudar por favor para configurar el servidor nginx en windows gracias de antemano
Hola. Si quieres dale un vistazo a https://www.nginx.com/resources/wiki/ te podría servir para documentarte con tu proyecto. Saludos.