Notification Push avec Pushover (en Bash)

Si vous avez des applications à monitorer, des scripts de sauvegardes et que vous souhaitez vous assurer du bon déroulement du programme ou simplement être averti d’un évènement, la première méthode qui vient à l’esprit et de s’envoyer un email récapitulatif.
J’ai cherché une solution qui me permettrait de recevoir des notifications Push sur mon iBidule, et j’ai découvert un service qui correspondait exactement à ce que je souhaitais.

Bash Script Update - v.1.7

2019-03-15 : - Request send only necessary fields.
             - Added message pipe.
             - Added monospace option.
             - Default monitor name
12-03-2018 : Added image attachment
30-01-2016 : Added -getopts- arguments to set retry/expire
23-04-2015 : HTML markup language option

Pushover iOS

Pushover est une application qui existe aussi bien pour iOS que pour Android et qui permet de vous envoyer des notifications depuis vos programmes. Pour utiliser le service, vous devez acquérir l’application pour environ 4€. Vous pourrez ensuite transmettre des notifications à hauteur de 7500 messages par mois. Différents exemples d’utilisation de l’API sont disponibles sur le site.

Site de Pushover : pushover.net
Pushover iOS : itunes.apple.com
Pushover Android : play.google.com

Pushover

  1. Vous achetez Pushover sur l’App Store ou Google Play, vous obtenez une clé utilisateur à utiliser dans vos applications. Un email est également fourni pour les applications ou vous ne pouvez intégrer l’API, un message envoyé à cet email est transmis à l’application mobile.

  2. Ensuite, vous installez l’application et déclarez ainsi les différents appareils mobiles que vous avez. Ceci permet d’envoyer la notification à tout les appareils, ou uniquement à un appareil précis.

  3. Enfin, vous créez des applications sur l’interface web de Pushover, en sélectionnant un intitulé, une icone, vous obtenez ainsi une clé pour chacune des applications créées. Vous pouvez ainsi, soit envoyer un message par défaut ou bien envoyer un message à une application, et celui-ci sera affiché avec l’icone et l’intitulé par défaut si aucun titre n’est fournie.
    Pour ma part j’ai créé trois applications, avec trois icônes distinctes : monitoring, backup et alert.

J’apprécie ce type de service, simple en apparence et terriblement efficace.

Donc ce que je vous propose, c’est un script en Bash qui permet d’envoyer des notifications depuis vos applications via le service de Pushover.

Le Script en Bash

Pour utiliser ce programme, copier le code dans un fichier nommé pushover dans un dossier accessible à tout les utilisateurs (ex: /usr/local/bin/pushover).

Ensuite, après avoir acheté Pushover et configuré les différentes applications sur l’interface web, vous pouvez éditer l’entête du script. Ajoutez la clé utilisateur hash personnelle, que vous trouverez sur le site.

Pour les applications, imaginez que vous avez une application MONITORING avec une icône, vous pouvez créer une variable MONITORING_TOKEN contenant la clé hash fournie pour l’application. Ensuite pour envoyer un message à cette application précise, vous aurez juste à ajouter :

1
/usr/local/bin/pushover -a monitoring

Pour ensuite obtenir le détail des options, vous pouvez taper dans le terminal :

1
pushover -h

Pour transmettre un message, vous pouvez définir le titre, le message, l’application de destination, la priorité, le son (à choisir parmi ceux disponibles dans l’application), un lien, un titre pour ce lien, et un appareil.
Concernant la priorité, sur le site web, vous pouvez définir des heures où vous souhaitez ne pas être dérangé. En mettant une priorité à 1, cette option n’est pas prise en compte, et la priorité du message sera haute, si vous définissez une priorité sur -1, le message sera délivré, mais sans alerte sonore.

Ce programme est écris en Bash pour usage sur un serveur ou depuis mes applications de sauvegardes, mais vous pouvez intégrer le service dans de nombreuses applications, comme en PHP sur votre site.

Push Notification avec Fail2Ban

Un exemple concret peut être l’usage de ce script avec Fail2Ban, une fois le script configuré et fonctionnel, vous pouvez éditer la configuration de Fail2Ban pour recevoir des notifications sur l’application Pushover.

Editez le fichier jail.local

Créez une nouvelle règle action :

1
2
3
4
5
action_nmwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s]
pushover[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]
%(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s]

action = %(action_nmwl)s

Cette règle utilise l’envoi d’un mail avec un rapport complet, et une notification via Pushover.
Dans vos règles plus bas, vous pouvez choisir l’action, soit un simple mail, soit un rapport complet avec notification pushover…

Dans le dossier action.d, créez un nouveau fichier pushover.conf

1
2
3
4
5
[Definition]
actionstart = /usr/local/bin/pushover -t "[Fail2Ban] started" -m "The jail has been started successfully." -a monitor -p-1
actionstop = /usr/local/bin/pushover -t "[Fail2Ban] stopped" -m "The jail has been stopped." -a monitor -p-1
actionban = /usr/local/bin/pushover -t "[Fail2Ban] banned " -m "The IP has just been banned by Fail2Ban after attempts against ." -a alert -s Gamelan
actionunban =

Testez l’action de actionban avant, pour ma part j’ai ajouté une ligne plus complète qui récupère les coordonnées GPS en fonction de l’IP et qui ajoute au message un lien vers Google Map :

1
actionban = /usr/local/bin/pushover -t "[Fail2Ban]  banned " -m "The IP  (`/usr/local/bin/geoip  | sed -n '2,3p' | tr '\n' ' ' | sed 's/ *$//'`) has just been banned by Fail2Ban after  attempts against ." -a alert -s Gamelan -n "Google Map" -u "http://maps.google.com/maps?q=`/usr/local/bin/geoip  | sed -n '7,8p' | tr '\n' ',' | sed 's/,$//'`"

Notification connection Shell

Si vous souhaitez être averti de toute connection au shell via ssh.

Dans le fichier /etc/bash.bashrc

1
/usr/local/bin/pushover -a alert -t "[SSH] `whoami | tr '[:lower:]' '[:upper:]'` LOGIN @ `date +'%d %b %T'` " -m "Nouvelle connexion de : `who | grep $(whoami)` [IP `echo $SSH_CLIENT | cut -d ' ' -f 1`] on server" -s Bugle > /dev/null

Éditez et tester les règles à votre convenance.
À partir de là vous pouvez vous envoyer des notifications depuis tout programme, être alerté d’une connection à une interface d’administration, être averti du bon déroulement d’une sauvegarde, monitorer un serveur…