Outils pour utilisateurs

Outils du site


raspisms_et_clef_3g

L'objectif de ce beau projet est de permettre de recevoir et envoyer des SMS à partir d'un ordinateur en utilisant une carte SIM qui borne toujours au même endroit.

Nous allons pour cela installer la solution raspiSMS sur une Raspberry Pi munie d'un clef USB 3G.

RaspiSMS et Clef 3G

Pour information, mon ordinateur personnel utilise Ubuntu 20.04.

Par ailleurs, ma box internet possède un IP fixe, je n'ai donc pas eu à résoudre ce problème.

Clef 3G

J'ai commandé une clef 3G Huawei E3531.

À noter qu'il existe deux modèles différents de cette clef, la Stick et la HiLink, vendues sous le même nom, et qu'il est impossible de savoir laquelle vous aurez avant de la brancher dans l'ordi ; entraînant des configurations différentes. En ce qui me concerne, je me suis retrouvé avec une HiLink.

Pour l’anecdote, une fois branché, ce modèle prend le pas sur la connexion Internet, et ce détail a son importance car les 50Mo mensuels de data du forfait à 0€ de chez Free peuvent partir en quelques minutes, voire quelques secondes, en fonction de votre usage sur le moment. Prendre donc soin de couper la connexion le plus tôt possible, pour ne pas vous retrouver comme moi avec un “hors forfait” de plus de 10€ en 2 minutes. Soit dans l'interface web qui se sera ouverte, soit avec le menu réseau.

Carte SIM

Comme évoqué plus haut, étant abonné chez Free, j'ai commandé une carte SIM avec le forfait à 0€. Ici aussi, ne faites pas comme moi, et essayez de commander une taille de carte correspondant à la clef 3G. Pour la E3531, le slot est adapté à une carte SIM standard. Sinon, il existe des adaptateurs.

Raspberry Pi

J'ai utilisé une Rasberry Pi 4 de 2Go, mais j'imagine que ça doit être compatible avec des modèles plus vieux. J'y ai installé une Debian 11 Bullseye avec Raspberry Pi Imager.

Sur l'interface, il y a un bouton d'option avec un petit engrenage, il est important d'y préciser que l'on souhaite que le SSH soit pris en charge, et d'y configurer le WiFi.

Je vous invite aussi, pour des raisons de sécurité, à choisir un autre nom d'utilisateur que le très répandu pi. Dans notre cas, pour la suite du tuto, ce sera smsos.

Gestion des adresses IP

Pour des raisons de confort et de sécurité, j'ai attribué des IP fixes à mon ordi et à la Raspberry Pi. De cette manière, je peux d'une part plus facilement configurer le firewall de la Raspbetrry Pi pour qu'elle n'accepte que mon ordi en SSH, et d'autre part toujours connaître l'IP de la Pi pour pouvoir m'y connecter.

Sur l'interface en ligne de la Freebox :

  • Paramètre de la Freebox > Réseau Local > WiFi (pour récupérer les adresses MAC de la Pi et de l'ordi).
  • Puis aller dans DHCP > Beaux Statiques (pour attribuer les IP fixes).

Redémarrer la Pi et votre ordi pour que ces régalages soient appliqués.

Pour l'exemple, mon ordi sera en 192.168.0.99 et la Raspberry Pi en 192.168.0.77

Connexion en SSH

Si vous avez attribué une IP fixe à la Pi, vous n'aurez pas besoin de la chercher pour vous y connecter. Sinon il y a cette commande nmap qui vous permettra de l’obtenir :

sudo nmap -sn 192.168.0.0-255

Pour se connecter :

ssh smsos@192.168.0.77

Sécurité

Dans la mesure où la Raspberry Pi fera office de serveur web pour accéder à la gestion des SMS depuis n'importe où, elle sera exposée aux affres de la cyber malveillance. Il est donc prudent d'appliquer quelques mesures de sécurité.

Nous sommes pas ici sur des mesures très poussées, c'est plus pour le principe. Ça reste malgré tout efficace pour des attaques non ciblées.

Il est préconisé de supprimer l'utilisateur “pi”, mais, si vous avez créé votre image système avec rpi-imager en spécifiant un autre nom d'utilisateur ou d'utilisatrice, ce n'est plus nécessaire.

SSH

On peut, par exemple, dès à présent, changer le port de connexion SSH, qui est traditionnellement le 22, et lui attribuer le port 42 (au choix).

sudo nano /etc/ssh/sshd_config

Puis décommenter et modifier la ligne :

Port 42

Pour appliquer :

sudo service ssh restart

Désormais, pour se connecter il faudra utiliser la commande :

ssh smsos@192.168.0.77 -p 42

Firewall

Pour limiter l'utilisation du SSH à mon seul ordi, je n'ai autorisé que mon adresse IP, pour l'exemple, ici, sur le port 42.

J'ai pour cela installé le firewall ufw :

sudo apt install ufw

Puis j'ai appliqué cette règle assez explicite :

sudo ufw allow from 192.168.0.99 to any port 42

Il peut être aussi utile de n'ouvrir sur l'extérieur que les ports nécessaires pour accéder à Apache (le serveur web) :

sudo ufw allow 80
sudo ufw allow 443

Pour activer le firewall :

sudo ufw enable

Pour voir si les règles ont bien été prises en compte :

sudo ufw status verbose

Fail2Ban

Pour restreindre les accès multiples, on peut utiliser Fail2Ban :

sudo apt install fail2ban

RaspiSMS

L'installation de RaspiSMS est très simple. Elle est détaillée ici par l'équipe du projet, mais je vous la recopie pour que la page soit complète :

Ajouter le dépôt

J'ai installé les paquets nécessaires à l'utilisation d'APT avec SSL, avec cette succession de commandes :

sudo apt update -y
sudo apt install -y apt-transport-https gnupg2 curl
echo "deb https://apt.raspisms.fr/ buster contrib" | sudo tee -a /etc/apt/sources.list.d/raspisms.list
curl https://apt.raspisms.fr/conf/pub.gpg.key | sudo apt-key add -
sudo apt update -y

Installer le paquet raspisms

sudo apt install raspisms

Il m'a été demandé des infos pour configurer MySQL et le serveur SMTP. Pour ma part, faute d'avoir les infos, je n'ai pas renseigner le serveur SMTP, mais ça n'a pas empêché l'installation d'aboutir et le serveur de fonctionner.

Récupérer les identifiants

L'identifiant et le mot de passe pour la (première) connexion peuvent être récupérer en regardant dans le fichier .credential

sudo cat /usr/share/raspisms/.credentials

Une fois tout ceci fait, il m'a alors été possible d’accéder à l'interface web depuis mon ordi en allant à l'adresse locale :

192.168.0.99/raspisms

Gammu

Ce logiciel va faire l'interface entre la clef 3G et raspiSMS.

J'ai passé des jours à essayer de configurer la clef Huawei E3531 sans succès. Dans la mesure où deux modèles différents de la clef sont distribués avec le même nom, les informations que l'on trouve sont parfois contradictoires en fonction de l'usage que l'on veut en avoir. Ainsi, certains veulent passer du mode Stick au mode HiLink, d'autres veulent l'inverse. Et, encore maintenant, je ne sais pas trop quel mode j'utilise. Car oui, il est possible de passer d'un mode à l'autre.

Pour information mon lsusb d'origine m'affichait la clef ainsi (je le mentionne car j'imagine qu'un jour quelqu'un va tomber sur cette page par ce biais) et je n'avais aucun ttyUSB dans mon /dev :

Bus 001 Device 017: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard

De ce que j'en ai compris, 12d1 est l'ID du vendeur, ici Huawei ; 14dc est l'ID du produit ici la clef dans son mode HiLink.

Ce qui l'on va chercher à faire, c'est à changer l'ID du produit, car cela rendra compte que l'on a changé de mode. Mode qui, en l'état ne permet pas d'envoyer de SMS avec Gammu (mais le permet avec l'interface web HiLink).

Je ne vais pas essayer de vous expliquer ce que je n'ai pas compris. Je reste encore complètement circonspect devant le fait que ça marche, mais ça marche.

J'ai installé un paquet qui s'appelle usb-modeswitch :

sudo apt-get install usb-modeswitch

J'ai créé un fichier qui s'appelle 12d1:1f01 :

sudo nano /etc/usb_modeswitch.d/12d1:1f01

Et j'ai collé dedans :

TargetVendor=0x12d1
TargetProduct=0x1f01
MessageContent="55534243123456780000000000000011062000000100000000000000000000"

J'ai redémarré, et j'ai obtenu cette ligne :

Bus 001 Device 004: ID 12d1:155e Huawei Technologies Co., Ltd. HUAWEI Mobile

Et dans mon /dev j'avais :

/ttyUSB0
/ttyUSB1
/ttyUSB2

Reste que la configuration de Gammu avec gammu-config ne marche pas pour autant. Et ce, quel que soit le /dev/ttyUSB que je lui propose.

Alors j'ai essayé de forger à la main un fichier de configuration en faisant :

sudo nano /etc/gammurc

Et en collant le contenu suivant :

[gammu]
device = /dev/ttyUSB0 
connection = at19200
name = Phone on USB serial port
synchronizetime = yes
gammucoding = utf8
[gammu1]
device = /dev/ttyUSB1
connection = at19200
name = Phone on USB serial port
synchronizetime = yes
gammucoding = utf8
[gammu2]
device = /dev/ttyUSB2
connection = at19200
name = Phone on USB serial port
synchronizetime = yes
gammucoding = utf8

Et ça a marché…

  • Je suis allé sur le serveur raspiSMS de ma Pi avec le navigateur de mon ordi, dans “téléphone” j'ai “Ajouter un téléphone”.
  • Dans “type de téléphone”, j'ai renseigné “Gammu”.
  • Et dans “fichier de configuration”, j'ai mis /etc/gammurc

… et j'ai pu envoyer et recevoir des SMS avec l'interface web.

Il existe une procédure pour attribuer un nom fixe au /ttyUSB afin de le retrouver facilement, mais elle n'est pas exploitable par ma bidouille de gammurc. Mais dans la mesure où je n'ai que la clef 3g comme périphérique USB et qu'elle restera toujours dans le même slot, je ne rencontre pas de problème de non reconnaissance de la clef.

DMZ

Enfin, pour pouvoir accéder au serveur depuis l'extérieur, j'ai créé une DMZ avec ma Freebox :

Connexion Internet > Gestion des port > DMZ : puis j'ai renseigné l'adresse IP de la Raspberry Pi.

Et désormais, je peux envoyer et recevoir des SMS en tapant dans un navigateur l'adresse IP de ma Freebox suivit de /raspisms

\o/

raspisms_et_clef_3g.txt · Dernière modification : 2023/10/03 12:44 de 01ivier