
Configuré un servidor Node/Express HTTPS/SSL usando LetsEncrypt para los certificados, ejecutándose en el puerto 3000. Funciona y puedo acceder a él a través de www.example.com:3000
. Pero realmente quiero poder acceder a él directamente desde www.example.com
.
Logré que esto funcionara (vea mi código a continuación) creando mi propia configuración de nginx y ejecutando sudo systemctl restart nginx
.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _; // *
location / {
allow all; // *
}
}
server {
server_name www.example.com;
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass https://127.0.0.1:3000;
allow all; // *
}
}
Adapté el segundo servidor de un servidor generado automáticamente por Certbot cuando configuré mi certificado.
Soy un novato en los archivos de configuración de nginx. ¿Alguien puede aconsejarme sobre la seguridad de mi implementación? ¿Me estoy perdiendo algo? Me pregunto en particular acerca de las líneas // *
a las que he añadido. Gracias de antemano.
Respuesta1
Asegúrese de estar utilizando la última versión de
nginx
.Revise los cifrados SSL que ha habilitado
nginx
- Para evitar ataques de degradación, desea desactivar algunos de los que están desactualizados.¿Realmente necesita que sea accesible tanto en el puerto de texto sin formato 80 como en el 443? Si no tiene una necesidad específica de HTTP no cifrado, eliminaría el primer bloque por completo y convertiría el segundo en su archivo
default server
.Todo lo que se encuentre en puertos HTTP/HTTPS públicos conocidos recibirá análisis regulares de bots de muchos países en busca de vulnerabilidades CVE recientes.
Debería considerar no alojar su aplicación en la raíz de la URL, sino un proxy inverso a una ruta y en algo como
https://yourdomain.example.com/codeword
donde "codeword
" es algo único y no está conectado a nada remotamente relacionado con aplicaciones informáticas/de Internet genéricas o específicas o conceptos de administración. Por ejemplo,https://yourdomain.example.com/admin
eshttps://yourdomain.example.com/app
probable que le hagan escaneos, perohttps://yourdomain.example.com/kittens
probablemente no.Puede considerar aprender sobre el
ngx_http_geoip_module
ysolo permitiendo países esperados.Autenticación básica HTTPTambién se puede usar para impedir que alguien haga que se ejecute cualquier código de aplicación web en su servidor sin poder decirle a nginx el nombre de usuario/contraseña de autenticación básica.