Heb je thuis een server draaien, dan wil je die natuurlijk goed monitoren. Zo kan je tijdig ingrijpen bij mogelijke problemen. E-mail alerts zijn de standaardoplossing, maar soms zijn sms-berichten nóg beter. In deze workshop zetten we een mail gateway op die inkomende e-mails als sms-bericht doorstuurt naar jouw telefoon.

Een monitoringsysteem is pas volledig als het ook alerts verstuurt bij naderende problemen. Professionele Linux-systeembeheerders gebruiken daarvoor speciale consoles, bijvoorbeeld van Nagios. Als thuisgebruiker zit je niet voortdurend achter je computer naar zo’n console te kijken, dus gebruik je e-mail alerts. Het nadeel daarvan is dat je die altijd met een zekere vertraging ontvangt. Door spamfiltering op mailservers kan het wel een uur duren voor je een e-mailalert ontvangt in je mailbox. Bovendien moet je steeds je wifi of mobiele data inschakelen op jouw smartphone om de mails zo snel mogelijk te ontvangen. Dat vreet natuurlijk aan de batterij, waardoor je het risico loopt dat je smartphone het einde van de dag niet haalt. Kortom, voor dringende alerts zou het eigenlijk veel interessanter zijn om een sms te ontvangen. Een sms krijg je vrijwel onmiddellijk na het versturen én het werkt ook zonder internettoegang.

 

Benodigdheden

Een korte zoektocht op internet levert verschillende providers op die sms-diensten aanbieden via een mail gateway of http-api. Maar eigenlijk is het niet zo moeilijk om zoiets gewoon zélf te bouwen. Daarvoor heb je enkel een minimaal Linux-systeem nodig, zoals een Raspberry Pi of BeagleBone Black, een usb-modem en uiteraard een simkaart met de mogelijkheid om sms-berichten te versturen. Qua software moet je volgende pakketten installeren:

-usb-modeswitch en usb-modeswitch-data om de usb-modem aan te sturen;

-sms-tools om sms-berichten te versturen vanaf de commandline;

-postfix als mail gateway bovenop sms-tools.

In principe heb je Postfix niet nodig om sms-berichten te versturen. Het maakt de integratie met andere software wel veel eenvoudiger: elke applicatie ondersteunt immers e-mail alerts. Bovendien kan je zo vanaf meerdere systemen in je thuisnetwerk gemakkelijk sms-berichten versturen. Zonder Postfix zou je daarvoor scripts moeten schrijven die een ssh-verbinding opzetten naar je Pi en daar sms-toolcommando’s starten. In de voorbeeldcommando’s verderop heeft onze Pi de hostname pi.filipvervloesem.be met IP-adres 192.168.1.11, een tweede testmachine heeft het IP-adres 192.168.1.22, de pincode van onze simkaart is 3333 en als telefoonnummer van de ontvanger gebruiken we het (niet-bestaande) nummer 0123456789. Uiteraard pas je die gegevens aan naar jouw situatie.

 

Modem

Een dure 4G-modem biedt geen meerwaarde als je enkel de sms-functionaliteit gebruikt. Voor deze workshop gaan we aan de slag met de Huawei E3531 HSPA+-modem, te koop voor ongeveer € 40,-. Het is vaak een beetje prutsen om een nieuwe usb-modem te gebruiken onder Linux. Zulke modems bevatten een kleine hoeveelheid flash storage met drivers voor Windows en macOS. Ze presenteren zich dan als een opslagmedium en pas na installatie van de drivers ziet het besturingssysteem de modem. Linux daarentegen bevat zelf reeds de nodige drivers en de usb_modeswitch-tool zorgt ervoor dat de modem ook als dusdanig bruikbaar is. Helaas werkt dat niet altijd out-of-the-box. Soms moet je nog een configuratiebestand aanmaken in /etc/usb_modeswitch.d. Voor de Huawei E3531 onder Debian Jessie is dat ook het geval. Op http://bit.ly/2xUbV7I vind je het benodigde bestand. De modem is correct geïnstalleerd als je nadien het bestand /dev/ttyUSB0 ziet verschijnen. Voor meer informatie verwijzen we je naar het uitgebreide artikel “Altijd online” in Linux Magazine 4 van 2016.

 

Smstools

Het sms-toolpakket bevat een daemon die de eigenlijke sms-berichten verstuurt: smsd. Na installatie moet je de configuratie nog een beetje aanpassen om met onze usb-modem samen te werken. Open het bestand /etc/smsd.conf en scroll naar het onderdeel [GSM1] onderaan. Vervang de naam van het device ttyS0 door ttyUSB0 en vul de pincode van de simkaart in. Herstart de smstools-service:

$ service smstools restart

 

Controleer intussen of er geen foutmeldingen verschijnen in het logbestand:

$ tail -f /var/log/smstools/smsd.log

 

Lukt het initialiseren van de modem niet, schakel dan meer logging in met de optie “loglevel = 7” in smsd.conf, gevolgd door een herstart. Even zoeken op Google naar de foutmeldingen kan je al een eind verder helpen. Controleer ook nog eens of je de simkaart wel correct geplaatst hebt in de modem. Het klinkt misschien onnozel, maar het is altijd mogelijk dat je je vergist hebt. Zijn er geen foutmeldingen in het logbestand, kopieer dan het sendsms-voorbeeldscript en gebruik dat script om een eerste sms te versturen:

$ sendsms <telefoonnummer>

 

De tijdelijke bestanden van smstools vind je onder /var/spool/sms. Een correct afgeleverde sms komt terecht in de sent-folder.

 

Postfix

Het sendsms-script werkt nu naar behoren, maar erg handig is dat niet. We willen immers vanuit verschillende applicaties op verschillende machines in ons thuisnetwerk sms-berichten versturen. De beste oplossing daarvoor is door een eenvoudige mail gateway op te zetten die inkomende e-mails omzet naar sms-berichten. Daarvoor gebruiken we Postfix met een aangepaste configuratie. Kopieer om te beginnen het email2sms-script naar /usr/bin. Installeer vervolgens het postfix-pakket en kies daarbij de optie “Internet Site”. Vul de fully qualified domainname (ofwel fqdn) van jouw machine in, bijvoorbeeld pi.filipvervloesem.be. Het maakt verder niet uit of die domainnaam in dns bestaat of niet, want we gebruiken de mailserver enkel binnen ons thuisnetwerk. Open daarna het bestand /etc/postfix/main.cf en voeg volgende opties toe:

-transport_maps en local_recipient_maps om sms-berichten enkel toe staan naar vooraf bepaalde telefoonnummers;

-smtpd_recipient restrictions om sms-berichten enkel toe te staan vanaf bepaalde IP-adressen in je netwerk.

Aan het einde van het bestand /etc/postfix/master.cf definieer je het smstool-transport om e-mails te forwarden naar smsd.

 

Toegang instellen

Maak vervolgens een bestand /etc/postfix/transport aan met daarin de nummers waarnaar je sms-berichten wilt versturen in volgend formaat:

<telefoonnummer>@<fqdn-pi>smstools:

 

Het is belangrijk dat je na de @ dezelfde naam invult als tijdens de initiële Postfix-configuratie: in ons geval pi.filipvervloesem.be. Die naam vind je ook terug in de mydestination-parameter in /etc/postfix/main.cf. Gebruik je een andere naam, dan probeert Postfix de mails ergens anders af te leveren en komen ze nooit bij smsd terecht. In het bestand /etc/postfix/access plaats je tot slot de IP-adressen van machines die sms-berichten mogen versturen in volgend formaat:

<ip-adres>OK

 

Je hoeft daar alleen andere machines in je netwerk toe te voegen, vanaf de Pi zelf heb je altijd toegang. Voer na elke wijziging aan het transport- of access-bestand het postmap-commando uit, bijvoorbeeld:

$ postmap /etc/postfix/access

 

Herstart tot slot Postfix.

 

Van e-mail naar sms

De benodigde configuratie is nu klaar om te testen of we via de in /etc/postfix/transport gedefinieerde e-mailadressen een sms-bericht kunnen versturen. In het logbestand /var/log/mail.log zie je precies wat Postfix uitvoert tijdens je test. De eerste test voeren we op de Pi zelf uit. Installeer het pakket heirloom-mailx voor de mailx client en stuur als volgt een test e-mail:

$ echo “Test sms” | mailx -s sms 0123456789@pi.filipvervloesem.be

 

In principe zou deze sms netjes moeten aankomen. Is dat niet het geval, bekijk dan de foutmeldingen in /var/log/mail.log om uit te zoeken wat precies is misgelopen. Test tot slot nog of dit ook werkt vanaf de testmachine die je had opgenomen in het access-bestand. Daar moet je wel nog expliciet de mail server opgeven bij het mailx-commando, bijvoorbeeld:

$ echo “Test sms” | mailx -s sms -S smtp=192.168.1.11 0123456789@pi.filipvervloesem.be

 

Werkt dat ook? Dan kan je vanaf nu op twee manieren e-mail alerts sturen:

-in eigen scripts gebruik je het mailx-commando zoals hierboven;

-in andere applicaties stel je een e-mailadres uit het transport-bestand in als ontvanger en het ip-adres van de Pi als mail server.