nginx ssl

Nginx mejorando la seguridad SSL

En este post, mejoraremos la seguridad de nuestro site con soporte SSL partiendo de la configuración obtenida después de seguir los pasos descritos en Nginx y Let’s Encrypt. Configuración inicial con el certificado obtenido de Let’s Encrypt server { server_name lynks.duckdns.org; root /var/www/miblog/; location \ { try_files $uri $uri/ =404; } access_log /var/log/nginx/lynks.duckdns.org.access.log; listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/lynks.duckdns.org/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/lynks.duckdns.org/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = lynks.duckdns.org) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name lynks.duckdns.org; return 404; # managed by Certbot } Configuramos nginx, para sugerir a cada visitante utilizar el protocolo HTTPS por defecto: add_header Strict-Transport-Security "max-age=63072000" always; Mediante la siguiente directiva, se indica a los clientes las versiones sportadas del protocolo TLS en nuestro servidor nginx: ssl_protocols TLSv1.2 TLSv1.3; Configuramos los tipos de cifrado disponibles e indicamos que nginx, se encargará de escoger el adecuado: ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; Indicamos la política de sesiones: ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; Activamos OCSP Stapling, un mecanismo para que el cliente valide la autenticidad del certificado: ssl_stapling on; ssl_stapling_verify on; Los cifrados que utilizan el protocolo Diffie-Hellman son vulnerables, ya que usan un cifrado de 1024 bits. Para mejorar la seguridad, creamos un cifrado de 2048 bits, utilizando openssl: $ sudo openssl dhparam -out /etc/nginx/dhparams.pem 2048 Configuramos nginx para que utilice dhparam: ssl_dhparam /etc/nginx/dhparams.pem; Si hemos seguido los pasos anteriores, obtendremos la siguiente configuración: server { listen 443 ssl; server_name lynks.duckdns.org; root /var/www/miblog/; location \ { try_files $uri $uri/ =404; } access_log /var/log/nginx/lynks.duckdns.org.access.log; add_header Strict-Transport-Security "max-age=63072000" always; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/nginx/dhparams.pem; ssl_certificate /etc/letsencrypt/live/lynks.duckdns.org/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/lynks.duckdns.org/privkey.pem; # managed by Certbot } server { if ($host = lynks.duckdns.org) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; server_name lynks.duckdns.org; return 404; # managed by Certbot } Podemos verificar la seguridad actual de nuestro site, lanzando el test de SSL Labs, donde obtendremos la clasificación A.

26 Mar 2021 · 2 min · Alex Soto

Nginx y Let's Encrypt

Vamos a configurar nginx para publicar contenido por “HTTP/HTTPS”, con un certificado SSL/TLS gratuito de la autoridad certificadora let’s encrypt. Para administrar y automatizar la renovación de los certificados, usaremos la herramienta certbot. Antes de continuar es necesario tener un dominio propio, si vamos a utilizar un host en casa seguramente tengamos una IP dinámic, por lo que hay que asegurarse que nuestro proveedor DNS soporte DDNS. Por suerte hay muchos proveedores gratuitos que soportan clientes con IP dinámic, uno de mis preferidos es duckdns. ...

24 Mar 2021 · 8 min · Alex Soto
hugo

Crear una web estática con Hugo

Vamos a poner en marcha una web estática de forma rápida y sencilla, para ello vamos a usar la herramienta hugo. Instalación de hugo Lo primero es instalarnos el ejecutable, en muchas distribuciones basadas en debian, es tan sencillo como ejecutar: $ sudo apt install hugo Podemos ver la versión instalada ejecutando: $ hugo version hugo v0.82.0-9D960784 linux/arm BuildDate=2021-03-21T17:28:04Z VendorInfo=gohugoio Si queremos tener la última versión, lo mejor es descargarlo desde el repositorio oficial, existen versiones para multiples arquitecturas y sistemas operativos. Creando una web Una vez instalado vamos a generar la configuración inicial $ hugo new site minuevoblog Congratulations! Your new Hugo site is created in /home/pi/tmp/minuevoblog. Just a few more steps and you're ready to go: 1. Download a theme into the same-named folder. Choose a theme from https://themes.gohugo.io/ or create your own with the "hugo new theme <THEMENAME>" command. 2. Perhaps you want to add some content. You can add single files with "hugo new <SECTIONNAME>/<FILENAME>.<FORMAT>". 3. Start the built-in live server via "hugo server". Visit https://gohugo.io/ for quickstart guide and full documentation. Como indica la salida del comando anterior, descargamos un tema para la web desde https://themes.gohugo.io. $ cd minuevoblog/ $ git clone https://github.com/alexandrevicenzi/soho.git themes/soho Cloning into 'themes/soho'... remote: Enumerating objects: 666, done. remote: Total 666 (delta 0), reused 0 (delta 0), pack-reused 666 Receiving objects: 100% (666/666), 1.36 MiB | 7.20 MiB/s, done. Resolving deltas: 100% (313/313), done. Añadimos en el fichero de configuración config.toml el tema que vamos a usar y algunas variables básicas. Los temas, tienen opciones específicas de configuración que se explican en su misma web de descarga o repositorio de github. $ cd minuevoblog/ $ vi config.toml baseURL = "http://example.org/" languageCode = "en-us" title = "My New Hugo Site" theme = "soho" Creando contenido Para formatear el contenido, se usa el lenguage MarkDown. Cada página se creará dentro del directorio minuevoblog/content/ podemos crear un esqueleto inicial con el siguiente comando. $ cd minuevoblog/ $ hugo new posts/primer-post.md minuevoblog/content/posts/primer-post.md created Editamos el fichero generado. $ cd minuevoblog/ $ vi content/posts/primer-post.md --- title: "Primer Post" date: 2021-03-25T07:40:34+01:00 draft: false --- Hola soy un primer post en markdown Solo nos falta generar el contenido estático ejecutando hugo. El contenido generado estará en el directorio minuevoblog/static/. cada vez que hagamos una modificacion o se añada contenido ejecutaremos el mismo comando para regenerar todo el contenido estático. $ cd minuevoblog/ $ hugo Start building sites … | EN -------------------+----- Pages | 7 Paginator pages | 0 Non-page files | 0 Static files | 8 Processed images | 0 Aliases | 1 Sitemaps | 1 Cleaned | 0 Total in 80 ms Publicando la web En este punto ya tenemos la web lista para ser publicada, podemos usar nginx o cualquier servidor http/https que queramos apuntando al directorio minuevoblog/static/. En próximas entradas explicare como configurar nginx con un certificado SSL válido. ...

23 Mar 2021&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Alex Soto