You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

405 lines
12 KiB
Markdown

---
title: "Sistema de copias de seguridad"
date: 2023-03-07T02:15:04+01:00
draft: false
image: featured.png
categories:
- documentación
- Administración de Sistemas Operativos
tags:
- bacula
- copia de seguridad
- OpenStack
---
## Enunciado
Implementar un sistema de copias de seguridad para las instancias del cloud, teniendo en cuenta las siguientes características:
* Selecciona una aplicación para realizar el proceso: bacula, amanda, shell script con tar, rsync, dar, afio, etc.
* Utiliza una de las instancias como servidor de copias de seguridad, añadiéndole un volumen y almacenando localmente las copias de seguridad que consideres adecuadas en él.
* El proceso debe realizarse de forma completamente automática
* Selecciona qué información es necesaria guardar (listado de paquetes, ficheros de configuración, documentos, datos, etc.)
* Realiza semanalmente una copia completa
* Realiza diariamente una copia incremental o diferencial (decidir cual es más adecuada)
* Implementa una planificación del almacenamiento de copias de seguridad para una ejecución prevista de varios años, detallando qué copias completas se almacenarán de forma permanente y cuales se irán borrando
* Selecciona un directorio de datos "críticos" que deberá almacenarse cifrado en la copia de seguridad, bien encargándote de hacer la copia manualmente o incluyendo la contraseña de cifrado en el sistema
* Incluye en la copia los datos de las nuevas aplicaciones que se vayan instalando durante el resto del curso
* Utiliza una ubicación secundaria para almacenar las copias de seguridad. Solicita acceso o la instalación de las aplicaciones que sean precisas.
La corrección consistirá tanto en la restauración puntual de un fichero en cualquier fecha como la restauración completa de una de las instancias la última semana de curso.
---
El escenario es el siguiente_
![escenario](https://fp.josedomingo.org/sri2223/4_iaas/img/os.drawio.png)
| Máquina | IPs | tipo |
| :-: | :-: | :-: |
| alfa | 172.22.200.218, 172.16.0.1, 192.168.0.1 | Debian |
| bravo | 172.16.0.200 | Rocky Linux |
| charlie | 192.168.0.2 | Contenedor ubuntu |
| delta | 192.168.0.3 | Contenedor ubuntu |
### Preparaciones previas
Y he decidido hacer las copias de seguridad desde alfa, ya que tiene conexión directa con las otras instancias. Para ello, voy a utilizar **bacula**, junto con su interfaz web **baculum**, tras ver las características de las distintas herramientas.
Antes de la instalación, compruebo que en alfa en total se han usado en disco 4.5 GB y en bravo 1.9 GB. Como charlie y delta son contenedores, el espacio ya se ha contado en alfa. Teniendo en cuenta el espacio usado, con un disco de 30 GB debería ser suficiente para guardar las copias de seguridad, tanto incrementales como completas.
Al disco le he instalado XFS por sus características de tolerancia a fallos, y lo he añadido a `/etc/fstab` para que se monte automáticamente al iniciar el sistema.
Creo la carpeta `/bacula` en la que va a estar montado permanentemente el disco, y le cambio el propietario y los permisos:
```bash
mkdir -p /bacula
chown -R bacula:bacula /bacula/
chmod 755 -R /bacula
```
Ahora, añado la siguiente línea al fichero `/etc/fstab`:
```bash
UUID=5f086e6b-6937-460b-93ab-1a65a9e12544 /bacula xfs defaults 0 1
```
## Instalación de bacula
Primero instalo los paquetes de bacula
```bash
apt install bacula bacula-common-mysql bacula-director-mysql
```
Durante la instalacion de `bacula-director-mysql` pregunta lo siguiente, le doy a yes e introduzco la contraseña de la base de datos.
![bacula-director-mysql](https://i.imgur.com/R9BRtUi.png)
Ahora instalo baculum, primero añado los repositorios:
```bash
wget -qO - http://www.bacula.org/downloads/baculum/baculum.pub | apt-key add -
echo "deb http://www.bacula.org/downloads/baculum/stable/debian buster main
deb-src http://www.bacula.org/downloads/baculum/stable/debian buster main" > /etc/apt/sources.list.d/baculum.list
```
Primero instalo los paquetes de la api
```bash
apt update
apt-get install apache2 baculum-common baculum-api baculum-api-apache2
a2enmod rewrite
a2ensite baculum-api
systemctl restart apache2
```
Y ahora los paquetes de la interfaz web
```bash
apt-get install baculum-common baculum-web baculum-web-apache2
a2enmod rewrite
a2ensite baculum-web
systemctl restart apache2
```
#### Configuración de la api
Primero accedo a http://172.22.200.218:9096/ , introduzco el usuario y contraseña por defecto (admin/admin) y configuro la api:
![configuracion api](https://i.imgur.com/PnRV17i.png)
Ahora, para permitir el acceso a la consola de bacula, edito el fichero `nano /etc/sudoers.d/baculum-api` y añado las siguiente líneas:
```bash
Defaults:www-data !requiretty
www-data ALL = (root) NOPASSWD: /usr/sbin/bconsole
www-data ALL = (root) NOPASSWD: /usr/sbin/bdirjson
www-data ALL = (root) NOPASSWD: /usr/sbin/bsdjson
www-data ALL = (root) NOPASSWD: /usr/sbin/bfdjson
www-data ALL = (root) NOPASSWD: /usr/sbin/bbconsjson
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl start bacula-dir
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl stop bacula-dir
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl restart bacula-dir
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl start bacula-sd
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl stop bacula-sd
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl restart bacula-sd
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl start bacula-fd
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl stop bacula-fd
www-data ALL = (root) NOPASSWD: /usr/bin/systemctl restart bacula-fd
```
![sudoers](https://i.imgur.com/H6QUnsE.png)
![confuracionapi2](https://i.imgur.com/5bNs8rG.png)
![confuracionapi3](https://i.imgur.com/OygLekr.png)
![confuracionapi4](https://i.imgur.com/57Vn21e.png)
Ahora creamos un usuario y una contraseña para la api
![confuracionapi5](https://i.imgur.com/dKYQjql.png)
Configuramos, ahora si, baculum en http://172.22.200.218:9095/
![confbaculum](https://i.imgur.com/mcdrvnm.png)
y utilizamos las credenciales de la api en la configuración:
![confbaculum2](https://i.imgur.com/YnQYUAz.png)
![confbaculum3](https://i.imgur.com/fbTDdCT.png)
## Configuración del servidor en alfa
### Selecciona qué información es necesaria guardar
En todas las instancias voy a guardar el contenido de /home, /etc, /var, /opt, /usr/share (menos los archivos temporales de var). Además de esto, en diferentes instancias voy a guardar lo siguiente:
| Instancia | Servicios | Localización |
| --- | --- | --- |
| alfa | bacula | /var/log |
| bravo | httpd | /var/www, /etc/httpd |
| charlie | dns | /var/chache/bind, /etc/bind |
| delta | correo | /etc/postfix |
Cada día voy a hacer copias incrementales, cada semana se realizará una completa, al igual que cada mes.
Teniendo en cuenta esto, voy a configurar alfa utilizando los ficheros de configuración (por facilidad respecto a la interfaz web). Primero edito el fichero `/etc/bacula/bacula-dir.conf`, cambiando su contenido por el siguiente (es un fichero en mi github debido a la longitud del mismo):
[bacula-dir.conf](https://github.com/robertorodriguez98/bacula/blob/main/alfa/bacula-dir.conf)
compruebo que no hay errores en el fichero de configuración:
```bash
bacula-dir -t -c /etc/bacula/bacula-dir.conf
```
Y tras eso, modifico el fichero `/etc/bacula/bacula-sd.conf`,que contiene la configuración referente a los dispositivos de almacenamiento, cambiando su contenido por el siguiente (es un fichero en mi github debido a la longitud del mismo):
[bacula-sd.conf](https://github.com/robertorodriguez98/bacula/blob/main/alfa/bacula-sd.conf)
Al igual que antes, compruebo que no hay errores en el fichero de configuración:
```bash
bacula-sd -t -c /etc/bacula/bacula-sd.conf
```
y reinicio los servicios:
```bash
systemctl restart bacula-sd.service
systemctl enable bacula-sd.service
systemctl restart bacula-director.service
systemctl enable bacula-director.service
```
## Preparación de los clientes
### Alfa
Alfa va a ser a la vez cliente y servidor, por lo que voy a instalar el cliente también en alfa:
```bash
apt install bacula-client
systemctl enable bacula-fd.service
```
Ahora modifico el fichero `/etc/bacula/bacula-fd.conf`:
```bash
Director {
Name = alfa-dir
Password = "bacula"
}
Director {
Name = alfa-mon
Password = "bacula"
Monitor = yes
}
FileDaemon { # this is me
Name = alfa-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /run/bacula
Maximum Concurrent Jobs = 20
Plugin Directory = /usr/lib/bacula
FDAddress = 10.0.0.247
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = alfa-dir = all, !skipped, !restored
}
```
Y reinicio el servicio:
```bash
systemctl restart bacula-fd.service
```
### Bravo
Instalo el cliente
```bash
sudo dnf install bacula-client
```
Y edito el fichero `/etc/bacula/bacula-fd.conf` y añado las siguientes líneas:
```bash
Director {
Name = alfa-dir
Password = "bacula"
}
Director {
Name = alfa-mon
Password = "bacula"
Monitor = yes
}
FileDaemon {
Name = bravo-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /run/bacula
Maximum Concurrent Jobs = 20
Plugin Directory = /usr/lib/bacula
FDAddress = 172.16.0.200
}
Messages {
Name = Standard
director = alfa-dir = all, !skipped, !restored
}
```
```bash
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=9101/tcp
firewall-cmd --permanent --add-port=9102/tcp
firewall-cmd --permanent --add-port=9103/tcp
firewall-cmd --reload
```
### Charlie y delta
La configuración en charlie y delta es similar, por eso la pongo junta:
```bash
sudo apt install bacula-client
```
Y edito el fichero `/etc/bacula/bacula-fd.conf`:
```bash
Director {
Name = alfa-dir
Password = "bacula"
}
Director {
Name = alfa-mon
Password = "bacula"
Monitor = yes
}
FileDaemon { # this is me
Name = delta-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/lib/bacula
Pid Directory = /run/bacula
Maximum Concurrent Jobs = 20
Plugin Directory = /usr/lib/bacula
FDAddress = 192.168.0.3
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = alfa-dir = all, !skipped, !restored
}
```
Y reinicio el servicio:
```bash
systemctl restart bacula-fd.service
```
Ahora, con todos los cliente configurados, reinicio los servicios de bacula en alfa:
```bash
systemctl restart bacula-fd.service
systemctl restart bacula-sd.service
systemctl restart bacula-director.service
```
y hago una prueba de conexión usando la consola de bácula y la interfaz web:
```bash
bconsole
```
![bconsole](https://i.imgur.com/PCa4pzo.png)
![web](https://i.imgur.com/EWP7PH0.png)
## Nodos de almacenamiento
Ahora voy a crear los nodos de almacenamiento con bconsole
```bash
bconsole
```
![bconsole](https://i.imgur.com/pkpErri.png)
También se puede hacer desde la interfaz web:
![web](https://i.imgur.com/DKz9aUK.png)
Realizo la misma configuración para vol-semanal y vol-mensual.
Podemos ver que se han creado los volúmenes:
![web](https://i.imgur.com/WOVsDgp.png)
## Restauración
Voy a realizar la restauración por medio de la interfaz web. Para ello utilizo la opción de Perform restore y sigo los siguientes pasos:
![web](https://i.imgur.com/WpBBp3u.png)
![web2](https://i.imgur.com/g4kd0Ri.png)
![web3](https://i.imgur.com/SYrgbek.png)
![web4](https://i.imgur.com/0Z7Z7Zg.png)
Selecciono qué quiero copiar y donde:
![web5](https://i.imgur.com/rgz94GM.png)
![web6](https://i.imgur.com/DlrJT2c.png)
y que reemplace los ficheros más antiguos:
![web7](https://i.imgur.com/Y38EHgZ.png)
Cuando acabe puedo ver que se ha ejecutado con éxito:
![web8](https://i.imgur.com/6Gok1iW.png)