Attaque par mail: botnet et zombie

Il y a quelques jours, j’ai subi une attaque par mail assez violente. J’en profite pour la détailler, et y apporter des commentaires. C’est toujours intéressant de connaitre les techniques des méchants, et puis au cas où je l’aurai oublié, le mail c’est mon dada ;-)

Tout d’abord, j’ai reçu en l’espace de 2 minutes près de 400 mails, et à  ce jour, je continue d’en recevoir sporadiquement mais en très faible quantité. Ce n’est pas à  proprement parler du spam, ni du mail-bombing, mais des bounces (des échecs de livraison). Quelqu’un a utilisé mon adresse publique (sendmail arobase pagasa point net) pour envoyer des courriers non sollicités, et je ne fais que recevoir les erreurs.

La première chose que j’ai constaté est que nous ne sommes plus dans le chemin classique d’expédition du spam. Il y a quelques années, le spammeur utilisait traditionnellement un relai ouvert, un serveur SMTP non sécurisé pour envoyer ses millions de mails. Il n’était alors pas bien difficile de fermer le relai et de passer à  autre chose. Cette technique aurait tendance à  diminuer mais au vue du nombre de tests que j’ai quotidiennement sur https://www.pagasa.net/test-smtp/, elle n’a pas encore complètement disparu.

Aujourd’hui, ce sont bien des centaines de machines qui sont utilisées pour spammer. Ces machines forment un botnet, un réseau de PCs compromis par des failles de sécurité et pilotés à  distance via IRC ou par des requêtes HTML (POST par exemple, pour moins éveiller les soupçons).

Dans mon cas, pratiquement toutes les machines que j’ai repérées sont référencées sur les listes noires comme zombie ou proxy ouverts. Si vous avez un doute sur votre propre machine, vous pouvez tester votre adresse IP via mon script Blacklist.

Ce qui est ennuyeux avec cette histoire, c’est qu’il n’y a aucun moyen d’arrêter le spam en cours, et d’un autre côté, on peut difficilement remonter jusqu’au spammeur en lui même: il faut isoler le zombie et l’inspecter méthodiquement; et encore, on a assez peu de chance de retrouver quoique ce soit: un vrai spammeur ne laisse pas beaucoup de pièces à  conviction derrière lui et il n’est pas impossible qu’il chaine ses opérations en faisant piloter un zombie par un autre :-O

Je n’ose pas imaginer le jour où des attaques de grandes envergures seront déclenchées; j’ai d’ailleurs même déjà  l’impression que c’est déjà  commençé. Les botnets sont sans nulle doute la plus grave menace qui pèse sur l’intégrité de l’Internet.

Au cours de mes investigations, j’ai remarqué que le zombie jouait le rôle d’un agent de transfert (MTA): il est capable d’extraire le MX (Mail Exchanger), ce qui lui permet de communiquer directement avec sa destination, sans passer par un serveur SMTP tiers, celui de son FAI, bien entendu :-)

Mais parfois le zombie détecte la présence d’un serveur SMTP déjà  installé en local et l’utilise pour transporter son mail. J’ai pu ainsi repérer quelques Exchanges piratés. Les entêtes que j’ai récupérés prouvent bien une utilisation locale et non un relayage.

En ce qui concerne le spam en lui même, il est destiné à  un public russe et peut se présenter sous deux formes:
– Un message écrit en russe, à  connotation sexuelle, et invitant à  télécharger un Flash sur Imageshack. Un passage à  l’antivirus n’a rien donné pour l’instant. Je suppose qu’il s’agit d’un cheval de Troie, exploitant une faille Flash et permettant ainsi à  la machine d’incorporer le botnet.
– Le spam en lui même: une invitation au séminaire « UNE VOITURE DANS VOTRE ORGANISATION: comptabilité, fiscalité de l’exploitation » donné par un certain Семенихин Ð’.Ð’, le 26 aoà»t 2008. (Merci Google). Aucune URL n’est présente, juste un numéro de téléphone. Curieux, tout de même de spammer pour un séminaire. (Tentative de discrédit par un concurrent ?)

La chose qui est certaine, c’est que l’Internet est devenu très dangereux.




Vous êtes un administrateur débutant ?


Exemple de configuration de Sendmail

Dans cet exemple, nous nous contentons d’une configuration simple, dans laquelle le serveur SMTP reçoit des messages d’Internet et du réseau local (192.168.1.0/24).
Tous les utilisateurs sont autorisés à  envoyer du courrier sur Internet, et le serveur ne gère qu’un seul domaine, mail.dom.com.
Cette architecture correspond à  celle d’une petite entreprise recevant quelques dizaines de messages électroniques par jour.
La figure ci-dessous illustre la configuration de la messagerie.

 

Les adresses électroniques utilisées dans cette organisation correspondent aux comptes des utilisateurs de la machine UNIX mail.dom.com. Ces adresses sont les suivantes :
postmaster@mail.dom.com
jc.charles@mail.dom.com
a.pierre@mail.dom.com

Au vue de l’organisation du système de messagerie, on suppose que la machine dispose d’un serveur POP pour les clients du réseau local 192.168.1.0/24.
Pour une telle configuration, nous avons besoin des fichiers suivants dans /etc/mail :
· sendmail.mc
· sendmail.st, créé grâce à  # touch sendmail.st
· aliases
· access
· local-host-names ou sendmail.cw

Le fichier sendmail.mc sert à  construire le fichier de configuration de Sendmail. Il comporte les éléments suivants :
divert(-1)
dnl
dnl Configuration élémentaire SMTP
dnl
dnl
divert(0)
include(`/usr/share/sendmail-cf/m4/cf.m4′)dnl
VERSIONID(`Sendmail pour mail.dom.com’)dnl
OSTYPE(`linux’)dnl
define(`confMAX_MESSAGE_SIZE’, `5000000′)dnl
define(`STATUS_FILE’, `/etc/mail/sendmail.st’)dnl
define(`confDOMAIN_NAME’, `mail.dom.com’)dnl
define(`ALIAS_FILE’, `/etc/mail/aliases’)dnl
FEATURE(use_cw_file)dnl
FEATURE(`access_db’,`hash -o /etc/mail/access’)dnl
FEATURE(always_add_domain)dnl
FEATURE(local_procmail)dnl
MAILER(smtp)dnl

Note : A partir de la version 8.12, vous devez utiliser la syntaxe suivante pour le dispositif access :
FEATURE(`access_db’,`hash -T -o /etc/mail/access.db’)dnl

A partir du fichier sendmail.mc, vous construisez la configuration de Sendmail comme suit :
# cd /etc/mail
# m4 sendmail.mc >sendmail.cf

L’ordre des instructions M4 a son importance. Terminez toujours par l’instruction MAILER. Le divert(-1) ignore toutes les lignes qui le suivent, tandis que le divert(0) rétablit le flux standard des sorties. L’instruction include inclut les macros utilisatrices M4 nécessaires au fonctionnement élémentaire de Sendmail.VERSIONID définit un texte d’identification, et OSTYPE précise Linux comme système d’exploitation du serveur. La valeur confMAX_MESSAGE_SIZE est mise à  5 millions. Elle définit la taille maximale des messages transitant sur le relais. Cette valeur est exprimée en octets. Il s’agit de la taille globale des messages, en-têtes et enveloppes MIME incluses. N’espérez donc pas transporter une pièce jointe d’une taille de 5 Mo, et coontentez-vous d’un peu plus de 4 Mo pour la capacité maximale d’une pièce jointe.STATUS_FILE précise l’emplacement du fichier des statistiques de courrier. Ce fichier est utilisable via la commande mailstats. La variable confDOMAIN_NAME définit le nom du serveur. Elle n’est normalement utilisée que lorsque la machine ne sait pas résoudre son propre nom d’hôte. Nous ne l’indiquons que par précaution.

ALIAS_FILE indique l’emplacement du fichier des aliases. Comme vous trouverez souvent ce fichier dans /etc/, il est préférable de le mettre dans /etc/mail de façon à  tout regrouper dans le même répertoire. L’instruction use_cw_file précise qu’il faut utiliser le fichier local-host-names pour référencer les nom de domaines locaux.

Le dispositif access_db incorpore les autorisations de relayage à  la configuration de Sendmail. Cette base comprend les machines et réseaux autorisés à  utiliser le serveur SMTP. Il est donc nécessaire de construire une base de données access.db à  partir d.un fichier texte access. Des explications détaillées à  ce sujet sont fournies plus loin dans ce chapitre. L’instruction always_add_domain ajoute le nom du domaine à  une adresse, même si celle-ci est livrée localement. Cela se révèle particulièrement pratique pour le courrier généré directement depuis le serveur. FEATURE(local_procmail) demande l’utilisation de procmail comme agent de livraison local, qui est normalement la configuration par défaut.

MAILER(smtp) indique que vous utilisez le gestionnaire de courrier SMTP. Cette commande doit être la dernière du fichier mc car elle contient des instructions qui remplacent le contenu de certaines des commandes précédentes.

Le fichier aliases sert à  faire la correspondance entre les adresses électroniques et le compte UNIX. Il contient les éléments suivants :
postmaster: root
MAILER-DAEMON: root
postmaster@mail.dom.com: root
jc.charles@mail.dom.com: charles
a.pierre@mail.dom.com: pierre
tous: root,charles,pierre

La base aliases.db est construite grâce à  /usr/sbin/sendmail -bi -v ou la commande newaliases. A partir du moment où un utilisateur dispose d’un compte sur la machine, il dispose d’une adresse électronique de la forme login@fqdn. Par exemple, root@mail.dom.com.

Il est intéressant de créer des aliases, ou synonymes, pour des raisons de clarté ou de simplicité. Les messages système sont toujours redirigés vers le compte superutilisateur root. L’utilisateur charles dispose de deux adresses e-mail, charles@mail.dom.com, correspondant à  sa boà®te aux lettres physique, et son synonyme jc.charles@mail.dom.com, plus précis. L’utilisateur pierre obéit au même schéma.

Finalement, l’alias tous pointe vers tous les comptes utilisateur du serveur. Cela simplifie grandement l’envoi groupé. Un message envoyé à  tous@mail.dom.com est reçu par l’ensemble des utilisateurs du serveur.

Le fichier local-host-names définit le domaine de messagerie local, ici mail.dom.com. L’entrée ci-dessous est insérée dans le fichier local-host-names :
mail.dom.com

Les messages à  destination de ce domaine sont délivrés localement via l’agent de livraison procmail. Pour utiliser ce fichier, il faut disposer de l’instruction FEATURE(use_cw_file) dans le fichier mc.
Si vous souhaitez gérer la totalité du domaine dom.com, il vous suffit d’ajouter l’entrée suivante dans local-host-names :
dom.com

Lorsque vous modifiez ce fichier, vous devez faire relire à  Sendmail sa configuration :

# kill -HUP `head -1 /var/run/sendmail.pid`

Les anciennes versions de Sendmail utilisent à  la place de local-host-names le nom de fichier suivant : sendmail.cw

Pour des raisons de compatibilité, il est parfois utile de conserver ce nom. Il suffit pour cela d’insérer l’instruction suivante dans le fichier mc :
define(`confCW_FILE’,`/etc/mail/sendmail.cw’)dnl

N’oubliez pas de reconstruire le fichier sendmail.cf après modification du fichier mc ni de faire relire à  Sendmail sa configuration.

Le fichier access contient la liste des machines et réseaux autorisés à  utiliser le serveur SMTP comme relais. Les entrées ci-dessous sont insérées dans ce fichier :
127.0.0.1 RELAY
192.168.1 RELAY
localhost RELAY
localhost.localdomain RELAY

Ce fichier permet de construire la base à  accès calculé access.db :
# makemap -v hash access.db <access

Dans le fichier access, vous trouvez la machine locale sous ses trois formes : l’adresse IP, le nom d’hôte et le FQDN (Fully Qualified Domain Name). La plupart du temps, il est recommandé d’autoriser la machine locale à  utiliser le serveur SMTP.

Livre sur Sendmail en francais

Ma première rencontre avec Sendmail remonte alors que je dirigeais le support Internet chez Completel. A l’époque, la seule véritable référence sur Sendmail était le « Bat Book » de Brian Costales, un pavé de plus de 600 pages, certes fort intéressant, mais pas à  la portée du premier venu.

A côté traà®naient deux autres ouvrages dont j’ai oublié le nom mais comme d’habitude, rien en français. C’est sur ce constat que j’ai commencé à  jeter les bases de mon livre ; un logiciel qui transporte plus de la moitié des emails sur Internet se devait d’avoir un minimum de documentation en français.

Il m’a fallu plus d’un an et demie pour y arriver, avec ces hauts et ces bas, ses interminables relectures avec mon éditeur, ces passages que personne ne comprenait, la difficulté à  y inculquer un peu de marketing, etc.

Une partie a été écrite dans le TGV entre Lyon et Paris, alors que je me rendais à  ma réunion mensuelle des responsables techniques dans un des datacenters parisiens. Je ne remercierai jamais assez la SNCF pour cela :-)

Après des mois d’efforts, le livre est sorti en février 2003 à  2000 exemplaires. 3 ans plus tard, il continue de se vendre, certes modestement, mais finalement ce genre d’ouvrage étant réservé à  un public de spécialistes, il ne connaà®tra jamais un succès immense.

à‰crire un livre est une expérience fabuleuse, mais très difficile : il faut être tenace, se plier aux directives d’un éditeur et finalement, cela ne rapporte pas beaucoup d’argent ; mais peu importe, c’est un grand projet dans une vie, une fierté aussi pour ses proches et c’est amusant d’entendre quelqu’un vous dire qu’il vous a trouvé un homonyme sur Internet « qui a écrit un livre sur Sendmail. »

Voici ce fameux livre:

Installation de Sendmail par compilation

Pour installer rapidement Sendmail, vous devez d’abord vous procurez ses sources sur le site FTP de Sendmail : ftp.sendmail.org.
Commencez par établir une connexion anonyme sur ftp.sendmail.org :
ftp ftp.sendmail.org
Connected to ftp.sendmail.org (209.246.26.22).
220 services.sendmail.org FTP server (Version 6.00LS) ready.
Name (ftp.sendmail.org:stm): anonymous
331 Guest login ok, send your email address as password.
Password:
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Les sources de Sendmail se trouvent dans le répertoire /pub/sendmail :
ftp> cd pub/sendmail
250 CWD command successful.
ftp>

Ce répertoire contient toutes les archives de Sendmail :
ls -la
-rw-r–r– 1 ca sendmail 2702118 Jan 18 2004 sendmail.8.12.11.tar.Z
-rw-r–r– 1 ca sendmail 152 Jan 18 2004 sendmail.8.12.11.tar.Z.sig
-rw-r–r– 1 ca sendmail 1899112 Jan 18 2004 sendmail.8.12.11.tar.gz
-rw-r–r– 1 ca sendmail 152 Jan 18 2004 sendmail.8.12.11.tar.gz.sig
-rw-r–r– 1 ca sendmail 2839169 Mar 22 15:59 sendmail.8.13.6.tar.Z
-rw-r–r– 1 ca sendmail 152 Mar 22 15:59 sendmail.8.13.6.tar.Z.sig
-rw-r–r– 1 ca sendmail 1986576 Mar 22 15:59 sendmail.8.13.6.tar.gz
-rw-r–r– 1 ca sendmail 152 Mar 22 15:59 sendmail.8.13.6.tar.gz.sig
-rw-r–r– 1 ca sendmail 2897025 Jun 5 23:06 sendmail.8.13.7.tar.Z
-rw-r–r– 1 ca sendmail 152 Jun 14 03:12 sendmail.8.13.7.tar.Z.sig
-rw-r–r– 1 ca sendmail 2010008 Jun 5 22:53 sendmail.8.13.7.tar.gz
-rw-r–r– 1 ca sendmail 152 Jun 14 03:12 sendmail.8.13.7.tar.gz.sig

Récupérez la version qui vous intéresse. Ici, nous utiliserons la version 8.13.7 :
ftp> bin i
200 Type set to I.
ftp> get sendmail.8.11.6.tar.gz
local: sendmail.8.11.6.tar.gz remote: sendmail.8.13.7.tar.gz
227 Entering Passive Mode (209,246,26,22,193,71)
150 Opening BINARY mode data connection for ‘sendmail.8.13.7.tar.gz’ (2010008 bytes).
226 Transfer complete.
2010008 bytes received in 7.17 secs (1.9e+02 Kbytes/sec)

Une fois l’archive récupérée, vous pouvez quitter la session FTP :
ftp> quit
221 Goodbye.

Décompressez l’archive :
# tar xvfz sendmail.8.11.6.tar.gz
sendmail-8.13.7/
sendmail-8.13.7/Makefile
sendmail-8.13.7Build
sendmail-8.13.7/FAQ
sendmail-8.13.7/INSTALL
sendmail-8.13.7/KNOWNBUGS
sendmail-8.13.7/LICENSE
sendmail-8.13.7/PGPKEYS
sendmail-8.13.7/README
sendmail-8.13.7/RELEASE_NOTES
sendmail-8.13.7/devtools/
……………………….

Allez dans le répertoire de Sendmail :
# cd sendmail-8.13.7/

La compilation de Sendmail se fait au moyen de l’instruction « sh Build ». Prenez garde à  ne pas lancer la commande classique de compilation make, et faites attention au « B » majuscule de Build :
# sh Build
Making all in:
/tmp/sendmail-8.13.7/libsmutil
Configuration: pfx=, os=Linux, rel=2.4.9-34, rbase=2, rroot=2.4, arch=i586, sfx=, variant=optimized
Using M4=/usr/bin/m4
Creating ../obj.Linux.2.4.9-34.i586/libsmutil using ../devtools/OS/Linux
Making dependencies in ../obj.Linux.2.4.9-34.i586/libsmutil
make[1]: Entre dans le répertoire `/tmp/sendmail-8.13.7/obj.Linux.2.4.9-34.i586/libsmutil’
cc -M -I. -I../../sendmail -I../../include -DNOT_SENDMAIL debug.c errstring.c lockfile.c safefile.c snprintf.c strl.c >> Makefile
make[1]: Quitte le répertoire `/tmp/sendmail-8.13.7/obj.Linux.2.4.9-34.i586/libsmutil’
Making in ../obj.Linux.2.4.9-34.i586/libsmutil
make[1]: Entre dans le répertoire `/tmp/sendmail-8.13.7/obj.Linux.2.4.9-34.i586/libsmutil’
cc -O -I. -I../../sendmail -I../../include -DNOT_SENDMAIL -c -o debug.o debug.c

Si vous obtenez des erreurs sur le répertoire libsmdb, cela signifie soit que vous n’avez pas installé les bibliothèques DB de Berkeley, soit qu’elles existent bien mais que le processus de compilation n’arrive pas à  les localiser. Dans ce cas, utilisez la commande de compilation suivante :
# sh Build -c -I/usr/local/BerkeleyDB.3.1/include -L/usr/local/BerkeleyDB.3.1/lib

Remarque:
Les chemins et numéros de version peuvent varier d’un environnement à  un autre.
Installez maintenant Sendmail au moyen de l’instruction « sh Build install » :
# sh Build install
Making all in:
/tmp/sendmail-8.13.7/libsmutil
Configuration: pfx=, os=Linux, rel=2.4.18-3, rbase=2, rroot=2.4, arch=i686, sfx=, variant=optimized
Making in ../obj.Linux.2.4.18-3.i686/libsmutil
make[1]: Entre dans le répertoire `/tmp/sendmail-8.13.7/obj.Linux.2.4.18-3.i686/libsmutil’
cc -O -I. -I../../sendmail -I../../include -DNOT_SENDMAIL -c -o debug.o debug.c

Les programmes sont installés. Il vous reste à  construire une configuration minimale qui vous permettra de faire fonctionner Sendmail. Cette configuration se place dans le répertoire /etc/mail :
# mkdir /etc/mail

Des fichiers de configuration préconstruits sont fournis avec l’archive de Sendmail. Ils sont placés dans le répertoire /cf/cf. Prenez, par exemple, le fichier generic-linux.cf, puis placez-le dans le répertoire /etc/mail, et renommez-le sendmail.cf de façon qu’il soit interprété par Sendmail :
# cd cf/cf
# cp generic-linux.cf /etc/mail/
# cd /etc/mail
# mv generic-linux.cf sendmail.cf

Toujours dans le répertoire /etc/mail, créez un fichier aliases élémentaire :
mailer-daemon: postmaster
posmaster : root

Indexez ce fichier de la façon suivante :
# /usr/sbin/sendmail -bi -v

Créez la file d’attente dans laquelle seront déposés tous les messages de Sendmail :
# mkdir /var/spool/mqueue

Démarrez Sendmail comme suit :
# /usr/sbin/sendmail -bd -q15m

Sendmail est désormais prêt à  fonctionner, avec un minimum de fonctionnalités.

Installation d’un Sendmail chrooté

Les étapes qui suivent détaillent l’installation d’un Sendmail chrooté.
Récupérez l’archive de Sendmail (ici la version 8.13.7), et placez-la, par exemple, dans /usr/src.
Décompactez l’archive par :
# gzip -dc sendmail.8.13.7.tar.gz | tar xvf –
# cd sendmail-8.13.7

Installez Sendmail de façon conventionnelle :
# sh Build
# sh Build install

Une fois Sendmail installé, lancez la création du sous-environnement :
# mkdir /sendmail

Sendmail va tourner dans le sous-environnement que vous allez créer dans le répertoire /sendmail, et aucun autre répertoire ne sera visible à  l’extérieur de ce dernier.
Il vous faut maintenant fournir les éléments vitaux au logiciel (bibliothèques, répertoires, fichiers, etc.). Vous devez pour cela créer des fichiers physiques, car les liens symboliques sont proscrits car ils ne peuvent sortir du répertoire prison /sendmail :
# cd /sendmail
# mkdir usr
# mkdir usr/sbin

Sendmail est enfermé dans sa prison, avec des droits restreints :
# cp /usr/sbin/sendmail /sendmail/usr/sbin
# chown 0:0 /sendmail/usr/sbin/sendmail
# chmod 500 /sendmail/usr/sbin/sendmail

Des applications, telles que les serveurs Web, utilisent divers raccourcis pour accéder à  Sendmail. Vous devez donc créer ces raccourcis :
# mkdir /sendmail/lib # cd /sendmail/lib
# ln -s ../sbin/sendmail sendmail
# mkdir /sendmail/bin
# cd /sendmail/bin
# ln -s ../sbin/sendmail sendmail

Fournissez maintenant à  Sendmail les programmes annexes dont il a besoin, en commençant par extraire les bibliothèques dynamiques qu’il utilise :
# ldd /sendmail/usr/sbin/sendmail
libdb.so.3 => /lib/libdb.so.3 (0x40016000)
libresolv.so.2 => /lib/libresolv.so.2 (0x4004f000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4005d000)
libnsl.so.1 => /lib/libnsl.so.1 (0x40060000)
libdl.so.2 => /lib/libdl.so.2 (0x40075000)
libc.so.6 => /lib/libc.so.6 (0x40078000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Le résultat peut varier suivant les options de compilation et les versions des noyaux :
# cd /sendmail/lib
# cp /lib/libdb.so.3 .
# cp /lib/libresolv.so.2 .
# cp /lib/libcrypt.so.1 .
# cp /lib/libnsl.so.1 .
# cp /lib/libdl.so.2 .
# cp /lib/libc.so.6 .
# cp /lib/ld-linux.so.2 .

Créez la file d’attente :
# mkdir /sendmail/var
# mkdir /sendmail/var/spool
# mkdir /sendmail/var/spool/mqueue
# chmod 700 /sendmail/var/spool/mqueue

Créez le répertoire /var/run pour que Sendmail y place son numéro de processus (sendmail.pid) :
# mkdir /sendmail/var/run

# touch /sendmail/var/run/sendmail.pid

Ajoutez l’unité /dev/null, dont Sendmail a besoin en interne :
# mkdir /sendmail/dev
# mknod /sendmail/dev/null c 1 3
# chown 0:0 /sendmail/dev/null
# chmod 666 /sendmail/dev/null

La définition du noeud (c 1 3) n’est valable que sous Linux.
Pour écrire ses historiques, Sendmail communique avec syslog via un socket. Vous devez donc créer ce dernière dans l’environnement chroot :
# /usr/sbin/syslogd -m 0 -p /sendmail/dev/log

L’emplacement de syslogd peut différer d’un système à  un autre. Prenez garde à  n’avoir qu’une seule instance de syslogd dans le système.

A ce stade, vous devez régler le délicat problème de la résolution de noms. Sendmail ne peut fonctionner correctement sans cette résolution. Cette configuration s’effectue dans le répertoire /etc :
# mkdir /sendmail/etc

Créez le fichier d’aiguillage des services (etc/nsswitch.conf) de façon à  renseigner l’emplacement des fichiers, indispensables à  la résolution de noms. Le contenu du fichier /sendmail/etc/nsswitch.conf est le suivant :
services: files

La ligne services renseigne le fichier etc/services, lequel contient la corrélation entre un numéro de port TCP ou UDP et le nom usuel du service.
Pour utiliser ce dispositif, vous devez pouvoir accéder à  la bibliothèque libnss_files-2.2.2.so :
# cd /sendmail/lib
# cp /lib/libnss_files-2.2.2.so .

Cette bibliothèque est généralement appelée via un autre nom, libnss_files.so.2 :
# ln -s libnss_files-2.2.2.so libnss_files.so.2

Voici la bibliothèque nécessaire à  la résolution de noms (DNS) :
# cp /lib/libnss_dns.so.2 .
/
et le fichier /sendmail/etc/services :
smtp 25/tcp mail

Puisque le chroot concerne uniquement SMTP, seule cette ligne est nécessaire.
Voici enfin le fichier du client DNS etc/resolv.conf :
nameserver 127.0.0.1

Nous supposons ici que vous disposez d’un serveur DNS local (127.0.0.1). Il est recommandé de mettre celui de votre FAI, car cela simplifie grandement la configuration de votre serveur.
Pour le répertoire /etc/mail contenant les données de configuration, vous disposez d.une alternative :
· Placer les bases de données et le fichier de configuration dans /sendmail/etc/mail par le biais d’un petit script exécuté à  chaque modification du paramétrage. De cette façon, vous isolez et sécurisez les fichiers source (alias, access, etc.) et le fichier mc dans l’environnement primaire.
· Créer un lien de /etc/mail vers /sendmail/etc/mail, exposant ainsi les fichiers source dans l’environnement chroot.
Choisissez ici la seconde possibilité, la plus commode :
# mkdir /sendmail/etc/mail
# ln -s /sendmail/etc/mail /etc/mail

Voici le fichier d’état de Sendmail, sendmail.st :
# touch /etc/mail/sendmail.st

et un très simple fichier mc :
include(`/usr/lib/sendmail-cf/m4/cf.m4′)
VERSIONID(`Sendmail chrooté ‘)dnl
OSTYPE(`linux’)dnl
define(`confMAX_MESSAGE_SIZE’, `5000000′)dnl
define(`STATUS_FILE’, `/etc/mail/sendmail.st’)dnl
define(`confDOMAIN_NAME’, `monserveur.com’)dnl
define(`ALIAS_FILE’, `/etc/mail/aliases’)dnl
define(`SMART_HOST’,`smtp.monfai.com’)dnl
define(`confLOG_LEVEL’,`14′)dnl
define(`confSEPARATE_PROC’,`true’)dnl
FEATURE(`access_db’,`hash -o /etc/mail/access’)dnl
FEATURE(always_add_domain)dnl
MAILER(smtp)dnl

qui vous permet de construire votre sendmail.cf :
# m4 sendmail.mc >sendmail.cf

Le niveau d’enregistrement des événements a été fixé à  14 (define(`confLOG_LEVEL’,`14′)). Cette valeur est particulièrement élevée afin de repérer les éventuelles erreurs. Dans cette configuration, tout le courrier est expédié vers le serveur de votre FAI, smtp.fai.com.
Voici le fichier /etc/mail/aliases :
MAILER-DAEMON: postmaster
postmaster: root
bin: root
daemon: root
nobody: root
system: root
root: monemail@monadresse.com

que vous créez de la façon suivante :
# chroot /sendmail /usr/sbin/sendmail -bi -v

Le root est en fait un alias vers une autre adresse e-mail. Sur le serveur chrooté, vous n’acceptez, par commodité, aucune livraison de courrier (voir plus haut).
Voici le fichier /etc/mail/access correspondant, qui contrôle les adresses autorisées à  utiliser le relais :
127.0.0.1 RELAY
10 RELAY
localhost RELAY
localhost.localdomain RELAY

que vous créez de la manière suivante :
# makemap -v hash access.db <access

Seule la machine locale et le réseau IP 10.0.0.0 sont autorisés à  utiliser le relais SMTP.
Démarrez Sendmail :
# chroot /sendmail /usr/sbin/sendmail -bd -q15m

Le serveur doit maintenant fonctionner correctement.
L’utilitaire strace est recommandé pour la mise au point d’un Sendmail chrooté. Il permet notamment de déterminer les fichiers et bibliothèques manquants.
Désormais, vous disposez d’un Sendmail parfaitement sécurisé, enfermé dans une prison logique.