Deblan blog

Informatique

Nouvelle version majeure de Custom Menu

La version v2.3.2 de Custom Menu a été publiée il y a quelques jours. Cette version contient des mises à jours importantes qui rendent l'application à présent très complète.

Pour rappel, Custom Menu est une application qu'on installe dans Nextcloud. Elle permet de corriger un manque cruel de la mise en page du menu de navigation de Nextcloud. L'application permet de paramétrer 4 modes d'affichage du menu avec, à ce jour, une 40ène de de paramètres.

Parmis les dernières mises à jour, on retrouve la capacité de l'application à s'adapter aux couleurs de Nextcloud dès son installation. Mais le plus gros du travail s'est concentré autour la gestion des catégories. En effet, les applications sont organisées dans des catégories gérées par les développeurs Nextcloud. Custom Menu permet maintenant de créer de nouvelles catégories (dans toutes les langues utilisées dans votre Nextcloud) et de les affecter aux applications qui sont installées.


Microsoft 365 - Problème de connexion aux serveurs SMTP

Quand Microsoft change de nom (Office 365 → Microsoft 365), les devops doivent aussi en profiter pour la changer configuration de leurs serveurs de mail…et rien de plus normal que de bloquer les connexions des applicatifs qui ne sont pas estampiller Microsoft.

Depuis plusieurs semaines, j'ai en effet détecté de grandes difficultés à émettre des mails depuis des applicatifs non Microsoft. Les connexions vers les serveurs SMTP d'Office 365 (smtp.office365.com) échouaient très souvent jusqu'à être complétement bloquées sur une 40ène de bureaux à distance où se trouve une application métier.

Pour contourner ce problème (intolérable selon moi), une des solutions est de placer en liste verte les IP depuis lesquelles on se connecte. C'est stupide mais rien de surprenant venant de Microsoft.

Pour réaliser cette opération, je me suis dirigé vers le Centre d'administration Exchange accessible depuis le portail d'administration.

Centre d'administration Exchange

J'ai complété cette configuration par l'édition de la Stratégie de filtre de connexion qu'on retrouve dans les Paramètres anti-courrier indésirable.

Stratégie de filtre de connexion

Après un moment, les envois de mail on pu reprendre et je n'ai pas encore eu de retour qui indiqueraient de nouvelles difficultés de connexion.


Repars avec ton Claude

Repars avec ton Claude

https://evenement.tinternet.net/

Les membres de l'association Tinternet & Cie te proposent une journée conviviale et créative le samedi 6 décembre 2021, au FabLab à Besançon ! Le but ? Fabriquer et repartir avec ton serveur personnel basé sur un RaspberryPi pour héberger et partager tes données. Pourquoi ? Car l'auto-hébergement de nos données et l'un des enjeux majeurs liés à notre usage des outils numériques.

En plus de la création personnalisé de ton serveur, la journée sera rythmée par des conférences/discussions sur le fonctionnement de l’internet, l’auto-hébergement, logiciels et licences libres...

Lien permanent


Mettre en place un VPN avec Wireguard

Les VPN ont le vent en poupe depuis quelques temps. Rares sont les vidéastes qui n'auront pas fait l'éloge de services comme NordVPN. Cependant, avant de permettre de visualiser le contenu US de Netflix, un VPN permet de créer un réseau entre plusieurs machines au travers d'autres réseaux comme Internet. Ainsi, quand des machines sont connectées au même réseau VPN, elles peuvent communiquer de la même façon que dans un réseau local. C'est donc très intéressant lorsque l'ont souhaites isoler une application d'internet en la rendant tout de même accessible dans ce réseau isolé.

VPN

Il existe tout un tas de solutions pour réaliser son VPN. La plus connue est certainement OpenVPN mais je lui préfère Wireguard pour sa très grande simplicité d'installation.

Dans mon cas d'usage, j'ai un serveur Wireguard sous Debian et des clients qui tournent principalement sur Debian mais aussi Windows et Android.

Sous Debian 10, il est nécessaire d'utiliser les dépots backports pour insaller Wireguard.

echo "deb http://deb.debian.org/debian buster-backports main contrib non-free" \
  | sudo tee /etc/apt/sources.list.d/buster-backports.list

Une fois le dépot ajouté, il suffit de mettre à jour la liste des paquets et d'installer Wireguard.

sudo apt update && sudo apt install wireguard

Sur d'autres distributions, il faudra installer wireguard-tools mais je vous laisse vous référer à la page d'installation pour plus d'informations.

En complément de Wireguard, je vous invite à installer iptables et resolvconf sur le serveur 1 et uniquement resolvconf sur vos clients 1 linux. iptables va permettre de realiser le routage des paquets tandis que resolvconf va permettre de gérer les DNS via la connexion VPN.

Une fois l'installation terminée, on va générer un couple de clés sur le serveur.

cd /etc/wireguard
umask 077
wg genkey | tee privateKey | wg pubkey > publicKey

Suite à ces commandes, 2 nouveaux fichiers ont été générés : privateKey contient la clé privée et publicKey contient la clé publique. Il faudra conserver la clé privée secrète tandis que la clé publique va permettre d'identifier le serveur auprès des clients. Son contenu sera donc partagé sur d'autres machines. Vous pouvez réaliser la même opération sur vos machines clientes qui seront elles aussi identifiées avec leur clé publique. Les interfaces graphiques de Wireguard réaliseront la générations des clés automatiquement. Bien sur, vous pouvez créer autant de clés que vous le désirez. Je recommande de créer un couple de clé par serveur VPN.

Exemples

Nous allons ensuite générer le fichier /etc/wireguard/wg0.confwg0 désigne le nom de l'interface réseau qui sera créée par wireguard. Selon vos besoins, vous pourrez en ajouter autant que vous le désirez.

[Interface]
Address = 10.0.0.1/24
SaveConfig = false
PostUp = sysctl -w net.ipv4.ip_forward=1; iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.0.0.1/24 -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.0.0.1/24 -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = clé_privée_du_serveur

Dans cette configuration, je définie la page IP du réseau (10.0.0.1/24) et l'IP du serveur (10.0.0.1). Veillez à modifier le nom de l'interface connectée à Internet (ici eth0). Insérer également le contenu de la clé privée à la dernière ligne. SaveConfig à false indique que le fichier pourra être modifié pendant que le serveur est lancé. Enfin, on indique que le serveur écoute sur le port 51820. Vous pourrez répéter cette opération sur vos client mais vous devrez omettre les lignes avec PostUp, PostDown et ListenPort. Vous devrez également changer Address en incrémentant l'ip et en fixant la page à 32 (exemple : 10.0.0.2/32, 10.0.0.3/32, etc.).

Enfin, il faudra renseigner la liste des clients du réseau VPN en utilisant leur clé publique et l'adresse IP qu'ils auront configurée.

[Interface]
...

[Peer]
PublicKey = clé_publique_du_client_1
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = clé_publique_du_client_2
AllowedIPs = 10.0.0.3/32

Coté client, il faudra renseigner le serveur :

[Interface]
...

[Peer]
PublicKey = clé_publique_du_server
AllowedIPs = 10.0.0.0/24
Endpoint = ip.du.serveur.vpn:51820
PersistentKeepalive = 20

Dans cet exemple, j'ai définie que seuls les paquets à destination du réseau VPN seront routés dans le VPN : AllowedIPs = 10.0.0.0/24. Si vous voulez router tout votre traffic, saisissez AllowedIPs = 0.0.0.0/02. Pour ajouter plusieurs plages, il suffit de les séparer par des virgules. Dans le bloc [Interface] des clients, vous avez la possibilté d'ajouter une propriété DNS afin de paramétrer un ou plusieurs serveurs DNS. Les serveurs DNS devront être accessibles par le serveur VPN ou le client selon le paramétrage de AllowedIPs. Attention, les DNS seront paramétrés comme des DNS classiques et ils seront sollicités pour résoudre tous les noms.

Une fois les configuration effectuée, vous pourrez démarrer ou arrêter la connexion VPN avec sudo wg-quick up wg0 et wg-quick down wg0 sur le serveur et sur les clients. Vous pourrez monitorer les connexions avec la commande sudo wg.


  1. Techniquement, chaque pair (ou peer) est à la fois client et serveur. Quand je parle de "serveur", je fais référence à la machine qui va jouer le rôle de routeur pour les différents pairs du VPN. Techniquement, un pair peut s'interconnecter à autant d'autres pairs qui lui est possible de joindre (cf la doc officielle et la doc Archlinux). ↩︎↩︎

  2. Que ce soit sur un "serveur" ou un "client", AllowedIPs indique pour quelle(s) plage(s) IP le pair sera emprunté pour router les paquets. Sur le serveur, on souhaite que chaque pair reçoivent exclusement les paquets qui leur sont destinés (IP du pair/32) tandis que sur le client, 2 cas d'usages classiques seront généralement retenus : soit on utilise le serveur pour router que le traffic du réseau VPN (10.0.0.0/24) soit on veut que le serveur serve de proxy et tout le traffic réseau passera par lui (0.0.0.0/0). ↩︎


Mail RSS : transformer des mails en flux RSS

J'essaye de plus en plus de réduire le volume de mails que je reçois. Du coup, quand une newsletter m'intéresse et que les auteurs ne fournissent pas de flux RSS, cela me donne un prétexte pour écrire un nouveau projet : Mail RSS.

Comment ça marche ?

L'idée est assez simple : en utilisant les alias de mail dans Postfix, on peut faire en sorte qu'un mail qui arrive sur le serveur soit traité par une commande. J'ai décidé de rediriger les mails dans un répertoire précis du serveur et je demande à Mail RSS de les lire et de les importer.

Prenons la newsletter de TechTrash comme exemple.

Configuration du serveur de mail

Il faut ajouter un alias qui va générer des fichiers.

techtrash: "| cat > /var/lib/mailrss/techtrash-$(date +%s) && chmod o+rw /var/lib/mailrss/techtrash-$(date +%s)"

Au préalable, j'ai créé le répertoire /var/lib/mailrss et je me suis assuré que mon application pouvait lire et écrire dedans, de même que Postfix (nobody:nogroup).

Configuration de l'application

On doit générer un mailing pour TechTrash. Quand on va importer les mails de TechTrash, on pourra les associer au mailing via son identifiant (ID). On pourra ensuite accéder au flux RSS via le lien généré à sa création. Évidement, on peut créer autant de mailing que l'on veut, les modifier et les supprimer.

$ php bin/console mailing:new "TechTrash"
$ php bin/console mailing:list
 ------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- --------------------- 
  Label        ID                                     Feed                                                                     Created at            Updated at           
 ------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- --------------------- 
  Tech Trash   xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   https://exemple.fr/mailing/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/rss      2020-11-12 13:37:00   2020-11-12 13:37:00  
 ------------ -------------------------------------- ------------------------------------------------------------------------ --------------------- --------------------- 

Enfin, il faut un script qui va traiter les fichiers de /var/lib/mailrss en les important dans le mailing correspondant et qui les supprime du serveur.

#!/bin/sh

cd "/path/to/exemple.fr"

import_mails() {
    LABEL="$1"
    MAILING_ID="$2"

    find /var/lib/mailrss -name "${LABEL}-*" | while read MAIL; do
        php bin/console mail:import "${MAILING_ID}" -f "$MAIL" && rm "$MAIL"
    done
}

import_mails "techtrash" "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Quand un mail est importé, les données récupérées sont :

  • Le sujet du mail
  • La date du mail
  • Le contenu HTML
  • Le contenu texte
  • Les pièces jointes

Toutes ces données seront accessibles à la consultation.

L'application s'appuie sur Symfony (en version de développement) et le code est totalement libre 😄