Cifrar las conexiones de Bacula mediante TLS

Voy a exponer como se debe configurar bacula para que utilice conexiones TLS entre sus demonios, para que los datos no viajen sin cifrar por internet, ya que esto supondría una amenaza de seguridad en caso de que alguien estuviese espiando nuestras redes usando algún tipo de sniffer.

Introducción

Configurar bacula con TLS es un proceso tedioso, ya que hay que cifrar todas las conexiones posibles, y crear certificados de seguridad para todas las máquinas.

Se establecen conexiones entre estos elementos de bacula:

  • La consola y el director
  • El director y el gestor de almacenamiento
  • El director y el gestor de archivos cliente
  • El gestor de almacenamiento y el gestor de archivos cliente

Todas estas conexiones deben ser cifradas mediante TLS.

Procedimiento

  1. Generar un sistema de claves pública y privada (RSA)
  2. Solicitar un certificado a una entidad certificadora
  3. Colocar los archivos en un lugar seguro
  4. Configurar el director y la consola
  5. Configurar los demás demonios

Para generar un fichero con las clave RSA utilizamos openssl:

openssl genrsa -des3 -out dominio.net.key 1024

Se os pedirá una contraseña para cifrar este archivo, usad una que podais recordad dentro de un momento, no es difícil.
El siguiente paso es crear una solicitud de certificado X.509 Certificate Signing Request (CSR) Management. Este certificado incluye información personal así como nuestra clave pública, un periodo de validez, una url de revocación del certificado y la firma digital de la entidad certificadora. Generalmente estas entidades suelen cobrar por estos servicios, siendo VeriSign la más utilizada. No obstante, nosotros vamos a utilizar una entidad certificadora gratuita llamada CAcert.org.
¿Sabíais que Mark Shuttleworth fundador de Canonical, la empresa que está detrás de Ubuntu debe su fortuna a la venta de su empresa Thawte por 575 millones de dólares a VeriSign en 1999?
Curiosidades aparte, generemos la petición de certificado con el siguiente comando:
Importante: Debemos rellenar correctamente los campos, sobre todo Common Name que debe contener el fqdn de nuestro servidor que será en este caso dominio.net. El campo "A challenge password []" lo dejamos en blanco.

openssl req -new -key dominio.net.key -out dominio.net.csr

Ahora creamos un nuevo certificado de servidor en cacert.org, copiamos el contenido del archivo dominio.net.csr en el cuadro de texto, y nos devuelve un texto que debe ser copiado a un archivo llamado por ejemplo: dominio.net.cert.
También debemos obtener el siguiente archivo: http://www.cacert.org/certs/root.crt y copiarlo en la misma carpeta donde están los otros bajo el nombre cacert.pem.
Vamos a eliminar que cifra el archivo con la clave pública ya que bacula no lo soporta.

openssl rsa -in dominio.net.key -out dominio.net.nopass.key
mv dominio.net.nopass.key dominio.net.key

Ahora vamos a la carpeta /etc/bacula, y creamos un directorio para meter estos certificados, les cambiamos el propietario y ajustamos los permisos.

mkdir /etc/bacula/certificates
cd /etc/bacula/certificates
- Copiamos aquí todos los archivos mencionados con anterioridad -
chown bacula:bacula *
chmod 640 *

Debemos crear un certificado para cada máquina en la que tengamos a un demonio de bacula ejecutandose.

Configuración de los demonios

Lo primero que haremos es configurar la consola y el director para que mantengan una comunicación mediante TLS.
/etc/bacula/bconsole.conf

Director {
Name = director1-dir
...
TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = /etc/bacula/certificates/cacert.pem
TLS Certificate = /etc/bacula/certificates/dominio.net.cert
TLS Key = /etc/bacula/certificates/dominio.net.key

/etc/bacula/bacula.dir.conf

Director {
...
TLS Verify Peer = yes
TLS Allowed CN = "dominio.net"
TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = /etc/bacula/certificates/cacert.pem
TLS Certificate = /etc/bacula/certificates/dominio.net.cert
TLS Key = /etc/bacula/certificates/dominio.net.key
}

Ejecutamos bconsole y comprobamos que todo funciona correctamente.
Debemos introducir el siguiente código.

TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = /etc/bacula/certificates/cacert.pem
TLS Certificate = /etc/bacula/certificates/dominio.net.cert
TLS Key = /etc/bacula/certificates/dominio.net.key
}

En la configuración de los demonios mencionados anteriormente para que todos se comuniquen correctamente.

Eso es todo de momento sobre bacula,
Copias de seguridad - Backup local y remoto