lunes, 27 de abril de 2009

Instalar rdiff-backup

Muchas veces queremos hacer respaldo de nuestros servidores pero no sabemos como hacer una manera es usar un rsync lo cual hace una copia diaria de todos nuestros archivos pero si pasado el tiempo queremos restaurar un respaldo vamos a tener que buscar los respaldos que tengamos guardado hay una manera de hacer esto mas facil y es con rdiff con este software podemos hacer los respaldos diarios y llegado el momento decirle al software que restaure los archivos o carpeta hasta la fecha que necesitamos.

Para instalarlo desde el codigo fuente se hace de la siguiente manera esta instalacion fue echa en slackware 12.1 en otras distribuciones debe de ser igual execto debian y ubuntu que lo traen entre sus repositorios.

Primero que nada tenemos que instalar las librerias rsync

wget http://internap.dl.sourceforge.net/sourceforge/librsync/librsync-0.9.7.tar.gz

tar xzf librsync-0.9.7.tar.gz

cd librsync-0.9.7

./configure

make AM_CFLAGS=-fPIC # Importante: Sin este flag, da un error al compilar rdiff-backup en sistemas de 64bits

make install

cd ..

Con esto ya tenemos instaladas las librerias necesarias ahora viene el rdiff

wget http://savannah.c3sl.ufpr.br/rdiff-backup/rdiff-backup-1.1.5.tar.gz

tar -xzf rdiff-backup-1.1.5.tar.gz

cd rdiff-backup-1.2.2

python setup.py install

domingo, 12 de abril de 2009

Enviar correo cuando se conectan por ssh

Existen muchas herramientas y técnicas que podemos usar para estar al tanto de las conexiones que se producen en un servidor desatendido (TCP wrappers, swatch, etc.). En lugar de usar alguna de estas técnicas ideé este método tan simple porque no requiere instalar ningún paquete que no tenga ya instalado. En mis sistemas la utilizo para que, en el momento en el que cualquier persona entre, enviar un mensaje SMS a mi correo. En caso de que esa persona no sea yo, tengo una oportunidad de echar al intruso o apagar la máquina ;-).
Requisitos previos

Se asume que los siguientes paquetes están ya instalados y funcionando:

* OpenSSH (net-misc/openssh).
* El cliente de correo mailX (mail-client/mailx), para enviar correos desde scripts de shell o desde línea de comandos.
* Un MTA ("mail transfer agent" o "agente de transferencia del correo") para mailX, como pueden ser Qmail, Postfix o Sendmail.
* Opcional: el sistema de ventanas X Window. No es obligatorio, pero debe de tenerse en cuenta a la hora de configurar SSH.

En caso de no cumplir alguno de los requisitos existen un montón de recursos para ayudarte, incluyendo los excelentes foros de Gentoo. Cómo configurar SSH o un servidor de correo está fuera del alcance de esta guía, que cubre solamente cómo conectar ambos.

Cómo funciona

En caso de que exista el script /etc/ssh/sshrc, SSH lo ejecuta después de cargar el entorno de un usuario pero antes de iniciar su intérprete de comandos. Este archivo nos proporciona las inicializaciones globales necesarias "antes de que el directorio /home del usuario llegue a ser accesible" (consultar # man 8 sshd). En mi caso, lo utilizo para enviar el correo con los detalles de la conexión.
Qué hacer

1. Hacer login como root.
2. Crear /etc/ssh/sshrc tal y como se muestra a continuación. En caso de que ya exista no sobreescribirlo, simplemente añadir en el punto adecuado los comandos que aparecen a partir de "Enviar una alerta con los detalles de la conexión".

# Establecer XAuthority usando el protocolo X desde stdin
# (ejemplo sacado de: man 8 sshd)
# Puedes omitir esta seccion si X (y por tanto xauth) no estan instalados.
#
if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q -
fi

# Enviar una alerta con los detalles de la conexión
#

cuando=`/usr/bin/date`
donde=`echo $SSH_CONNECTION|cut -f1 -d' '|cut -f4 -d:`
if [ -z "$SSH_TTY" ] ; then
que="Conexion de $USER"
else
que="Login de $USER en $SSH_TTY"
fi

mailto=""
cc_to=""
bcc_to=""
while read direccion mode
do
if [ -z "$direccion" -o "${direccion:0:1}" = "#" ] ; then continue; fi
if [ "x$mode" = "xcc" -o "x$mode" = "xCC" ] ; then
cc_to=${cc_to:+${cc_to},}$direccion
elif [ "x$mode" = "xbcc" -o "x$mode" = "xBCC" ] ; then
bcc_to=${bcc_to:+${bcc_to},}$direccion
else
mailto=${mailto:+${mailto},}$direccion
fi
done
mailto=${mailto:-operator}
cc_to=${cc_to:+"-c $cc_to"}
bcc_to=${bcc_to:+"-b $bcc_to"}
mail ${cc_to} ${bcc_to} -s "Alerta SSH" ${mailto} >&2 <<-EOM
${que} desde ${donde} el ${cuando}
EOM

#

Este archivo debe tener permisos de lectura para todos los usuarios (# chmod 644 /etc/ssh/sshrc) puesto que se ejecuta con los privilegios del usuario que conecta. No es necesario, ni recomendado, establecer permiso de ejecución en el archivo. Las direcciones de los destinatarios de las alertas se encuentran en otro archivo para facilitar el mantenimiento.

Lo anterior sigue la sintaxis de Bash y asume que en tu sistema /bin/sh es equivalente a /bin/bash (SSH ejecuta este archivo usando /bin/sh). Si no es ése tu caso entonces me temo que no puedo ayudarte, pero se aceptan contribuciones de algún script de shell equivalente :-). Para los detalles de los trucos usados en el script puedes consultar la página del manual del Bash, especialmente la sección "Extensión de parámetros".
# Crear el archivo con la lista de destinatarios, /etc/ssh/notify.

# Lista de destinatarios para las alertas de acceso SSH
#
# Formato:
# direccion[,direccion] [cc|bcc]
#
# Se pueden indicar varias direcciones en distintas lineas o separadas por comas
# Las opciones "cc" y "bcc" marcan la direccion(es) de destino como "Cc:" or
# "Bcc:", respectivamente.
#
# Las lineas en blanco o con # en la columna 1 son ignoradas.
#
# Es importante que la ultima linea del fichero sea una linea en blanco
#
123456789@pagina-de-sms.foo
root@localhost,yomismo@oficina.com bcc

3.

También en este caso el archivo debe tener permisos de lectura para todos los usuarios (# chmod 644 /etc/ssh/notify). Sustituye las direcciones del ejemplo por las direcciones que quieras que reciban las alertas de conexión.

Cuando alguno de los destinatarios sean direcciones SMS, es posible que te interese evitar la opción CC en favor de BCC. De esta forma no se incluyen en el mensaje las direcciones del resto de destinatarios y el SMS se mantiene breve.

Eso es todo. No es necesario reiniciar el servicio SSH.
Comprobación

Conéctate a la máquina vía SSH usando tu método preferido (ssh, PuTTY, sftp, etc.). En poco tiempo, los destinatarios listados en /etc/ssh/notify deberían recibir un mensaje similar a este:

Asunto: Alerta SSH De: stolz@foo.bar Para: admin@midominio.foo Fecha: Hoy 21:42:05 Login de stolz en /dev/pts/2 desde 216.16X.XX.XX el Wed Dec 21 21:42:05 CET 2005

Hay que tener en cuenta que los mensajes SMS pueden tardar varios minutos en llegar, dependiendo de la red de tu proveedor y de la propia disposición del MTA. En caso de ser una intrusión real, sabrías a quién "perseguir" y de dónde vino.

jueves, 9 de abril de 2009

Mandar correos desde la consola de linux

A veces programamos una tarea y no tenemos tiempo de verificar que dicha tarea se cumplio sin ningun error una buena solucion para esto seria programar que el servidor nos mandara un correo con la confirmacion de que la tarea se llevo a cabo sin errores o que dio errores y que errores dio.

Primero que nada instalamos el paquete y lo configuramos

apt-get --reinstall install exim4 exim4-config mailx
dpkg-reconfigure exim4-config

Como lo que nos interesa, de momento, solo es enviar e-mails, y no queremos convertirnos en una fuente de spam, activamos lo mínimo:

- Elegimos NO para no dividir la configuración en pequeños archivos
- Elegimos enviar los correos mediante un SMARTHOST y recibir via SMTP
- Como nombre del sistema elegimos el de nuestra máquina, si queremos.
- Como no vamos a recibir correo dejamos 127.0.0.1 como receptor de SMTP
- Dejamos en blanco otros destinos como correos aceptados
- Dejamos en blanco las máquinas a las que renviamos correo
- En el nombre del smarthost ponemos smtp.gmail.com::587
- En el nombre del correo saliente ponemos en de nuestra máquina, otro que queramos o ninguno.
- NO limitamos las consultas de DNS salientes

Editamos la cuenta de Gmail que hará el relay:

vim /etc/exim4/passwd.client

Añadimos:

gmail-smtp.l.google.com:TuNombreDeCuenta@gmail.com:TuPassword
*.google.com:TuNombreDeCuenta@gmail.com:TuPassword
smtp.gmail.com:TuNombreDeCuenta@gmail.com:TuPassword

/etc/init.d/exim4 restart

Y listo!

Una buena manera de empesar seria por ejemplo esta

cat archivo | mail -s "Asunto" correo@dominio.com

Aqui le estamos diciendo que haga un cat del archivo llamado archivo y lo mande por correo, tambien se le podria decir que mande el resultado de un comando un ejemplo serai el siguiente

df -h | mail hgeorge123@gmail.com -s "Espacio en el disco"

En la linea anterior le estamos diciendo que ejecute la sentencia df -h y el resultado lo mande por correo, si quieren mandar un archivo adjunto aqui les dejo el ejemplo de como deberia de funcionar.

mutt -s "Título del mensaje" -a /ruta/documento.pdf usuario@dominio.com < /ruta/archivodetexto.txt

En este caso, el usuario que posee el correo electrónico usuario@dominio.com recibirá un correo titulado “Título del mensaje”, el texto de este correo será el contenido de archivodetexto.txt, y se incluirá un PDF, documendo.pdf como archivo adjunto.