Automatitzar la creació d’un certificat Letsencrypt wildcard amb el proveïdor Namecheap

Ja fa una eternitat que no escric cap entrada en aquest blog i no pas perquè no tinga coses que contar sinó simplement perquè el temps escasseja.

En aquesta entrada vos compartisc la forma d’automatitzar el procés de creació/renovació d’un certificat “wildcard” per al proveïdor Namecheap.  

Podeu consultar l’article anterior on s’explica com demanar un certificat wildcard:

Es requereix tenir instal·lat el pàquet certbot, així si no el tenim, podem indicar la següent ordre al terminal: sudo apt install certbot.

Heu de tindre en compte que per a utilitzar aquest mètode heu de tindre accés a l’API de Namecheap. En aquest article (en anglès) s’explica com aconseguir l’accés a l’API i també es comparteix un dels scripts que necessitarem per a fer la nostra automatització.

  1. Primer de tot, ens descarregarem l’script escrit en python d’aquest enllaç. Podeu desar el fitxer de l’script a la carpeta: /etc/letsencrypt/. Necessitarem instal·lar la biblioteca PyNamecheap, així executarem al terminal: pip3 install PyNamecheap o alternativament sudo apt install python3-namecheap.
  2. Després hem d’editar l’scrip amb les nostres dades de l’API (username, api_key i ip_address). Vos recomane que des del tauler de configuració de l’API de Namecheap indiqueu només la IP del servidor per augmentar la seguretat, així l’API només és accessible de la IP del servidor.
  3. El tercer pas serà la creació d’un segon script en bash per a executar diverses ordres. Heu de substituir el nom del domini “exemple.com” pel vostre. Us el compartisc més avall:
sudo nano /etc/letsencrypt/renew_exemple.sh
#!/bin/bash

# Esborrat previ del certificat anterior. Comenteu-lo per a la primera petició del certificat.
certbot delete -n --cert-name exemple.com

# Petició del nou certificat (límit 5 - 7 per setmana)
## Certificat només wildcard (falla si es demana amb el domini principal)
## Afegir l'opció --dry run per fer proves
certbot certonly -n --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d "*.exemple.com" --manual-auth-hook=/etc/letsencrypt/letsencrypt-namecheap-dns01-manual-auth-hook.py

# Expansió del certificat wildcard amb el domini principal.
certbot certonly -n --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory -d "*.exemple.com" --expand -d "exemple.com" --manual-auth-hook=/etc/letsencrypt/letsencrypt-namecheap-dns01-manual-auth-hook.py

# Reinicia nginx
service nginx restart

L’script executa quatre ordres; la primera és per eliminar el certificat que ja tinguéreu instal·lat per el domini en qüestió, la segona executa l’ordre per a la creació del certificat “wildcard”, la tercera és necessària per expandir el certificat al domini principal i per últim l’ordre per al reinici d’nginx.

No oblideu donar-li permisos d’execució a l’script amb: sudo chmod +x nom_script.sh

L’últim que haureu de fer és afegir l’script bash a crontab per a s’execute cada cert temps. Aquest script només permet l’esborrat i posterior creació d’un certificat, així que s’hauria d’indicar un temps menor que la duració del certificat Letsencrypt (3 mesos), per exemple, cada 2 mesos. Executem les següents ordres:

sudo crontab -u root -e

Haureu d’afegir un línia que apunte al vostre script. A l’exemple l’script s’executarà el dia 1 del mes cada 2 mesos.  

0 0 1 */2 * /bin/bash /etc/letsencrypt/renew_exemple.sh

Si teniu altres proveïdors de domini que no siguen Namecheap potser no vos cal aquest tutorial. Hauríeu de consultar la informació completa del paquet certbot ja que el paquet ja inclou la creació o renovació utilitzant DNS (igual que amb aquest script) per molts d’ells.

man certbot
            --dns-cloudflare      Obtain certificates using a DNS TXT record (if you are
                                  using Cloudflare for DNS). (default: False)
            --dns-cloudxns        Obtain certificates using a DNS TXT record (if you are
                                  using CloudXNS for DNS). (default: False)
            --dns-digitalocean    Obtain certificates using a DNS TXT record (if you are
                                  using DigitalOcean for DNS). (default: False)
            --dns-dnsimple        Obtain certificates using a DNS TXT record (if you are
                                  using DNSimple for DNS). (default: False)
            --dns-dnsmadeeasy     Obtain certificates using a DNS TXT record (if you are
                                  using DNS Made Easy for DNS). (default: False)
            --dns-gehirn          Obtain certificates using a DNS TXT record (if you are
                                  using Gehirn Infrastructure Service for DNS).
                                  (default: False)
            --dns-google          Obtain certificates using a DNS TXT record (if you are
                                  using Google Cloud DNS). (default: False)
            --dns-linode          Obtain certificates using a DNS TXT record (if you are
                                  using Linode for DNS). (default: False)
            --dns-luadns          Obtain certificates using a DNS TXT record (if you are
                                  using LuaDNS for DNS). (default: False)
            --dns-nsone           Obtain certificates using a DNS TXT record (if you are
                                  using NS1 for DNS). (default: False)
            --dns-ovh             Obtain certificates using a DNS TXT record (if you are
                                  using OVH for DNS). (default: False)
            --dns-rfc2136         Obtain certificates using a DNS TXT record (if you are
                                  using BIND for DNS). (default: False)
            --dns-route53         Obtain certificates using a DNS TXT record (if you are
                                  using Route53 for DNS). (default: False)
            --dns-sakuracloud     Obtain certificates using a DNS TXT record (if you are
                                  using Sakura Cloud for DNS). (default: False)

Font: Simon Aldrich

Com instal·lar un certificat Let’s Encrypt Wildcard

IMPORTANT: aquest tutorial és per a la instal·lació d’un servidor NGINX, php i base de dades mariadb en ubuntu 20.04 (serveix per altres versions d’ubuntu properes).

Antecedents

Ja fa un temps vaig explicar al tutorial d’instal·lació de moodle com crear un certificat Let’s Encrypt però que només servia per a un domini o subdomini, és a dir, en el cas, de tindre més d’un subdomini dins del domini principal s’havien de crear certificats per a cadascun d’ells. En este tutorial vos explique com crear un certificat “wildcard” (comodí) que serveix per a tots els subdominis d’un domini.

Continua llegint «Com instal·lar un certificat Let’s Encrypt Wildcard»

Com augmentar la seguretat d’un servidor NGINX en ubuntu 18.04

Nginx és un servidor HTTP popular de codi obert que destaca per la seua estabilitat, configuració simple i baixos requeriments de maquinari. Podeu augmentar  la seguretat del vostre servidor Nginx mitjançant l’instal·lació d’un mòdul com NAXSI. NAXSI (Nginx Anti-XSS and SQL Injection) és un mòdul Nginx que ofereix funcions de tallafoc d’aplicacions web (WAF). NAXSI analitza, filtra i protegeix el trànsit que arriba al vostre web i actua com un tallafoc que bloqueja tot el trànsit, tret que li indiquen regles per permetre-hi l’accés.

En aquest tutorial, utilitzarem NAXSI per protegir Nginx instal·lat en ubuntu 18.04. Com que el mòdul NAXSI no ve amb el paquet Nginx de manera predeterminada, haurem de compilar Nginx amb NAXSI. Al final del tutorial, veurem quins tipus d’atacs NAXSI podem bloquejar i com configurar les regles per a que funcione correctament.

Continua llegint «Com augmentar la seguretat d’un servidor NGINX en ubuntu 18.04»

Actualització del php

A l’entrada anterior: Conversió d’Apache a NGINX, vos explicava com instal·lar el server web NGINX. En esta entrada vos descric com actualitzar o instal·lar l’última versió estable de php.

Si utilitzeu ubuntu 18.04 estan disponibles als seus repositoris les version 7.0, 7.1 i 7.2. Sempre es recomanble tindre l’última versió estable disponible ja que es corregeixen problemes de seguretat. De tota manera, més recomanable seria instal·lar la versió 7.3 però en aquest cas no la tenim als repositoris d’ubuntu. 

Així, si utilitzeu NGINX com a servidor heu d’instal·lar els paquets php-fmp, en canvi si utilitzeu APACHE he d’utilitzar els paquets genèrics php-cli.

Per poder instal·lar aquesta última versió heu d’afegir els següent repositoris. Si ja teniu instal·lats una versió anterior, el sistema vos demanar actualitzar, només heu de tindre en compte que heu de conservar els arxius de configuració (és l’opció predeterminada del sistema).

Continua llegint «Actualització del php»