6 avril 2009: 22:05: nicolasConfiguration, Recette

We have a Trixbox server at the office, and I have one at my home too. They have been working fine independently of each other for a while, but I figured if they could talk to each other over the internet instead of our VoIP provider, I could save few bucks each year and get a higher geek score.

Well, there’s a good reason I wanted this: I wanted my home extension to not only ring my cell phone, but also my office phone, but the office has a single number and a menu where you have to compose an extension. I haven’t found how to tell Trixbox to compose an extension after dialing a number, so linking both Trixbox server made sense.

I’m going to describe how I did it, because I need to explain this to a co-worker, and there’s generally a lack of good documentation on the internet.

My office has a static IP address, so my home server will be connecting to the office. This should fit most people with dynamic IP addresses at home. I did this from the office and created an SSH tunnel to the web interface of my trixbox home server: ssh -L8080:trixbox:80 me@home.

Open UDP port 4569 in the office firewall

Open UDP port 4569 in the office firewall and map it to your Trixbox server. This will allow anyone on the internet to connect to your Asterisk server with the IAX2 protocol. To increase security, I suggest you limit who can connect to the block of IP addresses of your ISP, or to your IP address it you have a fixed IP address.

Create an extension in the office server

On your office Trixbox web interface, enter Admin mode and go to PBX > PBX Settings, then go in Extensions, click Add Extension and pick Generic IAX2 Extension. Enter your real name in the Display Name, put your home phone number in User Extension, create a password (numeric only?) in the field named secret and click Submit. Apply your changes.

Add a trunk in your home server

On your home Trixbox web interface, enter Admin mode and go to PBX > PBX Settings, then go in Trunks, click Add Trunk and Add IAX2 Trunk.

In the Outbound Caller ID field, enter Your Name . Enter office for the Trunk Name and fill the PEER Details form by specifying your office IP address or host name for the host, the extension number you just created on you office server for the user, and the extension password for the secret.

Name your USER Context something like office-in, and fill the USER Details just like you did with PEER Details, except this one doesn’t need the host. Next, fill the Register String with “extension:password@host_or_ip”, where host_or_ip is the host or IP address of your office. Submit and apply your changes.

Check that the IAX2 connection was made

On your home Trixbox web interface, enter Admin mode and go to PBX > PBX Status, and in the IAX2 Registry section, check that you new trunk is in state Registered. If it is not, I suggest you check the logs of both the office and the home server to figure out what went wrong. This is where you need ninja skills. Leave a comment here if you need help.

Create an inbound route at home

Now, if someone composes your new extension at work, it will reach your home server, but you’ll get a message saying “All circuits are busy” because you haven’t said where to route the call. On you home server, you need to go to PBX > PBX Settings, Inbound Routes and click Add Incoming Route. Enter “office” in Description.

Ideally, you would specify a DID Number, but I’m not yet sure what the office server passes in so I left it blank for now. This means the Inbound route will match all incoming calls. I also have other routes with a DID Number specified and they are still functional, so the catch-all shouldn’t be a problem for you too.

Now choose what you want to do. Most likely, you’ll want to ring an existing extension, or a ring group. Submit and apply your changes. From the office, calling the IAX2 extension should ring your home extension. If it doesn’t, check the logs on both servers and mentally prepare yourself to bang your head on a wall. Fortunately, I didn’t have to.

Create an outbound route at home

Now that you can call your extension at home, you’ll want to be able to call the office from home. For this, you need a new Outbound Route. Go to PBX > PBX Settings, Outbound Routes and click Add Route. A nice name for this would be “office”. As for the Dial Patterns, I have three:

5141234567
5141234567|XXX
7|.

The first line means the route will match that exact number. The second line is mostly useful if I don’t have line three, which is a shortcut for line two: Dialing any number prefixed with “7″ will be sent to your office server with the “7″ stripped.

Next, the Trunk Sequence only needs your Office trunk. Submit and apply your changes. Go home and dial “7″ followed by an extension that exists at your office. If it doesn’t ring, bang your head in the wall. If it doesn’t make it work, bang again. You know how this works. Did I mention to check your asterisk log files?

You’re done!

Well, perhaps not. Anyway, this should have helped getting you pretty close to what you wanted.

I did more: I added “7203#” in the follow-me settings of my home extension. “7″ selects the office trunk, 203 is my office extension, and the pound sing tells Trixbox this is not an extension, but an external call. It means someone calling me at home will also ring my office phone. Since the follow-me also includes my cell phone (”95141234567#”), I’m reachable more than ever.

At the office, my follow-me settings also include my cell phone, and now include the IAX2 extension of my home server. I’m reachable more than ever.

Feel free to share your questions as a comment below, share your experiences, or copy/modify/translate this post to a wiki or else. I’m also reachable through micro-blogging at Identi.ca. There is a real lack of good Trixbox recipes!

19 janvier 2009: 11:33: nicolasConfiguration, Fonctionnalité, Son

J’ai plusieurs sorties audio sur mon ordinateur: une intégrée à la carte mère, deux sur une carte d’extension PCI, et un casque d’écoute branché en USB. Ça fait un petit bout de temps que j’aimerais pouvoir jouer ma musique sur toutes ces sorties en même temps, quitte à mettre au minimum le volume des appareils non-voulus.

Avec Debian, dans Ubuntu, y’a un panneau de préférences pour le son, où je peux indiquer ce qui joue chaque catégorie de son. Je l’utilisais assez souvent pour changer entre haut-parleurs et casque d’écoute pour en mettre le raccourci dans un panneau du bureau. Ça reste insuffisant pour mes besoins.

En installant les programmes de configuration de PulseAudio, j’ai réussi à faire jouer Rhythmbox sur toutes mes sorties, simultanément. J’ai cherché PulseAudio dans l’ajout/suppression de programmes, mais pour ceux qui préféreraient copier-coller, voici l’équivalent en ligne de commande:

sudo apt-get install `apt-cache search PulseAudio|grep ^pa|cut -d ' ' -f1

ou plus explicitement:

sudo apt-get install padevchooser paman paprefs pavucontrol pavumeter

Puis, dans Applications, Son et vidéo, il y a maintenant “PulseAudio Device Chooser” qui ajoute une icône dans la barre de notification du panneau. En cliquant sur “Configure Local Sound Server”, vous verrez un onglet “Simultaneous Output”. Activez cette option. Maintenant, il faut dire à Gnome d’utiliser PulseAudio en allant dans Système, Préférences, Son. Dans la liste de périphériques de sortie, il y a maintenant “Serveur de son PulseAudio”.

Pour une raison que j’ignore, j’ai dû redémarrer mon PC pour que PulseAudio démarre correctement. Pour voir si le serveur PulseAudio est démarré, dans l’applet PulseAudio, cliquez sur Manager. Si vous êtes connecté, c’est qu’il roule!

Pour finir, toujours dans l’applet, choisissez “Simultaneous output” dans “Default Sink”.

Paramètres PulseAudio

27 décembre 2008: 23:16: nicolasJournal

J’annonçais dans mon billet précédent que j’allais passer à la voix sur IP. Une raison de le faire était que ma blonde et moi pourrions avoir chacun notre numéro personnel “universel”. Mon numéro sonnerait à la maison, sur mon cellulaire et au bureau de façon simultanée. Le numéro de ma blonde sonnerait aussi à la maison, puis sur son cellulaire à elle, et à son bureau quand j’aurai trouvé comment passer son extension.

Ça veut dire que nos deux numéros vont sonner à la maison, et je voulais essayer d’avoir deux sonneries distinctes, pour ne pas avoir à me jeter sur le téléphone quand ce n’est pas pour moi. Certains parents font la même chose pour leurs enfants à la maison…

En cherchant un peu, j’ai trouvé qu’il suffisait d’aller dans Inbound Routes dans la configuration PBX de mon Trixbox, et de spécifier Bellcore-r2 dans l’option Alert Info. Ça correspond au Ring2 Name dans la configuration de mon adaptateur Linksys PAP2T, dans l’onglet Regional. Chaque numéro de téléphone aura sa route dans le Trixbox, donc pourra définir sa sonnerie.

La difficulté a été de comprendre la séquence de sonnerie associée. La première, celle par défaut sur mon Linksys PAP2, est définie par 60(2/4). J’ai cherché fort la signification de ces chiffres, sans succès. J’ai donc décidé d’expérimenter en appelant avec mon cellulaire.

Le premier nombre semble être le nombre de répétitions de la séquence entre parenthèses. L’exemple ci-haut sera donc répété 60 fois. Le chiffre suivant définit la durée de la sonnerie, suivi de la durée du silence, toujours en secondes. Les fractions décimales sont permises.

On peut avoir une séquence plus complexe en séparant les sonneries par une virgule. Pour ma sonnerie personnelle, j’ai opté pour 60(1/0.2,0.5/0.2,0.5/2). J’entendrai d’abord une sonnerie d’une seconde, un très court silence, un petit coup, un très court silence, un autre petit coup, puis un silence reposant de deux secondes. Après, le cycle reprend avec un coup d’une seconde, et ainsi de suite.

24 octobre 2008: 9:11: nicolasJournal

Ça fait plus d’un an que je suis envieux de ceux qui se sont installés un serveur Asterisk pour recevoir et faire des appels par VoIP (Voix sur IP). Ça a commencé avec la présentation de Fabian Rodriguez au CRIM, puis Mathieu Lutfy m’a parlé de son installation à la maison. Au début de l’année, un collègue a installé TrixBox pour le bureau, et a acheté des téléphones IP. Cette semaine, mon cousin m’a demandé que je l’aide à faire la même chose à son bureau, alors c’était l’occasion rêvée pour m’équiper moi aussi!

J’ai donc installé TrixBox sur un vieux Celeron 500MHz avec 128Mo de RAM. L’installation est très facile grâce au CD fourni, qui s’installe sur la totalité du disque dur. Un login root en console permet d’obtenir l’adresse IP fournise par mon serveur DHCP, et à partir de là toute la configuration de fait par l’interface web. J’ai pris un compte VoIP à-la-carte chez Unlimitel, ce qui me donne un numéro de téléphone pour 2.50$ par mois, et les appels à 1.1¢ la minute. J’ai configuré une extension qui fait sonner un “softphone” Ekiga et mon cellulaire en simultanné grâce au Follow-Me.

J’ai commandé un adaptateur Linksys PAP2T qui donne deux lignes pour connecter deux téléphones ordinaires (PSTN). Je vais y connecter les téléphones de la maison. Nous utilisons la même chose au travail pour envoyer des Fax. L’installation fut un charme. Une fois l’appareil branché dans le réseau, il suffit de brancher un téléphone dans la prise Ligne 1 et entrer **** (quatre étoiles) suivi de 110# pour connaître l’adresse IP qu’il a obtenu du serveur DHCP.

Ensuite, en utilisant Firefox, j’ai pu entrer le minimum pour que l’appareil s’enregistre auprès du serveur Asterisk: SIP Port=5060, Proxy=(adresse IP du serveur Asterisk), password, User ID & Auth ID (la même chose).

Seul problème: j’ai entré des mauvais paramètre la première fois, et après avoir corrigé ça j’ai dû débrancher et rebrancher l’appareil pour qu’il tente à nouveau l’inscription auprès du serveur.

Avec tout ça, j’espère pouvoir faire quelques économies, mais ce qui promet le plus est la flexibilité que ça m’apportera. Déjà, avec un seul numéro on peut me rejoindre chez moi et sur mon cellulaire, et bientôt s’ajoutera le bureau quand j’aurai réussi à faire communiquer les deux serveurs Asterisk pour que les appels passent par internet. Autre avantage, ma boîte vocale Asterisk peut m’envoyer mes messages vocaux par courriel, en fichier attaché, ce qui simplifie la prise des messages.

J’ai hâte de pouvoir laisser tomber Primus! Mais pour ça, je vais devoir payer une ligne sèche… à suivre!

6 octobre 2008: 14:56: nicolasNon classé

Quelques personnes m’ont demandé comment s’était passé le mapping party, notamment Richard sur la liste talk-ca@openstreetmap. Comme je suis paresseux, voici ce que je lui ai répondu:

I had a great time. We were five people at the meeting point Saturday morning. Two of us were by bicycle (Thibault and myself), one by feet (Daniel), and two were going to use one car (Michel and his wife). I covered about half of the Ahuntsic West zone I had assigned myself.

At about 1:30 PM I stopped at a drive-through with my bicycle (funny!) and ate my lunch in a random park I found. Then I headed back downtown to an other meeting point with Daniel and Thibault. We had two laptops and I first showed how JOSM works, then let both try it by themselves. Here’s a picture Thibault took right before leaving.

The original plan was then to hang out in a bar, but we had other obligations and that’s how it ended. Actually, it is not finished as I have just started entering my survey results into JOSM tonight. We were supposed to continue on Sunday, but nobody was available.

Here’s the traces I’ve uploaded: 207763 and
207777. And here’s the one from Thibault: 204299.

Both of us were by bicycle with a GPS, but I was recording a long audio track and he was taking pictures with a regular camera. Daniel was by foot and had a printed map of downtown Montreal. Unfortunately, the scale was too large and it was difficult for him to read back his notes. I hope he was able to get out most of it.

I took a snapshot of the streets-without-names rendering of the map before the party, and will take an other one when we are finished adding all our data.

18 juillet 2008: 21:35: nicolasÉvénement

Je m’intéresse à OpenStreetMap depuis plus d’un an parce que Google Maps est insuffisant pour des applications qui nécessitent l’accès aux données géographiques. L’an dernier, j’ai invité Alistair Boyle à faire une présentation de OpenStreetMap à Montréal dans le cadre des présentations mensuelles de Facil, un organisme à but non lucratif qui fait la promotion de l’informatique libre.

Cartographie de Montréal
Depuis l’été dernier, une grande partie de Montréal a été dessinée dessinée grâce à Yahoo! Aerial Maps, mais il reste un travail de terrain qui consiste en gros à aller noter le nom des rues. On ne peut pas simplement copier une carte existante, car celles-ci sont protégées par la loi sur le droit d’auteur, ou par une licence d’utilisation plus restrictive que celle d’OpenStreetMap. J’ai donc commencé à cartographier la zone entre ma maison et mon travail.

J’ai d’abord photographié tous les noms de rue que je croisais sur mon chemin. Ça fonctionne bien, mais comme les photos ne sont pas géolocalisées, c’est souvent difficile à démêler une fois devant JOSM, l’éditeur de carte. J’ai donc commencé à enregistrer en audio mes commentaires au fil de mes déplacements, ce qui permet de fournir beaucoup plus d’information, et de commencer le démêlage sur le terrain. Je peux me déplacer pour vérifier des détails, et je n’ai pas à arrêter mon vélo!

Mapping Party
Je réalise que c’est assez facile à faire, et j’ai décidé d’organiser un Mapping Party pour tenter de cartographier la plus grande partie de l’île de Montréal. C’est un type d’événement utilisé couramment par la communauté d’OpenStreetMap pour faire avancer le travail rapidement.

J’ai donc lu le manuel d’instructions et j’ai découpé l’île en 28 zones. Comme le manuel recommandait d’annoncer l’événement au moins deux mois à l’avance, j’ai choisi la fin de semaine des 20 et 21 septembre 2008 pour inviter tous les entousiastes OpenStreetMap de la région à compléter la carte en équipe.

On se rencontrera à la Brûlerie St-Denis le 20 septembre à 10:00 le matin pour faire connaissance, s’entendre sur le travail à accomplir et une stratégie pour y arriver. À la fin de la journée, je propose qu’on se rencontre à nouveau au Bar La Quincaillerie vers 18h00 pour décanter avec une bière. Le lendemain matin, on se rencontrera à nouveau à la Brûlerie St-Denis pour planifier la seconde journée de cartographie.

Ceux qui ont l’intention de participer pourront le faire à pied, à vélo ou en voiture. Je vais fournir des cartes OpenStreetMap imprimées de chacune des zones, de même que des photographies aériennes. J’aurai avec moi un GPS ou deux, mais ça n’est pas nécessaire d’en avoir un. Si vous avez un laptop, ça pourrait être utile pour consulter et modifier la carte OSM de temps à autre, mais avant de l’apporter, pensez que vous aurez à le traîner avec vous toute la journée.

Aucune expérience n’est nécessaire, alors n’hésitez pas à participer!

4 mai 2008: 21:00: nicolasWifi Mesh

Un mois après avoir commencé à travailler au 1030, je suis monté sur le toit par simple curiosité, pour prendre l’air. J’ai alors réalisé que l’édifice est plus haut que les autres, et qu’il serait un emplacement idéal pour en faire un relai pour un réseau wifi. Encore mieux, mes deux collègues habitent à environ 250 mètres du bureau, dans un angle d’environ 90 degrés. J’ai invité les deux à voir d’eux-même, et ils sont emballés à l’idée de penser qu’ils pourraient laisser tomber leur connexion internet à la maison pour passer par celle du bureau. En plus, le projet est cool: faire du wifi par-dessus la ville!

J’ai donc commencé à étudier la situation. J’ai pris des photos pour faire un panorama (deux, en fait) à l’aide du logiciel Hugin, que j’ai trouvé par une simple recherche dans “Ajouter/Supprimer des application” dans Ubuntu. On peut voir très loin: centre-ville, Mont-Royal, et galeries d’Anjou. Tellement loin que je me suis demandé si on pourrait se rendre jusque chez moi, alors j’ai tracé approximativement la visibilité à partir de chez moi, du toit de la maison où il est plus difficile de se rendre: donc pas de panorama pour le moment.

Je ne pense pas que ça passe à cause d’un gros arbre à l’avant de la maison, mais j’ai réalisé que je pourrais peut-être voir l’édifice à condos de mon frère, sur Hutchison près du métro Parc, et qui est lui visible du 1030. Gros bémol toutefois: mon frère va sûrement déménager dans la prochaine année. Il y aurait peut-être aussi mon ancien collègue sur la 19e avenue, un peu plus au sud, qui pourrait peut-être voir le 1030, mais j’ai déjà analysé la possibilité d’un lien entre nous deux sans conclusion positive.

Il reste à faire un panorama à partir du toit de mes deux collègues, à magasiner l’équipement, à demander une autorisation au propriétaire du 1030, et regarder par où pourra passer le câble réseau qui reliera le bureau au toit de l’édifice.

27 avril 2008: 17:31: nicolasConférence, Journal

Facil avait été contacté pour animer deux ateliers sur le logiciel libre au Colloque du Réseau québécois pour la simplicité volontaire, et je m’étais porté volontaire pour animer un atelier la seconde journée du colloque, cet après-midi.

En arrivant, j’avais une table où j’ai pu installer mon ordinateur portatif avec Ubuntu, des CDs d’Ubuntu 8.04, des feuillets d’information sur Facil, et deux documents que Jean-Pierre Lessard m’avait donné au Release Party jeudi (un FAQ sur Linux, et un sur GUL-Québec). J’ai pu expliquer à trois personnes ce que c’était. Tous avaient déjà entendu parler de Linux.

Puis ce fut l’atelier d’une heure avec 5 personnes où j’ai exposé les trois libertés liées à l’utilisation des logiciels, avec des exemples. J’ai ensuite décrit la communauté, les modèles d’affaires, et les standards ouverts, et terminé avec une démonstration de quelques logiciels, ce qui a suscité beaucoup de questions.

Après, je suis retourné à ma table et j’ai eu le temps de parler à 2 ou 3 personnes avant que tout le monde parte à la conférence qui suivait.

J’ai rencontré des gens très intéressés, et je suis disponible pour animer lors d’autres événements.

17 avril 2008: 1:17: nicolasJournal

Troisième jour du deuxième sprint, comportant une semaine. Pourquoi pas quatre, comme font certains? J’ai trouvé que ça correspondait au rythme de l’équipe à laquelle je me suis joins. Les priorités changent souvent, et il aurait été déprimant de constater le nombre de tâches qu’on ajoute et qu’on enlève au backlog de sprint en cours de route. Je pense qu’avec des sprints d’une semaine, on garde bien le focus sur ce qui apporte de la valeur à très court terme. On a ordinairement deux semaines pour livrer une fonctionnalité, à partir de la demande du client. Avec le temps, je verrai si je peux aider à prévoir à plus long terme (un à trois mois).

Temps passé pour des choses qui n’étaient pas dans le backlog:

  • J’ai configuré la Xerox M20i pour imprimer et numériser. Il a suffit de suivre les instructions dans le manuel. Avec Ubuntu, j’ai dû importer le PPD fourni sur le site de Xeros.
  • Hier j’ai upgradé Trac à 0.10.4 et j’ai installé le plugin XML-RPC. Celui-ci permet à Mylyn d’interagir plus intelligemment avec Trac. Je me suis intéressé au plugin XML-RPC parce que j’étais frustré de ne pas pouvoir consulter et modifier les détails d’un ticket. Aujourd’hui j’ai donc commencé à utiliser Mylyn pour voir les tickets du sprint courant. J’ai réalisé que je ne pouvais pas fermer un ticket par la Task List de Mylyn, alors j’ai installé le post-hook subversion pour Trac. La beauté dans ça c’est que le hook me décharge de devoir mettre des liens vers mes changesets dans le ticket parce qu’il le fait pour moi.

J’ai complété un ticket qui impliquait d’insérer le même morceau de SQL dans plusieurs rapports Birt, mais qui n’était pas simple parce que Birt mélange les paramètres SQL après la modification du texte de la requête. Il faut supprimer et ré-ajouter tous les paramères, et il faut les lier un par un aux paramètres du rapport. Peut-être serait-il plus rentable de corriger ce bug dans Birt que de perdre des précieuses minutes chaque fois? Je ne connais pas le code de Birt! Il me semble l’avoir déjà compilé à partir des sources, par contre. Cette connaissance pourrait être utile pour intégrer Birt à notre GUI.

Je pense qu’il faut pimper les rapports un peu. C’est très ordinaire comme présentation visuelle. Mais le plus important, c’est peut-être de comprendre comment les rapports sont utilisés, ou peut-être que je perdrais mon temps?

31 mars 2008: 23:37: nicolasConfiguration, Courriel, Recette

Quand je me suis acheté un laptop et que je l’ai utilisé ailleurs que chez moi, j’ai réalisé que je ne pouvais pas facilement envoyer de courriels, parce qu’il fallait que je change ma configuration de serveur sortant selon le fournisseur d’accès internet où je me trouvais. Ceci, parce qu’Exim refusait de faire le relai de mes courriels si je tentais d’utiliser mon serveur SMTP à la maison, évitant ainsi d’être un “relai ouvert” (open relay).

Récemment, j’ai donné des adresses courriel à des membres de ma famille, et j’ai eu un problème semblable, quoique plus frustrant: le fournisseur d’accès internet refuse de faire le relai quand l’adresse de l’envoyeur n’est pas reconnue. Avec Vidéotron, je ne pouvais pas envoyer un courriel prétendant provenir de marchildon.net, alors qu’un envoyeur@videotron.ca fonctionne.

Ça fait longtemps que je savais ce que je devais faire: activer l’authentification SMTP. Voici donc comment j’y suis parvenu.

Premièrement, j’ai testé une authentification très simple, avec un nom d’usager et un mot de passe fixes. J’ai pu tester sur mon serveur en production car j’étais le seul qui l’utilisait comme serveur sortant pour mon réseau local privé.

Dans /etc/exim4/conf.d/auth/30_exim4-config_examples, j’ai ajouté:

fixed_plain:
  driver = plaintext
  public_name = PLAIN
  server_advertise_condition = *
  server_prompts = :
  server_condition = \
    ${if and {{eq{$2}{username}}{eq{$3}{mysecret}}}}
  server_set_id = $2

Puis j’ai activé cette configuration avec /etc/init.d/exim4 reload, et j’ai voulu tester ça avec une session telnet. J’ai converti l’usager et le mot de passe en base64 pour ensuite passer le résultat à la commande AUTH d’une session SMTP:

vesicule:~# cat bin/encode
#!/usr/bin/perl
use MIME::Base64;
printf ("%s", encode_base64(eval "\"$ARGV[0]\”"));
vesicule:~# bin/encode '\\0username\\0mysecret'
AHVzZXJuYW1lAG15c2VjcmV0
vesicule:~# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.marchildon.net ESMTP Exim 4.50 Mon, 31 Mar 2008 20:59:54 -0400
EHLO marchildon.net
250-mail.marchildon.net Hello localhost [127.0.0.1]
250-SIZE 52428800
250-PIPELINING
250-AUTH PLAIN   <----------- yes!
250 HELP
AUTH PLAIN asdf
535 Incorrect authentication data
AUTH PLAIN AHVzZXJuYW1lAG15c2VjcmV0
235 Authentication succeeded
QUIT
221 mail.marchildon.net closing connection

J’ai vérifié ci-haut qu’en passant n’importe quoi à AUTH (”asdf”), j’obtenais un échec, et qu’en passant le bon usager et mot de passe (la ligne “AUTH PLAIN AHVzZXJuYW1lAG15c2VjcmV0″), j’obtenais un succès.

Ensuite, j’ai voulu faire en sorte que les mots de passe soient les mêmes que pour les connexion POP et IMAP fournies par courier-imap. J’ai donc modifié ma configuration dans 30_exim4-config_examples pour ceci:

plain_courier_authdaemon:
  driver = plaintext
  public_name = PLAIN
  server_advertise_condition = *
  server_prompts = :
  server_condition = ${extract {address} {${readsocket{/var/run/courier/authdaemon/socket} \
      {AUTH ${strlen:exim\nlogin\n$2\n$3\n}\nexim\nlogin\n$2\n$3\n} }} {yes} fail}
  server_set_id = $2

J’ai répété le test avec un session telnet, cette fois-ci avec mon nom d’usager et mon vrai mot de passe (toujours encodé base64).

Satisfait, j’ai voulu mentionner dans les en-têtes du message le nom de l’usager qui a été authentifié. J’ai donc ajouté ceci à main/02_exim4-config_options:

received_header_text = Received: \
  ${if def:sender_rcvhost {from $sender_rcvhost\n\t}\
  {${if def:sender_ident \
  {from ${quote_local_part:$sender_ident} }}\
  ${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}\
  by $primary_hostname \
  ${if def:received_protocol {with $received_protocol}} \
  ${if def:tls_cipher {($tls_cipher)\n\t}}\
  (Exim $version_number)\n\t\
  ${if def:sender_address \
  {(envelope-from <$sender_address>)\n\t}}\
  id $message_id\
  ${if def:received_for {\n\tfor $received_for}}\
  ${if def:authenticated_id {\n\tauthenticated $authenticated_id}}

La ligne importante est ${if def:authenticated_id {\n\tauthenticated $authenticated_id}}.

J’aurais pu terminer ici, mais j’étais conscient que mon mot de passe aurait été transmis pratiquement en clair sur internet. J’ai donc entrepris de configurer TLS, d’abord en générant un certificat auto-signé:

# cd /etc/exim4
# /usr/share/doc/exim4-base/examples/exim-gencert
# ls -l exim.*
-rw-r-----  1 root Debian-exim 721 2008-03-31 22:18 exim.crt
-rw-r-----  1 root Debian-exim 887 2008-03-31 22:18 exim.key
# openssl x509 -noout -text -in /etc/exim4/exim.crt | head -n 14
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            b8:35:2c:e2:2f:8c:95:f7
        Signature Algorithm: md5WithRSAEncryption
        Issuer: C=CA, ST=Qu\xC3\xA9bec, CN=mail.marchildon.net
        Validity
            Not Before: Apr  1 02:21:52 2008 GMT
            Not After : Apr  1 02:21:52 2011 GMT
        Subject: C=CA, ST=Qu\xC3\xA9bec, CN=mail.marchildon.net
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)

Notez que j’ai spécifié mail.marchildon.net parce que je spécifie la même chose dans la configuration du serveur sortant dans Thunderbird. Si je mets autre chose, j’obtiens un avertissement de sécurité de la part de Thunderbird.

Comme dernière configuration pour activer TLS, j’ai créé le fichier /etc/exim4/conf.d/main/00_local:

MAIN_TLS_ENABLE = true

Après un /etc/init.d/exim4 reload, j’ai vérifié que Exim annonce son support de connexions TLS:

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 mail.marchildon.net ESMTP Exim 4.50 Mon, 31 Mar 2008 22:20:20 -0400
EHLO marchildon.net
250-mail.marchildon.net Hello localhost [127.0.0.1]
250-SIZE 52428800
250-PIPELINING
250-STARTTLS   <------------- Yes!
250 HELP
QUIT
221 mail.marchildon.net closing connection

J’ai ensuite forcé Thunderbird à utiliser TLS pour le serveur sortant SMTP, et j’ai testé l’envoi d’un courriel à partir de mon réseau privé. Le log d’Exim montre que la connexion était encryptée (X=TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32) et que j’étais authentifié (A=plain_courier_authdaemon:nicolas):

# tail -n 1 /var/log/exim4/mainlog
2008-03-31 22:22:05 1JgW8T-0005HZ-GQ <= nicolas@marchildon.net H=cortex [192.168.1.50] P=esmtpsa X=TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32 A=plain_courier_authdaemon:nicolas S=870 id=47F1A467.8000509@marchildon.net

J’ai ensuite testé le relai d’un courriel en provenance d’internet avec un tunnel SSH et Thunderbird se connectant au port 2500 de localhost:

# ssh -L2500:marchildon.net:25 nicolas@remote-host.org

Le relai est accepté, comme prévu:

# tail -n 1 /var/log/exim4/mainlog
2008-03-31 22:28:00 1JgWDj-0005Hz-3w <= nicolas@marchildon.net H=nagios.solucorp.qc.ca ([127.0.0.1]) [207.253.4.248] P=esmtpsa X=TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32 A=plain_courier_authdaemon:nicolas S=1545 id=47F1A5A1.6050108@marchildon.net

Enfin, j’ai désactivé TLS et vérifié que le relai est refusé, parce que ma configuration ne permet pas l’authentification sur une connexion non-encryptée:

# tail -n 1 /var/log/exim4/mainlog
2008-03-31 22:31:39 H=nagios.solucorp.qc.ca ([127.0.0.1]) [207.253.4.248] F= rejected RCPT : relay not permitted

Next Page »