MonSiteWikiNi

Postfixmysql

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes 216.73.216.154

Prerequis:
installation des packages de base :
aptitude install mysql-server postfix postfix-mysql


Paramétrage database
Mettre en place mot de passe

mysqladmin -u root password votre_pass

Se connecter à Mysql :
mysql -u root -p votre_pass

creation de la base
Une fois connecté en root, copier/coller ce script ou tout effectuer à la main ;-)
CREATE DATABASE `postfix`;
USE postfix;

-- 
-- Structure de la table `domain`
-- 
CREATE TABLE `domain` (
  `domain` varchar(255) NOT NULL default '',
  `actif` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`domain`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Domaines Virtuels';

-- 
-- Structure de la table `mailbox`
-- 
CREATE TABLE `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`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Boites Emails Virtuelles';

-- 
-- Structure de la table `alias`
-- 
CREATE TABLE `alias` (
  `source` varchar(255) NOT NULL default '',
  `destination` text NOT NULL,
  `actif` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`source`)
) ENGINE=MyISAM COMMENT='Postfix Admin - Alias Virtuels';



Creation et attributions des droits pour l'utilisateur de la base (Pour des soucis de securité, il est primordial de mettre en place un user qui ne pourra acceder à la base qu'en lecture).
Pour l'exemple l'utilisateur se nommera postfix et aura comme mot de passe postfix


GRANT SELECT ON `postfix`.* TO 'postfix'@'%'
IDENTIFIED BY 'postfix';


Postfix
Les prerequis sont que les mails doivent etre stockés au format maildir dans le repertoire /home/mail

Creation et mise en place des droits sur ce repertoire


groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/mail -m


Le fichier main.cf
Nous detaillerons le contenu de ce fichier plus tard pour le moment, nous allons nous contenter d'y inclure les directives mysql.

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 = /home/mail/
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

#virtual_create_maildirsize = yes
#virtual_mailbox_extended = yes
#virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
#virtual_mailbox_limit_override = yes
#virtual_maildir_limit_message = "Desole, la boite email de l'utilisateur est pleine, essayez plus tard."
#virtual_overquota_bounce = yes
#Les quotas sont pour le moment desactivés ... J'y reviendrai quand j'aurai le temps...




Création des fichiers d'accès à la base de données

*/etc/postfix/mysql-virtual_aliases.cf*

# mysql-virtual_aliases.cf
hosts = 127.0.0.1
user = postfix
password = postfix
dbname = postfix
select_field = destination
table = alias
where_field = source
additional_conditions = AND actif=1



*/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
# mysql-virtual_mailbox_limit_maps.cf
hosts = 127.0.0.1
user = postfix
password = postfix
dbname = postfix
select_field = quota
table = mailbox
where_field = email



*/etc/postfix/mysql-virtual_domains.cf*
# mysql-virtual_domains.cf
hosts = 127.0.0.1
user = postfix
password = postfix
dbname = postfix
select_field = 'virtual'
table = domain
where_field = domain
additional_conditions = AND actif=1


*/etc/postfix/mysql-virtual_mailboxes.cf*
# mysql-virtual_mailboxes.cf
hosts = 127.0.0.1
user = postfix
password = postfix
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_mailbox.cf *
# mysql-virtual_aliases_mailbox.cf
hosts = 127.0.0.1
user = postfix
password = postfix
dbname = postfix
select_field = email
table = mailbox
where_field = email
additional_conditions = AND actif=1







Mettre les droits adequats sur ces fichiers et valider (un peu) le fichier de conf

chgrp postfix mysql-virtual_*.cf
chmod 750 mysql-virtual_*.cf

/etc/init.d/postfix restart
postfix check


Mise en place de courier-imap courier-pop
aptitude install courier-base courier-authdaemon courier-authmysql courier-imap courier-pop






test de la configuration


mysql -u root -p
USE postfix;

INSERT INTO `domain` (`domain`,`actif`) VALUES ('mackow.org',1);
INSERT INTO `mailbox` (`email`,`password`,`quota`,`actif`,`imap`,`pop3`)
VALUES ('alex@mackow.org',ENCRYPT('secret'),0,1,1,1);


Enoyer un message en interne pour valider la création du Maildir en local.

Puis tester de configurer un compte sous vote client messagerie habituel.






Mon as particulier
Dans la boite ou je suis, mon serveur Postfix n'est qu'un serveur Interne, il recupere les mails sur le serveur du FAI, si les mails sont adressés entre des users configurés sur ce serveur, les mails sont distribués localement (gain de bande passante donc).
Si les mails sont adressés a des personnes qui ne sont pas paramétrés mais appartenant quand meme au domaine @mackow.org, alors les mails doivent etre relayer au FAI.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
transport_maps = hash:/etc/postfix/transport_maps #la table transport indisuera le serveur SMTP "maitre" de mon domaine
smtpd_banner = monserver ESMTP $mail_name (GNU/Linux)
biff = no
mailbox_command = /usr/bin/procmail
# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
relay_domains = mackow.org # Le domaine "maitre" géré par mon FAI
myhostname = postfix.mackow.local
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination =  mackow.local,localhost
relayhost =  [SMTP_du_FAI]
mynetworks = 127.0.0.0/8 192.168.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_alias_maps = dbm:/etc/postfix/virtual
virtual_alias_maps = hash:/etc/postfix/virtual


#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 = /home/vmail/
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

Commentaires [Cacher commentaires/formulaire]