Instalación de un sistema de copias de seguridad (backup) usando RAID 1, LUKS y BackupPC en el sistema operativo Debian Wheezy.
Instalación de Linux
Para este sistema de copias de seguridad vamos a necesitar tres discos duros (en este ejemplo /dev/sda, /dev/sdb y /dev/sdc). La capacidad del primer disco duro debe ser suficiente para contener el sistema operativo Linux.
Los otros dos discos duros deben tener la misma capacidad, pues serán usados más adelante para crear un conjunto redundante de discos independientes (RAID) donde almacenar las copias de seguridad.
Instalar en el primer disco duro (/dev/sda) el sistema básico de Debian Wheezy y elegir las colecciones
- Servidor SSH
- Utilidades estándar del sistema
Después de finalizar la instalación y reiniciar el sistema, entrar como usuario root para continuar con la configuración del servidor.
Nombre del servidor
En este ejemplo el nombre del servidor es backuppc. Ejecutar los comandos
echo "backuppc" > /etc/hostname
hostname -F /etc/hostname
Actualizar los archivos /etc/network/interfaces y /etc/hosts como se muestra abajo. En este ejemplo la dirección IP de la máquina es 192.168.0.98, el nombre del dominio es test.dominio.
Extracto del archivo: /etc/network/interfaces
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.98
netmask 255.255.255.0
gateway 192.168.0.1
Extracto del archivo: /etc/hosts
127.0.0.1 localhost
192.168.0.98 backuppc.test.dominio backuppc
Actualizaciones de software
Instalar las actualizaciones de software disponibles.
aptitude update
aptitude upgrade
Agregarse al grupo sudo
Instalar el paquete sudo.
aptitude install sudo
Agregar su cuenta (usuario creado durante la instalación de Linux) al grupo de administradores del sistema (admin). En este ejemplo el nombre de usuario es debianuser.
usermod -a -G sudo debianuser
Salir del sistema como usuario root.
logout
Conectarse con su nombre de usuario (en este ejemplo debianuser) y comprobar si tiene los derechos de administrador.
sudo bash
De aquí en adelante ya no será necesario conectarse como el usuario root para administrar el sistema.
Conjunto redundante de discos independientes (RAID)
Instalar los paquetes necesarios para crear un conjunto RAID.
aptitude install mailutils mdadm
Durante la instalación de mdadm hay que responder dos preguntas. En la primera hay que introducir los arrays MD (RAIDs) necesarios para arrancar el sistema de ficheros raíz. En este ejemplo vamos a usar el RAID para almacenar nuestras copias de seguridad (backup), por lo tanto, la respuesta correcta es "none".
En la segunda pregunta hay que responder con "Sí" (Yes), pues queremos que mdadm inicie los arrays MD (RAIDs) de forma automática.
Con los dos discos duros restantes (/dev/sdb y /dev/sdc) vamos a crear ahora un RAID de nivel 1 (espejo).
mdadm --create --verbose /dev/md/backup --name=backup --level=1 --raid-devices=2 /dev/sdb /dev/sdc
mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: size set to 134152064K Continue creating array? yes mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md/backup started.
Actualizar el archivo de configuración /etc/mdadm/mdadm.conf para que mdadm sepa cómo montar el RAID cuando el sistema operativo se reinicia. Primero obtenemos la información del RAID activo.
mdadm -Es
ARRAY /dev/md/backup metadata=1.2 UUID=89cda402:69980928:1905db04:3304e8db name=backuppc:backup
Con esa información actualizamos el archivo /etc/mdadm/mdadm.conf como se muestra abajo.
Extracto del archivo: /etc/mdadm/mdadm.conf
DEVICE /dev/sdb /dev/sdc
HOMEHOST backuppc
# definitions of existing MD arrays
ARRAY /dev/md/backup metadata=1.2 name=backup UUID=89cda402:69980928:1905db04:3304e8db
Actualizar el disco RAM inicial y reiniciar la máquina.
update-initramfs -u
reboot
Podemos ver el estado del RAID ejecutando como usuario root el comando
cat /proc/mdstat
Personalities : [raid1] md127 : active raid1 sdb[0] sdc[1] 134152064 blocks super 1.2 [2/2] [UU] [==>..................] resync = 10.7% finish=9.9min speed=199607K/sec
Esperar hasta que el RAID haya sido creado.
cat /proc/mdstat
Personalities : [raid1] md127 : active raid1 sdb[0] sdc[1] 134152064 blocks super 1.2 [2/2] [UU] unused devices: <none>
Ver la información detallada del dispositivo nuevo /dev/md/backup.
mdadm --detail /dev/md/backup
/dev/md/backup: Version : 1.2 Creation Time : Wed Feb 26 11:08:13 2014 Raid Level : raid1 Array Size : 134152064 (127.94 GiB 137.37 GB) Used Dev Size : 134152064 (127.94 GiB 137.37 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Feb 26 11:24:30 2014 State : active Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : backuppc:backup (local to host backuppc) UUID : 89cda402:69980928:1905db04:3304e8db Events : 18 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc
Dispositivo cifrado con LUKS
Vamos a crear un dispositivo cifrado con LUKS del RAID /dev/md/backup utilizando la herramienta cryptsetup.
Instalar el paquete cryptsetup.
aptitude install cryptsetup
Cifrar y activar el dispositivo /dev/md/backup usando el formato LUKS y una contraseña como clave de cifrado.
cryptsetup luksFormat /dev/md/backup
WARNING! ======== This will overwrite data on /dev/md/backup irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: *** Verify passphrase: ***
Activar dispositivo cifrado y asignarle el dispositivo /dev/mapper/backup_crypt.
cryptsetup luksOpen /dev/md/backup backup_crypt
Formatear el dispositivo /dev/mapper/backup_crypt.
mkfs.ext4 -L backup_crypt /dev/mapper/backup_crypt
Verificar la configuración.
tune2fs -l /dev/mapper/backup_crypt
Actualizar el archivo /etc/fstab como se muestra abajo.
Extracto del archivo: /etc/fstab
# Mount backup_crypt
LABEL=backup_crypt /backup ext4 defaults,noauto 0 0
Crear el punto de montaje /backup, montar el dispositivo cifrado y verificar la configuración.
mkdir /backup
mount /backup
df /dev/mapper/backup_crypt
Instalación de BackupPC
Instalar BackupPC ejecutando el comando
aptitude install backuppc
Durante la instalación seleccionar el servidor Apache 2 y tomar nota de la clave para el usuario backuppc.
BackupPC utiliza por defecto el directorio /var/lib/backuppc para almacenar las copias de seguridad. Vamos a modificar la configuración para usar en su lugar el dispositivo cifrado montado en /backup. Ejecutar los comandos que siguen.
/etc/init.d/backuppc stop
cp -a /var/lib/backuppc /backup/
mv /var/lib/backuppc /var/lib/backuppc.orig
ln -s /backup/backuppc /var/lib/backuppc
ln -s /backup/backuppc/log /var/log/backuppc
Iniciar BackupPC y verificar si está funcionando con la configuración nueva.
/etc/init.d/backuppc start
tail -f /var/log/backuppc/LOG
Abrir un navegador y comprobar el acceso a la interfaz web http://192.168.0.98/backuppc/ con el usuario backuppc y la clave creada durante la instalación de BackupPC.
Configuración de los clientes
Configuración de un cliente Linux Ubuntu
En este ejemplo vamos a configurar la copia de seguridad automática a través de la red de la carpeta personal de un usuario (ubuntuuser) en una máquina con el sistema operativo Ubuntu (ubuntupc, dominio test.dominio).
Actualizar el archivo /etc/default/rsync para activar el inicio automático de Rsync cuando el sistema operativo se reinicie.
Extracto del archivo: /etc/default/rsync
RSYNC_ENABLE=true
Crear la configuración para la carpeta personal en el archivo /etc/rsyncd.conf como se muestra abajo.
Extracto del archivo: /etc/rsyncd.conf
max connections = 1
log file = /var/log/rsync.log
timeout = 600
[UbuntuuserHomeFolder]
comment = Copia de seguridad de la carpeta personal del usuario
list = false
# Ruta completa de la carpeta personal del usuario
path = /home/ubuntuuser
# Nombre del usuario en esta máquina
uid = ubuntuuser
# Nombre de un usuario ficticio para la conexión desde
# el servidor BackupPC (backuppc.test.dominio).
# El usuario ficticio no debe existir en esta máquina.
auth users = virtualuser
# Archivo que contiene la contraseña para el usuario ficticio
secrets file = /etc/rsyncd.secrets
# Sólo el servidor BackupPC puede tener
# accesso a esta máquina usando rsync
hosts allow = backuppc.test.dominio
Agregar la contraseña (en este ejemplo "PalabraSecreta") del usuario ficticio virtualuser al archivo /etc/rsyncd.secrets.
Extracto del archivo: /etc/rsyncd.secrets
virtualuser:PalabraSecreta
Cambiar los permisos del archivo /etc/rsyncd.secrets y reiniciar rsync como se muestra abajo.
chmod 600 /etc/rsyncd.secrets
/etc/init.d/rsync restart
Finalizar la configuración del cliente en el servidor BackupPC.
Configuración de un cliente Mac
En este ejemplo vamos a configurar la copia de seguridad automática a través de la red de la carpeta personal de un usuario (macuser) en una máquina Mac (macmachine, dominio test.dominio).
Crear el archivo /Library/LaunchDaemons/rsync.plist para activar el inicio automático de Rsync cuando el sistema operativo se reinicie.
Contenido del archivo: /Library/LaunchDaemons/rsync.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>rsync</string>
<key>Program</key>
<string>/usr/bin/rsync</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/rsync</string>
<string>--daemon</string>
</array>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>rsync</string>
<key>SockType</key>
<string>stream</string>
</dict>
</dict>
</dict>
</plist>
Crear la configuración para la carpeta personal en el archivo /etc/rsyncd.conf como se muestra abajo.
Extracto del archivo: /etc/rsyncd.conf
max connections = 1
log file = /var/log/rsync.log
timeout = 600
[MacuserHomeFolder]
comment = Copia de seguridad de la carpeta personal del usuario
list = false
# Ruta completa de la carpeta personal del usuario
path = /Users/macuser
# Nombre del usuario en esta máquina
uid = macuser
# Nombre de un usuario ficticio para la conexión desde
# el servidor BackupPC (backuppc.test.dominio).
# El usuario ficticio no debe existir en esta máquina.
auth users = virtualuser
# Archivo que contiene la contraseña para el usuario ficticio
secrets file = /etc/rsyncd.secrets
# Sólo el servidor BackupPC puede tener
# accesso a esta máquina usando rsync
hosts allow = backuppc.test.dominio
Agregar la contraseña (en este ejemplo "PalabraSecreta") del usuario ficticio virtualuser al archivo /etc/rsyncd.secrets.
Extracto del archivo: /etc/rsyncd.secrets
virtualuser:PalabraSecreta
Cambiar los permisos del archivo /etc/rsyncd.secrets e iniciar rsync como se muestra abajo.
chown root:wheel /Library/LaunchDaemons/rsync.plist
chmod 644 /Library/LaunchDaemons/rsync.plist
chmod 600 /etc/rsyncd.secrets
launchctl load /Library/LaunchDaemons/rsync.plist
Finalizar la configuración del cliente en el servidor BackupPC.
Configuración de un cliente Windows
En este ejemplo vamos a configurar la copia de seguridad automática a través de la red de la carpeta personal de un usuario (winuser) en una máquina Windows (winpc, dominio test.dominio).
Descargar e instalar el programa cygwin-rsyncd-3.0.9.0_installer.exe. Después de la instalación, el servicio nuevo RsyncServer de Windows ha sido creado y se encuentra activo. Los archivos de Cygwin y Rsync han sido instalados en el directorio C:\rsyncd.
Crear la configuración para la carpeta personal en el archivo C:\rsyncd\rsyncd.conf como se muestra abajo.
Extracto del archivo: C:\rsyncd\rsyncd.conf
max connections = 1
log file = c:/rsyncd/rsync.log
lock file = c:/rsyncd/rsync.lock
timeout = 600
[WinuserHomeFolder]
comment = Copia de seguridad de la carpeta personal del usuario
list = false
use chroot = false
strict modes = false
# Ruta completa de la carpeta personal del usuario
# Sustituir la letra de la unidad "C:" con "/cygdrive/c"
path = /cygdrive/c/Users/winuser
# Nombre del usuario en esta máquina
uid = winuser
# Nombre de un usuario ficticio para la conexión desde
# el servidor BackupPC (backuppc.test.dominio).
# El usuario ficticio no debe existir en esta máquina.
auth users = virtualuser
# Archivo que contiene la contraseña para el usuario ficticio
secrets file = c:/rsyncd/rsyncd.secrets
# Sólo el servidor BackupPC puede tener
# accesso a esta máquina usando rsync
hosts allow = backuppc.test.dominio
Agregar la contraseña (en este ejemplo "PalabraSecreta") del usuario ficticio virtualuser al archivo C:\rsyncd\rsyncd.secrets.
Extracto del archivo: C:\rsyncd\rsyncd.secrets
virtualuser:PalabraSecreta
Reiniciar el servicio RsyncServer de Windows para cargar la configuración nueva.
Abrir una consola de comandos (CMD) y ejecutar los comandos que siguen para crear las reglas en el cortafuego (Firewall) de Windows.
netsh advfirewall firewall add rule name="Open Port 873" dir=in action=allow protocol=TCP localport=873
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow
Finalizar la configuración del cliente en el servidor BackupPC.
Agregar cliente a BackupPC
En este ejemplo vamos incorporar el cliente Linux (ubuntupc.test.dominio) a la configuración de BackupPC.
El procedimiento es igual para para clientes Linux, Mac y Windows. La única diferencia es que para clientes Linux y Mac se usa
$Conf{ClientCharset} = 'utf8';
mientras que para clientes Windows se debe usar
$Conf{ClientCharset} = 'cp1252';
En el servidor BackupPC (backuppc.test.dominio) creamos el archivo /etc/backuppc/pc/ubuntupc.test.dominio.pl que contiene la configuración para el cliente Linux (ubuntupc.test.dominio).
Contenido del archivo: /etc/backuppc/pc/ubuntupc.test.dominio.pl
$Conf{ClientCharset} = 'utf8';
$Conf{RsyncShareName} = [
'UbuntuuserHomeFolder'
];
$Conf{RsyncdUserName} = 'virtualuser';
$Conf{RsyncdPasswd} = 'PalabraSecreta';
$Conf{XferMethod} = 'rsyncd';
Cambiar el propietario del archivo ubuntupc.test.dominio.pl.
chown backuppc:www-data /etc/backuppc/pc/ubuntupc.test.dominio.pl
Usando la interfaz web de BackupPC (http://backuppc.test.domain/backuppc/), agregar el cliente a la lista de máquinas configuradas como se muestra de la imagen que sigue.
Finalmente, en la página de resumen de los equipos (Host Summary) puede pulsar el nombre de la máquina recién configurada y luego, en la siguiente página, iniciar la primera copia de seguridad pulsando el botón "Comenzar copia de seguridad completa" (Start Full Backup).
Manuales y documentación detallada del sistema se pueden encontrar en el sitio oficial de BackupPC.
Reinicio del sistema
Para proteger la privacidad de la información almacenada en las copias de seguridad (backup), hemos configurado BackupPC para utilizar el directorio /backup/backuppc en el dispositivo cifrado con LUKS. Después de reiniciar el servidor, debemos activar el dispositivo usando la clave de cifrado.
Esto significa que el servicio BackupPC no será iniciado de forma automática después del reinicio del sistema, pues el dispositivo cifrado aun no ha sido activado. Para facilitar el proceso de activación del dispositivo cifrado y el reinicio de BackupPC, se puede crear el archivo ejecutable backup_crypt_setup.sh en la carpeta personal de su cuenta (en este ejemplo debianuser) en el servidor.
touch /home/debianuser/backup_crypt_setup.sh
chmod u+x /home/debianuser/backup_crypt_setup.sh
Agregar la siguiente secuencia de comandos al archivo /home/debianuser/backup_crypt_setup.sh.
Contenido del archivo: /home/debianuser/backup_crypt_setup.sh
#!/bin/sh
set -e
/sbin/cryptsetup luksOpen /dev/md/backup backup_crypt
/bin/mount /backup
/etc/init.d/apache2 restart
/etc/init.d/backuppc restart
Después de reiniciar (reboot) el servidor sólo tiene que ejecutar el comando que se muestra abajo.
sudo /home/debianuser/backup_crypt_setup.sh