Está en la página 1de 5

Alertas y acciones en tu servidor a travs de

SMS
Tal y como he prometido sigo en mi empeo de, como mnimo, dos artculos por semana, as que
ah va el segundo de esta.
Hoy veremos cmo aprovechar un mvil que ya no utilicemos para recibir alertas y ejecutar
acciones remotamente en nuestros servidores.
Mont un sistema de este tipo por primera vez all por 2002 y desde entonces lo hago siempre que
tengo nuevos servidores que manejar, sobre todo en aquellos que hacen de monitor (Cacti y/o
Nagios) y backup.
La idea inicial era recibir alertas de problemas en el servidor sin tener que estar delante de la
mquina. En aqul momento no haba ms opciones que el email, pero si no estabas delante de la
mquina no recibiras nada. Posteriormente aparecieron las primeras pasarelas SMS por HTTP (con
una llamada HTTP y los parmetros adecuados, envas un SMS), pero an hoy tienen un
inconveniente, si tu mquina se queda sin conectividad (problemas de red, router, ataques DOS..)
nunca recibirs alertas y nunca te enterars de que algo ocurre.
Se me ocurri entonces que podra utilizar un Nokia 3210 que acababa de jubilar ya que adems me
haba comprado el cable para conectarlo al ordenador por el puerto serie, pero me faltaba lo ms
importante, el software. Me puse a investigar y encontr lo que buscaba, era lgico, no iba a ser yo
el primero al que se le ocurriese esa idea. La solucin se llamaba Gnokii, un software que se
comenz a desarrollar ni ms ni menos que a finales de 1998. Por lo que me consta, dej de
actualizarse all por 2003, aunque probablemente siga funcionando perfectamente en la mayora de
casos, sin embargo hace ya tiempo que apareci un fork de Gnokii, Gammu, que es el que utilizo
desde hace ya unos aos y sobre el que nos centraremos en este artculo. Adems he cambiado la
forma de conectar el terminal al ordenador, ya no es por el puerto serie sino por bluetooth.
Podramos dividir el artculo en cuatro pasos:
1. Conectando el mvil con el servidor.
2. Enviando mensajes.
3. Sistema de mensajera avanzado.
4. Ejecutando acciones.
Conectando el mvil con el servidor
Comenzaremos por configurar el servidor. No voy a explicar detenidamente los pasos puesto que,
aunque hoy en da son sencillos, se salen del alcance del artculo. De todos modos configurar el
bluetooth hace cuatro o cinco aos era bastante ms complicado, hoy todas las distribuciones
Linux tienen los paquetes preparados.
Lo primero, obviamente, ser tener una antena bluetooth en el servidor, con una USB ser
suficiente y funciona perfectamente, yo lo tengo as desde hace aos.
El siguiente paso ser instalar los paquetes necesarios para tener conectividad bluetooth,
normalmente son dos, bluez-libs y bluez-utils. Si tu sistema operativo es medianamente moderno
probablemente los tengas ya instalados, sino estarn en cualquier repositorio.
Como supondremos que estamos trabajando con servidores, lo ms probable es que no tengas
entorno grfico, as que lo configuraremos todo a mano. Si tuvieses entorno grfico hay paquetes
gnome para hacer el emparejamiento automticamente.
En mi Centos5.0 los archivos de configuracin se encuentran en /etc/bluetooth, en el tuyo pueden
variar. Tendremos que configurar tres archivos:
hcid.conf: configura los servicios que ofrecer la antena bluetooth.
pin: pin de la SIM del mvil para no tener que introducirlo manualmente. Tambien puedes
configurar la SIM para que no solicite pin.
rfcomm.conf: configura los canales de comunicacin.
La verdad es que no recuerdo mucho las distintas opciones de hcid.conf, as que me limitare a
copiar mi configuracin para que tengis un punto de inicio.
1. options {
2. autoinit yes;
3. security user;
4. pairing multi;
5. passkey "123";//aqui el pin de acceso a la antena del servidor
6. }
7. device {
8. name "%h-%d";
9. class 0120104;
10. iscan enable; pscan enable;
11. lm accept;
12. lp rswitch,hold,sniff,park;
13. }
El archivo pin es muy sencillo, simplemente debes poner el pin de la SIM de tu telfono.
Finalmente configuramos el canal de conexin con el mvil. Para ello debemos averiguar la
direccin bluetooth de tu mvil, sera algo as como la direccin MAC, de hecho tiene una
estructura semejante. Para ello, inicia el servicio bluetooth, o reincialo si lo tienes ya iniciado,
/etc/init.d/bluetooth restart
y ejecuta
1. hcitool scan
Esto te devolver la lista de dispositivos bluetooth a tu alcance con el nombre y la direccin que
tienen. Si obtienes algo como Device is not available: No such device, tu antena no est iniciada,
quizs no se ha detectado correctamente, consulta el log de inicio con dmesg a ver qu ocurre
cuando conectas la antena al USB.
Supondremos que todo ha ido bien y tienes la lista de dispositivos. Busca el del mvil que ests
utilizando y apunta la direccin, la necesitars aadir al siguiente fichero, rfcomm.conf.
1. rfcomm0 {
2. bind yes;
3. device 00:0E:07:E7:12:27;//aqui la direccin bluetooth de tu movil
4. channel 1;
5. comment "linea bluetooth";
6. }
Si todo ha ido bien tenemos el sistema bluetooth preparado y enlazado con el mvil.
Enviando mensajes
Instalamos el paquete Gammu. De nuevo, lo ms probable es que haya un binario para tu sistema
en los repositorios habituales, sino siempre puedes descargar el fuente y compilarlo tu mismo.
Configurarlo es muy sencillo. Para empezar tenemos un slo archivo:
/etc/gammurc
1. [gammu]
2. port=/dev/rfcomm0
3. connection = at19200
4. logfile = /var/log/smsdlog
5. logformat = textall
6. startinfo = yes
En la primera lnea indicamos el canal que vamos a utilizar, que es el que configuramos en el paso
anterior y aadimos un log para tener informacin.
Comprobamos si todo va bien. Para eso preguntamos a nuestro telfono la hora que tiene su
sistema, por ejemplo:
1. gammu getdatetime
Nos devolver la hora del telfono y tendremos todo preparado. Ya podemos probar a enviar
mensajes.
1. echo "probando el envio de SMS" | gammu sendsms TEXT NUMERODESTINO
Con este sencillo comando podemos configurar cualquier aplicacin que necesite enviar alertas para
que nos haga llegar un SMS. As de fcil.
Sistema de mensajera avanzado
Una vez tenamos el sistema anterior montado camos en la cuenta de que podramos utilzarlo para
hacer ms cosas de las que habamos pensado, slo necesitbamos saber cmo.
Una de las mquinas que utilizbamos de monitor se encontraba en la oficina, tras una lnea ADSL.
El router de esta lnea tena algn problema que haca que bajo ciertas circustancias se colgase y
haba que reiniciarlo, con lo que haba que ir personalmente a la oficina para hacerlo. Se nos ocurri
entonces que, si ya tenamos un sistema de envo de SMS funcionando, por qu no hacer que
pueda recibir y ejecutar acciones en base a lo que reciba? Dicho y hecho. En vez de responder a
POLI BULERIA, nuestro sistema respondera a ROUTER, aunque posteriormente fuimos
ampliando las acciones, como REBOOT que permite hacer un reinicio limpio del servidor y todas
las que posteriormente se te ocurran.
Investigando la ayuda de Gammu descubrimos que hay una forma de poner el sistema en modo
demonio y que automticamente recoja los SMS que lleguen al terminal y enve los que se le
encolen. Este procedimiento requiere modificar un poco el sistema, pero una vez configurado
ganars en robustez y efectividad.
La clave es la opcin -smsd de gammu que lo pone automticamente en modo demonio. Este
servicio lo que hace es recoger los SMS que se reciban en el mvil y dejarlos como archivos de
texto en un directorio especfico mientras que coge los SMS que se quieren enviar y que
previamente hemos dejado en otro directorio y los enva. Es decir, en vez de hacer los envos
directamente como veamos antes, los dejas en archivos de texto y automticamente el demonio los
envia. Veamos primero la configuracin necesaria. El archivo que maneja toda la configuracin es
/etc/smsdrc. De nuevo os copio mi configuracin tal cual puesto que tiene mucho tiempo y no
recuerdo los parmetros.
1. [gammu]
2. port=/dev/rfcomm0
3. connection = at19200
4. logfile = /var/log/smsdlog
5. startinfo = yes[smsd]
6. PIN = PINDETUSIM
7. logfile = /var/log/smsdlog
8. commtimeout = 1
9. sendtimeout = 10inboxpath = /var/spool/gammu/inbox/
10. outboxpath = /var/spool/gammu/outbox/
11. sentsmspath = /var/spool/gammu/sent/
12. errorsmspath = /var/spool/gammu/error/
No tiene mucha ciencia, el primer sector es igual que en el apartado anterior mientras que en el
segundo configuramos el PIN de tu SIM y los directorios donde dejar y recoger los SMS tal como
explicbamos antes.
Es importante puntializar el formato de los archivos de texto que dejaremos para enviar mensajes
los que recibiremos.
Mensajes salientes: en outboxpath dejaremos los archivos con el nombre siguiento el patrn
OUT<phone number>.txt,
por ejemplo con el nombre OUT666777888.txt se enviara al 666777888 el contenido del
archivo de texto.
Mensajes entrantes: en inboxpath recibiremos los mensajes con el nombre del archivo
siguiendo el patrn
IN<date>_<time>_<serialno>_<phone number>_<sequence>.txt,
por ejemplo IN20021130_021531_00_+45409000931640979_00.txt. En este caso
habramos recibido el 30/11/2002 a las 02:15:31 un mensaje desde el
+45409000931640979. Creo que sobran detalles adicionales.
Teniendo esto claro, podemos lanzar el demonio. Tan simple como
/usr/bin/gammu --smsd FILES /etc/smsdrc &
Si algo va mal nos devolver algn error, si no, tendremos nuestro sistema de envo y recepcin
funcionando. Para probarlo, comprueba la ruta inboxpath, si tenas SMSs en tu telfono
empezars a ver como entran los archivos de texto. Tambin puedes probar a crear uno en el
outboxpath siguiendo el patrn descrito, vers como lo recibes en el otro telfono.
Hasta aqu tenemos el nuevo sistema de envo y recepcin terminado. Debers modificar tu sistema
de alertas para crear los archivos de texto tal como hemos explicado y lo tendras automticamente
funcionando. Tambin puedes crear un sencillo script PHP que te permita enviar SMS de una
manera cmoda, simplemente dejars los mensajes en forma de archivos de texto en la cola del
directorio y el demonio se encargar de enviarlos.
Ejecutando acciones remotas
Ahora deberemos hacer el script que compruebe los SMS recibidos y decida qu hacer con ellos. Os
pondr un ejemplo bsico para que tengis una idea clara de cmo habra que hacerlo, es
responsabilidad vuestra asegurar el acceso al sistema de acciones de manera que slo determinados
telfonos puedan ejecutarlas. Yo, por comodidad, lo har en PHP, pero podis hacerlo como
queris, PERL, Python, bash, C,
1. <?
2. $inbox="/var/spool/gammu/inbox/";
3. $outbox="/var/spool/gammu/outbox/";
4. $d = dir($inbox);
5. while (false !== ($entry = $d->read())) {
6. if ($entry != "." && $entry != ".." && substr($entry, 0, 2)=="IN"){
7. $contenido=file_get_contents($inbox.$entry)
8. $palabras=explode(" ", trim($contenido));
9. $mensaje=substr($entry, 2, strlen($entry));
10. $datos=split("_", $mensaje);
11. $fecha=$datos[0];
12. $hora=$datos[1];
13. $numero=$datos[3];
14. //utiliza el numero para decidir si permites el reinicio desde ese cliente
15.
16. switch(trim(strtoupper($palabras[0]))){
17. case ROUTER:
18. system("/usr/bin/router.sh");
19. $mensaje="El Router ha sido reiniciado";
20. break;
21. case REBOOT:
22. system("reboot");
23. $mensaje="El servidor se est reiniciando";
24. break;
25. default:
26. $mensaje="La palabra clave enviada no se corresponde con ninguno de
nuestros servicios.";
27. }
28. $serial=date("YmdHis");
29. $arch=$outbox."OUTA_".$numero."_".$serial.".txt";
30. $fp=fopen($arch, "w");
31. fwrite($fp, $mensaje);
32. fclose($fp);
33. unlink($inbox.$entry);
34. }
35. }
36. $d->close();
37. ?>
El script es muy sencillo, buscamos los archivos del directorio INBOX, analizamos el nombre para
ver el nmero de origen y separamos el contenido por palabras para decidir la accin. Fijos que
con este sistema es fcil crear acciones con parmetros, simplemente se aaden palabras y en el
switch se opera como se necesite. En mi caso, cada accin recibida genera una respuesta en modo
de SMS a enviar para que sepamos que la accin ha funcionado.
Y esto es todo amigos. Si has seguido bien las instrucciones tendrs un precioso sistema de envo y
recepcin de SMS desde tu servidor sin necesidad de tener conectividad a Internet. A travs de
Gammu puedes enviar tambin MMS, por si te apetece montar un sistema de seguridad que te enve
una captura de una webcam , por ejemplo. El lmite est en tu imaginacin y en tus necesidades.

También podría gustarte