Rsnapshot

Referencias:

Está disponible para bajar como paquete en Debian.

Cron

Ejemplo de cómo invocar rsnapshot desde el cron del servidor de backups. Agregar el archivo rsnapshot al directorio /etc/cron.d, con un contenido similar al siguiente:

50 3	* * *	root	/usr/bin/rsnapshot  -c /data/server_name/rsnapshot.conf daily >/dev/null
48 3  	* * 7	root	/usr/bin/rsnapshot  -c /data/server_name/rsnapshot.conf weekly >/dev/null
45 3  	1 * *	root	/usr/bin/rsnapshot  -c /data/server_name/rsnapshot.conf monthly >/dev/null

En este ejemplo, se ejecuta un backup diario, luego uno semanal y finalmente uno mensual. El número de backups diarios, semanales y mensuales que se almacenan en el servidor dependerá de los parámetros retain para cada tipo de backup, en el archivo de configuración de rsnapshot (ver más abajo)

Configuración

rsnapshot tiene un archivo de configuración rsnapshot.conf, donde se declaran todos los parámetros del programa, incluidos los repositorios (locales o remotos) a respaldar y los niveles o frecuencias de respaldo.

Ejemplo de archivo de configuración, con elementos básicos:

#################################################
#                                               #
# PLEASE BE AWARE OF THE FOLLOWING RULE:        #
#                                               #
# This file requires tabs between elements      #
#                                               #
#################################################

config_version	1.2

cmd_cp			/bin/cp
cmd_rm			/bin/rm
cmd_rsync		/usr/bin/rsync
cmd_ssh			/usr/bin/ssh
cmd_logger		/usr/bin/logger
cmd_du			/usr/bin/du
cmd_rsnapshot_diff	/usr/bin/rsnapshot-diff

# Name and number of backups to keep of each kind
retain	daily	14
retain	weekly	4
retain	monthly	6

verbose		4
loglevel	4
logfile		/data/server_name/rsnapshot.log
lockfile	/data/server_name/rsnapshot.pid

rsync_short_args	-a
rsync_long_args	--delete --numeric-ids --relative --delete-excluded

# directory where backups will be kept
snapshot_root	/data/server_name

# ssh arguments
ssh_args	-p 22 -i ~/.ssh/server_ssh_key

# List of directories to backup
backup	server_ssh_key:/etc			server_name/
backup	server_ssh_key:/root			server_name/
backup	server_ssh_key:/home			server_name/
backup	server_ssh_key:/var/www			server_name/
backup	server_ssh_key:/var/backups/mysql	server_name/
backup	server_ssh_key:/usr/local		server_name/

Cambio de puerto SSH

En caso de necesitar conectarse a otro puerto, se le pueden especificar argumentos al ssh. Ejemplo:

ssh_args        -p 1234 -i ~/.ssh/server_key

Limitar comandos en ~/.ssh/authorized_keys

A los efectos de mejorar la seguridad del equipo remoto que se esté respaldando, para evitar que alguien que vulnere el servidor de backups consiga ingresar a equipos remotos empleando la llave que use rsnapshot para conectarse por ssh, lo que podemos hacer es restringir qué comandos puede ejecutar el cliente en el equipo a respaldar. Para eso hay que especificar, entre otras cosas el comando que está permitido ejecutar en ese equipo y eso lo colocamos en el archivo ~/.ssh/authorized_keys del equipo a respaldar.

rsnapshot remotamente ejecuta rsync. Ahora bien, si declaramos que el comando a ejecutar es rsync eso da ERROR 12 y no se ejecuta correctamente rsnapshot. Afortunadamente esto se arregla con el comando rrsync (restricted rsync) que viene con rsync y es el comando que vamos a declarar en el archivo authorized_keys del equipo a respaldar.

Ejemplo de qué agregar a la llave pública en el archivo ~/.ssh/authorized_keys:

command="/usr/bin/rrsync -ro /",from="164.73.160.xxx",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

La llaque quedaría así:

command="/usr/bin/rrsync -ro /",from="164.73.160.xxx",no-port-forwarding,no-X11-forwarding,
no-agent-forwarding,no-pty ssh-rsa AAB3NzaC1yc2EAAAADAQABAAAdqypbSXvEDLFCMfByGypiBsnrtJqNKJR9tpRdGJ
7HebfQ8OT2XFTKN4qUw2V9ifsz1VvIfWpu2JbKV3kKvNFsgWEg/auz4cwBf9jJV+HNpqoKjUCJcGO6IPy4hpfWAiA+aRGyo0M4zI/
h2cXlqtC1SXESLBPtEQ0VTIpnLnbckaU5B9sMUdm3anOJp02pkNVLonWbO/ZFr8X2vd8iIa/2A1DCmybknhDU41+0zB
Fz7xba73xvbhuR9jCs2Pmlfgj+O8Owgg1qZckt3/sB+ptze6WawbnoyeL/KEpfxDz4vv/HBBJ4ROjnTE0nvH+z 
backup_key@bkpserver

Descripción:

  • command=“/usr/bin/rrsync -ro /” especifica que sólo se puede ejecutar el comando rrsync (restricted rsync) con la opción -ro, read only, desde / para abajo. O sea que sólo se puede leer datos.
  • from=“164.73.160.xxx” limita el acceso desde ese IP
  • no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty son evidentes

Consultar man autorized_keys para ver todas las opciones que se pueden implementar.

Como vemos, estos parámetros se colocan antes de la llave pública propiamente dicha. Si bien en el equipo a respaldar se declara rrsync como el comando a ejecutar, en el equipo que hace el respaldo, en el archivo de configuración de rsnapshot se deja el comando rsync como comando a ejecutar remotamente. No es necesario especificar rrsync. No sé cómo funciona esta magia, pero funciona.