Integración SMS · 3 min read · Oct 18, 2025

Integración del Servidor Nagios 3.x.x/Icinga 1.x.x Para Alertas SMS a Través de Dispositivos FoxBox en Debian Squeeze

Integración del Servidor Nagios 3.x.x/Icinga 1.x.x Para Alertas SMS a Través de Dispositivos FoxBox en Debian Squeeze

Este tutorial explica cómo integrar un servidor de monitoreo estándar Nagios (o Icinga) con un dispositivo externo de notificación SMS, el FoxBox ( www.smsfoxbox.it).

1 Nota preliminar

FoxBox, como indican los fabricantes, viene en dos versiones similares (G25 y LX800) que difieren en especificaciones de hardware. En esta guía nos referiremos a la puerta de enlace SMS LX800 (compramos este porque tiene un mejor rendimiento y almacenamiento CompactFlash), pero estoy seguro de que podría extenderse a otras versiones sin problemas.

Nuestro servidor ejecuta Nagios Core 3.5.0 (con plugins Nagios 1.4.16) en un Debian Squeeze. Probablemente para diferentes distribuciones los caminos cambiarán, pero la lógica sigue siendo prácticamente la misma.

2 Instalación del lado de FoxBox

El dispositivo está diseñado para este tipo de tareas de comunicación, por lo que no hay mucho que hacer aquí excepto:

  • Proporcionar una dirección IP válida, accesible desde nuestro servidor de monitoreo;
  • Insertar una tarjeta SIM probada y completamente funcional, para enviar el SMS.

3 Instalación del lado del Servidor

Primero que nada, necesitamos colocar este script dentro de la carpeta /usr/lib/nagios/plugins/:

#!/usr/bin/perl
use LWP::UserAgent;
use Getopt::Long;
use strict;
use warnings;
use constant OK => 0;
use constant WARNING => 1;
use constant CRITICAL => 2;
use constant UNKNOWN => 3;
use constant SEND_PAGE => "/source/send_sms.php";
my($host);
my($username);
my($password);
my($number);
my($message);
sub usage() {
    print("Uso: send_sms -h|--host  -u|--user  --pw|--pass  -n|--number  -m|--message \n\n");
    print(" - Dirección IP o nombre de host del SMS FoxBox\n");
    print(" - Nombre del administrador del SMS FoxBox\n");
    print(" - Contraseña del administrador del SMS FoxBox\n");
    print(" - Número de teléfono donde se enviará el SMS\n");
    print(" - Mensaje a enviar\n");
}
sub send_sms {
    my($host, $user, $pass, $phonenum, $text) = @_;
    my($ua);
    my($html_page);
    my($response);
    my($status_code);
    $ua = LWP::UserAgent->new;
    $ua->timeout(10);
    $response = $ua->post("http://$host" . SEND_PAGE,
                [
                    "username" => $user,
                    "pwd" => $pass,
                    "from" => 'Nagios',
                    "nphone" => $phonenum,
                    "testo" => $text,
                    "nc" => "http://$host" . SEND_PAGE
                ]);
    if(!$response->is_success) {
        print("ERROR: " . $response->status_line . "\n");
        $status_code = UNKNOWN;
    }
    $html_page =  $response->content;
    if($html_page =~ /p class="(\w+)"/g) {
        if($1 eq "confneg") {
            print("ERROR: No se pudo enviar el SMS\n");
            $status_code = UNKNOWN;
        }
        else {
            $status_code = OK;
        }
    }
    else {
        print("ERROR: Salida de página desconocida\n");
        $status_code = UNKNOWN;
    }
    return $status_code;
}
undef $host;
def undef $username;
def undef $password;
def undef $number;
def undef $message;
GetOptions(    'host|H=s'    => \$host,
        'user|u=s'     => \$username,
        'pass|pw=s'     => \$password,
        'number|n=s'     => \$number,
        'message|m=s'     => \$message);
if(!defined $host || !defined $username || !defined $password || !defined $number || !defined $message) {
    usage();
    exit(UNKNOWN);
}

$message =~ s/\\n/\n/g;
my($ret_status);
$ret_status = send_sms($host, $username, $password, $number, $message);
exit($ret_status);

También es importante establecer correctamente los permisos en este archivo, para permitir que el usuario Nagios lo ejecute.

Ahora deberíamos agregar los nuevos comandos de notificación, trabajando en el canal SMS en lugar del clásico correo electrónico. Para hacerlo, tenemos que agregar estas líneas al archivo /etc/nagios3/commands.cfg:

# Definición del comando 'notify-host-by-foxbox'
define command{
        command_name    notify-host-by-foxbox
        command_line    /usr/lib/nagios/plugins/sendSMS.sh -h "127.0.0.1" -u "nagiosadmin" -pw "nagios" -n "$CONTACTPAGER$" -m "Alerta de Host: $HOSTNAME$ \nEstado del Host: $HOSTSTATE$ \nFecha/Hora: $LONGDATETIME$"
        }
# Definición del comando 'notify-service-by-foxbox'
define command{
        command_name    notify-service-by-foxbox
        command_line    /usr/lib/nagios/plugins/sendSMS.sh -h "127.0.0.1" -u "nagiosadmin" -pw "nagios" -n "$CONTACTPAGER$" -m "Alerta de Servicio: $HOSTALIAS$/$SERVICEDESC$ \nEstado del Servicio: $SERVICESTATE$ \nFecha/Hora: $LONGDATETIME$"
        }

Como puedes ver, necesitamos una nueva información para los contactos: el número de teléfono. Por lo tanto, tenemos que definirlo como “pager” en el archivo /etc/nagios3/conf.d/contacts_nagios2.cfg.

Además, configuramos el comando de notificación de servicio/host. Por defecto, estos utilizan el canal de correo electrónico, mientras que queremos alertar con los nuevos comandos de notificación, así que también tenemos que editar los parámetros “service_notification_commands” y “host_notification_commands”:

define contact{
        contact_name                    test-contact
        use                             generic-contact
        alias                           tester
        email                           yourname@domain
        host_notification_commands      notify-host-by-foxbox
        service_notification_commands   notify-service-by-foxbox
        pager                           12453683421
        }

Obviamente, una vez finalizadas las configuraciones, tenemos que reiniciar el servicio Nagios para ver sus efectos.

Para verificar que todo esté bien, tal vez podrías lanzar la verificación previa al vuelo con

nagios3 -v /etc/nagios3/nagios.cfg

Como veo, esta arquitectura también se ha implementado en un par de versiones de FoxBox, proporcionando una solución de notificación todo en uno (EasyG2 G25 y Monitoring LX800).

(Referencia: www.smsfoxbox.it)

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.