Esta bonita historia no debe hacernos olvidar que OpenSSH (SSH en lo sucesivo, para acortar) es una herramienta indispensable en la administración de sistemas. La mayoría de los protocolos que empleamos en nuestras comunicaciones están basados en diseños de hace casi 30 años, cuando la seguridad en redes telemáticas no era un problema. Telnet, FTP, POP3, protocolos de uso cotidiano, descuidan la seguridad y confidencialidad de los datos que envían. De nada sirve proteger nuestros servidores, implantar una buena política de contraseñas y actualizar las versiones de nuestros demonios, si luego cuando un usuario de POP3, por ejemplo, quiere ver su correo electrónico desde la universidad, envía su usuario y contraseña en texto plano por la red. Para evitar esto tenemos dos alternativas: bien elegir protocolos que sean seguros, bien hacer seguros los protocolos inseguros. De las dos opciones, la segunda permite reutilizar muchos más clientes y servidores ya programados, ayuda a enmascarar la complejidad de la seguridad en la transmisión y es una solución siempre escalable. Por todo esto, vamos a ver cómo convertir nuestros protocolos tradicionales en protocolos seguros, y qué tiene que ver SSH en todo ello.
La idea en la que se basa este procedimiento es la de hacer un túnel por el cual viajarán los datos de manera segura (“tunneling”). El símil con la vida real está bastante bien escogido: imaginemos que la tasa de mortalidad de los diferentes medios de transporte fuese equivalente a la posibilidad de que la seguridad de nuestros datos sea violada, y que el tren representase un canal seguro y el automóvil un canal inseguro. El túnel del Canal de la Mancha sería el ejemplo perfecto para ilustrar el concepto de “tunneling”: cuando queremos viajar a través de él con nuestro coche, tenemos que subirnos a un vagón para coches y luego cruzar el túnel en tren. Hemos incrementado sensiblemente la seguridad del viaje, porque la probabilidad de un accidente de tren es muchísimo menor que la de un accidente de coche. Este mismo proceso es el que se da a la hora de establecer un túnel seguro en la comunicación entre cliente y servidor. En cada uno de los extremos del túnel están las aplicaciones estándar (un demonio POP3 estándar, nuestro cliente de correo favorito…) y la comunicación se asegura haciendo uso de toda la potencia criptográfica de SSH. Para ello tenemos que realizar un procedimiento similar al que supondría subir nuestro coche al tren, establecer mediante SSH un reenvío de los datos gracias a una técnica denominada “port-forwarding”. SSH recoge los datos que el cliente quiere enviar y los reenvía por el túnel o canal seguro, al otro lado del túnel se recogen los datos y se reenvían al servidor conveniente:
#!/bin/bash
# backup remote_backup_mysql_dominio.sh - 01/03/09
#
# Author: Federico Pereira <info@opentecnologic.com>
# Copyright 2008 Federico Pereira (LordBaseX)
# This script is licensed under GNU GPL version 2.0
#
# Descripción: Este script genera backups mediante túnel ssh cada 0,3,6,9,12,15,18,21 todos los dias y envia un reporte por mail.
#0 0,3,6,9,12,15,18,21 * * * /usr/local/sbin/remote_backup_mysql_dominio.sh 2>&1 | mail info@opentecnologic.com -s "backup mysql `date`"
#Variables############################################################################
DATE="$(date +%Y%m%d)"
TIME="$(date +%H:%M:%S)"
BACKUP_DIR="/datos/bkp/backupclientes/dominio.com/db"
#######################################################################################
USER="root"
PASS="clave_de_root_mysql"
HOST="127.0.0.1"
DB="asterisk asteriskcdrdb mya2billing"
CMD_SSH_TUNNEL="ssh -f -N -L3306:127.0.0.1:3306 root@dominio.com"
########################################################################################
if $CMD_SSH_TUNNEL; then
for DBDATA in $DB
do
mkdir -p ${BACKUP_DIR}/${DATE}
mysqldump -P 3306 --quick --add-drop-table -u${USER} -p${PASS} -h${HOST} ${DBDATA} | gzip > ${BACKUP_DIR}/${DATE}/${DBDATA}-${TIME}.sql.gz
done
fi
ps -ef | grep "ssh -f -N -L3306:127.0.0.1:3306 root@dominio.com" | grep -v grep | cut -c 10-15 | xargs kill -9
exit 0