Sei sulla pagina 1di 5

Alertas y acciones en tu servidor a través de 

SMS
Tal y como he prometido sigo en mi empeño de, como mínimo, dos artículos por semana, así que 
ahí va el segundo de esta.
Hoy veremos cómo aprovechar un móvil 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 
máquina. En aquél momento no había más opciones que el email, pero si no estabas delante de la 
máquina no recibirías nada. Posteriormente aparecieron las primeras pasarelas SMS por HTTP (con 
una llamada HTTP y los parámetros adecuados, envías un SMS), pero aún hoy tienen un 
inconveniente, si tu máquina se queda sin conectividad (problemas de red, router, ataques DOS..) 
nunca recibirás alertas y nunca te enterarás de que algo ocurre.
Se me ocurrió entonces que podría utilizar un Nokia 3210 que acababa de jubilar ya que además me 
había comprado el cable para conectarlo al ordenador por el puerto serie, pero me faltaba lo más 
importante, el software. Me puse a investigar y encontré lo que buscaba, era lógico, no iba a ser yo 
el primero al que se le ocurriese esa idea. La solución se llamaba Gnokii, un software que se 
comenzó a desarrollar ni más 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 mayoría de 
casos, sin embargo hace ya tiempo que apareció un fork de Gnokii, Gammu, que es el que utilizo 
desde hace ya unos años y sobre el que nos centraremos en este artículo. Además he cambiado la 
forma de conectar el terminal al ordenador, ya no es por el puerto serie sino por bluetooth.
Podríamos dividir el artículo en cuatro pasos:
1. Conectando el móvil con el servidor. 
2. Enviando mensajes. 
3. Sistema de mensajería avanzado. 
4. Ejecutando acciones. 

Conectando el móvil con el servidor
Comenzaremos por configurar el servidor. No voy a explicar detenidamente los pasos puesto que, 
aunque hoy en día son sencillos, se salen del alcance del artículo. De todos modos configurar el 
bluetooth hace cuatro o cinco años era bastante más 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 años.
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 estarán en cualquier repositorio.
Como supondremos que estamos trabajando con servidores, lo más probable es que no tengas 
entorno gráfico, así que lo configuraremos todo a mano. Si tuvieses entorno gráfico hay paquetes 
gnome para hacer el emparejamiento automáticamente.
En mi Centos5.0 los archivos de configuración 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 móvil para no tener que introducirlo manualmente. Tambien puedes 
configurar la SIM para que no solicite pin. 
• rfcomm.conf: configura los canales de comunicación. 
La verdad es que no recuerdo mucho las distintas opciones de hcid.conf, así que me limitare a 
copiar mi configuración para que tengáis 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 0×120104;
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 teléfono.
Finalmente configuramos el canal de conexión con el móvil. Para ello debemos averiguar la 
dirección bluetooth de tu móvil, sería algo así como la dirección MAC, de hecho tiene una 
estructura semejante. Para ello, inicia el servicio bluetooth, o reinícialo 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 dirección que 
tienen. Si obtienes algo como Device is not available: No such device, tu antena no está iniciada, 
quizás 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 móvil que estás 
utilizando y apunta la dirección, la necesitarás añadir al siguiente fichero, rfcomm.conf.
1. rfcomm0 {
2.         bind yes;
3.         device 00:0E:07:E7:12:27;//aqui la dirección 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 móvil.
Enviando mensajes
Instalamos el paquete Gammu. De nuevo, lo más 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 sólo 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 línea indicamos el canal que vamos a utilizar, que es el que configuramos en el paso 
anterior y añadimos un log para tener información.
Comprobamos si todo va bien. Para eso preguntamos a nuestro teléfono la hora que tiene su sistema, 
por ejemplo:
1. gammu –getdatetime
Nos devolverá la hora del teléfono 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 aplicación que necesite enviar alertas para 
que nos haga llegar un SMS. Así de fácil.

Sistema de mensajería avanzado
Una vez teníamos el sistema anterior montado caímos en la cuenta de que podríamos utilzarlo para 
hacer más cosas de las que habíamos pensado, sólo necesitábamos saber cómo.
Una de las máquinas que utilizábamos de monitor se encontraba en la oficina, tras una línea ADSL. 
El router de esta línea tenía algún problema que hacía que bajo ciertas circustancias se colgase y 
había que reiniciarlo, con lo que había que ir personalmente a la oficina para hacerlo. Se nos ocurrió 
entonces que, si ya teníamos un sistema de envío 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 respondería 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 automáticamente recoja los SMS que lleguen al terminal y envíe los que se le 
encolen. Este procedimiento requiere modificar un poco el sistema, pero una vez configurado 
ganarás en robustez y efectividad.
La clave es la opción ­smsd de gammu que lo pone automáticamente en modo demonio. Este 
servicio lo que hace es recoger los SMS que se reciban en el móvil y dejarlos como archivos de 
texto en un directorio específico mientras que coge los SMS que se quieren enviar y que 
previamente hemos dejado en otro directorio y los envía. Es decir, en vez de hacer los envíos 
directamente como veíamos antes, los dejas en archivos de texto y automáticamente el demonio los 
envia. Veamos primero la configuración necesaria. El archivo que maneja toda la configuración es 
/etc/smsdrc. De nuevo os copio mi configuración tal cual puesto que tiene mucho tiempo y no 
recuerdo los parámetros.
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 
explicábamos 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 patrón
OUT<phone number>.txt,
por ejemplo con el nombre OUT666777888.txt se enviaría al 666777888 el contenido del 
archivo de texto. 
• Mensajes entrantes: en inboxpath recibiremos los mensajes con el nombre del archivo 
siguiendo el patrón 
IN<date>_<time>_<serialno>_<phone number>_<sequence>.txt,
por ejemplo IN20021130_021531_00_+45409000931640979_00.txt. En este caso habríamos 
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á algún error, si no, tendremos nuestro sistema de envío y recepción 
funcionando. Para probarlo, comprueba la ruta inboxpath, si tenías SMS’s en tu teléfono empezarás 
a ver como entran los archivos de texto. También puedes probar a crear uno en el outboxpath 
siguiendo el patrón descrito, verás como lo recibes en el otro teléfono.
Hasta aquí tenemos el nuevo sistema de envío y recepción terminado. Deberás modificar tu sistema 
de alertas para crear los archivos de texto tal como hemos explicado y lo tendrías automáticamente 
funcionando. También puedes crear un sencillo script PHP que te permita enviar SMS de una 
manera cómoda, simplemente dejarás 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 básico para que tengáis una idea clara de cómo habría que hacerlo, es 
responsabilidad vuestra asegurar el acceso al sistema de acciones de manera que sólo determinados 
teléfonos puedan ejecutarlas. Yo, por comodidad, lo haré en PHP, pero podéis hacerlo como queráis, 
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 número de origen y separamos el contenido por palabras para decidir la acción. Fijáos que 
con este sistema es fácil crear acciones con parámetros, simplemente se añaden palabras y en el 
switch se opera como se necesite. En mi caso, cada acción recibida genera una respuesta en modo 
de SMS a enviar para que sepamos que la acción ha funcionado.
Y esto es todo amigos. Si has seguido bien las instrucciones tendrás un precioso sistema de envío y 
recepción de SMS desde tu servidor sin necesidad de tener conectividad a Internet. A través de 
Gammu puedes enviar también MMS, por si te apetece montar un sistema de seguridad que te envíe 
una captura de una webcam , por ejemplo. El límite está en tu imaginación y en tus necesidades.

Potrebbero piacerti anche