La mise en place d’une Gateway SMS est une chose simple et peut être intéressante en entreprise. Aussi bien pour des alertes depuis vos systèmes de supervision (avec Nagios ou Centreon par exemple), que pour des portails captifs Wi-Fi (portail Ucopia). Cette passerelle est d’autant plus intéressante qu’elle est mise en place sur un Raspberry PI, qui ne coute pas grand chose, le modem GSM est un vieux nokia 3109c.
Configuration :
Raspberry PI 512MO
OS : Pidora
Carte SD : 16GO Class 10
Avant de commencer, nous mettons à jour notre OS :
# yum update
Nous modifions notre chkconfig :
# chkconfig firewalld off
# chkconfig iptables off
# chkconfig sendmail off
Nous arrêtons les services inutiles
# service firewalld stop
# service iptables stop
# service sendmail stop
Nous installons les pré-requis, à savoir “smstools” qui nous servira à envoyer les SMS, ainsi que “postfix”, qui sera notre relai mail2sms :
# yum install smstools postfix
Création des droits :
# chown smstools: /var/spool/sms -R
Modification du bin smssend :
# vim /bin/smssend
ligne 21 : smsd_user=”smstools”
Modification du init.d smsd
# vim /etc/init.d/smsd
sous : prog=”smsd”// Ajouter :
mkdir /var/run/smsd
chown smstools: /var/run/smsd -R
Brancher votre téléphone au Raspberry PI, et éditer le fichier de configuration de smstools :
# vim /etc/smsd.conf
Changer le device par /dev/ttyACM0
mise en place du script email2sms :
# cp /usr/share/doc/smstools-3.1.15/email2sms /usr/local/bin/email2sms
# chown smstools:smstools /usr/local/bin/email2sms
Nous modifions maintenant notre fichier de configuration Postifx
# vim /etc/postfix/main.cf
La configuration doit être comme suit :
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = ipv4
local_destination_concurrency_limit = 1
mail_owner = postfix
mailbox_command = procmail -a “$EXTENSION”
mailbox_size_limit = 0
mailbox_transport = smstools
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = smsgw.alexnogard.com, smsgw, localhost
mydomain = alexnogard.com
myhostname = smsgw.alexnogard.com
mynetworks = 172.27.0.0/20, 127.0.0.0/8
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.9.4/README_FILES
recipient_delimiter = +
relay_domains = $mydestination
relayhost = $mydomain
sample_directory = /usr/share/doc/postfix-2.9.4/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
unknown_local_recipient_reject_code = 550
On modifie le fichier master.cf :
# vim /etc/postfix/master.cf
// Ajouter tout en bas :
smstools unix – n n – – pipe
flags= user=smstools argv=/usr/local/bin/email2sms -n ${user}
On inscrit les services au démarrage et on les lance :
# chkconfig smsd on
# chkconfig postfix on
# service smsd start
# service postfix start
Pour tester :
Se connecter à un second serveur, et taper la commande suivante :
# /usr/bin/printf “test” | /bin/mailx -S smtp=XXX.XXX.XXX.XXX 33XXXXXXXXXXXX
remplacer XXX.XXX.XXX.XXX par l’ip de votre premier serveur.
(remplacer XXXXXXXX) par votre numéro de téléphone, vous devriez recevoir le sms.
Si vous avez des questions par rapport aux Notifications SMS pour Nagios / Centreon, n’hésitez pas à utiliser les commentaires !
Bonjour,
Somme nous obliger de passer par les mails? car si le server mail ne repond plus on ne recoit pas de sms.
Peut etre que vous avez trouvé un autre moyen depuis.
Merci
C’est la passerelle SMS qui heberge le mail.
Donc vous envoyer un mail depuis une autre machine vers votre raspberry, et le raspberry envoie le sms ;)
Salut Alex,
Merci pour ces explications, je pense me ‘jeter à l’eau’ avec cette
procédure.
Mais, il me vient pour déjà 3 questions:
1°) Quelle est l’adresse mail qui doit recevoir le texte ?
Comment transformer le message (dans ton exemple “test’) en variable?
et aussi le numéro du destinataire (car ça sera jamais le même destinataire).
Merci