SMS Gateway mit dem Thomas-Krenn LES v2
Hinweis: Bitte beachten Sie, dass dieser Artikel / diese Kategorie sich entweder auf ältere Software/Hardware Komponenten bezieht oder aus sonstigen Gründen nicht mehr gewartet wird. Diese Seite wird nicht mehr aktualisiert und ist rein zu Referenzzwecken noch hier im Archiv abrufbar. |
---|
Dieser Artikel zeigt wie Sie ein SMS Gateway für Ihr Monitoring am Beispiel des Thomas-Krenn LES und dem MultiTech MTD-H5-2.0 Modem aufbauen. Dies gelingt ebenso mit dem CEP CT63 Modem. Als Software werden auf dem Low Energy Server v2 ein postfix-Mailserver und die SMS Server Tools 3 verwendet.
Installation
Im nachfolgenden wird die Installation der erforderlichen Komponenten beschrieben.
Modem
Das MultiTech MTD-H5-2.0 Modem bzw. das CEP CT63 Modem wird per USB am LES v2 angeschlossen und automatisch erkannt. Weitere Informationen zur Installation finden Sie in den folgenden Artikeln:
- MultiTech MTD-H5-2.0 Modem Installation unter Ubuntu 16.04 LTS
- CEP CT63 Modem Installation unter Ubuntu 12.04 LTS
SMS Server Tools 3
Die smstools werden auf dem LES v2 wie im Artikel SMS Server Tools Installation unter Ubuntu beschrieben installiert und konfiguriert.
postfix
Abschließend wird noch der postfix-Mailserver installiert.
Postfix Konfiguration
Nach der Installation der benötigten Komponenten wird nun postfix für die SMS Gateway Funktion konfiguriert.
Folgende Packages werden für den Perl-Filter installiert:
# apt-get install libemail-simple-perl libipc-run3-perl libdatetime-perl libtry-tiny-perl libcarp-clan-perl libmime-tools-perl
Filter
Es wird ein Content-Filter[1] mit der Bezeichnung SMSgateway im Unterordner /filter des postfix-Konfigurationsverzeichnisses erstellt. Dieser Filter extrahiert aus der empfangenen E-Mail den Betreff und übergibt ihn in das /var/spool/sms/outgoing-Verzeichnis. Von da ab kümmern sich die smstools um den Transport zum Empfänger.
tk@les2:/etc/postfix$ sudo mkdir filter tk@les2:/etc/postfix/filter$ sudo vi SMSgateway
Da der Filter unter dem User smsd läuft, wird der Datei-Eigentümer des Filters angepasst:
tk@les2:/etc/postfix$ sudo chown smsd:root SMSgateway
Folgender Inhalt wird in die Datei eingefügt:
#!/usr/bin/perl -w use strict; use warnings; use IPC::Run3; use Try::Tiny; use IO::File; use Carp; use Email::Simple; use DateTime; use MIME::Base64; our $SENDMAIL = "/usr/sbin/sendmail"; our $MAILDIR = "/var/spool/sms/outgoing"; our $SMSLEN = 160; # Start processing the email my $msg_str; while(<STDIN>){ $msg_str .= $_; } try{ my $sender = $ARGV[0]; my $fname = $MAILDIR.'/'.getLogStamp().'-'.$sender; my $incmail = parseEmailStr($msg_str); my $telnum = $incmail->header("Subject"); my $text = substr(getBody($incmail), 0, $SMSLEN); my $msgToSend = "To: ".$telnum."\n\n".$text; saveMsg($msgToSend, $fname, $sender); sendMail($msg_str); } catch{ print STDERR "Error: could not handle mail and send SMS with message: ".$_; exit(1); }; sub saveMsg{ my $message = shift; my $fname = shift; my $sender = shift; my $fh = new IO::File "> $fname"; if(defined $fh){ print $fh $message; $fh->close; } else{ confess "Could not save message from ".$sender." to ".$fname; } return $fname; } sub getLogStamp{ my $tz = DateTime::TimeZone->new( name => 'local' ); my $dt = DateTime->now(time_zone =>$tz); return $dt->dmy()."-".$dt->hour()."-".$dt->minute(); } sub sendMail{ my $mail_str = shift; my @command = ($SENDMAIL, '-f', @ARGV); run3 \@command, \$mail_str; } sub parseEmailStr{ my $msg_str = shift; #check if msg string is empty if(!defined($msg_str)){ confess "Cannot parse an empty email message string."; } my $msg = Email::Simple->new($msg_str); return $msg; } sub getBody{ my $msg = shift; if(!defined($msg)){confess "Cannot parse an undefined msg.";} if(getEncoding($msg) eq 'base64'){ return decode_base64($msg->body); } return $msg->body; } sub getEncoding{ my $msg = shift; if(!defined($msg)){confess "Cannot parse an undefined msg.";} return $msg->header('Content-Transfer-Encoding'); }
master.cf Konfigurationsdatei
Nach der einleitenden Beschreibung die Einträge smtp und sms-gateway in der master.cf-Konfigurationsdatei einfügen:
sudo vi /etc/postfix/master.cf
# # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # Do not forget to execute "postfix reload" after editing this file. # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - - - - smtpd -o content_filter=sms-gateway:dummy -o receive_override_options=no_address_mappings sms-gateway unix - n n - - pipe flags=Rq user=smsd argv=/etc/postfix/filter/SMSgateway ${sender} ${recipient} [...]
main.cf Konfigurationsdatei
In dieser Konfigurationsdatei ist unter anderem der Mail Name des postfix-Servers abgelegt.
tk@les2:/etc/postfix$ cat main.cf | grep mydestination mydestination = les2.tk-intern.local, les2, localhost.localdomain, localhost
Testen der SMS-Zustellung
Zu Testzwecken haben wir am Evolution-Mailclient die IP-Adresse unseres LES v2 als SMTP-Serveradresse angefügt und eine Testmail an root@les2.tk-intern.local geschickt.
Sollten Probleme mit dem Filter auftreten, sind diese in der Datei /var/log/mail.log zu finden:
# grep -i filter /var/log/mail.log May 22 13:56:47 les2 postfix/pipe[30203]: 6E925220A54: to=<monitor@thomas-krenn.com>, relay=sms-gateway, delay=0.41, delays=0.02/0.01/0/0.38, dsn=5.3.0, status=bounced (Command died with status 1: "/etc/postfix/filter/SMSgateway". Command output: Error: could not handle mail and send SMS with message: Undefined subroutine &main::decode_base64 called at /etc/postfix/filter/SMSgateway line 79, <STDIN> line 34. )
Einzelnachweise
- ↑ Simple content filter example (postfix.org)
Autor: Georg Schönberger Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.
|
Autor: Thomas Niedermeier Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates. |