Adieu, Lstu. Bienvenue, rs-short !
Un raccourcisseur de liens libre en Rust, fait maison
Bonjour,
Cela fait quelques mois que nous avons pris conscience de la quantité de spam que nous recevions sur notre raccourcisseur de liens, Lstu.
Le service a ouvert le 23 mai 2019 et est resté sous les radars pendant un moment… Jusqu’à fin juillet, où une activité malveillante a commencé à se développer. Des liens créés par des bots, redirigeant vers des sites de scamming, des contenus illégaux ou pornographiques, ont commencé à envahir notre base de données.
Lstu ne disposant pas de captcha, nous étions bien embêtés ; nous n’avions pas de solution à ce problème.
Nous avions configuré fail2ban
pour qu’il bannisse une IP au bout d’un certain nombre de liens créés par jour. C’était efficace, mais loin d’être assez : les IPs étaient beaucoup trop nombreuses.
Nous avons commencé à faire le ménage le 10 septembre, où nous comptabilisions 11 767 URLs, dont 99,5% d’entre elles ont été créées par des spammeurs.
Quatre jours plus tard, nous avons constaté que 1000 liens malveillants supplémentaires avaient été créés depuis le dernier nettoyage.
Nous n’avions pas d’autre choix que de mettre l’instance “en lecture seule” (bloquer la création de nouveaux liens) et de réfléchir rapidement à une solution.
🔗Des conséquences insoupçonnées
Lorsque nous avons repéré les premières traces de l’activité suspecte, nous nous sommes dit que ce n’était pas grave, que les utilisateurs peuvent faire ce que bon leur semble avec leurs liens, qu’on doit garder l’outil neutre vis-à-vis de leur activité.
Mais nous avons peu à peu réfléchi aux conséquences : au vu du type de liens créés, il n’y a pas de doute qu’ils ont été utilisés à des fins de spam, notamment par email.
Nous savons que les principaux fournisseurs d’email lisent le contenu des mails pour déterminer s’il s’agit d’un spam ou non. Si des spammeurs envoient des mails contenant un lien vers notre raccourcisseur (s.42l.fr
), cela affectera probablement la réputation de notre nom de domaine et de notre IP, ce qui poserait de gros problèmes à notre service mail.
Nous avons, par précaution, vérifié si notre IP/nom de domaine ont été inclus dans les blacklists connues, mais cela ne semble pas être le cas.
🔗D’autres problèmes
De plus, Lstu prenait énormément de RAM (entre 150 et 220 Mo, même au repos), ce n’était pas acceptable pour un service qui est censé être minimaliste.
Nous avons déjà signalé le problème à Framasky (son développeur) mais selon lui, il se pourrait qu’il s’agisse d’un leak dans le framework Mojolicious, utilisé dans sa conception. N’oublions pas que Lstu est écrit en Perl.
Et puisque nous ne savons pas lire du Perl, nous n’avons pas pu modifier le service pour l’adapter à nos besoins.
🔗Solution ?
Nous avons cherché parmi les solutions existantes, mais rien ne nous convenait (pas de captcha, pas assez personnalisable, la majorité des projets étaient en PHP, bref, rien de très attirant…:D).
Nous avons donc développé en Rust un logiciel ayant le même but, mais très allégé en fonctionnalités (il a été écrit en une semaine !)
Nous utilisons le framework web Rocket. Le service tourne en 1000 lignes de code, sans JS, sans framework CSS, sans tracking, avec le strict minimum nécessaire.
Sa consommation est ridicule (entre 8 et 12 Mo de RAM).
Il intègre un captcha qui devrait dissuader une bonne partie des spammeurs pour un temps.
Enfin, il est bien évidemment ouvert à contribution sous la Mozilla Public License 2.0, le code source est disponible ici.
À bientôt,
~ N&B