Sendmail

De Wiki de Nelly & Richard
Sauter à la navigation Sauter à la recherche

Sendmail : serveur de messagerie

par richard Un serveur de messagerie simple intégrant un domaine ouvert sur internet ainsi qu'un domaine restreint à votre intranet.

Installation de sendmail

Sendmail est disponible en tant que RPM sur la plupart des distributions linux il est donc accessible via la commande :

# apt-get install sendmail

ou pour quelques cas :

# yum install sendmail

Fichiers de configurations

Les fichiers de configurations de sendmail se trouvent essentiellement dans /etc/mail/, je vais vous les décrire ci-après. Ces fichiers sont des tables d'une base de données pour la plupart (fichier access et access.db, ...) nous verrons ceci plus en détail par la suite ; nous devons donc intervenir sur les fichiers non compilés (access pour notre ex).

  • /etc/mail/sendmail.mc : fichier de configuration principale de sendmail

Pour y avoir accès il vous sera peut-être necessire de faire :

# yum install sendmail-cf

Ici les commentaires sont mis en valeur par dnl #, FEATURE correspond aux macros et define les fonctions. Ne cherchez pas à tout décortiqué la plupart des fonctions déclare l'utilisation des différentes bases de données de sendmail.

************************sendmail.mc**************************************

divert(-1)dnl
#-----------------------------------------------------------------------------
# $Sendmail: debproto.mc,v 8.13.8 2006-12-08 20:21:10 cowboy Exp $
#
# Copyright (c) 1998-2005 Richard Nelson.  All Rights Reserved.
#
# cf/debian/sendmail.mc.  Generated from sendmail.mc.in by configure.
#
# sendmail.mc prototype config file for building Sendmail 8.13.8
#
# Note: the .in file supports 8.7.6 - 9.0.0, but the generated
#      file is customized to the version noted above.
#
# This file is used to configure Sendmail for use with Debian systems.
#
# If you modify this file, you will have to regenerate /etc/mail/sendmail.cf
# by running this file through the m4 preprocessor via one of the following:
#      * `sendmailconfig` 
#      * `make`
#      * `m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf`
# The first two options are preferred as they will also update other files
# that depend upon the contents of this file.
#
# The best documentation for this .mc file is:
# /usr/share/doc/sendmail-doc/cf.README.gz
#
#-----------------------------------------------------------------------------
divert(0)dnl
#
#   Copyright (c) 1998-2005 Richard Nelson.  All Rights Reserved.
#
#  This file is used to configure Sendmail for use with Debian systems.
#
define(`_USE_ETC_MAIL_')dnl
include(`/usr/share/sendmail/cf/m4/cf.m4')dnl
VERSIONID(`serveur mail')
OSTYPE(`debian-mta')dnl
DOMAIN(`linux-mta')dnl
dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE
dnl undefine(`confHOST_STATUS_DIRECTORY')dnl        #DAEMON_HOSTSTATS=
dnl # Items controlled by /etc/mail/sendmail.conf - DO NOT TOUCH HERE
dnl #
dnl # General defines
dnl #
dnl # SAFE_FILE_ENV: [undefined] If set, sendmail will do a chroot()
dnl #  into this directory before writing files.
dnl #  If *all* your user accounts are under /home then use that
dnl #  instead - it will prevent any writes outside of /home !
dnl #   define(`confSAFE_FILE_ENV',             `')dnl
dnl #
dnl # Daemon options - restrict to servicing LOCALHOST ONLY !!!
dnl # Remove `, Addr=' clauses to receive from any interface
dnl # If you want to support IPv6, switch the commented/uncommentd lines
FEATURE(`no_default_msa')dnl
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet,  Name=MSP-v4, Port=submission, Addr=127.0.0.1')dnl
dnl #
dnl # Be somewhat anal in what we allow
define(`confPRIVACY_FLAGS',dnl
`needmailhelo,needexpnhelo,needvrfyhelo,restrictqrun,restrictexpand,nobodyreturn,authwarnings')dnl
dnl #
dnl # Define connection throttling and window length
define(`confCONNECTION_RATE_THROTTLE', `15')dnl
define(`confCONNECTION_RATE_WINDOW_SIZE',`10m')dnl
dnl #
dnl # Features
dnl #
dnl # The access db is the basis for most of sendmail's checking
dnl # FEATURE(`access_db', , `skip')dnl
FEATURE(`access_db',`hash -T<TMPF> -o /etc/mail/access.db')dnl
dnl #
dnl # The greet_pause feature stops some automail bots - but check the
dnl # provided access db for details on excluding localhosts...
FEATURE(`greet_pause', `1000')dnl 1 seconds
dnl #
dnl # Delay_checks allows sender<->recipient checking
FEATURE(`delay_checks', `friend', `n')dnl
dnl #
dnl # If we get too many bad recipients, slow things down...
define(`confBAD_RCPT_THROTTLE',`3')dnl
dnl #
dnl # Stop connections that overflow our concurrent and time connection rates
FEATURE(`conncontrol', `nodelay', `terminate')dnl
FEATURE(`ratecontrol', `nodelay', `terminate')dnl
dnl #
dnl # If you're on a dialup link, you should enable this - so sendmail
dnl # will not bring up the link (it will queue mail for later)
dnl define(`confCON_EXPENSIVE',`True')dnl
dnl #
dnl # Dialup/LAN connection overrides
dnl #
include(`/etc/mail/m4/dialup.m4')dnl
include(`/etc/mail/m4/provider.m4')dnl

dnl # definition concernant spamassassin
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

dnl # pour rentrer dans la legislation concernant les spams cf->site mail-abuse
FEATURE(`blacklist_recipients')dnl
FEATURE(dnsbl, `blackholes.mail-abuse.org', `Rejected - see http://www.mail-abuse.org/rbl/')dnl

dnl # definition de la base d'alias
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl

dnl # votre serveur de messagerie
define(`confDOMAIN_NAME', `serveur.mail')dnl

dnl # taille max des messages
define(`UUCP_MAILER_MAX', `2000000')dnl

dnl # ici nous utilisons le très bon anti-virus libre ClamAV-milter pour sendmail (qui existe également pour qmail, ...)
INPUT_MAIL_FILTER(`clamilt',`S=local:/var/run/clamav-milter/clamav.sock',F=,T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS',`clamilt')dnl

dnl # utilisation du serveur smtp du fai
define(`SMART_HOST', `smtp.free.fr')

dnl # virtusertable
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl

dnl # reecriture des en-tetes
define(`confTO_QUEUEWARN',`1m')
dnl #define(`confRECEIVED_HEADER',`id $i; $b')
define(`confRECEIVED_HEADER', `from domain.com
        by domain.com ($v/$Z)$?r with $r$. id $i$?u
        for $u; $|;
        $.$b')

dnl # Masquerading options
FEATURE(redirect)dnl
FEATURE(`always_add_domain')dnl
dnl # votre domaine local intra.com
LOCAL_DOMAIN(`intra.com')dnl
FEATURE(`allmasquerade')dnl
FEATURE(`masquerade_envelope')dnl

dnl #
dnl # Default Mailer setup
MAILER_DEFINITIONS
MAILER(`local')dnl
MAILER(`smtp')dnl
MAILER(procmail)dnl


Il est necessaire de compilé sendmail.mc > sendmail.cf (auparavant il était beaucoup plus complexe de configurer sendmail) en utilisant la librairie m4

# m4 sendmail.mc > sendmail.cf
dans le répertoire /etc/mail ou où vous souhaitez, vous pouvez également le renommer.
  • /etc/mail/access : spam et autorisations

Ce fichier permet de classer les adresses mail, les domaines, adresses IP que vous considérez comme spam ou autorisés, la syntaxe est la suivante :

# /etc/mail/access
# spam et autorisations

domaine              RELAY
nom.prenom@fai.com   DISCARD
000.000.000.000      REJECT
domaine              ERROR:5.7.1:550 Relais interdis aux spammers

Explanation : il s'agit d'un exemple, vous pouvez interchanger les différents mots clefs (RELAY, DISCARD, REJECT, ERROR, OK).

    • RELAY: accepte le message pour le relais
    • OK: accepte le message
    • REJECT: rejette le message et envois un message
    • DISCARD: bloque le message
    • ERROR: retourne un message d'erreur en fonction de vos paramètres

Access n'est pas le seul moyen de lutter contre le spam (cf->SpamAssassin) mais fait partie de sendmail sa mis à jour peut-être effectué par WebMin également.

Voici la ligne de commande pour compilé le fichier access
# makemap hash /etc/mail/access.db < /etc/mail/access
  • /etc/aliases : listes des alias ( redirections des utilisateurs internes

) Ici il s'agit de livrer par exemple les mails de bambi@domaine.com vers panpan@domaine.com : panpan recevra les mails de bambi, ceci n'a qu'une incidence sur l'utilisateur et pas le domaine. Cela peut-être utile afin que bambi recoive les mails de root, webmaster, ...

le fichier aliases doit être mis à jour mais ne necessite pas la recompilation de sendmail.mc :
# newaliases
le fichier aliases
#
#  Aliases in this file will NOT be expanded in the header from
#  Mail, but WILL be visible over networks or from /bin/mail.
#
#	>>>>>>>>>>	The program "newaliases" must be run after
#	>> NOTE >>	this file is updated for any changes to
#	>>>>>>>>>>	show through to sendmail.
#

# Basic system aliases -- these MUST be present.
mailer-daemon:	postmaster
postmaster:	root

# General redirections for pseudo accounts.
bin:		root
daemon:		root
adm:		root
lp:		root
sync:		root
shutdown:	root
halt:		root
mail:		root
news:		root
uucp:		root
operator:	root
games:		root
gopher:		root
ftp:		root
nobody:		root
radiusd:	root
nut:		root
dbus:		root
vcsa:		root
canna:		root
wnn:		root
rpm:		root
nscd:		root
pcap:		root
apache:		root
webalizer:	root
dovecot:	root
fax:		root
quagga:		root
radvd:		root
pvm:		root
amanda:		root
privoxy:	root
ident:		root
named:		root
xfs:		root
gdm:		root
mailnull:	root
postgres:	root
sshd:		root
smmsp:		root
postfix:	root
netdump:	root
ldap:		root
squid:		root
ntp:		root
mysql:		root
desktop:	root
rpcuser:	root
rpc:		root
nfsnobody:	root

ingres:		root
system:		root
toor:		root
manager:	root
dumper:		root
abuse:		root

newsadm:	news
newsadmin:	news
usenet:		news
ftpadm:		ftp
ftpadmin:	ftp
ftp-adm:	ftp
ftp-admin:	ftp
www:		webmaster
webmaster:	root
noc:		root
security:	root
hostmaster:	root
info:		postmaster
marketing:	postmaster
sales:		postmaster
support:	postmaster


# trap decode to catch security attacks
decode:		root

# Person who should get root's mail
#root:		marc

# exemple bambi panpan
panpan         bambi 

  • /etc/mail/genericstable : réecriture des adresses mail

Ici c'est le domaine qui nous interesse si vous hebergez 2 domaines dom1.com et dom2.com vos utilisateurs étant sur le même serveur il faut l'indiquer dans cette base de données elle necessite la recompilation de sendmail (m4)

# fichier /etc/mail/genericstable

# le domaine
user1      user1@dom1.com
user2      user2@dom2.com

# mais aussi de renommer l'adresse mail
user3      user3.nom@dom1.com
Compilation
makemap hash /etc/mail/genericstable.db < /etc/mail/genericstable

  • local-host-names : domaines hébergés pour une redirections (virtusertable) ou une distribution aliases, ...

Mettez simplement les domaines que vous souhaitez relayer

# fichier /etc/mail/local-host-names
dom1.com
dom2.com

  • mailertable : protocole et nom des domaines à afficher pour tous les mails envoyés

Renommage du domaine local en domaine public (déjà configuré dans sendmail.mc

* esmtp [domaine.public]

  • virtusertable : redirections externe du courrier
# exemple rediriction vers un domaine hebergé par un fai (attention aux mesures anti-spam de votre fai)
@domaine-hebergé-virtuellement.com	login@fai.com

# exemple de redirection vers un utilisateurs
info@dom1.com      user1
info@dom2.com      user1
# les mails à destination de info@dom1.com et info@dom2.com seront livrés à user1
Compilation
makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

STARTTLS authentification

  • L'utilisation de STARTTLS permet d'avoir une certitude sur la nature du ou des clients utilisant votre relais.

Un tuto plus complet

  • ajouter à votre fichier mc après avoir généré les certificats SSL
define(`confAUTH_OPTIONS', `A p')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')dnl
define(`confCACERT_PATH', `CERT_DIR')dnl
define(`confCACERT', `CERT_DIR/cacert.pem')dnl
define(`confSERVER_CERT', `CERT_DIR/cert.pem')dnl
define(`confSERVER_KEY', `CERT_DIR/key.pem')dnl
define(`confCLIENT_CERT', `CERT_DIR/cert.pem')dnl
define(`confCLIENT_KEY', `CERT_DIR/key.pem')dnl
  • puis dans le fichier access
# Incoming: verified cert and >= 112 bit encryption
TLS_Clt:               ENCR:112
# Outgoing: verified cert and >= 112 bit encryption
TLS_Srv:               ENCR:112
  • puis dans le fichier /usr/lib/saslauthd/Sendmail.conf
pwcheck_method:saslauthd
  • enfin un redémarrage de sendmail et de sasl est nécessaire
# /etc/init.d/sasalauthd restart ; /etc/init.d/sendmail restart
  • un petit test
$ telnet localhost 25
ehlo localhost
220 localhost.localdomain ESMTP Postfix (Debian/GNU)
ehlo localhost
250-localhost.localdomain
250-PIPELINING
250-SIZE 51200000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
  • Afin d'utiliser cette solution avec squirrelmail, il vous faut utiliser la version en développement (squirrelmail à ce jour la 1.5.1) et utiliser la méthode plain dans le menu de configuration (2 puis B puis 7)

Copyleft

Copyleft © Richard DUMAIS