Bacula Encriptación de los datos de un "agente" File Daemon
Dado que en mi instalación, al ser todo en una red local, no he visto la necesidad de encriptar los datos, ni el trafico del cliente Bacula al respaldar los ficheros de una maquima cliente, y no he indagado nada al respecto, doy por hecho que el trafico entre el "agente bacula" File-Daemon y el Servicio de almacenamiento, Storage-Daemon está lo suficientemente protegido.
Pero cuando uno manega información de terceros, nunca está la "cosa" suficientemente nada, puesto que se tienen que poner todos los medios al alcance para garantizar como minimo, que se ha hecho todo lo que se podia hacer en aras de un sistema que funcione eficientemente y con garantias.
Trafico encriptado vs datos encriptados.
Por defecto bacula no encripta nada, ni los datos ni el trafico entre sus "demonios" la diferencia, entre trafico encriptado y datos encriptados, es literal.
Datos encriptados, ( lo que veremos en este Art.) Los datos o mejor dicho el contenido de los ficheros es encriptado y se mueve encriptado y se almacena de forma encriptada, lo encripta el File-Daemon
Trafico encriptado, El trafico es encriptado generando un seudo tunel tipo SSL/TLS y llega al extremo contrario Storage Daemon, donde es almacenado tal cual, como está en el cliente, osea sin encriptar.
Como encripta los datos Bacula
En mi ignorancia, pensaba que dado que los servicios pesados (es un decir) estaban en el lado del "servidor" Bacula-Director o Bacula-StorageDaemon, pues que el trafico antes de ser escrito se encriptaria y se almacenaria ya encriptado. Nada mas lejos de la realidad.
Quien se encarga de encriptar los datos es el File-Daemon, lo que yo llamo el Agente Bacula. Es el encargado de proporcionar las llaves de encriptado ( usar los certificados generados por openssl ) y su uso para llevar trafico encriptado, ciertamente, no todo es encriptado, los nombres de los ficheros no se encriptan, tampoco los directorios, esto tiene su logica, ya que Bacula usa una base de datos, para almacenar esta información, y si va encriptada, poco va a poder hacer con ella. Lo que se encripta es el contenido de los ficheros.
Veamos como se tiene que proceder en un FileDaemon en sistemas Windows. (que es lo que menos documentado está)
Lo primero que se tiene que hacer es crear los certificados y las llaves publica y privada, y tambien se creara una llave maestra.
Referencia al manual Bacula en este punto.
El directorio por defecto en una instalación del cliente Bacula (FileDaemon) "Agente Bacula" es: C:\Program Files\Bacula (Win-XP) en este directorio se dispone de todo lo necesario para poder crear las llaves, y tambien se dispone del fichero "openssl.cnf" este fichero es fundamental, para nuestro proposito, al ser sistemas Windows, la extensión ".cnf" la identifica como un fichero de configuración para una conexión por modem (hiperterminal) o RS232, lo importante es que no nos confunda la pinta del icono o que no nos muestre su extensión para ficheros conocidos ( en este ocasión incorrectamente reconocidos)
Creacción de llaves siguiendo de forma escrupulosa el manual.
Dentro de C:\Prograam Files\Bacula y por consola introducimos: XPmasterkey es el nombre que yo he puesto para identificar mis ficheros.
C:\Program Files\Bacula>openssl genrsa -out XPmaster.key 2048
Loading 'screen' into random state - done
Generating RSA private key, 2048 bit long modulus
....................................................+++
.......................................................+++
e is 65537 (0x10001)
C:\Program Files\Bacula>
Ya disponemos de nuestra master key XPmaster.key ya podemos hacer nuestro certificado, Pero nos encontramos con esto.
C:\Program Files\Bacula>openssl req -new -key XPmaster.key -x509 -out XPmaster.cert
Unable to load config info from /home/kern/bacula/depkgs-mingw32/ssl/openssl.cnf
C:\Program Files\Bacula>
Buscando en internet doy con un articulo muy viejo que apunta a esto, en dicho articulo de la versión de bacula 1.32 creo, parece que no contenia el fichero openssl.cnf en el instalador original, pero tambien aclara como se tiene que solicionar este "fallo por ignorancia" añadiendo -config a al linea y apuntando donde está el fichero openssl.cnf la cosa pinta de otro modo y modificamos nuestra linea para crear el certificado.
C:\Program Files\Bacula>openssl req -new -key XPmaster.key -x509 -out XPmaster.cert -config openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:LasRozas
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LocalRed
Organizational Unit Name (eg, section) []:LocalRedCerts
Common Name (eg, YOUR name) []:XPvirtual.localred.net
Email Address []:certs@localred.net
C:\Program Files\Bacula>
Ya disponemos de nuestro certificado maestro, vamos a por las llaves que usara el Agente Bacula.
C:\Program Files\Bacula>openssl genrsa -out XPVirtual-FD.key 2048
Loading 'screen' into random state - done
Generating RSA private key, 2048 bit long modulus
.................................................................................+++
...........+++
e is 65537 (0x10001)
C:\Program Files\Bacula>
C:\Program Files\Bacula>openssl req -new -key XPVirtual-FD.key -x509 -out XPVirtual-FD.cert -config openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:LasRozas
Organization Name (eg, company) [Internet Widgits Pty Ltd]:LocalRed.net
Organizational Unit Name (eg, section) []:LocalRedCerts
Common Name (eg, YOUR name) []:XPvirtual.localred.net
Email Address []:certs@localred.net
C:\Program Files\Bacula>
Unamos los dos ficheros para crear nuestro .pem que contendra nuestros certificado publico y privado.
cat XPVirtual-FD.key XPVirtual-FD.cert > XPVirtual-FD.pem
Ya tenemos listos nuestros ficheros, veamos como modificamos nuestro fichero de configuración para indicarle que queremos encriptar los
ficheros.
Configurando bacula-fd.conf
Las lineas a añadir solo son cuatro, un par para dindicar que se usara
encriptación y se firmaran los datos, y otro par para dindicar donde
están los certificados. Las lineas tienen que estar en el apartado
global.
Bacula-fd.conf
# For Bacula release 5.2.10 (06/28/12) -- Windows MinGW32
#
# There is not much to change here except perhaps the
# File daemon Name
#
#
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = xp-vir-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = "C:\\Program Files\\Bacula\\working"
Pid Directory = "C:\\Program Files\\Bacula\\working"
# Plugin Directory = "C:\\Program Files\\Bacula\\plugins"
Maximum Concurrent Jobs = 10
##Encriptación
PKI Signatures = Yes # Enable Data Signing
PKI Encryption = Yes # Enable Data Encryption
# PKI Keypair = "/etc/bacula/fd-example.pem" # Public and Private Keys
# PKI Master Key = "/etc/bacula/master.cert" # ONLY the Public Key
PKI Keypair = "C:\\Program Files\\Bacula\\XPVirtual-FD.pem" # Public and Private Keys
PKI Master Key = "C:\\Program Files\\Bacula\\XPmaster.cert" # ONLY the Public Key
}
Atentos a las dobles "\\" que requiere el path de los certificados.
Con esto ya tendriamos nuestro Agente Bacula, con encriptación de datos. Solo requerimos que el servicio de windows se reinicie para que relea la configuración y tome efecto.