326 lines
9.8 KiB
Markdown
326 lines
9.8 KiB
Markdown
# Installation Serveur Mail
|
|
|
|
## Installation de Postfix
|
|
```console
|
|
root@serveur:~# apt-get install postfix-mysql
|
|
```
|
|
### Verification du contenu de master.cf
|
|
|
|
```console
|
|
root@serveur:~# vim /etc/postfix/master.cf
|
|
```
|
|
|
|
Dans le fichier (master.cf) il faut verifier que la premiere ligne ne contienne que un seul "n". La ligne doit ressembler a ceci:
|
|
```console
|
|
smtp inet n - - - - smtpd
|
|
```
|
|
|
|
### Creation de la base de donnees MySQL
|
|
* On cree une base de donnees **postfix**, on ajoute un utilisateur postfix en passant par les privileges. Bien noter le mot de passe generer.
|
|
* On cree les trois tables avec le code suivant:
|
|
~~~~sql
|
|
USE postfix;
|
|
|
|
CREATE TABLE `domaines` (
|
|
`domaine` varchar(255) NOT NULL default '',
|
|
`etat` tinyint(1) NOT NULL default '1',
|
|
PRIMARY KEY (`domaine`)
|
|
) ENGINE=MyISAM;
|
|
|
|
CREATE TABLE `comptes` (
|
|
`email` varchar(255) NOT NULL default '',
|
|
`password` varchar(255) NOT NULL default '',
|
|
`quota` int(10) NOT NULL default '0',
|
|
`etat` tinyint(1) NOT NULL default '1',
|
|
`imap` tinyint(1) NOT NULL default '1',
|
|
`pop3` tinyint(1) NOT NULL default '1',
|
|
PRIMARY KEY (`email`)
|
|
) ENGINE=MyISAM;
|
|
|
|
CREATE TABLE `alias` (
|
|
`source` varchar(255) NOT NULL default '',
|
|
`destination` text NOT NULL,
|
|
`etat` tinyint(1) NOT NULL default '1',
|
|
PRIMARY KEY (`source`)
|
|
) ENGINE=MyISAM;
|
|
~~~~
|
|
|
|
### Edition des 5 fichiers de configuration suivants:
|
|
* Contenu de `mysql-virtual_domaines.cf`
|
|
|
|
```text
|
|
hosts = 127.0.0.1
|
|
user = postfix
|
|
password = **Mot de passe Mysql Postfix**
|
|
dbname = postfix
|
|
select_field = 'virtual'
|
|
table = domaines
|
|
where_field = domaine
|
|
additional_conditions = AND etat=1
|
|
```
|
|
* Contenu de `mysql-virtual_comptes.cf`
|
|
|
|
```text
|
|
hosts = 127.0.0.1
|
|
user = postfix
|
|
password = **Mot de passe Mysql Postfix**
|
|
dbname = postfix
|
|
table = comptes
|
|
select_field = CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
|
|
where_field = email
|
|
additional_conditions = AND etat=1
|
|
```
|
|
|
|
* Contenu de `mysql-virtual_aliases.cf`
|
|
|
|
```text
|
|
hosts = 127.0.0.1
|
|
user = postfix
|
|
password = **Mot de passe Mysql Postfix**
|
|
dbname = postfix
|
|
table = alias
|
|
select_field = destination
|
|
where_field = source
|
|
additional_conditions = AND etat=1
|
|
```
|
|
|
|
* Contenu de `mysql-virtual_aliases_comptes.cf`
|
|
|
|
```text
|
|
hosts = 127.0.0.1
|
|
user = postfix
|
|
password = **Mot de passe Mysql Postfix**
|
|
dbname = postfix
|
|
table = comptes
|
|
select_field = email
|
|
where_field = email
|
|
additional_conditions = AND etat=1
|
|
```
|
|
|
|
* Contenu de `mysql-virtual_quotas.cf`
|
|
|
|
```text
|
|
hosts = 127.0.0.1
|
|
user = postfix
|
|
password = **Mot de passe Mysql Postfix**
|
|
dbname = postfix
|
|
table = comptes
|
|
select_field = quota
|
|
where_field = email
|
|
```
|
|
|
|
### Ajout du groupe et de l'utilisateur `vmail`
|
|
|
|
```console
|
|
root@serveur:~# groupadd -g 5000 vmail
|
|
root@serveur:~# useradd -g vmail -u 5000 vmail -d /var/spool/vmail -m
|
|
```
|
|
|
|
### Configuration du `main.cf`
|
|
|
|
Editer le `main.cf`
|
|
|
|
```console
|
|
root@serveur:~# vim /etc/postfix/main.cf
|
|
```
|
|
|
|
~~~~ini
|
|
# Bannière afficher lorsqu'on se connecte en SMTP sur le port 25
|
|
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
|
|
|
|
# Service qui envoie des notifications "nouveau message"
|
|
biff = no
|
|
|
|
# Desactive la commande SMTP VRFY. Arrête certaine technique pour avoir des adresses email
|
|
disable_vrfy_command = yes
|
|
|
|
# Impose au client SMTP de démarrer la session SMTP par une commande Helo (ou ehlo)
|
|
smtpd_helo_required = yes
|
|
|
|
# Avec le courier local ça ajoute .NDD aux adresses incomplètes (seulement le nom d'hote)
|
|
append_dot_mydomain = no
|
|
|
|
# Le nom de la machine du système de messagerie
|
|
# Par défaut c'est host.domain.tld mais on peut mettre un reverse dns
|
|
myhostname = DOMAINNAME (Not reverse DNS)
|
|
|
|
# Le domaine utilisé par defaut pour poster les message local
|
|
myorigin = REVERSE_DNS
|
|
|
|
# Liste des domaines pour lequel le serveur doit accepter le courrier
|
|
mydestination = REVERSE_DNS, localhost.localdomain, localhost
|
|
|
|
# Pour effectuer des livraisons de courrier avec un relay (ici non)
|
|
relayhost =
|
|
|
|
# Liste des réseaux locaux autorisés
|
|
mynetworks = 127.0.0.0/8, IP_PUBLIQUE_SERVEUR
|
|
|
|
# Taille des boîtes au lettre (0 = illimité)
|
|
mailbox_size_limit = 0
|
|
|
|
# Séparateur entre le nom d'utilisateur et les extensions d'adresses
|
|
recipient_delimiter = +
|
|
|
|
# Interfaces réseaux à écouter (ici toutes)
|
|
inet_interfaces = all
|
|
|
|
# Gestion des boites mails virtuelle
|
|
# Contient les fichiers qui permettent de relier postfix mysql
|
|
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual_aliases.cf,mysql:/etc/postfix/mysql-virtual_aliases_comptes.cf
|
|
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual_domaines.cf
|
|
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual_comptes.cf
|
|
|
|
# Le dossier ou seront contenu les mails (=home de l'user vmail)
|
|
virtual_mailbox_base = /var/spool/vmail/
|
|
|
|
# L'id du groupe et de l'utilisateur vmail créé précédement
|
|
virtual_uid_maps = static:5000
|
|
virtual_gid_maps = static:5000
|
|
|
|
# Créer un dossier par comte email
|
|
virtual_create_maildirsize = yes
|
|
|
|
# A activer si vous souhaitez ajouter des quotas
|
|
virtual_mailbox_extended = yes
|
|
|
|
# Impose les limites au niveau des mails, dans notre cas aucune
|
|
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_quotas.cf
|
|
|
|
# Ajouter une limite sur la taille des messages pour les boites virtuelles
|
|
virtual_mailbox_limit_override = yes
|
|
virtual_maildir_limit_message = "La boite mail de votre destinataire est pleine, merci de reessayez plus tard."
|
|
virtual_overquota_bounce = yes
|
|
|
|
# adresses d'expedition
|
|
smtpd_sender_restrictions =
|
|
permit_mynetworks,
|
|
warn_if_reject reject_unverified_sender
|
|
|
|
# adresses de destination
|
|
smtpd_recipient_restrictions =
|
|
permit_mynetworks,
|
|
reject_unauth_destination,
|
|
reject_non_fqdn_recipient
|
|
|
|
# client
|
|
smtpd_client_restrictions =
|
|
permit_mynetworks
|
|
~~~~
|
|
|
|
### Modification des droits sur les fichiers de configuration
|
|
```console
|
|
root@serveur:~# chmod 640 /etc/postfix/mysql-virtual_*.cf
|
|
root@serveur:~# chgrp postfix /etc/postfix/mysql-virtual_*.cf
|
|
```
|
|
|
|
### Restart postfix
|
|
```console
|
|
root@serveur:~# /etc/init.d/postfix restart
|
|
```
|
|
## Ajout d'un compte
|
|
|
|
### Insertion d'un nouveau domaine dans la base de donnees
|
|
Selectionner la table `domaines`et inserer un nouveau domaine
|
|
Ex: "domaine.tld" et mettre l'etat a "1".
|
|
|
|
### Insertion d'un nouvel utilisateur
|
|
Une fois la base de donnees `postfix`selectionnee (normalement c'est deja le cas), il faut executer le code SQL suivant:
|
|
~~~~sql
|
|
INSERT INTO `comptes`(`email`, `password`, `quota`, `etat`, `imap`, `pop3`) VALUES ('test@domaine.tld', ENCRYPT('motdepasse'), '0', '1', '1', '1');
|
|
~~~~
|
|
|
|
### Test par Telnet (Creation des repertoires mail par la meme occasion)
|
|
|
|
Executer la commande suivante:
|
|
```console
|
|
root@serveur:~# telnet 127.0.0.1 25
|
|
```
|
|
Puis dans Telnet executer les commandes suivantes:
|
|
```text
|
|
ehlo domaine.tld
|
|
mail from:<peuimporte@domaine.tld>
|
|
rcpt to:<test@domaine.tld> (l'email doit figurer dans la table comptes)
|
|
data (Puis ecrire le body du mail, ensuite faire Enter et terminer par ".")
|
|
quit (Pour sortir de Telnet)
|
|
```
|
|
|
|
|
|
|
|
## Courier
|
|
|
|
### Installation de `Courier`
|
|
```console
|
|
root@serveur:~# apt-get install courier-base courier-authdaemon courier-authlib-mysql courier-imap courier-pop
|
|
```
|
|
|
|
### Configuration de `Courier`
|
|
|
|
Editer `/etc/courier/authdaemonrc`
|
|
```console
|
|
root@serveur:~# vim /etc/courier/authdaemonrc
|
|
```
|
|
|
|
Modifier la ligne: `authmodulelist = authpam` -> `authmodulelist = authmysql`
|
|
|
|
Editer `/etc/courier/authmysqlrc`
|
|
```console
|
|
root@serveur:~# vim /etc/courier/authmysqlrc
|
|
```
|
|
|
|
**Modifier:**
|
|
```text
|
|
`MYSQL_USERNAME`
|
|
`MYSQL_PASSWORD`
|
|
`MYSQL_DATABASE` -> postfix
|
|
`MYSQL_USER_TABLE` -> comptes
|
|
`MYSQL_CRYPT_PWFIELD` -> password
|
|
`MYSQL_UID_FIELD` -> 5000
|
|
`MYSQL_GID_FIELD` -> 5000
|
|
`MYSQL_LOGIN_FIELD` -> email
|
|
`MYSQL_HOME_FIELD` -> "/var/spool/vmail"
|
|
```
|
|
|
|
**Commenter:** `MYSQL_NAME_FIELD`
|
|
|
|
|
|
**Ajouter:** `MYSQL_MAILDIR_FIELD` -> CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
|
|
|
|
### Redemarrage des services
|
|
|
|
```console
|
|
root@serveur:~# /etc/init.d/courier-authdaemon restart
|
|
root@serveur:~# /etc/init.d/courier-pop restart
|
|
root@serveur:~# /etc/init.d/courier-imap restart
|
|
```
|
|
|
|
|
|
|
|
## RoundCube
|
|
|
|
### Telecharger la derniere version de Roundcube
|
|
Se rendre [ici](https://roundcube.net/) pour telecharger roundcube.
|
|
Creer un VirtualHost sur le serveur Web et l'associer a Roundcube.
|
|
|
|
### Base de donnees Roundcube
|
|
Creer une base de donnees `roundcube` ajouter un utilisateur (roundcube par exemple) et generer un mot de passe (a conserver pour la suite de l'installation.)
|
|
|
|
Creer les tables necessaires au bon fonctionnement de Roundcube avec la commande suivante:
|
|
|
|
```console
|
|
root@serveur:~# mysql -u root -p roundcube < /var/www/domaine.tld/roundcube/SQL/mysql.initial.sql
|
|
```
|
|
|
|
### Configuration de Roundcube
|
|
Se rendre a l'adresse ou Roundcube est accessible, (par exemple [https://mail.domaine.tld/](https://mail.domaine.tld/)) et rajouter `installer` a la fin de l'url.
|
|
Ce qui donnerait par exemple: [https://mail.domaine.tld/installer](https://mail.domaine.tld/installer)
|
|
|
|
Verifier les options de configuration:
|
|
* Mysql Database Roundcube db_addr
|
|
* Mysql Database Roundcube db_name
|
|
* Mysql Database Roundcube db_user
|
|
* Mysql Database Roundcube db_pass
|
|
|
|
Certaines extentions peuvent manquer, verifier et les installer. (D'autres sont facultatives.)
|
|
|
|
**NE PAS OUBLIER DE RETIRER LE DOSSIER `installer/` DU REPERTOIRE WEB DE ROUNDCUBE** |