Bacula: cuestiones sobre seguridad
Cortafuegos
Para conectar los diferentes programas entre sí es necesario que se abran puertos en el cortafuegos. Evidente, ¿ no ? Pero hay que tener en cuenta que hasta que las conexiones entre ellos no sean cifradas ó estén aseguradas de otra forma, además de tener abierto un programa al exterior, también es posible interceptar el intercambio de datos entre ellos, con todo lo que significa.
Si los equipos a conectar disponen de una IP fija la primera norma básica es limitar el acceso a esas direcciones en concreto; si se usa Shorewall la regla en el cliente (servidor de archivos) podría ser la siguiente:
ACCEPT net:IP-DEL-DIRECTOR fw tcp 9102
mientras que en el servidor de almacenamiento tendría que ser:
ACCEPT net:IP-SERVIDOR-ARCHIVOS fw tcp 9103
Los puertos que bacula usa están registrados en el IANA y son lo siguientes:
Director de copias | bacula-dir | 9101 |
Servidor de archivos | bacula-fd | 9102 |
Almacenamiento | bacula-sd | 9103 |
Las conexiones efectuadas son las siguientes:
- La consola conecta con el director en el puerto 9101
- El director conecta con el servidor de almacenamiento en el puerto 9103
- El director conecta también con el servidor de archivos en el puerto 9102
- El servidor de archivos conecta con el servidor de almacenamiento en el puerto 9103
Ya que el el funcionamiento de bacula viene a ser así:
- El director es el que origina la copia y se pone en contacto con el
servidor de archivos correspondiente. Habla con él y le proporciona los
parámetros de la operación:
- Selección de archivos
- Tipo de copia: completa ó incremental desde una fecha concreta
- Servidor de almacenamiento al que enviar los datos
- El servidor de archivos abre una conexión con el servidor de almacenamiento y procede a enviarle los datos.
- Al finalizar, y con la conexión aún sin cerrar con el director le envía el informe de fin de operación y cualquier otro dato de interés.
Conexiones interrumpidas
En la documentación se advierte de que las conexiones pueden verse interrumpidas por los cortafuegos y/ó enrutadores si el tiempo de inactividad de las conexiones es demasiado alto.
En este caso recomiendan tocar el parámetro Heart Beat Interval tanto en el servidor de archivos como en el de almacenamiento.
Máquinas Windows
También recuerdan que la mayor dificultad suele estar en el cortafuegos de Windows, que puede tener una política muy restrictiva de entrada. Abrir el puerto 9102 para entrada suele arreglar bastante la 9102 para entrada suele arreglar bastante la situación.
Enlaces
Conexiones seguras mediante TLS
Bacula dispone de soporte para cifrar las comunicaciones mediante TLS a partir de la versión 1.37, siendo su configuración relativamente sencilla y bien documentada.
Además de los cambios en la configuración de los diferentes servicios, necesitamos
- Clave en formato PEM
- Certificado en formato PEM
- Certificado tipo CA que haya firmado el anterior.
y asumimos que están en la siguiente localización y bajo estos nombres:
- Clave: /etc/CA/myserver-key-unsecure.pem
- Certificado: /etc/CA/myserver-cert.pem
- CA: /etc/CA/cacert.pem
Configurar el director
Incluímos el siguiente párrafo en el archivo /etc/bacula/bacula-dir.conf
1 Director { 2 ... 3 TLS Enable = yes 4 TLS Require = no 5 TLS Verify Peer = no 6 TLS CA Certificate File = /etc/CA/cacert.pem 7 TLS Certificate = /etc/CA/myserver-key-unsecure.pem 8 TLS Key = /etc/CA/myserver-cert.pem 9 ... 10 }
Que viene a decir que las conexiones TLS están activas pero que no son obligatorias, así como que tampoco es imprescindible verificar la identidad del interlocutor. Esto es conveniente y necesario porque es posible que existan clientes antiguos sin soporte TLS y no queremos cerrarles la puerta.
Luego indicamos con qué clientes queremos conectar de esta forma incluyendo párrafos similares a esto en el mismo archivo:
1 Client { 2 ... 3 TLS Enable = yes 4 TLS Require = yes 5 TLS CA Certificate File = /etc/CA/cacert.pem 6 TLS Certificate = /etc/CA/myserver-key-unsecure.pem 7 TLS Key = /etc/CA/myserver-cert.pem 8 ...
Servidor de archivos y almacenamiento
Con una semántica muy similar a la que aplicamos al director, pero añadiéndole como requisito que sólo él puede contactar con nosotros:
1 Director { 2 Name = myserver-dir 3 ... 4 TLS Enable = yes 5 TLS Require = yes 6 TLS Verify Peer = yes 7 8 TLS Allowed CN = "bacula@myserver.com" 9 10 TLS CA Certificate File = /etc/CA/cacert.pem 11 TLS Certificate = /etc/CA/myserver-key-unsecure.pem 12 TLS Key = /etc/CA/myserver-cert.pem 13 ... 14 }
Idéntica configuración se debe emplear en el servidor de almacenamiento. La claúsula TLS Allowed CN permite inspeccionar el contenido de dicho campo en el certificado para permitir el acceso, mientras que TLS Verify Peer fuerza al servidor precisamente a efectuar dicha comprobación.
Enlaces
- Artículo sencillo y claro sobre TLS y bacula
- Artículo con más enjundia
- Capítulo sobre TLS en la documentación de bacula
- Cifrado de datos en el servidor de archivos: