Sendmail
Sommaire |
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.
- 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