
Installation d’un serveur Ubuntu #2
Je suis en train de re installer un serveur à la maison pour pouvoir migré en douceur ma vieillissante machine sous Debian 5.
J’ai choisi une Ubuntu 9.10 édition serveur. Ce billet va traité la partie messagerie du serveur.
Il fait suite à : Installation d’un serveur Ubuntu #1 ou je traitais des services Web.
État des lieux.
- Le serveur héberge les boites mails de plusieurs domaines.
- Il y’a des alias / redirection.
- Dspam joue le rôle d’antispam.
- Postgrey se charge de faire du Greylisting.
- Les boites mails sont toutes dans : /var/spool/vmail/domaine.tld/mailbox
- Les services POP et IMAP sont gérés par Dovecot.
- Il n’y a pas de SSL disponible, ce serveur de messagerie est on ne peut plus simpliste !
Préparation de la base de données
Le but de cette étape est de préparer la base de données qui va servir à gérer notre messagerie. Il y’a 3 tables :
- domain
- mailbox
- alias
CREATE TABLE IF NOT EXISTS `alias` ( `source` varchar(255) NOT NULL DEFAULT '', `destination` text NOT NULL, `actif` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`source`) ) CREATE TABLE IF NOT EXISTS `domain` ( `domain` varchar(255) NOT NULL DEFAULT '', `actif` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`domain`) ) CREATE TABLE IF NOT EXISTS `mailbox` ( `email` varchar(255) NOT NULL DEFAULT '', `password` varchar(255) NOT NULL DEFAULT '', `quota` int(10) NOT NULL DEFAULT '0', `actif` tinyint(1) NOT NULL DEFAULT '1', `imap` tinyint(1) NOT NULL DEFAULT '1', `pop3` tinyint(1) NOT NULL DEFAULT '1', PRIMARY KEY (`email`) )
Installation de Postfix
sudo apt-get install postfix postfix-mysql
L’utilisateur vmail et le groupe vmail seront utilisé pour les droits sur les répertoires des boites mails, on leur donne comme UID et GID 5000.
sudo useradd -d /var/spool/vmail -u 5000 vmail sudo groupadd -g 5000 vmail sudo usermod -g vmail vmail
Une fois l’installation de Postfix faite on va commencer à le configurer :
Le répertoire de configuration est /etc/postfix, il y’a deux fichiers qui sont master.cf et main.cf. Il y’a aussi les fichiers de configuration mysql.
# mysql-virtual_domains.cf hosts = 127.0.0.1 user = postfix password = pass dbname = postfix select_field = 'virtual' table = domain where_field = domain additional_conditions = AND actif=1 # mysql-virtual_mailboxes.cf hosts = 127.0.0.1 user = postfix password = pass dbname = postfix select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') table = mailbox where_field = email additional_conditions = AND actif=1 # mysql-virtual_aliases.cf hosts = 127.0.0.1 user = postfix password = pass dbname = postfix select_field = destination table = alias where_field = source additional_conditions = AND actif=1 # mysql-virtual_aliases_mailbox.cf hosts = 127.0.0.1 user = postfix password = pass dbname = postfix select_field = email table = mailbox where_field = email additional_conditions = AND actif=1
Laissons le fichier master.cf dans sa version par défaut nous feront des modifications au moment de l’installation de l’antispam.
# /etc/postfix/main.cf smtpd_banner = $myhostname ESMTP (Debian/GNU) biff = no disable_vrfy_command = yes smtpd_helo_required = yes mydomain = domaine.tld append_dot_mydomain = yes myhostname = domaine.tld mydestination = localhost, localhost.localdomain # Mettez ici le relais smtp de votre FAI relayhost = smtp.free.fr mynetworks = 127.0.0.0/8 192.168.0.0/24 inet_interfaces = all smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_unverified_sender smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient, smtpd_client_restrictions = permit_mynetworks virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_mailbox.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domains.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_mailboxes.cf virtual_mailbox_base = /var/spool/vmail/ virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
On redémarre postfix et c’est partie !
sudo /etc/init.d/postfix restart
Postgrey
Parce que Postfix c’est bien mais avec Postgrey c’est mieux !
Postgrey est un serveur de Greylisting, késako le Greylisting ? Et bien simplement le Greylisting bloque tous les mails entrants au moins une fois. En général un serveur de mail réémet son message si il reçoit une erreur compréhensible lors de la première émission, par contre un robot spammeur ne réémet que très rarement. Le Greylisting permet donc de supprimer naturellement beaucoup de SPAM !
sudo apt-get install postgrey
# /etc/default/postgrey POSTGREY_OPTS="--inet=60000" # /etc/postfix/main.cf smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, reject_unknown_recipient_domain, reject_non_fqdn_recipient, check_policy_service inet:127.0.0.1:60000
sudo /etc/init.d/postfix restart && sudo /etc/init.d/postgrey restart
Maintenant les mails sont « greylistés«
Antispam
Nous allons utiliser Spamassassin pour analyser les courriels et les tagger si il s’agit de SPAM.
sudo apt-get install spamassassin
La configuration de Postfix pour utiliser Spamassassin se fait dans le fichier /etc/postfix/master.cf
# remplacer la ligne smtp inet n - - - - smtpd # par la ligne smtp inet n - - - - smtpd -o content_filter=spamassassin # a la fin du fichier spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
Puis on redémarre Postfix
sudo /etc/init.d/postfix restart
On test maintenant !
Envoyer vous un mail avec dans le corps du message cette chaine de caractère :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Avec cette chaine le mail sera automatiquement détecté comme SPAM, cela permet de vérifier que Spamassassin fonctionne correctement.