Serveur de mail : postfix, dovecot, dspam, clamav (Serveur Web sur Debian Lenny)
Par Nyro, mardi 24 mars 2009 à 16:48 :: Serveur :: #246 :: rss
Cette partie sera la plus grande car la plus complexe. Et on ne se facilite pas la tâche puisque le serveur de mail incluras un antispam avec vérifications des éventuels virus contenu dans les emails. L'antispam pourra aussi apprendre de ses erreurs lorsque l'utilisateur final déplacera simplement ses emails dans les dossiers IMAP.
Bref, commençons par supprimer l'éventuel Exim 4 qui serait présent sur le serveur :
Puis libdspam7-drv-mysql (le driver de stockage des informations de DSpam sur MySQL) vous demandera s'il faut créer la base de données. Répondez simplement oui. Le mot de passe MySQL root est demandé ensuite. Enfin, un mot de passe pour cette base de donnée est demandé. Laissez simplement le champ vide pour qu'il en choisisse un pour vous.
Commençons par créer les tables contenant les informations des emails et alias des sites web avec le fichier de création. Ces tables sont naturellement dans la même base de donnée que powerdns, puisqu'un email devra forcément être rattaché à un nom de domaine géré par le serveur DNS.
/etc/postfix/mysql/email2email.cf est utilisé pour connaître les adresse email existantes :
Enfin, il faut paramétrer postfix pour réagir sur différents ports dans le fichier /etc/postfix/master.cf :
Supprimer la ligne commençant par smtp et remplacer là par :
Remplacer la ligne commençant par ltmp par
Enfin ajouter :
Tous nos emails vont être crée par un même utilisateur serveur, nommé vmail. Il faut donc le créer :
Elle permet de définir qui a le droit d'envoyer des emails. Paramètre très important pour que son serveur ne soit pas utilisable comme open relay et utilisé par les spammeurs...
On autorise les envoies du réseau (donc le serveur lui même), vers les adresses locales existantes (indispensable pour que les FAI puissent vous envoyer des emails par exemple), avec une connexion authentifié (donc les utilisateurs de votre serveur qui ont une adresse email sur votre serveur), et on rejette le reste.
Un petit peu d'autorisations sur ces fichiers est nécessaire pour vmail :
Comme indiqué en haut de page, les utilsateurs vont pouvoir entrainé DSpam par de simples déplacement de mails en IMAP. Dovecot ne permet pas de mettre en place ceci directement, mais ce plugin le permet. Télécharger le à cette adresse et envoyer le sur votre serveur (vous avez un serveur FTP maintenant, non ?) et placer le dans /usr/src. Puis dégzippage :
Puis on paramètre ce plugin :
Et on peut passer à la configuration de dovecot dans /etc/dovecot/dovecot.conf :
Dans la partie plugin, nous allons paramètrer le plugin précédemment compilé :
Il faut créer le fichier de log :
Il faut d'abord créer son dossier et donner les droits nécessaires dans le pool de postfix :
Dans /etc/dspam/dspam.d/mysql.conf :
Il ne reste plus qu'à configurer l'antivirus, ClamAv. très rapidement, on édite /etc/clamav/clamd.conf
Retour au sommaire.
Bref, commençons par supprimer l'éventuel Exim 4 qui serait présent sur le serveur :
apt-get remove exim4 exim4-base exim4-config exim4-daemon-lightPuis on installe tous les paquets d'un coup :
apt-get install mysql-server postfix postfix-mysql dovecot-imapd dovecot-pop3d dspam dspam-doc libdspam7-drv-mysql bzip2 clamav-daemon makeDurant l'installation, Postfix demande le type de configuration, qui sera naturellement "Sites Internet". Puis le nom du serveur ; entrez simplement le nom de domaine principal de votre serveur comme domain.tld.
Puis libdspam7-drv-mysql (le driver de stockage des informations de DSpam sur MySQL) vous demandera s'il faut créer la base de données. Répondez simplement oui. Le mot de passe MySQL root est demandé ensuite. Enfin, un mot de passe pour cette base de donnée est demandé. Laissez simplement le champ vide pour qu'il en choisisse un pour vous.
Commençons par créer les tables contenant les informations des emails et alias des sites web avec le fichier de création. Ces tables sont naturellement dans la même base de donnée que powerdns, puisqu'un email devra forcément être rattaché à un nom de domaine géré par le serveur DNS.
mysql -h localhost -u root --password=MySQL serverconf < /PATH/TO/postfix.sqlPostfix a besoin de savoir comment s'adresser à MySQL pour vérifier les mots de passe ou trouver les alias. Ces fichiers seront créé dans /etc/postfix/mysql :
mkdir /etc/postfix/mysqlPuis on créé les fichiers :
/etc/postfix/mysql/email2email.cf est utilisé pour connaître les adresse email existantes :
hosts = 127.0.0.1/etc/postfix/mysql/virtual-alias-maps.cf est utilisé pour connaître les alias (les redirection d'emails) :
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT CONCAT(user.user, '@', domain.name) AS email FROM domain,user WHERE user.domain_id=domain.id AND CONCAT(user.user, '@', domain.name)='%s'
hosts = 127.0.0.1/etc/postfix/mysql/virtual-mailbox-domains.cf est utilisé pour connaître les domaines gérés :
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT destination FROM alias, domain WHERE alias.domain_id=domain.id AND CONCAT(alias.source, '@', domain.name)='%s'
hosts = 127.0.0.1Enfin /etc/postfix/mysql/virtual-mailbox-maps.cf est utilisé pour vérifier si une adresse email est bien géré par le serveur :
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT 1 FROM domain WHERE name='%s'
hosts = 127.0.0.1
dbname = serverconf
user = serverconfuser
password = serverconfpass
query = SELECT 1 FROM user,domain WHERE user.domain_id=domain.id AND CONCAT(user.user, '@', domain.name)='%s'
Enfin, il faut paramétrer postfix pour réagir sur différents ports dans le fichier /etc/postfix/master.cf :
Supprimer la ligne commençant par smtp et remplacer là par :
smtp inet n - - - - smtpd -o content_filter=lmtp:unix:/var/spool/postfix/var/run/dspam.sockAfin que les courriers arrivant par smtp ou smtps soit filtrer par l'antispam.
smtps inet n - - - - smtpd -o content_filter=lmtp:unix:/var/spool/postfix/var/run/dspam.sock
Remplacer la ligne commençant par ltmp par
lmtp unix - - n - - lmtpPour qu'il ne soit pas chrooté.
Enfin ajouter :
127.0.0.1:10026 inet n - - - - smtpdLe port 10026 est ici ouvert uniquement en local pour permettre à DSpam de renvoyer les emails non vérolés. Enfin la ligne avec dovecot permet d'utiliser ce dernier pour remettre l'email à l'utilisateur.
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o smtpd_authorized_xforward_hosts=127.0.0.0/8
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
Tous nos emails vont être crée par un même utilisateur serveur, nommé vmail. Il faut donc le créer :
groupadd -g 5000 vmailPassons à la configuration de postfix :
useradd -g vmail -u 5000 vmail -d /home/var/vmail -m
rm -rf /home/var/vmail/* /home/var/vmail/.*
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql/virtual-mailbox-domains.cfAvec smtpd_use_tls, seules les connexions sécurisés seront autorisé pour smtp. La dernière ligne est sans doute la plus important et la plus difficile à comprendre.
postconf -e virtual_uid_maps=static:5000
postconf -e virtual_gid_maps=static:5000
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql/virtual-mailbox-maps.cf
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql/virtual-alias-maps.cf,mysql:/etc/postfix/mysql/email2email.cf
postconf -e virtual_transport=dovecot
postconf -e dovecot_destination_recipient_limit=1
postconf -e smtpd_sasl_type=dovecot
postconf -e smtpd_sasl_path=private/auth
postconf -e smtpd_sasl_auth_enable=yes
postconf -e smtpd_use_tls=yes
postconf -e mydestination=localhost
postconf -e smtpd_tls_auth_only=yes
postconf -e maximal_queue_lifetime=3d
postconf -e smtpd_recipient_restrictions=permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject_unauth_destination
Elle permet de définir qui a le droit d'envoyer des emails. Paramètre très important pour que son serveur ne soit pas utilisable comme open relay et utilisé par les spammeurs...
On autorise les envoies du réseau (donc le serveur lui même), vers les adresses locales existantes (indispensable pour que les FAI puissent vous envoyer des emails par exemple), avec une connexion authentifié (donc les utilisateurs de votre serveur qui ont une adresse email sur votre serveur), et on rejette le reste.
Un petit peu d'autorisations sur ces fichiers est nécessaire pour vmail :
chgrp postfix /etc/postfix/mysql/*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql/*.cf
Comme indiqué en haut de page, les utilsateurs vont pouvoir entrainé DSpam par de simples déplacement de mails en IMAP. Dovecot ne permet pas de mettre en place ceci directement, mais ce plugin le permet. Télécharger le à cette adresse et envoyer le sur votre serveur (vous avez un serveur FTP maintenant, non ?) et placer le dans /usr/src. Puis dégzippage :
cd /usr/srcPour pouvoir compiler, ce plugin a besoin des sources de dovecot :
gzip -d dovecot-antispam-HEAD.tar.gz
tar xvf dovecot-antispam-HEAD.tar
cd dovecot-antispam
apt-get source dovecot
tar xfv dovecot_1.0.15.orig.tar.gz
Puis on paramètre ce plugin :
cp defconfig .configEt on édite .config
BACKEND=dspam-execLe backend spécifie de quelle façon le plugin va réapprendre à DSpam les emails déplacés. Après quelques tests, l'appel direct à DSpam s'est avéré le plus efficace. On peut donc compiler :
DOVECOT=./dovecot-1.0.15
make installLe fichier /usr/lib/dovecot/modules/imap/lib90_antispam_plugin.so devrait être créé.
Et on peut passer à la configuration de dovecot dans /etc/dovecot/dovecot.conf :
protocols = imap imaps pop3 pop3s managesieveDans la partie protocol imap :
mail_location = maildir:/home/var/vmail/%d/%n/Maildir:INBOX=/home/var/vmail/%d/%n/Maildir/:INDEX=/home/var/vmail/%d/%n/Maildir/tmp/index
mail_plugins = antispamDans la partie protocol pop3 :
imap_client_workarounds = outlook-idle delay-newmail
pop3_client_workarounds = outlook-no-nulsDans la partie protocol lda :
postmaster_address = postmaster@domain.tldDans la partie auth default :
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = cmusieve
log_path = /home/var/log/dovecot-deliver.log
global_script_path = /home/var/vmail/globalsieverc
mechanisms = plain login
# Commenter la partie passdb pam
# Décommenter la partie passdb sql avec comme paramètres :
args = /etc/dovecot/dovecot-sql.conf
Dans la partie userdb static :
args = uid=5000 gid=5000 home=/home/var/vmail/%d/%n allow_all_users=yes
Dans la partie socket listen :
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = vmail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
Dans la partie plugin, nous allons paramètrer le plugin précédemment compilé :
##################################
# Antispam plugin
# mail signature (used with any backend requiring a signature)
antispam_signature = X-DSPAM-Signature
# semicolon-separated list of Trash folders (default unset i.e. none)
# antispam_trash =
antispam_trash = trash;Trash;Deleted Items;&AMk-l&AOk-ments supprim&AOk-s
# semicolon-separated list of spam folders
antispam_spam = Spam;spam;Junk;junk;Courrier ind&AOk-sirable
# semicolon-separated list of unsure folders (default unset i.e. none)
# antispam_unsure =
# Whether to allow APPENDing to SPAM folders or not. Must be set toLe protocole managesieve permettra à l'utilsateur de créer des filtres côtés serveur, pour par exemple pour créer une réponse automatique.
# "yes" (case insensitive) to be activated. Before activating, please
# read the discussion below.
# antispam_allow_append_to_spam = no
antispam_dspam_binary = /usr/bin/dspam
antispam_dspam_args = --user;root;--source=error
Il faut créer le fichier de log :
touch /home/var/log/dovecot-deliver.logEt comme ce fichier de log va grossir, nous devons paramétrer la rotation de ce fichier de log an ajoutant le fichier /etc/logrotate.d/dovecot :
chmod 777 /home/var/log/dovecot-deliver.log
/var/log/dovecot*log {
weekly
missingok
rotate 4
compress
delaycompress
notifempty
create 777 root adm
}
Donner les droits à vmail sur la config de dovecot :chown vmail:vmail /etc/dovecot/dovecot.confEnfin, il faut paramétrer dovecot pour se connecter à MySQL et vérifier les mot de passes dans /etc/dovecot/dovecot-sql.conf :
chmod g+r /etc/dovecot/dovecot.conf
driver = mysqlComme le serveur utilise des protocoles sécurisés, nous devons créés des certificats :
connect = host=127.0.0.1 dbname=serverconf user=serverconfuser password=serverconfpass
default_pass_scheme = PLAIN-MD5
password_query = SELECT CONCAT(user.user, '@', domain.name) AS user,user.password FROM user,domain WHERE user.domain_id=domain.id AND CONCAT(user.user, '@', domain.name)='%u'
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem -keyout /etc/ssl/private/dovecot.pemEt de donner les droits nécessaires :
# Country Name (2 letter code) [AU]: FR
# State or Province Name (full name) [Some-State]: France
# Locality Name (eg, city) []: Besancon
# Organization Name (eg, company) [Internet Widgits Pty Ltd]: Company Name
# Organizational Unit Name (eg, section) []: .
# Common Name (eg, YOUR name) []: domain.tld
# Email Address []: certs@domain.tld
openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem
chmod o= /etc/ssl/private/dovecot.pemPour enfin les utilisé dans postfix :
chmod o= /etc/ssl/private/postfix.pem
postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pemS'en est terminé avec postfix et dovecot, passons à l'antispam :
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem
Il faut d'abord créer son dossier et donner les droits nécessaires dans le pool de postfix :
mkdir -p /var/spool/postfix/var/run/Et le paramétrer dans /etc/dspam/dspam.conf :
chown dspam:dspam /var/spool/postfix/var/run/
StorageDriver /usr/lib/dspam/libmysql_drv.soLorsque des spams seront détectés, ils seront directement envoyer dans le dossier Spam de l'utilsataeur. Si un virus est détecté, on rejette l'email.
#TrustedDeliveryAgent "/usr/lib/dovecot/deliver -d %u"
DeliveryHost 127.0.0.1
DeliveryPort 10026
DeliveryIdent localhost
DeliveryProto SMTP
QuarantineAgent "/usr/lib/dovecot/deliver -d %u -m Spam"
Trust vmail
SupressWebStats on
Preference "spamAction=quarantine"
Preference "signatureLocation=headers" # 'message' or 'headers'
#Preference "showFactors=on"
Opt out
TrackSources spam virus
ClamAVPort 3310
ClamAVHost 127.0.0.1
ClamAVResponse reject
ServerPID /var/run/dspam/dspam.pid
ServerMode auto
ServerPass.Relay1 "secret"
ServerParameters "--deliver=innocent -d %u"
ServerIdent "localhost.localdomain"
ServerDomainSocketPath "/var/spool/postfix/var/run/dspam.sock"
ClientHost /var/spool/postfix/var/run/dspam.sock
ClientIdent "secret@Relay1"
Dans /etc/dspam/dspam.d/mysql.conf :
MySQLUIDInSignature on
chown -R dspam:dspam /etc/dspam/*Dans /etc/default/dspam :
echo "dspam:shared:*" > /var/spool/dspam/group
Start=yesEnfin, nous devons autorisé DSpam à délivrer les messages directement via deliver de dovecot. Mais il doit avoir le bon userid lorsqu'il exécute ce programme. C'est pourquoi nous utilisons et setuid sur ce dernier :
chmod +s /usr/lib/dovecot/deliverIl faudra réiterer cette commande à chaque mise à jour de dovecot.
Il ne reste plus qu'à configurer l'antivirus, ClamAv. très rapidement, on édite /etc/clamav/clamd.conf
#Comment localSocket and AddEnfin, on redémarre tous les services paramétrés :
TCPAddr 127.0.0.1
TCPSocket 3310
/etc/init.d/clamav-daemon force-reloadNotre serveur de mail complet est maintenant terminé. Ouf, c'était le plus gros point de notre serveur. Il est d'ailleurs maintenant tout à fait opérationnel, mais on va encore y ajouter quelques éléments pour la sécurité et le monitoring.
/etc/init.d/dspam force-reload
/etc/init.d/dovecot force-reload
/etc/init.d/postfix force-reload
Retour au sommaire.
Commentaires
1. Le lundi 6 avril 2009 à 19:45, par dnizard
2. Le lundi 6 avril 2009 à 19:50, par Nyro
3. Le lundi 6 avril 2009 à 19:56, par dnizard
4. Le lundi 6 avril 2009 à 23:23, par dnizard
5. Le mardi 7 avril 2009 à 12:17, par Shadow aok
6. Le mercredi 27 mai 2009 à 09:15, par Danystyle
7. Le samedi 22 août 2009 à 09:04, par upssys
8. Le samedi 22 août 2009 à 10:21, par Nyro
9. Le lundi 31 août 2009 à 09:24, par Fab
10. Le mardi 1 septembre 2009 à 11:39, par Fab
Ajouter un commentaire