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.
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é.
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!
Heureusement ssh est installé par défaut. Pour installer uucp, faites:
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.
% cd /usr/port/net/freebsd-uucp
% make install clean
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:
Voici /usr/local/etc/uucp/port:
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/call:
port ssh
type pipe
command /usr/bin/ssh -C -x -o batchmode=yes uucp@main.uucpssh.org
uucpssh login_uucpssh pwd_uucpssh
Nous allons modifier les droits de l’utilisateur uucp avec la commande:
il faut modifier la ligne qui concerne l’utilisateur uucp:
% cd /var/spool/ && chmod go-w uucp
% cd /usr/local/etc/uucp && chown root:uucp * && chmod 550 *
% vipw
pour la modifier en:
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
Enfin, il faut générer une clé et l’envoyer au site uucpssh.org (partie administration):uucp:*:66:66:UUCP pseudo-user:/var/spool/uucp:/usr/local/libexec/uucp/uucico
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:
% su -m uucp
$ export HOME=/var/spool/uucp
$ cd /var/spool/uucp
$ ssh-keygen -t dsa
*/10 * * * * /usr/local/libexec/uucp/uucico -f -suucpssh
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:
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:
% pkg_add -r sendmail
% echo ’sendmail_enable="YES"’ >> /etc/rc.conf
% 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:
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 :
% cd /usr/port/mail/postfix
% make install clean
Enfin, pour lancer postfix au démarrage j’utilise:
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
Vous pouvez consulter ce documents qui explique comment changer de MTA. Voici postfix installé, il ne manque plus qu’à être configurer.
% ln -s /usr/local/sbin/postfix /usr/local/etc/postfix.sh
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
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!!!
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/