Tutorial Postfix , Courier-Imap,Mysql, Saslauth ,Maildrop

Ce tutoriel a pour but de montrer comment installer postfix avec un support mysql,saslauthd ,en le couplant a l’utilisation d’une interface web a savoir Postfix Admin. dans sa version 2.10 . Il faudra cependant procéder a une petite modification au niveau de postfixadmin  afin d’utiliser maildrop .

  • Paquets Nécessaires :
    postfix postfix-mysql sasl2-bin libsasl2 libsasl2-modules courier-authdaemon courier-authdaemon courier-authlib-mysql courier-imap courier-pop
  • Postfix .
    1. Installation :
      aptitude install postfix postfix-mysql
    2. Configuration :
      La configuration de postfix tient essentiellement en deux fichiers : /etc/postfix/main.cf et /etc/postfix/master.cf
      En ce qui concerne le main.cf on peut s’interresser a un certain nombre de variables :
      myhostname
      < — elle définit le nom du serveur , aussi sauf à modifier le smtpd_banner c’est le nom qui s’affichera dans le ehlo. L’utilisation de mysql sous tend l’utilisation des comptes virtuels de postfix cf http://www.postfix.org/VIRTUAL_README.html
      Il va donc falloir renseigner un nombre concret de nouvelles variables : virtual_alias_maps,virtual_gid_maps,virtual_mailbox_base,virtual_mailbox_domains, virtual_mailbox_maps,virtual_minimum_uid,virtual_uid_maps
      Ainsi dans le cas présent nous aurons :
      virtual_alias_maps =proxy:mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
      virtual_gid_maps = static:1029
      virtual_mailbox_base = /data/virtual
      virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
      virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
      virtual_mailbox_limit = 51200000 virtual_minimum_uid = 1029
      virtual_transport = virtual
      virtual_uid_maps = static:1029
      Tous les fichiers de configuration mysql étant comme indiqués mis en place dans un sous répertoire de /etc/postfix.
      Chaque fichier mysql_virtual* contient les informations permettant a postfix de savoir quel serveur,base de données, tables, champ qu’il lui faudra interroger .
      De mème je range tous mes mails dans le répertoire /data/virtual , celui ci appartient a l’utilisateur ‘vmail’ qui possède les uid/gid 1029 (ce qui coulait de source en lisant la configuration
  • Mysql
    En créant ainsi les fichiers de configuration on peut avoir un postfix capable d’interroger une base mysql. Il faudrait quand mème créer cette base et ces tables … Cette partie est notamment basée sur le tutorial de high5.net
    • Partie Mysql de Postfix
    1. On crée la base sql et les utilisateursUSE mysql;INSERT INTO user (Host, User, Password) VALUES (’localhost’,'postfix’,password(’postfix’));INSERT INTO db (Host, Db, User, Select_priv) VALUES (’localhost’,'postfix’,'postfix’,'Y’);FLUSH PRIVILEGES;GRANT USAGE ON postfix.* TO postfix@localhost;GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost;CREATE DATABASE postfix;
    2. On crée la table Alias
      USE postfix;CREATE TABLE `alias` (`address` varchar(255) NOT NULL default ‘’,`goto` text NOT NULL,`domain` varchar(255) NOT NULL default ‘’,`created` datetime NOT NULL default ‘0000-00-00 00:00:00′,`modified` datetime NOT NULL default ‘0000-00-00 00:00:00′,`active` tinyint(1) NOT NULL default ‘1′,PRIMARY KEY  (address)) TYPE=MyISAM COMMENT=’Postfix Admin - Virtual Aliases’;
    3. On crée la table Domain
      USE postfix;CREATE TABLE `domain` (`domain` varchar(255) NOT NULL default ‘’,`description` varchar(255) NOT NULL default ‘’,`aliases` int(10) NOT NULL default ‘0′,`mailboxes` int(10) NOT NULL default ‘0′,`maxquota` int(10) NOT NULL default ‘0′,`transport` varchar(255) default NULL,`backupmx` tinyint(1) NOT NULL default ‘0′,`created` datetime NOT NULL default ‘0000-00-00 00:00:00′,`modified` datetime NOT NULL default ‘0000-00-00 00:00:00′,`active` tinyint(1) NOT NULL default ‘1′,PRIMARY KEY  (domain)) TYPE=MyISAM COMMENT=’Postfix Admin - Virtual Domains’;
    4. On crée la table Mailbox
      USE postfix;CREATE TABLE `mailbox` (`username` varchar(255) NOT NULL default ‘’,`password` varchar(255) NOT NULL default ‘’,`name` varchar(255) NOT NULL default ‘’,`maildir` varchar(255) NOT NULL default ‘’,`quota` int(10) NOT NULL default ‘0′,`domain` varchar(255) NOT NULL default ‘’,`created` datetime NOT NULL default ‘0000-00-00 00:00:00′,`modified` datetime NOT NULL default ‘0000-00-00 00:00:00′,`active` tinyint(1) NOT NULL default ‘1′,PRIMARY KEY  (`username`)) TYPE=MyISAM COMMENT=’Postfix Admin - Virtual Mailboxes’;
    • Partie Mysql de PostfixAdmin
    1. Création des utilisateurs
      INSERT INTO user (Host, User, Password) VALUES (’localhost’,'postfixadmin’,password(’postfixadmin’));
      INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES (’localhost’, ‘postfix’, ‘postfixadmin’, ‘Y’, ‘Y’, ‘Y’, ‘Y’);
      FLUSH PRIVILEGES;
      GRANT USAGE ON postfix.* TO postfixadmin@localhost;
      GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfixadmin@localhost;
    2. Création de la table Domain_Admins
      CREATE TABLE domain_admins (
      username varchar(255) NOT NULL default ‘’,
      domain varchar(255) NOT NULL default ‘’,
      created datetime NOT NULL default ‘0000-00-00 00:00:00′,
      active tinyint(1) NOT NULL default ‘1′,
      KEY username (username) ) TYPE=MyISAM COMMENT=’Postfix Admin - Domain Admins’;
    3. Création de la table LOG

      CREATE TABLE log (
      timestamp datetime NOT NULL default ‘0000-00-00 00:00:00′,
      username varchar(255) NOT NULL default ‘’,
      domain varchar(255) NOT NULL default ‘’,
      action varchar(255) NOT NULL default ‘’,
      data varchar(255) NOT NULL default ‘’,
      KEY timestamp (timestamp) ) TYPE=MyISAM COMMENT=’Postfix Admin - Log’;

    4. Création de la table Vacation
      CREATE TABLE vacation (
      email varchar(255) NOT NULL default ‘’,
      subject varchar(255) NOT NULL default ‘’,
      body text NOT NULL,
      cache text NOT NULL,
      domain varchar(255) NOT NULL default ‘’,
      created datetime NOT NULL default ‘0000-00-00 00:00:00′,
      active tinyint(1) NOT NULL default ‘1′,
      PRIMARY KEY (email),
      KEY email (email) ) TYPE=MyISAM COMMENT=’Postfix Admin - Virtual Vacation’;
  • PostfixAdmin
    Il vous suffit de le récupérer ici et de suivre le tutorial d’installation . ce qui nous donne :
    wget http://high5.net/postfixadmin/download.php?file=postfixadmin-2.1.0.tgz
    tar xzf postfixadmin-2.1.0.tgz
    Il suffit ensuite de configurer le vhost qui va bien , les bases sql nécessaires a postfixadmin ayant déja été crées au dessus.
  • Courier
    1. Installation des paquets
      aptitude install courier-authdaemon courier-authdaemon courier-authlib-mysql courier-imap courier-pop
    2. Configuration
      • Au niveau du /etc/courier/authdaemonrc il faut s’assurer que l’auth mysql est activé :
        authmodulelist="authpam authmysql"
      • Au niveau du /etc/courier/authmyslrc
        MYSQL_SERVER 127.0.0.1
        MYSQL_USERNAME postfix
        MYSQL_PASSWORD postfix
        MYSQL_DATABASE postfix
        MYSQL_USER_TABLE mailbox
        MYSQL_CRYPT_PWFIELD password
        MYSQL_UID_FIELD ‘1029′
        MYSQL_GID_FIELD ‘1029′
        MYSQL_LOGIN_FIELD username
        MYSQL_HOME_FIELD ‘/data/virtual’
        MYSQL_NAME_FIELD name
        MYSQL_MAILDIR_FIELD maildir
        MYSQL_QUOTA_FIELD concat(quota,’S')
  • SASL AUTH
    1. Installation des paquets nécessaires aptitude install sasl2-bin libpam-mysql libsasl2 libsasl2-modules
    2. Configuration Il faut configurer plusieurs élements :
      • saslauthd
        dans le fichier /etc/default/salsauthd on s’assure qu’il se lancera automatiquement ,
        il faut donc décommenter la ligne # START=yes en suite il faut rajouter une ligne PARAMS=”-r” ( cf archives de la mailing list postfix )
      • pam
        Au niveau du répertoire /etc/pam.d/ on crée un fichier smtp contenant les lignes :
        auth sufficient pam_mysql.so host=127.0.0.1 db=postfix user=postfix passwd=secret table=mailbox usercolumn=username passwdcolumn=password crypt=y account required pam_mysql.so host=127.0.0.1 db=postfix user=postfix passwd=secret  table=mailbox usercolumn=username passwdcolumn=password crypt=y
      • Postfix
        il faut penser a rajouter postfix au groupe sasl : adduser postfix sasl
  • TLS
     A venir …