venenux/docs/VNXDOCS-ALL-debian-lestencryp.md

9.7 KiB

les't encryp con VenenuX para Devuan y Debian

Esta guia le servira para cualquier sistema debian inclusive aquellos viejos, ud puede tener un debian 7, 8 inclusive debian 6 o 5 y aun le servira.

dehydrated

dehydrated es un cliente o programa para obtener certificados validos desde una entidad en internet, para tu servidor web, y tambien para los demas servicios, es el supuesto "candado en la barra de internet" segun los ignorantes.

Este tambien servira para otros servicios, ya pues el XMPP, IMAP, HTTPS, etc etc .. ya que se puede construir en varios multidominios.

http-01 VS dns-01: cada maquina que ejecuta el servicio debe de ejecutar su propia instancia de dehydrated si se emplea el metodo de verificacion http-01 a menos se utilize el dns-01 y complicados hooks este ultimo verifica ciertos dominios especiales en el dns propio, mas simple es el primero y mas rapido de implementar, ambos requieren tener o control del servicio web o control del servidio dns donde se ejecute el programa.

Requisitos

  • usar dehydrated por cada host en cada direccion ip. (ver abajo)
  • el dominio valido: venenuxdom.com
  • subdominios validos: www.venenuxdom.com imap.venenuxdom.com smtp.venenuxdom.com
  • el DNS al menos 12 hora con todos los venenuxdom.com

Estos requisitos significa que la maquina donde esta venenuxdom.com es la misma donde esta los otros subdominios, si alguno subdominio no esta hosteado o es de dicha maquina, no debera usarse, ejemplo:

  • otro.venenuxdom.com esta en 192.1.1.4 -> no aplica
  • www.venenuxdom.com esta en 192.1.1.5 -> si aplica
  • venenuxdom.com esta en 192.1.1.5 -> maquina donde se ejecuta el script
  • imap.venenuxdom.com esta en 192.1.1.5 -> si aplica

Instalacion

Ejecutaremos un paquete que por tener dependencias fijas y limpias, sirve en todos los debians, a la fecha, esto si es un verdadero programa, porque no tiene dependencias esquisitas ni especificas de versiones:

apt-get install openssl curl wget bash

wget http://http.us.debian.org/debian/pool/main/d/dehydrated/dehydrated_0.6.2-2+deb10u1~bpo9+1_all.deb

dpkg -i dehydrated_0.6.2-2+deb10u1~bpo9+1_all.deb

El paquete aqui es la version de buster ejecutada en cualquier debian sin problemas, ya que solo depende de bash, openssl y curl.

Configuracion principal

La configuracion necesita parametros para la identificacion de cuenta, el dominio al cual se el crea el certificado de esa maquina (puesto la maquina donde se ejecuta es la que necesitara el certificado).

cat > /etc/dehydrated/domains.txt << EOF
venenuxdom.com mail.venenuxdom.com smtp.venenuxdom.com imap.venenuxdom.com www.venenuxdom.com mx.venenuxdom.com
EOF

cat > /etc/dehydrated/conf.d/00_defaultaccount.sh << EOF
WELLKNOWN="/var/lib/dehydrated/acme-challenges/"
CONTACT_EMAIL="root@venenuxdom.com"
EOF

mkdir /var/lib/dehydrated/certs

dehydrated --register --accept-terms --challenge http-01

configuracion por http

La configuracion empleara el metodo http-01 que es probando http siendo el DNS ya activo y valido, por lo que simplemente necesita que el servidor web de el certificado este ejecutando y que dehydrated este en la misma maquina que el servidor web.

NOTA IMPORTANTE los siguientes comando se pueden ejecutar tengan o no instalado apache o lighttpd, al menos uno de los dos debe estar instalado.

cat > /etc/lighttpd/conf-available/15-dehydrated.conf << EOF
alias.url += (
 "/.well-known/acme-challenge/" => "/var/lib/dehydrated/acme-challenges/",
)
EOF

lighty-enable-mod dehydrated

/usr/sbin/service lighttpd restart

cat > /etc/apache2/conf-available/dehydrated.conf << EOF
Alias /.well-known/acme-challenge /var/lib/dehydrated/acme-challenges/
<Directory /var/lib/dehydrated/acme-challenges/>
        Options None
        AllowOverride None
        <IfModule !mod_authz_core.c>
                Order allow,deny
                Allow from all
        </IfModule>
        <IfModule mod_authz_core.c>
                Require all granted
        </IfModule>
</Directory>
EOF

/usr/sbin/service apache2 restart

Ejecucion y certificados

Una vez configurados se ejecuta el comando que guardara los certificados en /var/lib/dehydrated/certs/ con directorio igual al dominio de cada uno de los especificados en domains.txt.

NOTA IMPORTANTE aqui se ejecuta un paso adicional, se "combina" y se produce un tercer y ultimo certificado para sistemas como courier y lighttpd necesarios.

dehydrated --cron --challenge http-01

cat /var/lib/dehydrated/certs/venenuxdom.com/cert.pem /var/lib/dehydrated/certs/venenuxdom.com/privkey.pem > /var/lib/dehydrated/certs/venenuxdom.com/privcert-lasted.pem

ln -sf privcert-lasted.pem /var/lib/dehydrated/certs/venenuxdom.com/privcert.pem

chown daemon:root /etc/courier/*.pem

chmod 640 /etc/courier/*.pem

En este punto ya se tiene todos los "pem's" necesarios que son los cerfiles.

Como usar los certificados:

Varios serivicios ahora deben cambiar el certificado y reiniciarse, para automatizarlos visite la seccin de hooks y automatizacion mas abajo, enla cual se puede agregar scripts que en cada renovacion automaticamente reinicie dichos servicios:

lighttp

sed -i -r 's#.*ssl.pemfile =.*#ssl.pemfile = "/var/lib/dehydrated/certs/venenuxdom.com/privcert.pem"#g' /etc/lighttpd/conf-available/10-ssl.conf

/usr/sbin/lighty-enable-mod ssl
/usr/sbin/service lighttpd restart

apache

sed -s -i -r 's|\tSSLCertificateFile.*|\tSSLCertificateFile /var/lib/dehydrated/certs/venenuxdom.com/cert.pem|g' /etc/apache2/sites-available/default-ssl
sed -s -i -r 's|\tSSLCertificateKeyFile.*|\tSSLCertificateKeyFile /var/lib/dehydrated/certs/venenuxdom.com/privkey.pem|g' /etc/apache2/sites-available/default-ssl
sed -s -i -r 's|\tSSLCertificateChainFile.*|\tSSLCertificateChainFile /var/lib/dehydrated/certs/venenuxdom.com/chain.pem|g' /etc/apache2/sites-available/default-ssl
sed -s -i -r 's|\tSSLCACertificateFile.*|\tSSLCACertificateFile /var/lib/dehydrated/certs/venenuxdom.com/fullchain.pem|g' /etc/apache2/sites-available/default-ssl

/usr/sbin/a2enmod ssl
/usr/sbin/service lighttpd restart

courier

cp /var/lib/dehydrated/certs/venenuxdom.com/privcert-lasted.pem /etc/courier/privcert.pem

chown daemon:root /etc/courier/*.pem

chmod 640 /etc/courier/*.pem

sed -i -r 's|^TLS_CERTFILE.*|TLS_CERTFILE=/etc/courier/privcert.pem|g' /etc/courier/esmtpd
sed -i -r 's|^TLS_CERTFILE.*|TLS_CERTFILE=/etc/courier/privcert.pem|g' /etc/courier/esmtpd-ssl
sed -i -r 's|^TLS_CERTFILE.*|TLS_CERTFILE=/etc/courier/privcert.pem|g' /etc/courier/imapd-ssl

for i in /etc/init.d/courier*; do $i restart; done

prosody

sed -i -r 's#key =.*#key = "/var/lib/dehydrated/certs/venenuxdom.com/privkey.pem";#g' /etc/conf.avail/venenuxdom.com.cfg.lua
sed -i -r 's#certificate =.*#certificate = "/var/lib/dehydrated/certs/venenuxdom.com/cert.pem";#g' /etc/conf.avail/venenuxdom.com.cfg.lua

/usr/sbin/service prosody restart

postfix

smtpd_tls_cert_file = /etc/dehydrated/certs/domain.tld/fullchain.pem /etc/postfix/main.cf
smtpd_tls_key_file = /etc/dehydrated/certs/domain.tld/privkey.pem /etc/postfix/main.cf
smtpd_use_tls=yes /etc/postfix/main.cf
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache /etc/postfix/main.cf
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache /etc/postfix/main.cf

systemctl restart postfix

hooks y automatizacion

Se puede automatizar, mediante hooks, dehydrated soporta multiples hook con un pequeño truco, pero se puede hacer que este llame a otros:

mkdir /var/lib/dehydrated/hooks.d

cat > /var/lib/dehydrated/hooks.sh << EOF
#!/usr/bin/env bash
# Simple script which allows the use of multiple hooks
for file in /var/lib/dehydrated/hooks.d/*
do
    \${file} "\$@"
done
EOF

chmod +x /var/lib/dehydrated/hooks.sh

Entonces todos lso hooks deben estar en el directorio /var/lib/dehydrated/hooks.d con extension .sh y marcados como ejecutables, para que puedan procesar:

Ejemplo de un hook para que lighttpd pueda usar automaticamente un certificado renovado sin pasos manuales, es decir este script se coloca en el directorio de hooks y se procesara un nuevo pem combinado siempre:

#!/usr/bin/env bash

deploy_cert() {
    local DOMAIN="${1}" KEYFILE="${2}" CERTFILE="${3}" FULLCHAINFILE="${4}" CHAINFILE="${5}" TIMESTAMP="${6}"
    echo "Executing deploy_cert hook $0"
    echo " + Creating privcert.pem (a combined privkey.pem + cert.pem)"
    cd "$(dirname "${CERTFILE}")" && {
        cat "${KEYFILE}" "${CERTFILE}" > "privcert-${TIMESTAMP}.pem" && \
        ln -sf "privcert-${TIMESTAMP}.pem" "privcert.pem" && {
            # Loop over all files of this type
            for filename in "privcert-"*".pem"; do
              # Check if current file is in use, remove if unused
              if [[ ! "${filename}" = "privcert-${TIMESTAMP}.pem" ]]; then
                echo " + Removing unused combined certificate file: ${filename}"
                rm "${filename}"
              fi
            done
        }
    }
}
HANDLER="$1"; shift
if [[ "${HANDLER}" = "deploy_cert" ]]; then
  "$HANDLER" "$@"
fi

para automatizarlo hay que ahora agregar las tareas a cron en el sistema, esto es usando el cron mensual:

cat > /etc/cron.monthly/dehydrated << EOF
#!/bin/sh

test -x /usr/bin/dehydrated || exit 0
/usr/bin/dehydrated --cron --challenge http-01  --accept-terms

test -x /etc/init.d/lighttpd || exit 0
/usr/sbin/service lighttpd restart
test -x /etc/init.d/nginx || exit 0
/usr/sbin/nginx lighttpd restart
EOF

chmod 755 etc/cron.monthly/dehydrated

con esto cada mes se renovara los archivos..

Conclusion

dehydrated es la opcion mandatoria para los que necesitan alta seguridad, pues evita tener que instalar compiladores (chain tools) ni dependencias.