Este tutorial mostrará cómo hacer una copia de seguridad de los datos en un servidor, denominado servidor principal , a otro host, aquí llamado servidor de respaldo , con el programa de copia de seguridad de software libre Borg . El servidor de respaldo se configurará de tal manera que el servidor principal en uso normal solo pueda agregar nuevos datos y no eliminar ni alterar los respaldos antiguos. Esta característica de solo agregar, combinada con el hecho de que las copias de seguridad se almacenan en un servidor separado en una ubicación separada, hace que las copias de seguridad estén protegidas contra la pérdida de datos, por ejemplo, por accidentes naturales o un ataque de piratas informáticos contra el servidor principal.
Los requisitos previos para seguir esta guía son usar Debian Stretch (9) o Debian Buster (10) y tiene dos servidores disponibles, uno servidor principal del que se toman las copias de seguridad, y otro servidor de copias de seguridad donde se almacenarán los archivos de copia de seguridad. Estos dos servidores deben estar en ubicaciones separadas para una protección óptima.
Esta guía comenzará con la configuración en el servidor de respaldo en la primera sección. En la segunda sección, configuraremos el servidor principal y luego realizaremos una copia de seguridad, una restauración de prueba y mostraremos cómo eliminar manualmente los archivos de copia de seguridad antiguos.
1 Configure el servidor de respaldo
1.1 Instalar borg y crear un nuevo usuario de borgbackup
En el servidor de respaldo (el servidor donde se deben almacenar los respaldos) instale Borg en una terminal raíz con este comando:
apt install borgbackup
Luego, elija una contraseña para el usuario borg que pronto crearemos. (Es obligatorio tener una contraseña para cada usuario, sin embargo, esta contraseña casi nunca se utilizará, ya que normalmente nos conectaremos al servidor de respaldo con una clave SSH). Si desea generar una contraseña aleatoria de 64 caracteres, use este comando :
< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;
Copie la contraseña del usuario borg que se muestra en el portapapeles y guárdela en una ubicación segura en otro lugar que no sea el propio servidor.
Ahora, crearemos el usuario borgbackup:
adduser borgbackup
Cuando reciba una pregunta sobre la contraseña, pegue la contraseña que copió anteriormente, presione Entrar y luego pegue la contraseña nuevamente seguida de Entrar. No complete nada más, simplemente presione Entrar para responder las siguientes preguntas.
1.2 Generar claves SSH para el usuario de borgbackup
Ahora necesitamos convertirnos en el nuevo usuario con su:
su borgbackup
cd
Luego, generamos un nuevo par de claves SSH para el usuario:
ssh-keygen -t ed25519
Después de presionar Enter, obtendrá una serie de preguntas. Deje las respuestas en blanco, simplemente continúe presionando Enter varias veces hasta que finalice el comando. No establezca ninguna frase de contraseña para la clave, presione Entrar también en esa pregunta.
1.3 Crear el directorio de respaldo
Ahora es el momento de crear el directorio donde se almacenarán las copias de seguridad, que en la terminología borg se define como el repositorio borg . Simplemente llamaremos al directorio borgbackup, pero en su lugar puede optar por nombrarlo con el nombre de host de su servidor principal.
cd
mkdir borgbackup
chmod go-rwx borgbackup
chmod u+rwx borgbackup
2 Configurar el servidor principal y cómo se conecta al servidor de respaldo
2.1 Instalar Borg
Ahora pasamos de trabajar en el servidor de respaldo a trabajar en el servidor principal.
En el servidor principal (el servidor del que desea realizar copias de seguridad), instale Borg en una terminal raíz con este comando:
apt install borgbackup
Posteriormente necesitaremos la dirección IP externa del servidor principal (en el que nos encontramos). Copie esta dirección IP para tenerla fácilmente disponible. Si no recuerda la dirección IP externa del servidor principal, ejecute este comando para mostrarla:
wget -qO- http://ipecho.net/plain | xargs echo
2.2 Permitir que el servidor principal acceda al servidor de respaldo
Comandos que ejecutas en el servidor principal
Ahora prepararemos la autenticación de clave SSH para que sea posible conectarse desde el servidor principal al servidor de respaldo. Primero, use este comando para mostrar la clave SSH pública del usuario root en el servidor principal:
cat ~/.ssh/id_*.pub
Si tiene una clave pública SSH para root, ahora debería ver esta clave en pantalla. Copie la clave en su portapapeles, deberá pegarla más tarde en un archivo en el servidor de respaldo.
Si no ve la clave mostrada, debe generar el par de claves. Por ejemplo, ejecute este comando en ese caso:ssh-keygen -t ed25519 seguido de presiones repetidas de Enter.
Ahora, debemos decirle al servidor de respaldo que permita el acceso desde el servidor principal (donde estamos ahora) con la clave SSH pública. Para hacer esto, ingrese este comando, pero primero reemplace BACKUPHOSTNAME con el nombre de host de su servidor de respaldo:
ssh-copy-id -i ~/.ssh/id_*.pub [email protected]BACKUPHOSTNAME
Conéctate al servidor de respaldo
Ahora deberá ingresar la contraseña para el usuario de borgbackup que creó en el paso 1.1. Una vez hecho esto, debería ser posible acceder directamente al servidor de respaldo como usuario de borgbackup sin ninguna contraseña. Ahora, pruebe que esto es posible escribiendo este comando, reemplazando BACKUPHOSTNAME con el nombre de host de su servidor de respaldo:
ssh [email protected]BACKUPHOSTNAME
Comandos que ejecuta en el servidor de respaldo
Ahora reforzaremos aún más la seguridad restringiendo el acceso solo desde la dirección IP del servidor principal usando esta clave.
Quédese en el servidor de respaldo y ejecute este comando:
nano ~/.ssh/authorized_keys
Ahora, debería ver una línea larga que comienza con ssh. Verifique que el cursor esté al principio del archivo. Agregue los siguientes datos en la misma línea, antes de la clave ssh, pero primero reemplace SERVERIPADDRESS con la dirección IP de tu servidor (que investigaste al principio de esta sección):
from="SERVERIPADDRESS",command="borg serve --append-only --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc
Asegúrese de que haya un carácter de espacio entre la sección que ha agregado y la sección preexistente que comienza con ssh que sigue después. Luego guarde el archivo con Ctrl+O y salga con Ctrl+X. Ahora hemos limitado el acceso al servidor de respaldo de dos maneras. En primer lugar, solo se permite el acceso a la dirección IP del servidor principal. En segundo lugar, a través de la opción --append-only solo se permite agregar datos al repositorio de borg, pero no se permiten eliminaciones ni alteraciones.
Desconéctese del servidor de respaldo y regrese al servidor principal
Ejecute este comando para salir del servidor de respaldo y regresar al servidor principal:
exit
2.3 Elija una contraseña de repositorio borg
Un repositorio borg es la ubicación donde se almacenan las copias de seguridad. Está protegido por una contraseña de repositorio de borg, que debe elegir. La contraseña es necesaria para realizar nuevas copias de seguridad y acceder a las antiguas. Puede crear una contraseña usted mismo (elija un mínimo de 20 caracteres para una seguridad óptima) o generar aleatoriamente una contraseña de 64 caracteres con este comando:
< /dev/urandom tr -dc A-Za-z0-9 | head -c${1:-64};echo;
Copie la contraseña del repositorio de borg en su portapapeles marcándola y presionando Ctrl+C. ¡Es esencial guardar la contraseña del repositorio de borg en un lugar seguro porque sin esta contraseña no puede acceder a sus copias de seguridad! Así que guarde una copia de la contraseña de borg ahora mismo en otro lugar que no sean sus servidores, por ejemplo, en un administrador de contraseñas (como KeePass) en su propia computadora.
2.4 Crear el repositorio borg
En la terminología Borg, la ubicación donde se almacenan las copias de seguridad se denomina borg. repositorio . La contraseña ahora se establecerá como una variable ambiental en preparación para crear este repositorio. Reemplazar CONTRASEÑA con su contraseña real y ejecute el siguiente comando como usuario raíz de su servidor principal:
export BORG_PASSPHRASE='PASSWORD'
Cree el repositorio borg de esta manera, pero primero reemplace BACKUPHOSTNAME con el nombre de host de su servidor de respaldo:
borg init -e repokey-blake2 [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/
Ahora todo ha sido preparado para usar borg para copias de seguridad, que será el tema de la siguiente sección.
3 Copia de seguridad desde el servidor principal
3.1 Ejecutar copia de seguridad manualmente
En el siguiente ejemplo, se realizará una copia de seguridad de todo el sistema del servidor principal, excepto ciertos directorios que no son relevantes para la copia de seguridad.
Asegúrese de haber iniciado sesión como root en su servidor principal antes de continuar. Primero, estableceremos la variable ambiental para la contraseña del repositorio borg a través de este comando (reemplace PASSWORD con tu contraseña real del repositorio de borg:
export BORG_PASSPHRASE='PASSWORD'
Luego ejecutaremos el siguiente comando para realizar una copia de seguridad completa del sistema. Ajuste las exclusiones del directorio, que comienzan con --exclude, según sus necesidades. Por ejemplo, es posible que desee agregar una exclusión del directorio /mnt agregando --exclude=mnt Tenga en cuenta que no debe ingresar la primera barra en el patrón de exclusión, p. escribes mnt en lugar de /mnt. También debe cambiar el BACKUPHOSTNAME al nombre de host real de su servidor de respaldo. Primero debemos ejecutar un comando cd /, ya que borg normalmente inicia la copia de seguridad desde el directorio desde el que se ejecuta.
cd / && borg create --stats --progress --compress lz4 [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/::`hostname`-`date +%Y-%m-%d-%H-%M-%S` ./ --exclude=dev --exclude=mnt/borgbackup -exclude=proc --exclude=run --exclude=root/.cache/ --exclude=sys --exclude=tmp && cd
La primera vez que se ejecuta la copia de seguridad, llevará un tiempo (hasta varias horas si tiene una gran cantidad de datos para respaldar). Verá una línea de estado que actualiza rápidamente exactamente qué archivo borg está procesando en la copia de seguridad. A partir de la segunda vez, las copias de seguridad serán mucho más rápidas, ya que solo se transmitirán los cambios desde la última copia de seguridad.
3.2 Programar copia de seguridad con cron
Por supuesto, es mejor ejecutar una copia de seguridad automática a intervalos regulares, en lugar de tener que acordarse de ejecutar copias de seguridad manuales. Para lograr esto, primero creamos un script de shell que ejecuta el trabajo de copia de seguridad, que luego editamos con el editor nano como usuario raíz en el servidor principal:
touch /usr/local/bin/borgbackup.sh
chmod go-rwx /usr/local/bin/borgbackup.sh
chmod u+rwx /usr/local/bin/borgbackup.sh
nano /usr/local/bin/borgbackup.sh
Inserte estas líneas en el nuevo script de shell:
#!/bin/sh
export BORG_PASSPHRASE='PASSWORD'
cd / && borg create --stats --progress --compress lz4 [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/::`hostname`-`date +%Y-%m-%d-%H-%M-%S` ./ --exclude=dev --exclude=proc --exclude=run --exclude=root/.cache/ --exclude=mnt/borgmount --exclude=sys --exclude=tmp && cd
Debe reemplazar PASSWORD con su contraseña de repositorio de borg, reemplace BACKUPHOSTNAME con el nombre de host de su servidor de copia de seguridad y, finalmente, ajuste los patrones de exclusión a sus necesidades. Es posible que desee agregar --exclude=mnt para excluir el directorio /mnt de la copia de seguridad. Guarde el archivo en el editor nano presionando Ctrl+O y luego salga con Ctrl+X.
A continuación, pruebe el script ejecutándolo desde la terminal:
/usr/local/bin/borgbackup.sh
Para programar una copia de seguridad a las 02:00 todas las noches, agregue el script de shell de copia de seguridad que acabamos de crear en /etc/crontab:
nano /etc/crontab
Luego agregue una nueva línea al crontab con el trabajo de copia de seguridad:
# Backup via Borg to backup server
00 02 * * * root /usr/local/bin/borgbackup.sh
4 Restaurar archivos (mientras está conectado en el servidor principal)
4.1 Mostrar una lista de copias de seguridad realizadas
No tiene un sistema de copia de seguridad en funcionamiento hasta que haya verificado que puede restaurar los datos de sus copias de seguridad. Por lo tanto, nuestro próximo paso es verificar la copia de seguridad que hicimos anteriormente. Esto se hará desde la terminal raíz en el servidor principal. Haremos esto montando el archivo de copia de seguridad como un sistema de archivos adicional, pero primero, comprobaremos la lista de las copias de seguridad realizadas mediante la creación de un script de shell como usuario raíz en su servidor principal:
touch /usr/local/bin/borglist.sh
chmod go-rwx /usr/local/bin/borglist.sh
chmod u+rwx /usr/local/bin/borglist.sh
nano /usr/local/bin/borglist.sh
Inserte lo siguiente en el nuevo script de shell, reemplazando PASSWORD con la contraseña del repositorio de borg y BACKUPHOSTNAME con el nombre de host de su servidor de respaldo:
#!/bin/sh
export BORG_PASSPHRASE='PASSWORD'
borg list -v [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/
Guarde el archivo con Ctrl+O seguido de Ctrl+X. Luego ejecute el script de shell de esta manera:
/usr/local/bin/borglist.sh
Ahora debería ver una lista de las copias de seguridad que se han realizado. Si se realizó su primera copia de seguridad, debería ver un elemento en la lista. Ahora marque y copie el nombre del archivo en el portapapeles. Encontrará el nombre del archivo en la primera columna, se compone del nombre de host de su servidor principal seguido de una fecha y hora, en este formato:mainhostname-2019-01-31-12-59-59 .
3.4 Verificar/restaurar datos
Ahora montaremos todo el repositorio borg como un montaje del sistema de archivos FUSE. Esto significa que el repositorio de borg, incluidos todos los archivos de los que se ha realizado una copia de seguridad, se convierte en un sistema de archivos que podemos recorrer e inspeccionar mediante comandos normales como ls y cd.
Para poder montar fácilmente el repositorio de borg, crearemos un acceso directo de los comandos en forma de script de shell. Cree y edite el script de shell de esta manera:
touch /usr/local/bin/borgmount.sh
chmod go-rwx /usr/local/bin/borgmount.sh
chmod u+rwx /usr/local/bin/borgmount.sh
nano /usr/local/bin/borgmount.sh
Luego, inserte las siguientes líneas en el script de Schell, pero primero cambie la CONTRASEÑA.
#!/bin/sh
mkdir -p /mnt/borgbackup
export BORG_PASSPHRASE='PASSWORD'
borg mount [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/ /mnt/borgbackup
Guarde el archivo con Ctrl+O seguido de Ctrl+X. Luego ejecute el script de shell de esta manera:
/usr/local/bin/borgmount.sh
El repositorio de borg ahora debe estar montado en /mnt/borgbackup; puede verificar esto usando cd y ls:
cd /mnt/borgbackup
ls
Ahora debería ver un directorio en el que reside su copia de seguridad. Vaya a ese directorio con cd (reemplace DIRECTORYNAME con el nombre del directorio que ve como resultado del comando ls que acaba de ingresar) y luego use ls para ver el contenido:
cd DIRECTORYNAME
ls
Ahora podrá ver el último archivo comprimido (la última copia de seguridad realizada). Puede comparar con diff que un archivo se ha respaldado correctamente, por ejemplo para /etc/fstab, con este comando:
diff etc/fstab /etc/fstab
Si no obtiene resultados de diff, los dos archivos son idénticos y la copia de seguridad funcionó para ese archivo. Si, por el contrario, ha cambiado el archivo desde la última copia de seguridad, verá qué líneas de los archivos difieren.
Si lo desea, puede restaurar archivos desde la copia de seguridad, simplemente usando el comando cp para copiar archivos desde el subdirectorio de /mnt/borgbackup en que se encuentra en la terminal en este momento.
Finalmente, crearemos un script para desmontar el montaje del fusible borg.
Cree y edite el script de shell de esta manera:
touch /usr/local/bin/borgumount.sh
chmod go-rwx /usr/local/bin/borgumount.sh
chmod u+rwx /usr/local/bin/borgumount.sh
nano /usr/local/bin/borgumount.sh
Luego inserte las siguientes líneas en la secuencia de comandos Schell:
#!/bin/sh
cd ~
umount /mnt/borgbackup
rmdir /mnt/borgbackup
Guarde el archivo con Ctrl+O seguido de Ctrl+X. Luego ejecute el script de shell de esta manera:
/usr/local/bin/borgumount.sh
El montaje del fusible borg ahora está desmontado y se le ha colocado en el directorio /root/ en la terminal.
4 Eliminar las copias de seguridad antiguas (requiere acceso tanto al servidor principal como al de copia de seguridad)
Ahora necesitamos alternar entre el servidor de respaldo y el servidor principal. Primero, comenzamos con los comandos en el servidor de respaldo.
Después de un tiempo, el tamaño de las copias de seguridad puede crecer. Por razones de seguridad, no está permitido que el servidor principal elimine copias de seguridad antiguas automáticamente. Sin embargo, podemos permitir temporalmente la eliminación de archivos de copia de seguridad antiguos cuando sea necesario, para ahorrar espacio en disco en el servidor de copia de seguridad.
Este proceso de eliminación se llama podar en terminología borg. El proceso de eliminación comienza en el servidor de copia de seguridad y permite el acceso temporal de lectura y escritura. Luego nos conectamos al servidor principal para emitir el comando de poda. Finalmente, accedemos de nuevo al servidor de copias de seguridad para deshabilitar el acceso de lectura y escritura para que las copias de seguridad antiguas estén protegidas contra la eliminación o modificación nuevamente.
4.1 Permitir acceso temporal de lectura y escritura (realizado desde el servidor de copia de seguridad)
Ahora vamos a trabajar en el servidor de respaldo.
Por lo tanto, conéctese al servidor de respaldo e inicie sesión como root. Para permitir el acceso de lectura y escritura, debemos cambiar el archivo /home/borgbackup/.ssh/authorized_keys en el servidor de respaldo. Ejecute estos comandos para convertirse en el usuario de borgbackup, haga una copia de seguridad del archivo y luego edite el archivo con nano:
su borgbackup
cd
cp -a ~/.ssh/authorized_keys ~/.ssh/authorized_keys.bak
nano ~/.ssh/authorized_keys
Ahora, debería ver en el editor nano una línea larga que comienza con from=. Corte la línea presionando Ctrl+K y luego presione Ctrl+U, y una vez más Ctrl+U para que ahora tenga dos líneas idénticas. Presione la tecla Arriba en su teclado dos veces para colocar el cursor en la primera fila. Luego escriba un carácter # para comentar la primera línea. Luego, presione la tecla Abajo en su teclado para llegar a la segunda fila. Aquí, debe moverse hacia la derecha con la tecla Derecha en su teclado hasta que se pare en el primero, en --append-only. Luego presione la tecla Supr repetidamente para eliminar la opción --append-only . El archivo debería verse aproximadamente así, tenga en cuenta que hemos eliminado la primera línea como comentario y que --append-only se ha eliminado de la segunda línea:
#from="SERVERIPADDRESS",command="borg serve --append-only --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ...
from="SERVERIPADDRESS",command="borg serve --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ..
Guarde el archivo con Ctrl+O y salga con Ctrl+X. Ahora hemos habilitado el acceso de lectura y escritura al repositorio de borg.
4.2 Eliminación de copias de seguridad antiguas (realizadas desde el servidor principal)
Ahora, conéctese al servidor principal en una nueva ventana de terminal como usuario root.
Ahora crearemos un script en el servidor principal para eliminar (es decir, eliminar) las copias de seguridad antiguas. Cree y edite el script de shell en el servidor principal de esta manera:
touch /usr/local/bin/borgprune.sh
chmod go-rwx /usr/local/bin/borgprune.sh
chmod u+rwx /usr/local/bin/borgprune.sh
nano /usr/local/bin/borgprune.sh
Luego inserte las líneas a continuación en el script de shell. Luego reemplace CONTRASEÑA con la contraseña del repositorio de borg y BACKUPHOSTNAME con el nombre de host de su servidor de respaldo. También debe ajustar la cantidad de copias de seguridad antiguas que desea conservar. En este ejemplo, mantenemos 7 copias de seguridad diarias, 4 copias de seguridad semanales y 12 copias de seguridad mensuales.
#!/bin/sh
export BORG_PASSPHRASE='PASSWORD'
borg prune --stats --progress [email protected]BACKUPHOSTNAME:/home/borgbackup/borgbackup/ --prefix `hostname`- --keep-daily=7 --keep-weekly=4 --keep-monthly=12
Presione Ctrl+O y Ctrl+X para guardar y salir del archivo. Luego, ejecute el script de poda que acaba de crear en el servidor principal:
/usr/local/bin/borgprune.sh
Este comando tardará un tiempo (puede ser hasta un par de horas), pero puede ver el progreso que hace en el camino, en dos pasadas para llegar al 100 %.
4.3 No permitir acceso de lectura+escritura (realizado desde el servidor de respaldo)
Ahora volvemos a trabajar en el servidor de respaldo.
Una vez que el comando prune haya finalizado en el servidor principal, ahora se conecta al servidor de respaldo como usuario de borgbackup y edita el archivo /home/borgbackup/.ssh/authorized_keys nuevamente para no permitir el acceso de lectura y escritura.
Haz esto en el servidor de respaldo:
su borgbackup
cd
nano ~/.ssh/authorized_keys
En el editor nano, elimine el carácter # al comienzo de la primera fila presionando la tecla Supr en su teclado. Luego, presione la tecla Abajo e inserte un nuevo carácter # en la segunda línea. Después de esto, el archivo debería verse más o menos así:
from="SERVERIPADDRESS",command="borg serve --append-only --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ...
#from="SERVERIPADDRESS",command="borg serve --restrict-to-path /home/borgbackup/borgbackup/",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh ... (the line continues) ..
Guarde el archivo con Ctrl+O y salga con Ctrl+X. Ahora hemos deshabilitado el acceso de lectura y escritura al repositorio de borg.
Ahora las copias de seguridad pueden continuar con normalidad, solo como anexos, y está protegido contra los intentos de eliminación del servidor principal dirigidos a las copias de seguridad almacenadas en el servidor de copias de seguridad.
4.4 Observaciones finales
Ahora ha creado un sistema de copia de seguridad que está fuera del sitio y solo se puede agregar. Esto significa que las copias de seguridad están protegidas de dos maneras. En primer lugar, las copias de seguridad están protegidas en el sentido de estar físicamente separadas del servidor principal. En segundo y último lugar, las copias de seguridad ya realizadas están protegidas de los intentos de modificación del servidor principal (excepto cuando decida modificarlas explícitamente mediante la poda manual).