Copias de seguridad en Linux con Rdiffweb y Rdiff-backup

En esta entrada os hablaré de la herramienta Rdiffweb que funciona como una interfaz web para la utilidad de copias de seguridad rdiff-backup, en sistemas GNU/Linux, pero empecemos por el principio.

¿Qué es rdiff-backup?

Se trata de una herramienta para GNU/Linux que facilita la creación y gestión de copias de seguridad. Su funcionamiento es simple, realiza una copia de seguridad de un directorio en otro, generalmente a través de una red. El directorio de destino termina siendo de esa manera una copia del directorio origen, eso sí, guardando cada una de las copias diferenciales en un subdirectorio especial dentro del destino. De esa manera permite recuperar archivos perdidos hace algún tiempo, si fuese necesario.

Tiene como idea combinar las mejores características de una copia tipo “mirror” con una copia de seguridad incremental. Rdiff- backup también conserva subdirectorios, enlaces duros (hard-links), archivos dev, permisos, propiedad, tiempo de modificación, acls (si las tuviese), etcétera.

Además, esta herramienta puede trabajar como el popular comando “rsync” a través de tuberías o pipes. Por lo que se puede utilizar a través de ssh para respaldar de forma segura un disco duro en una ubicación remota.

¿De qué trata Rdiffweb?

Es una aplicación web que nos permite ver los repositorios generados por rdiff-backup. Su propósito es facilitar la administración de copias de seguridad y restaurar rápidamente los datos con una potente interfaz.

Dicha herramienta está escrita en Python, sigue la filosofía de desarrollo del código abierto y es software libre, ya que utiliza una licencia GPL.

Ambas herramientas tienes el código fuente ubicado en Github, al final de la entrada tenéis los respectivos enlaces.

Instalar rdiff-backup y Rdiffweb en un servidor GNU/Linux

Yo me voy a decantar por un servidor con un sistema operativo Centos 8, que como sabéis utiliza el gestor de paquetes DNF. En este caso utilizo un VPS en mi proveedor de confianza Clouding.io, aunque en muchos casos el entorno será local y no en la llamada nube.

Para empezar, habilitamos el repositorio EPEL e instamos una serie de paquetes necesarios, para finalmente instalar la propia herramienta:

sudo dnf install dnf-plugins-core epel-release
sudo dnf install python3-devel openldap-devel 
sudo dnf install gcc python3-pip openssh-server
sudo dnf copr enable frankcrawford/rdiff-backup
sudo dnf --enablerepo=PowerTools install rdiff-backup
pip3 install -U rdiffweb

No es recomendado realizar la instalación utilizando root, por lo que utiliza otro usuario que este dentro del grupo sudo.

Si en cambio utilizas una distribución Debian o derivada con el gestor APT, debes seguir estos pasos:

sudo apt update
sudo apt install python3-dev libldap2-dev libsasl2-dev  
sudo apt install build-essential curl python3-pip openssh-server-server
pip3 install -U rdiff-backup
pip3 install -U rdiffweb

Completar el setup de aplicación

Por defecto, Rdiffweb busca una configuración en /etc/rdiffweb/rdw.conf, y no se iniciará si este archivo no existe. Por lo tanto, creamos el archivo de configuración predeterminado:

sudo mkdir -p /etc/rdiffweb
sudo curl -L https://gitlab.com/ikus-soft/rdiffweb/-/raw/master/rdw.conf \
-o/etc/rdiffweb/rdw.conf

Lo recomendado es crear una unidad de servicio para administrar Rdiffweb como un servicio (con Systemd) e iniciarlo automáticamente cada vez que reinicie su computadora:

sudo curl -L https://gitlab.com/ikus-soft/rdiffweb/-/raw/master/extras/systemd/rdiffweb.service \
-o /etc/systemd/system/rdiffweb.service
sudo systemctl daemon-reload
sudo service rdiffweb start

Si observamos su estado:

Estado del servicio Rdiffweb

El siguiente paso es conectarnos a la interfaz web. En este punto, deberíamos poder acceder a Rdiffweb desde un navegador en http://localhost:8080.

Seguramente tendrás que acceder desde otro host, por lo que deberás modificar el fichero de configuración para ello. En mi caso, como es una máquina de test, he habilitado el acceso a cualquier equipo:

sudo sed -i 's/#ServerHost=127.0.0.1/ServerHost=0.0.0.0/g' \
/etc/rdiffweb/rdw.conf

Una vez hecho esto reinciamos el servicio:

sudo systemctl restart rdiffweb.service

Ahora ya no tendría que tener problemas para acceder vía web:

Control de acceso vía web de Rdiffweb

El nombre de usuario y la contraseña predeterminados son «admin» y «admin123» por lo que cámbialos inmediatamente para mantener la seguridad del sistema.

Instalar rdiff-backup en una máquina cliente

Utilizando ssh vamos a acceder a una máquina cliente donde vamos a instalar rdiff-backup. Este mismo servicio (ssh) le servirá a rdiffbackup para comunicarse en el servidor de backup con el cliente.

Voy a utilizar otro VPS, que estoy utilizando para otra entrada, con un sistema operativo con Debian 10.

OJO aquí. Si hay mucha diferencia de versión entre la que hay instalada en el servidor con el rol de central y los clientes, será un festival de errrores de python. Avisado quedas.

En este caso la instalación de la herramienta sería:

sudo apt update
sudo apt install python3-pip python3-setuptools 
sudo apt install python3-pylibacl python3-pyxattr
sudo pip3 install rdiff-backup

En el caso de un cliente Centos, RHEL o similar:

sudo yum install epel-release
sudo yum install rdiff-backup

En versiones recientes de estas distribuciones debes cambiar yum por dnf.

Probamos la conexión SSH

Ya he comentado que la máquina donde se guardarán las copias de seguridad debe tener intercambio de llaves con la máquina cliente. Para ello debemos generar una llave pública en el cliente y después intercambiarla con el host donde se guardarán las copias de seguridad. Os expliqué como hacerlo en estada entrada: SSH sin contraseña en Linux.

La primera copia de seguridad

El uso de la herramienta rdiffbackup es la siguiente:

rdiff-backup -origen- -destino-

Por ejemplo, si queremos hacer una copia de seguridad en el mismo host:

sudo rdiff-backup /var/log /backups/var-log.backup

De esa manera, si refrescamos los repositorios, desde nuetro perfil de usuario, ya podemos ver el backup reflejado en la interfaz web:

Vista del nuevo backup (repositorio)

Si marcamos sobre el nuevo repositorio, que es como interpreta el programa cada backup, veremos los ficheros y carpetas guardados:

Vista del repositorio recién creado

Tal y como se observa en la imagen podemos ver la lista de ficheros guardados, la pestaña para restaurar, la configuración de este y las gráficas informativas. Desde la pestaña de «Restaurar repositorio» podemos ver las difernetes versiones de este.  Además nos permite descargar dicha versión en diferentes formatos comprimidos:  tar.gz, tar.bz2 y zip

Desde la pestaña «Configuración» podemos indicar su codificación, que por defecto es «utf-8«, el tiempo de almacenaje de las versiones anteriores, liberando de esta manera espacio en disco, y por último, si queremos que se nos notifique por correo la actividad de este repositorio (si tenemos el servicio de correo configurado en el host) En esta misma sección también podemos eliminar el repositorio, si fuese necesario, aunque ten en cuenta que entonces ya no podrá ser restaurado.

Copia de seguridad remota

Antes hemos instalado rdiff-backup en un host, que queríamos utilizar como cliente. Desde el mismo cliente lanzamos la copia de seguridad:

sudo rdiff-backup /var/log davidochobits@ip-del-servidor-central::/backups/servdebian10koha-var-log.backup

Cuidado aquí. El usuario, en este caso «davidochobits», tiene que tener permisos de escritura en el directoio donde se guardan los backups.

Si todo ha ido bien veremos el nuevo repositorio en la interfaz web.

Tal y como se ve en la imagen:

Nuevo repositorio desde un host remoto

Desde la sección «Registros» vemos la última actividad:

Registros del sistema

Desde el «Área de administración» también existe una vista interesante, con el estado de los repositorios, con información ampliada:

Vista del estado de los repositorios

Y esto es todo por hoy. La verdad es que no he profundizado demasiado en la herramenta rdiff-backup, que tiene muchas posibilidades, pero creo que la entrada ya ha quedado lo suficientemente extensa. Si crees que estaría bien dedicar más entradas a esta herramienta de copia de seguridad,  por favor deja un comentario, que siempre son de agradecer.

Código fuente de los proyectos:

Rdiff-backup

Rdiffweb