Mon installation debian chez OVH
Postfix + Courrier avec MySQL
On va installer postfix avec domaines et utilisateurs virtuels facilement gerable grace a phpmyadmin et une simple base de données.
apt-get install postfix postfix-mysql postfix-doc courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql phpmyadmin
On doit répondre à quelques questions, voici les réponses:
Create directories for web-based administration ? <-- No
General type of configuration? <-- Internet Site
Mail name? <-- nsxxxxx.ovh.net
SSL certificate required <-- Ok
Puis on installe les outils suivants:
apt-get install fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libsasl2-dev postgresql-dev po-debconf dpatch libdb4.3-dev libmysqlclient15-dev lsb-release libcdb-dev
On doit appliquer un patch pour quota a postfix donc on récupère la source
cd /usr/src
apt-get source postfix
on vérifie notre version de postfix
postconf -d | grep mail_version
et on recupere le bon patch pour quota, on l’applique, on crée nos packages et on les installe
wget http://vda.sourceforge.net/VDA/postfix-2.3.8-vda.patch.gz
gunzip postfix-2.3.8-vda.patch.gz
cd postfix-2.3.8
patch -p1 < ../postfix-2.3.8-vda.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.3.8-2_i386.deb
dpkg -i postfix-mysql_2.3.8-2_i386.deb
On crée la base de données MySQL et ses utilisateurs (on doit utiliser le password précédement défini pour le compte root de mysql)
mysqladmin -u root -p create mail
mysql -u root -p
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost' IDENTIFIED BY 'mail_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'localhost.localdomain' IDENTIFIED BY 'mail_admin_password';
FLUSH PRIVILEGES;
USE mail;
CREATE TABLE domains (
domain varchar(50) NOT NULL,
PRIMARY KEY (domain) )
TYPE=MyISAM;
CREATE TABLE forwardings (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;
CREATE TABLE users (
email varchar(80) NOT NULL,
password varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email)
) TYPE=MyISAM;
CREATE TABLE transport (
domain varchar(128) NOT NULL default '',
transport varchar(128) NOT NULL default '',
UNIQUE KEY domain (domain)
) TYPE=MyISAM;
quit;
on passe au fichiers de configuration
vi /etc/postfix/mysql-virtual_domains.cf
le contenu:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_forwardings.cf
le contenu:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailboxes.cf
le contenu:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_email2email.cf
le contenu:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_transports.cf
le contenu:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT transport FROM transport WHERE domain='%s'
hosts = 127.0.0.1
vi /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
le contenu:
user = mail_admin
password = mail_admin_password
dbname = mail
query = SELECT quota FROM users WHERE email='%s'
hosts = 127.0.0.1
On cree un user vmail et on change les droits des fichiers
chmod o= /etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Encore un petit peu de configuration
postconf -e 'myhostname = ns28885.ovh.net'
postconf -e 'mydestination = localhost, localhost.localdomain'
postconf -e 'mynetworks = 127.0.0.0/8'
postconf -e 'virtual_alias_domains ='
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf'
postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf'
postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf'
postconf -e 'virtual_mailbox_base = /home/vmail'
postconf -e 'virtual_uid_maps = static:5000'
postconf -e 'virtual_gid_maps = static:5000'
postconf -e 'smtpd_sasl_auth_enable = yes'
postconf -e 'broken_sasl_auth_clients = yes'
postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination'
postconf -e 'smtpd_use_tls = yes'
postconf -e 'smtpd_tls_cert_file = /etc/postfix/smtpd.cert'
postconf -e 'smtpd_tls_key_file = /etc/postfix/smtpd.key'
postconf -e 'transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf'
postconf -e 'virtual_create_maildirsize = yes'
postconf -e 'virtual_mailbox_extended = yes'
postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf'
postconf -e 'virtual_mailbox_limit_override = yes'
postconf -e 'virtual_maildir_limit_message = "The user you are trying to reach is over quota."'
postconf -e 'virtual_overquota_bounce = yes'
postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps'
On crée un certificat SSL, on reponds au question et on met le nom de notre serveur pour common name (nsxxxxx.ovh.net)
cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
chmod o= /etc/postfix/smtpd.key
on configure saslauthd
mkdir -p /var/spool/postfix/var/run/saslauthd
vi /etc/default/saslauthd
on met
START=yes
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
Encore et encore des fichiers de config …
vi /etc/pam.d/smtp
contenu:
auth required pam_mysql.so user=mail_admin passwd=mail_admin_s3cureCOD3 host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_s3cureCOD3 host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1
vi /etc/postfix/sasl/smtpd.conf
Contenu:
pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_admin
sql_passwd: mail_admin_password
sql_database: mail
sql_select: select password from users where email = '%u'
La config de courier maintenant
vi /etc/courier/authdaemonrc
on change authmodulelist=”authpam” en authmodulelist=”authmysql”
allez encore un dernier fichier !
cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null > /etc/courier/authmysqlrc
vi /etc/courier/authmysqlrc
et son contenu
MYSQL_SERVER localhost
MYSQL_USERNAME mail_admin
MYSQL_PASSWORD mail_admin_password
MYSQL_PORT 0
MYSQL_DATABASE mail
MYSQL_USER_TABLE users
MYSQL_CRYPT_PWFIELD password
#MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD 5000
MYSQL_GID_FIELD 5000
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD "/home/vmail"
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')
#MYSQL_NAME_FIELD
MYSQL_QUOTA_FIELD quota
Voila. Il nous reste plus qu’à redémarrer le tout
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart
Ha oui il faut aussi modifier le fichier aliases
vi /etc/aliases
on modifie juste la ligne root et postmaster comme ca:
postmaster: root
root: postmaster@nsxxxxx.ovh.net
Puis on tape:
newaliases
/etc/init.d/postfix restart
December 4th, 2007 at 20:07
Superbe!
Nervous eCliPs!
December 14th, 2007 at 14:20
[...] 2 petits post qui vont venir completer mon premier post sur mon installation debian chez ovh. Le premier tout de suite avec la configuration d’un firewall simple pour notre [...]
December 14th, 2007 at 17:21
[...] promis voici le 2èm post de la journée pour compléter le tutorial d’installation d’une machine debian chez ovh. Nous venons juste de voir comment installer et configurer un firewall pour protéger notre [...]
January 6th, 2008 at 1:47
Très bien fait ce document!
Une question:
Comment configurer Bind9 (Debian 4) pour un nom de domaine en .fr par exemple “domaine.fr” tout en utilisant le serveur dédié du client(OVH) comme DNS primaire?
January 6th, 2008 at 8:55
POur configurer bind9 avec n’importe quel domaine c’est assez simple:
Tout d’abord il faut creer un fichier de zone pour ce domaine.
En general je creer le repertoire /etc/bind/zones/master dans lequel je depose tous mes fichiers de zone puis je creer un fichier example.fr.hosts dans ce repertoire.
on edite le fichier et voici le contenu:
example.fr. IN SOA example.fr. webmaster.example.fr. (
2008010601
21600
3600
604800
86400 )
IN NS nsxxxxx.ovh.net.
IN NS sdns1.ovh.net.
IN MX 10 mail.example.fr.
IN A IP.DE.TA.MACHINE
www IN A IP.DE.TA.MACHINE
mail IN A IP.DE.TA.MACHINE
smtp IN A IP.DE.TA.MACHINE
pop IN A IP.DE.TA.MACHINE
pop3 IN A IP.DE.TA.MACHINE
imap IN A IP.DE.TA.MACHINE
sql IN A IP.DE.TA.MACHINE
mysql IN A IP.DE.TA.MACHINE
ensuite il suffit de rajouter cette zone a la fin du fichier /etc/bind/named.conf/local
zone “example.fr” {
type master;
file example.fr.hosts”;
};
Voila on redemarre bind et c’est ok
/etc/init.d/bind9 restart
February 18th, 2008 at 17:08
Excellent.Merci pour ce tutorial.
Au cas où voici un point où j’ai un peu galéré :
J’avais mis dans /etc/hosts.deny : ALL:ALL
Résultat, les fichiers de ce tutoriel utilisant “127.0.0.1″ pour mysql, rien ne fonctionnait. Il a fallu ajouter un “mysqld : LOCAL”.
Ca peut paraitre bête mais avec “localhost” ceci n’est pas nécessaire et d’habitude je ne le met pas.
Merci.
February 22nd, 2008 at 14:14
Merci pour ce tuto !
Je suis novice et j’ai un petit souci avec mysql :
mysqladmin -h 127.0.0.1 -u root password votrepassmysqlroot
error: ‘Access denied for user ‘root’@'localhost’ (using password: NO)’
Le mot de passe root fonctionne bien si je tape : mysql -u root mysql -p
Je me connecte à mysql sans problème.
Savez-vous pourquoi ?
Cordialement,
Jim
February 22nd, 2008 at 15:49
Tout est ok. Si la commande te retourne ce message: error: ‘Access denied for user ‘root’@’localhost’ (using password: NO)’
ca veut dire qu’un mot de passe a deja ete defini pour le user root donc pas de soucis
February 26th, 2008 at 12:42
Un grand merci pour ce tuto clair net et précis
Ca a marché du 1er coup pour moi
Kal
May 5th, 2008 at 20:49
Bonjour, merci pour tout ce petit tuto bien sympa !
Malheureusement apres avoir suivi les instructions je me retrouve avec un probleme de creation de repertoire, par defaut le repertoire /home/vmail se crée sans soucis, mais le probleme est les sous dossier /home/vmail/nsxxxxx.ovh.net/webmaster par exemple
apres les avoir crée manuellement
le log me retourne le message suivant : May 5 20:39:52 ks30989 postfix/master[3171]: fatal: /etc/postfix/master.cf: line 77: bad transport type: smtp_data_done_timeout=1200
et bien sur lorsque je veux lire les mail par pop il me retourne cela
May 5 20:42:16 ks30989 courierpop3login: LOGIN, user=webmaster@nsxxxxxx.ovh.net, ip=[::ffff:]
May 5 20:42:16 ks30989 courierpop3login: scancur opendir(”cur”): No such file or directory
merci de votre aide
May 6th, 2008 at 8:34
Bonjour,
Peut tu me coller ton fichier master.cf ?
De plus tu n’avias pas a creer les erpertoire a la main (a part /home/vmail)
Les repertoires se cree seul a la reception du premier message.
Ce que tu dois faire c’est desuite apres la creation d’un domaine+ compte, envoyer un email a ce compte pour creer les repertoires et ouvrir la boite.
Jonathan
June 7th, 2008 at 14:34
Marc,
Essaye en ajoutant ça dans ta base MySQL:
insert into transport values(”domain”,”virtual:”);
October 23rd, 2008 at 20:00
bonjour
de mon coté pas de probleme avec postfix mais impossible de s’authentifier avec courier que se soit en imap ou en pop malgres l’existence du repertoire (pour info mysql5)
fred
October 24th, 2008 at 16:03
Fred -> as-tu bien utiliser la fonction ENCRYPT sur las passwdord de ton compte mail dans la base de donnees ?
avec phpmyadmin tu dois utiliser ENCRYPT sur le champ password de la table users
May 20th, 2009 at 18:08
Même pb que fred, je n’arrive pas à m’authentifier sur le POP, et j’ai bien utiliser ENCRYPT lors de la création du user dans MySQL
May 26th, 2009 at 18:27
[...] fois eAccelerator installé (sous Debian, en quelques minutes comme détaillé ici en français sur le Jonathan’s Blog), configuré et testé, l’installation optionnelle du Plugin eAccelerator pour Wordpress de [...]
September 9th, 2009 at 1:46
[...] Mon installation debian chez OVH | Jonathan’s Blog [...]