Configurer FreeBSD pour uucpssh.org

Obtenir un serveur mail sans serveur

Voici comment configurer un serveur postfix ou sendmail pour qu’il fonctionnne avec uucpssh.org. Ainsi on peut avoir son propre domaine pour les emails sans forcément avoir un serveur connecté à Internet en permanence.

Pourquoi?

Actualité:
-  Le gouvernement américain exige des informations sur certaines requètes à Microsoft, AOL et Google.
-  Le gouvernement chinois exige des moteurs de recherche (MSN search et Google) qu’ils filtrent certains mots clés.

Dans ce contexte, et sans même être un terroriste, j’ai décidé d’abandonner mes comptes mails chez eux. Deux solutions s’offrent à moi:
-  Utiliser un compte chez mon fai (ce qui revient au même finalement)
-  Monter mon propre serveur Mail

Evidement j’ai fait le deuxième choix. Mais plutôt que d’administrer un serveur mail (vu le travail que cela représente), j’ai décider de me reposer sur l’initiative uucpssh.org de Fabien Penso (que je remercie très fort au passage).

En résumé voici la situation:
-  je veux avoir mon propre domaine mail rien qu’à moi.
-  ma machine n’est connecté que par intermitance au net via des réseaux peu sûrs.
-  je souhaite envoyer et recupérer mon courrier normallement (via /var/spool/mail) et sans me soucier de savoir si je suis connecté.

uucpssh.org c’est quoi?

Le site l’explique mieux que moi :-) Il s’agit d’un serveur SMTP qui entrepose le courrier qui vous est destiné, et d’un serveur UUCP (connexion encapsulée dans une session SSH) pour le récupérer. La situation classique est représentée à la figure 1 (ci-dessous) et ce que propose uucpssh.org est représenté figure 2.

Le protocol uucp est un vieux protocol. Certains le qualifie de "tout terrain". C’est à dire qu’il supporte très bien les mauvaises (dé-)connections, pour preuve il est fait pour fonctionner par dessus du SLIP ou PPP sur une ligne modem... dans les années 70!

Configurer uucp: Unix to Unix Copy

Heureusement ssh est installé par défaut. Pour installer uucp, faites:


% cd /usr/port/net/freebsd-uucp
% make install clean

Le protocol uucp n’utilise pas les noms de réseau ip. C’est normal car ce protocol sert à copier des données entre deux unix (par dessus du ppp par exemple). Il utilise donc ses propres références, on appellera main.uucpssh.org simplement uucpssh.

Les fichiers de configuration d’uucp sont:
-  /usr/local/etc/uucp/sys configuration générale
-  /usr/local/etc/uucp/port comment se connecter à uucpssh
-  /usr/local/etc/uucp/call pour les mots de passe

On note:
-  login_uucpssh le login que vous avez enregistré sur uucpssh.org
-  pwd_uucpssh son mot de passe

Voici /usr/local/etc/uucp/sys:


system uucpssh
myname login_uucpssh
time any
address main.uucpssh.org
port ssh
protocol t
remote-send /var/spool/uucp
remote-receive /var/spool/uucp
chat ""
alias server-ssh
call-login *
call-password *

Voici /usr/local/etc/uucp/port:


port ssh
type pipe
command /usr/bin/ssh -C -x -o batchmode=yes uucp@main.uucpssh.org

Voici /usr/local/etc/uucp/call:


uucpssh login_uucpssh pwd_uucpssh

Nous allons modifier les droits de l’utilisateur uucp avec la commande:


% cd /var/spool/ && chmod go-w uucp
% cd /usr/local/etc/uucp && chown root:uucp * && chmod 550 *
% vipw

il faut modifier la ligne qui concerne l’utilisateur uucp:


uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico

pour la modifier en:

uucp:*:66:66:UUCP pseudo-user:/var/spool/uucp:/usr/local/libexec/uucp/uucico

Enfin, il faut générer une clé et l’envoyer au site uucpssh.org (partie administration):


% su -m uucp
$ export HOME=/var/spool/uucp
$ cd /var/spool/uucp
$ ssh-keygen -t dsa

Envoyez le ficher id_dsa.pub à la page: personal information forme. Enfin, il ne reste plus qu’à chercher nos mails toutes les 10 min sur le site main.uucpssh.org, créez le fichier /var/cron/tabs/uucp:


*/10 * * * * /usr/local/libexec/uucp/uucico -f -suucpssh

Configuration du serveur mail

Il faut choisir entre postfix et sendmail. Voici comment configurer ces serveurs.

Configurer Sendmail

Sendmail est le serveur mail de FreeBSD par défault il est généralement déja installé, mais s’il vous fait défaut faites:


% pkg_add -r sendmail
% echo ’sendmail_enable="YES"’ >> /etc/rc.conf

La configuration de sendmail est décrite par le fichier /etc/mail/sendmail.cf . Il ne vaut mieux pas éditer directement ce ficher à la main. Sendmail utilise un méchanisme de macro m4 pour générer ce fichier de configuration. Pour configurer sendmail on utilise un autre fichier (*.mc) qui sera interpréter pour produire le fichier sendmail.cf . Vous pouvez trouvez des exemples de fichiers mc dans /usr/contrib/sendmail/cf/cf ou /usr/port/mail/sendmail/work/sendmail-8.13.4/cf/cf/. Vous pouvez vous inspirer de mon fichier "mc" qui est en lien (en bas de page). Attention, dans ce cas de mon fichier je me suis placé dans le répertoire /usr/port/mail/sendmail/wordk/sendmai-x.xx/cf/cf/. Aussi il vous faudra définir votre domainte MX (domaine mail) dans ce fichier. Maintenant executez:


% cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.backup
% m4 votre_fichier.mc > /etc/mail/sendmail.cf
% /etc/rc.d/sendmail restart

Configurer Postfix

Postfix est réputé plus sûr et plus simple à administrer que sendmail.Si vous préférez Postfix (et vous avez surement raison), il faut l’installer avec l’option TSL:


% cd /usr/port/mail/postfix
% make install clean

Comme sendmail est le MTA par défaut de FreeBSD, il faut ajouter les lignes suivantes au fichier /etc/rc.conf pour le désactiver :


sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Enfin, pour lancer postfix au démarrage j’utilise:


% ln -s /usr/local/sbin/postfix /usr/local/etc/postfix.sh

Vous pouvez consulter ce documents qui explique comment changer de MTA. Voici postfix installé, il ne manque plus qu’à être configurer.

Voici la liste des fichiers à modifier:
-  /usr/local/etc/postfix/main.cf (configuration globale)
-  /usr/local/etc/postfix/transport (tout ce qui concerne uucp)
-  /usr/local/etc/postfix/virtual (ce qui concerne le domaine hébergé)
-  /usr/local/etc/postfix/canonical (transforme les adresses locale en adresses hébergé) Après toute modification de ces fichiers (sauf main.cf) il faut executer la commande postmap. Donc voici un script qui reconfigure le tout; à lancer après modification des fichiers configuration de postfix.


#! /bin/sh
postmap virtual
postmap aliases
postmap transport
postmap mynetworks
postmap relay_domains
postmap access
postmap canonical
newaliases
postfix reload

Note sur l’architecture et les noms employés:
-  localhost.localdomain est le nom de la machine sur son réseau local
-  remote.domain.net est votre nom de domaine sur internet, vous pouvez en obtenir un gratuitement sur xname.org par exemple.

Voici mon fichier /usr/local/etc/posfix/main.cf:


myhostname = localhost.localdomain
myorigin = $mydomain
mydestination = $myhostname localhost.$mydomain localhost
$mydomain mynetworks = 127.0.0.0/8 192.168.5.0/24
relay_domains =
# Optionel: transfert le courrier extérieur au pare-feu
#relayhost = [pare-feu.exemple.com]

alias_maps = hash:$config_directory/aliases
canonical_maps = hash:$config_directory/canonical

virtual_alias_domains = remote.domain.net
virtual_alias_maps = hash:$config_directory/virtual

command_directory = /usr/local/sbin
daemon_directory = /usr/local/libexec/postfix

Voici mon fichier /usr/local/etc/posfix/canonical:


@localhost.localdomain @remote.domain.net

Voici mon fichier /usr/local/etc/posfix/transport:


# Domaines délivré sur cette machine
remote.domain.net : # le domaine
.remote.domain.net : # ses sous domaines aussi
# Domainnes expédiés
* uucp:[uucpssh] # Tous les autres via uucpssh

Voici mon fichier /usr/local/etc/posfix/virtual:


abuse@remote.domain.net root
postmaster@remote.domain.net root
root@remote.domain.net root
user1@remote.domain.net user1
user2@remote.domain.net user2

Tester votre configuration

Enfin nous pouvons tester. Je crois qu’il est inutile de vous dire que surement cela ne va pas marché (je vous dis ça par expérience). Ok, c’est l’informatique... L’essentiel c’est que vous trouviez ici des éléments de réponses. D’autres sont sités en référence. En attendant, on peut tester la connexion avec uucpssh avec l’utilisateur uucp:


% su -m uucp
$ ssh -v uucp@main.uucpssh.org
... sinon essayer de récupperer manuellement les mails avec:
$ su -m uucp
$ /usr/local/libexec/uucp/uucico -f -suucpssh
... sinon on peut diagnostiquer avec:
$ tail -f /var/log/maillog
... et chercher et tuer les communications mortes:
$ uustat -s uucpssh
$ uustat -k

N’hésitez pas à me donner vos réactions (ludo***freebots.strangled.net, replacez les *** par une arobase). Bon courage!!!

Documents de réference

uucpssh et Linux:
-  uucpssh.org
-  http://linuxfocus.org/Francais/March2004/article330.shtml
-  http://linuxfr.org/2001/04/08/3065.html
uucpssh et FreeBSD:
-  http://www.onlamp.com/pub/a/bsd/2005/03/10/uucpmail.html?page=1
Postfix:
-  postfix.org
-  http://x.guimard.free.fr/postfix/
UUCP:
-  http://www.linux-france.org/article/connex/UUCP/denis-uucp/

sendmail config file:


hacker emblem Creative Commons License