Newsletter

Newsletter

Liens utiles

WebPlanete.net

Veille d'actualités

Moteur de veille, plus de 400 sources d'informations francophones. [ Cliquez-ici ]

30/04 Un serveur SMTP en Lua : naissance de Tethys

D'un coté un serveur SMTP et de l'autre un langage peu connu : le Lua. Beaucoup vous diront que l'association des deux est impossible et pourtant quelqu'un l'a fait, il a créé un serveur SMTP en Lua. Mais pourquoi une telle décision ? Tout simplement car l'auteur voulait faire un serveur qui soit facile d'utilisation, facile à configurer sans pour autant manquer d'options en tout genre. Philosophie très lointaine de Sendmail (qui n'est pas réellement un serveur SMTP mais qui en inclut un), qui est très critiqué pour sa complexité et sa prise de tête pour le configurer. Il a donc fallu un an de développement et pas mal de tests pour sortir la première version stable. Un langage peu connu : Lua Créé en 1991 par des chercheurs brésiliens, Lua a su se faire une place dans l'industrie du système embarqué et plus récemment du jeu vidéo pour plusieurs raisons : Il est écrit en C ANSI, ce qui lui permet une portabilité énorme. Il est conçu pour être utilisé par d'autres programmes ou langages (voir cet article sur son utilisation avec le C++). Son interprêteur est relativement léger (95 à 185 Ko selon le système). Sa syntaxe est relativement facile : Code : Lua1 2 3 4 5 6if a = b then ... end -- pour les commentaires while a = b do ... end Vous avez surement dû croiser ce langage si vous jouez à WoW puisqu'il est utilisé pour l'interface. Sinon, il est aussi utilisé pour faire des IA. Naissance de Tethys Le SMTP est un protocole assez vieux (utilisation massive vers les années 80) qui permet de transférer un email vers une messagerie électronique. Un serveur SMTP est donc le programme qui permet ce transfert. Pour en savoir plus sur SMTP je vous incite à lire l'article Wikipédia ou encore ce cours sur le protocole. Comme je l'ai dit dans l'introduction, le serveur le plus utilisé au monde est surement Sendmail mais il n'est pas le seul, il existe aussi Postfix ou encore Qmail (qui n'a aucun lien avec Qt) pour ne citer que les plus connus. Malheureusement, aucun n'est réellement facile à configurer ni même à utiliser ce qui a beaucoup choqué l'auteur de Tethys. Il a donc créé un serveur SMTP adhérant à la même philosophie que le langage avec lequel il est écrit : puissance et simplicité. Concernant la licence, Tethys est disponible en GPL version 3, vous pouvez donc étudier les sources, les améliorer, les redistribuer aisément comme indiqué dans les termes de cette licence libre. L'installation est plutôt facile, il faut télécharger un tarball de 38ko, le décompresser et lancer l'installation via l'outil "make". Ensuite, il faut définir les utilisateurs virtuels et commencer à configurer. Dans Tethys, pas mal de choses sont gérées par le SGBDR MySQL, il suffit donc juste d'effectuer une requête SQL INSERT INTO ... pour ajouter un nouvel utilisateur et définir l'hôte par exemple. Vient ensuite la configuration : tout se passe dans les fichiers d'extension .lua dans lesquels il faut juste modifier les valeurs des variables. Tout d'abord il faut définir les identifiants SQL puis l'hôte ainsi que le port (qui est 25 par défaut). Ensuite, on peut choisir d'exécuter Tethys en tant que démon (tourne en arrière-plan) ou le lancer manuellement à l'aide d'une console. On peut aussi définir la taille maximale d'un mail lors de l'envoi, le dossier de stockage, etc. Voici à quoi ressemble le fichier principal de configuration jugé « lisible » par rapport aux autres : Secret (cliquez pour afficher)Code : Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43-- This is *NOT* needed if you installed using LuaRocks tethys = "/usr/local/share/tethys2/" -- If set to false the processes will run in foreground in the terminal daemon.daemonize = true daemon.pid_file = "/var/run/tethys2-%s.pid" -- Listen on which host/port (use 0.0.0.0 as host to listen on all interfaces) bind.host = "localhost" bind.port = 25 -- Which hostname to use for various replies(this should identify the mail server) bind.reply_host = "net-core.org" -- Run the server as this user / group, this must be the ids, not the names -- Uncommend those if you dont want your server to run as root(recommanded) --bind.uid = 89 --bind.gid = 89 -- Max mail body size acceptable max_data_size = 1024 * 1024 * 30 -- 30 MB -- List of DISTANT ips that are allowed to relay mail without auth, if unsure leave it as the default relay.allow_ip = { ["127.0.0.1"] = true, } -- Which default deposit plugin to use, and its configuration -- (note that deposit plugins can be set on a per user base if the users manager plugin allows it) deposit.plugin = "tethys2.plugins.deposit.DiskSpool" -- Which spool type(mailbox format) to use for the DiskSpool deposit.spool_type = "tethys2.util.Maildir" -- There all the mails will be stored in a tree like: $HOST/$ACCOUNT/.maildir/ deposit.spool_path = "/var/tethys/domains/" -- Outgoing mails end up there while waiting for the sender process to send them deposit.relay_maildir = "/var/tethys/relay-maildir/" -- Sender process keeps trying to send mails every 4 hours, 4 times sender.retries = 4 sender.retries_time = 4 * 60 * 60 -- Who sends error messages for this server mail_error.from = "postmaster@net-core.org" Il existe déjà des plugins pour Tethys, certains sont même supportés nativement. Actuellement, ils sont au nombre de trois : User Manager : un plugin qui facilite la gestion des utilisateurs virtuels. Deposit : un plugin qui assure le bon fonctionnement de la réception des mails. Filter : un plugin qui filtre les mails, mais définit des options internes pour déplacer, supprimer, etc. les mails. Enfin, il est intéressant de dire que ce serveur SMTP supporte Maildir, une structure composée de dossiers utilisée pour la première fois par Qmail. Le principe est simple : habituellement les clients utilisent le format de stockage mbox, mais le problème de mbox est qu'il stocke tout dans un fichier (pour schématiser) et les mails sont simplement séparés par une ligne, il faut donc mettre le fichier en lecture seule quand on veut ajouter un email, en supprimer un, etc., afin de ne pas corrompre les données. Or avec Maildir on stocke les mails dans plusieurs fichiers. À ce propos, vous pouvez voir ce benchmark effectué entre mbox et Maildir. Liens relatifs (en) Site officiel (en) Page de téléchargement (fr) Le protocole SMTP Merci aux zCorrecteurs vincent1870 et Pas un 0, un -1. Lire la suite sur Siteduzero