GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Utilisateurs virtuels et domaines avec Postfix, Courier et MySQL (Ubuntu 6.10 Edgy Eft)

Ce tutoriel est Copyright (c) 2007 par Falko Timme. Il est dérivé d'un tutoriel de Christoph Haas que vous pouvez trouver sur http://workaround.org. Vous êtes libre d'utiliser ce didacticiel sous la licence Creative Commons 2.5 ou toute version ultérieure.

Ce document décrit comment installer un serveur de messagerie basé sur Postfix qui est basé sur des utilisateurs et des domaines virtuels, c'est-à-dire des utilisateurs et des domaines qui se trouvent dans une base de données MySQL. Je montrerai également l'installation et la configuration de Courier (Courier-POP3, Courier-IMAP), afin que Courier puisse s'authentifier auprès de la même base de données MySQL que Postfix utilise.

Le serveur Postfix résultant est capable de SMTP-AUTH et TLS et quota (le quota n'est pas intégré à Postfix par défaut, je vais montrer comment patcher votre Postfix de manière appropriée). Les mots de passe sont stockés dans crypté formulaire dans la base de données (la plupart des documents que j'ai trouvés traitaient de mots de passe en texte brut, ce qui représente un risque pour la sécurité). En plus de cela, ce tutoriel couvre l'installation de Amavisd , SpamAssassin et ClamAV afin que les e-mails soient analysés à la recherche de spam et de virus.

L'avantage d'une telle configuration "virtuelle" (utilisateurs et domaines virtuels dans une base de données MySQL) est qu'elle est bien plus performante qu'une configuration basée sur des utilisateurs système "réels". Avec cette configuration virtuelle, votre serveur de messagerie peut gérer des milliers de domaines et d'utilisateurs. De plus, il est plus facile à administrer car vous n'avez à vous occuper de la base de données MySQL que lorsque vous ajoutez de nouveaux utilisateurs/domaines ou modifiez ceux qui existent déjà. Plus de commandes postmap pour créer des fichiers db, plus de rechargement de Postfix, etc. Pour l'administration de la base de données MySQL, vous pouvez utiliser des outils basés sur le Web comme phpMyAdmin qui sera également installé dans ce guide. Le troisième avantage est que les utilisateurs ont une adresse e-mail comme nom d'utilisateur (au lieu d'un nom d'utilisateur + une adresse e-mail), ce qui est plus facile à comprendre et à retenir.

Ce guide est conçu comme un guide pratique ; il ne couvre pas les arrière-plans théoriques. Ils sont traités dans de nombreux autres documents sur le Web.

Ce document est fourni sans garantie d'aucune sorte ! Je tiens à dire que ce n'est pas la seule façon de mettre en place un tel système. Il existe de nombreuses façons d'atteindre cet objectif, mais c'est la voie que je prends. Je n'émets aucune garantie que cela fonctionnera pour vous !

1 Remarque préliminaire

Ce didacticiel est basé sur Ubuntu 6.10 (Edgy Eft), vous devez donc configurer une installation de base d'Ubuntu avant de continuer avec ce didacticiel. Le système doit avoir une adresse IP statique. J'utilise 192.168.0.100 comme adresse IP dans ce tutoriel et server1.example.com comme nom d'hôte.

Je préfère effectuer toutes les étapes ici en tant qu'utilisateur root. Donc, si vous n'avez pas encore créé de connexion root, vous devez le faire maintenant :

sudo passwd root 

Ensuite, connectez-vous en tant que root :

su 

Si vous souhaitez travailler en tant qu'utilisateur normal au lieu de root, n'oubliez pas de mettre sudo devant toutes les commandes présentées dans ce didacticiel. Alors quand je cours

apt-get update 

tu devrais courir

sudo apt-get update 

à la place, etc.

 

2 Installer Postfix, Courier, Saslauthd, MySQL, phpMyAdmin

Avant d'installer ces packages, nous devons modifier /etc/apt/sources.list et activer le référentiel d'univers, alors assurez-vous que les lignes suivantes sont activées :

vi /etc/apt/sources.list
[...]

deb http://de.archive.ubuntu.com/ubuntu/ edgy universe

deb-src http://de.archive.ubuntu.com/ubuntu/ edgy universe

[...]

Puis lancez

apt-get update

pour mettre à jour votre base de données de packages.

Pour installer Postfix, Courier, Saslauthd, MySQL et phpMyAdmin, nous exécutons simplement

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server 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 openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql 

Quelques questions vous seront posées :

Créer des répertoires pour l'administration Web ? <-- Non
Type général de configuration ? <-- Site Internet
Nom de messagerie ? <-- server1.example.com
Certificat SSL requis <-- Ok

3 Appliquer le correctif de quota à Postfix

Nous devons récupérer les sources de Postfix, le patcher avec le patch de quota, créer de nouveaux packages .deb Postfix et installer ces packages .deb :

apt-get install build-essential dpkg-dev fakeroot debhelper libgdbm-dev libldap2-dev libpcre3-dev libssl-dev libsasl2-dev postgresql-dev po-debconf dpatch libdb4.3-dev libmysqlclient15-dev

cd /usr/src
apt-get suffixe source

(Assurez-vous d'utiliser la bonne version de Postfix dans les commandes suivantes. J'ai installé Postfix 2.3.3. Vous pouvez trouver votre version de Postfix en exécutant

 postconf -d | grep mail_version 

)

wget http://web.onda.com.br/nadal/postfix/VDA/postfix-2.3.3-vda.patch.gz
gunzip postfix-2.3.3-vda.patch.gz
cd postfix-2.3.3
patch -p1 <../postfix-2.3.3-vda.patch
dpkg-buildpackage
cd ..
dpkg -i postfix_2.3.3 -1_i386.deb
dpkg -i postfix-mysql_2.3.3-1_i386.deb

4 Créer la base de données MySQL pour Postfix/Courier

Par défaut, MySQL est installé sans mot de passe root, que nous changeons immédiatement (remplacez yourrootsqlpassword par le mot de passe que vous souhaitez utiliser) :

mysqladmin -u root password yourrootsqlpassword

Nous créons maintenant une base de données appelée mail :

mysqladmin -u root -p create mail

Ensuite, nous passons au shell MySQL :

mysql -u root -p

Sur le shell MySQL, nous créons l'utilisateur mail_admin avec le mot de passe mail_admin_password (remplacez-le par votre propre mot de passe) qui a les privilèges SELECT, INSERT, UPDATE, DELETE sur la base de données de messagerie. Cet utilisateur sera utilisé par Postfix et Courier pour se connecter à la base mail :

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' IDENTIFIÉ PAR 'mail_admin_password' ;
PRIVILÈGES FLUSH ;

Toujours sur le shell MySQL, nous créons les tables dont Postfix et Courier ont besoin :

USE mail;

CREATE TABLE domaines (
domaine varchar(50) NOT NULL,
CLÉ PRIMAIRE (domaine) )
TYPE=MyISAM;

CREATE TABLE redirections (
source varchar(80) NOT NULL,
destination TEXT NOT NULL,
PRIMARY KEY (source) )
TYPE=MyISAM;

CREATE TABLE users (
email varchar(80) NOT NULL,
mot de passe varchar(20) NOT NULL,
quota INT(10) DEFAULT '10485760',
PRIMARY KEY (email )
) TYPE=MonISAM ;

CREATE TABLE transport (
domaine varchar(128) NOT NULL par défaut '',
transport varchar(128) NOT NULL par défaut '',
CLÉ UNIQUE domaine (domaine)
) TYPE =MonISAM;

quit;

Comme vous l'avez peut-être remarqué, avec le renoncement; commande, nous avons quitté le shell MySQL et sommes de retour sur le shell Linux.

Les domaines table stockera chaque domaine virtuel pour lequel Postfix devrait recevoir des e-mails (par exemple, example.com ).

domaine
exemple.com

Les transferts table sert à créer un alias d'une adresse e-mail à une autre, par ex. transférer les e-mails pour [email protected] à [email protected] .

source destination
[email protected] [email protected]

Les utilisateurs La table stocke tous les utilisateurs virtuels (c'est-à-dire les adresses e-mail, car l'adresse e-mail et le nom d'utilisateur sont identiques) et les mots de passe (en chiffré formulaire !) et une valeur de quota pour chaque boîte aux lettres (dans cet exemple, la valeur par défaut est de 10485760 octets, ce qui signifie 10 Mo).

e-mail mot de passe quota
[email protected] No9.E4skNvGa. ("secret" sous forme cryptée) 10485760

Le transport table est facultative, elle est destinée aux utilisateurs avancés. Il permet de transférer les e-mails d'utilisateurs uniques, de domaines entiers ou de tous les e-mails vers un autre serveur. Par exemple,

domaine transport
exemple.com smtp :[1.2.3.4]

transmettra tous les e-mails pour example.com via le protocole smtp au serveur avec l'adresse IP 1.2.3.4 (les crochets [] signifie "ne pas rechercher l'enregistrement DNS MX" (ce qui est logique pour les adresses IP...). Si vous utilisez un nom de domaine complet (FQDN) à la place, vous n'utiliserez pas les crochets.).

BTW, (je suppose que l'adresse IP de votre système de serveur de messagerie est 192.168.0.100), vous pouvez accéder à phpMyAdmin via http://192.168.0.100/phpmyadmin/ dans un navigateur et vous connecter en tant que mail_admin. Ensuite, vous pouvez consulter la base de données. Plus tard, vous pourrez utiliser phpMyAdmin pour administrer votre serveur de messagerie.

5 Configurer Postfix

Maintenant, nous devons dire à Postfix où il peut trouver toutes les informations dans la base de données. Par conséquent, nous devons créer six fichiers texte. Vous remarquerez que je dis à Postfix de se connecter à MySQL sur l'adresse IP 127.0.0.1 au lieu de localhost. C'est parce que Postfix s'exécute dans une prison chroot et n'a pas accès au socket MySQL auquel il essaierait de se connecter si je disais à Postfix d'utiliser localhost. Si j'utilise 127.0.0.1, Postfix utilise le réseau TCP pour se connecter à MySQL, ce qui ne pose aucun problème, même dans une prison chroot (l'alternative serait de déplacer le socket MySQL dans la prison chroot, ce qui cause d'autres problèmes).

Assurez-vous que /etc/mysql/my.cnf contient la ligne suivante :

vi /etc/mysql/my.cnf
[...]

bind-address            = 127.0.0.1

[...]

Si vous deviez modifier /etc/mysql/my.cnf, veuillez redémarrer MySQL maintenant :

/etc/init.d/mysql restart

Exécuter

netstat -tap 

pour vous assurer que MySQL écoute sur 127.0.0.1 (localhost.localdomain) :

[email protected] :/usr/src# netstat -tap
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale           Adresse étrangère         État       PID/Nom du programme
tcp 0 0 localhost.localdo:mysql *:* Écoutez 4556 / mysqld
TCP 0 0 *:Smtp *:* Écoutez 12994 / Master
TCP6 0 0 *:IMAPS *:* Écoutez 4816 / COURERTCPD
TCP6 0 0 *:POP3S *:* Écoutez 4263 / COURERTCPD
TCP6 0 0 *:POP3 *:* ÉCOUTEZ 4198 / COURERTCPD
TCP6 0 0 *:IMAP2 *:* ÉCOUTE 4761 / COURERTCPD
TCP6 0 0 *:www *:* Écoutez 13283 / apache2
TCP6 0 0 *:SSH *:* Écoutez 3192 / SSHD

Créons maintenant nos six fichiers texte.

vi /etc/postfix/mysql-virtual_domains.cf
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
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
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
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
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
user = mail_admin

password = mail_admin_password

dbname = mail

query = SELECT quota FROM users WHERE email='%s'

hosts = 127.0.0.1

Modifiez ensuite les permissions et le groupe de ces fichiers :

chmod o=/etc/postfix/mysql-virtual_*.cf
chgrp postfix /etc/postfix/mysql-virtual_*.cf

Nous créons maintenant un utilisateur et un groupe appelé vmail avec le répertoire personnel /home/vmail. C'est là que toutes les boîtes aux lettres seront stockées.

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

Ensuite, nous effectuons une configuration de Postfix. Assurez-vous de remplacer server1.example.com par un FQDN valide, sinon votre Postfix risque de ne pas fonctionner correctement !

postconf -e 'myhostname =server1.example.com'
postconf -e 'mydestination =server1.example.com, 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, rejet_unauth_destination'
postconf -e 'smtpd_use_tls =yes'
postconf - et 'smtpd_tls_cer t_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_maildir_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 ="L'utilisateur que vous essayez de joindre dépasse son quota."'
postconf -e 'virtual_overquota_bounce =oui'
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_mailbox_maps $virtual_mailbox_maps

Ensuite, nous créons le certificat SSL nécessaire pour TLS :

cd /etc/postfix
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

<-- Entrez le nom de votre pays (par exemple, "DE").
<-- Entrez le nom de votre état ou de votre province.
<-- Entrez votre ville.
<-- Entrez votre organisation Nom (par exemple, le nom de votre entreprise).
<-- Saisissez le nom de votre unité organisationnelle (par exemple, « Service informatique »).
<-- Saisissez le nom de domaine complet du système (par exemple, « server1.example.com").
<-- Saisissez votre adresse e-mail.

Modifiez ensuite les permissions du smtpd.key :

chmod o= /etc/postfix/smtpd.key

6 Configurer Saslauthd

Première exécution

mkdir -p /var/spool/postfix/var/run/saslauthd

Modifiez ensuite /etc/default/saslauthd. Supprimez le # devant START=yes et ajoutez les lignes PARAMS="-m /var/spool/postfix/var/run/saslauthd -r" et PIDFILE="/var/spool/postfix/var/run/${ NOM}/saslauthd.pid". Le fichier devrait alors ressembler à ceci :

vi /etc/default/saslauthd
# This needs to be uncommented before saslauthd will be run automatically

START=yes



PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"

PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"



# You must specify the authentication mechanisms you wish to use.

# This defaults to "pam" for PAM support, but may also include

# "shadow" or "sasldb", like this:

# MECHANISMS="pam shadow"



MECHANISMS="pam"

Créez ensuite le fichier /etc/pam.d/smtp. Il ne doit contenir que les deux lignes suivantes (assurez-vous de remplir correctement les détails de votre base de données) :

vi /etc/pam.d/smtp
auth    required   pam_mysql.so user=mail_admin passwd=mail_admin_password 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_password host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

Créez ensuite le fichier /etc/postfix/sasl/smtpd.conf. Cela devrait ressembler à ceci :

vi /etc/postfix/sasl/smtpd.conf
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'

Redémarrez ensuite Postfix et Saslauthd :

/etc/init.d/postfix restart
/etc/init.d/saslauthd restart

7 Configurer Courier

Nous devons maintenant dire à Courier qu'il doit s'authentifier auprès de notre base de données MySQL. Tout d'abord, éditez /etc/courier/authdaemonrc et changez la valeur de authmodulelist pour qu'elle se lise :

vi /etc/courier/authdaemonrc
[...]

authmodulelist="authmysql"

[...]

Faites ensuite une sauvegarde de /etc/courier/authmysqlrc et videz l'ancien fichier :

cp /etc/courier/authmysqlrc /etc/courier/authmysqlrc_orig
cat /dev/null> /etc/courier/authmysqlrc

Ouvrez ensuite /etc/courier/authmysqlrc et insérez-y les lignes suivantes :

vi /etc/courier/authmysqlrc
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

Redémarrez ensuite Courier :

/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

En courant

telnet localhost pop3

vous pouvez voir si votre serveur POP3 fonctionne correctement. Il devrait rendre +OK Bonjour. (Tapez quit pour revenir au shell Linux.)

[email protected] :/etc/postfix# telnet localhost pop3
Essai 127.0.0.1...
Connecté à localhost.localdomain.
Le caractère d'échappement est '^]'.
+OK Bonjour.
quitter
+OK Meilleure chance la prochaine fois.
Connexion fermée par un hôte étranger.

8 Modifier /etc/aliases

Nous devons maintenant modifier /etc/aliases et y spécifier un alias pour le postmaster. Vous pouvez spécifier l'une de vos adresses e-mail existantes afin de pouvoir recevoir des notifications au postmaster. Modifiez également la ligne root afin que les e-mails pour root soient également transférés au postmaster :

vi /etc/aliases
# Added by installer for initial user

root:   postmaster

postmaster: [email protected]

Chaque fois que vous modifiez /etc/aliases, vous devez exécuter

newaliases

ensuite et relancez Postfix :

/etc/init.d/postfix restart  

9 Installer amavisd-new, SpamAssassin et ClamAV

Pour installer amavisd-new, spamassassin et clamav, exécutez la commande suivante :

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

Ensuite, nous devons configurer amavisd-new. La configuration est divisée en plusieurs fichiers qui résident dans le répertoire /etc/amavis/conf.d. Jetez un œil à chacun d'eux pour vous familiariser avec la configuration. La plupart des paramètres sont corrects, cependant nous devons modifier trois fichiers :

Il faut d'abord activer ClamAV et SpamAssassin dans /etc/amavis/conf.d/15-content_filter_mode en décommentant les lignes @bypass_virus_checks_maps et @bypass_spam_checks_maps :

vi /etc/amavis/conf.d/15-content_filter_mode

Le fichier devrait ressembler à ceci :

use strict;



# You can modify this file to re-enable SPAM checking through spamassassin

# and to re-enable antivirus checking.



#

# Default antivirus checking mode

# Uncomment the two lines below to enable it back

#



@bypass_virus_checks_maps = (

   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);





#

# Default SPAM checking mode

# Uncomment the two lines below to enable it back

#



@bypass_spam_checks_maps = (

   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);



1;  # insure a defined return

Ensuite, vous devriez jeter un œil aux paramètres de spam et aux actions pour les spams/virus-mails dans /etc/amavis/conf.d/20-debian_defaults. Il n'est pas nécessaire de modifier quoi que ce soit si les paramètres par défaut vous conviennent. Le fichier contient de nombreuses explications, il n'est donc pas nécessaire d'expliquer les paramètres ici :

vi /etc/amavis/conf.d/20-debian_defaults
$QUARANTINEDIR = "$MYHOME/virusmails";



$log_recip_templ = undef;    # disable by-recipient level-0 log entries

$DO_SYSLOG = 1;              # log via syslogd (preferred)

$syslog_ident = 'amavis';    # syslog ident tag, prepended to all messages

$syslog_facility = 'mail';

$syslog_priority = 'debug';  # switch to info to drop debug output, etc



$enable_db = 1;              # enable use of BerkeleyDB/libdb (SNMP and nanny)

$enable_global_cache = 1;    # enable use of libdb-based cache if $enable_db=1



$inet_socket_port = 10024;   # default listenting socket



$sa_spam_subject_tag = '***SPAM*** ';

$sa_tag_level_deflt  = 2.0;  # add spam info headers if at, or above that level

$sa_tag2_level_deflt = 6.31; # add 'spam detected' headers at that level

$sa_kill_level_deflt = 6.31; # triggers spam evasive actions

$sa_dsn_cutoff_level = 10;   # spam level beyond which a DSN is not sent



$sa_mail_body_size_limit = 200*1024; # don't waste time on SA if mail is larger

$sa_local_tests_only = 0;    # only tests which do not require internet access?



[...]

$final_virus_destiny      = D_DISCARD;  # (data not lost, see virus quarantine)

$final_banned_destiny     = D_BOUNCE;   # D_REJECT when front-end MTA

$final_spam_destiny       = D_BOUNCE;

$final_bad_header_destiny = D_PASS;     # False-positive prone (for spam)

[...]

Enfin, éditez /etc/amavis/conf.d/50-user et ajoutez la ligne $pax='pax'; au milieu :

vi /etc/amavis/conf.d/50-user
[...]

$pax='pax';

[...]

Ensuite, exécutez ces commandes pour ajouter l'utilisateur clamav au groupe amavis et pour redémarrer amavisd-new et ClamAV :

adduser clamav amavis
/etc/init.d/amavis restart
/etc/init.d/clamav-daemon restart

Ensuite, nous devons éditer le fichier de configuration du démon Freshclam (c'est le démon qui récupère régulièrement et automatiquement les dernières signatures de virus d'un miroir ClamAV) car il contient un petit bogue. Ouvrez /etc/clamav/freshclam.conf et modifiez la ligne NotifyClamd comme indiqué ci-dessous :

vi /etc/clamav/freshclam.conf
[...]

NotifyClamd /etc/clamav/clamd.conf

[...]

Redémarrez ensuite Freshclam (assurez-vous qu'aucun autre processus Freshclam (peut-être d'une autre installation ClamAV) n'est en cours d'exécution, car alors notre Freshclam ne démarrera pas) :

/etc/init.d/clamav-freshclam restart

Nous devons maintenant configurer Postfix pour diriger les e-mails entrants via amavisd-new :

postconf -e 'content_filter =amavis:[127.0.0.1]:10024'
postconf -e 'receive_override_options =no_address_mappings'

Ajoutez ensuite les lignes suivantes à /etc/postfix/master.cf :

vi /etc/postfix/master.cf
[...]

amavis unix - - - - 2 smtp

        -o smtp_data_done_timeout=1200

        -o smtp_send_xforward_command=yes



127.0.0.1:10025 inet n - - - - smtpd

        -o content_filter=

        -o local_recipient_maps=

        -o relay_recipient_maps=

        -o smtpd_restriction_classes=

        -o smtpd_client_restrictions=

        -o smtpd_helo_restrictions=

        -o smtpd_sender_restrictions=

        -o smtpd_recipient_restrictions=permit_mynetworks,reject

        -o mynetworks=127.0.0.0/8

        -o strict_rfc821_envelopes=yes

        -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

        -o smtpd_bind_address=127.0.0.1

Redémarrez ensuite Postfix :

/etc/init.d/postfix restart

Maintenant lancez

netstat -tap

et vous devriez voir Postfix (master) en écoute sur les ports 25 (smtp) et 10025, et amavisd-new sur le port 10024 :

[email protected] :/usr/local/sbin# netstat -tap
Connexions Internet actives (serveurs et établissements)
Proto Recv-Q Send-Q Adresse locale           Adresse étrangère         État       PID/Nom du programme
TCP 0 0 localhost.localdo:10024 *:* Écoutez 16043 / Amavisd (Mast
TCP 0 0 localhost.localdo:10025 *:* Écoutez 15794 / Master
TCP 0 0 LocalHost.Localdo:MySQL * :* Écoutez 4783 / mysqld
TCP 0 0 *:SMTP *:* Écoutez 15794 / Master
TCP6 0 0 *:IMAPS *:* ÉCOUTEZ 13452 / COURERTCPD
TCP6 0 0 *:POP3S *:* Écoutez 13517 / COURERTCPD
TCP6 0 0 *:POP3 *:* Écoutez 13480 / COURERTCPD
TCP6 0 0 *:IMAP2 *:* ÉCOUTEZ 13412 / C OURERTCPD
TCP6 0 0 *:www *:* Écoutez 4489 / apache2
TCP6 0 0 *:SSH *:* Écoutez 3193 / sshd

 

10 Installer Razor, Pyzor et DCC et configurer SpamAssassin

Razor, Pyzor et DCC sont des filtres anti-spam qui utilisent un réseau de filtrage collaboratif. Pour les installer, exécutez

apt-get install razor pyzor dcc-client

Maintenant, nous devons dire à SpamAssassin d'utiliser ces trois programmes. Modifiez /etc/spamassassin/local.cf et ajoutez-y les lignes suivantes :

vi /etc/spamassassin/local.cf
[...]



# dcc

use_dcc 1

dcc_path /usr/bin/dccproc

dcc_add_header 1

dcc_dccifd_path /usr/sbin/dccifd



#pyzor

use_pyzor 1

pyzor_path /usr/bin/pyzor

pyzor_add_header 1



#razor

use_razor2 1

razor_config /etc/razor/razor-agent.conf



#bayes

use_bayes 1

use_bayes_rules 1

bayes_auto_learn 1

Redémarrez ensuite amavisd-new :

/etc/init.d/amavis restart

11 notifications de dépassement de quota

Si vous souhaitez recevoir des notifications sur tous les comptes de messagerie qui dépassent le quota, procédez comme suit :

cd /usr/local/sbin/
wget http://puuhis.net/vhcs/quota.txt
mv quota.txt quota_notify
chmod 755 quota_notify

Ouvrez /usr/local/sbin/quota_notify et modifiez les variables en haut. Plus bas dans le fichier (vers la fin), il y a deux lignes où vous devez ajouter un signe % :

vi /usr/local/sbin/quota_notify
[...]

my $POSTFIX_CF = "/etc/postfix/main.cf";

my $MAILPROG = "/usr/sbin/sendmail -t";

my $WARNPERCENT = 80;

my @POSTMASTERS = ('[email protected]');

my $CONAME = 'My Company';

my $COADDR = '[email protected]';

my $SUADDR = '[email protected]';

my $MAIL_REPORT = 1;

my $MAIL_WARNING = 1;

[...]

           print "Subject: WARNING: Your mailbox is $lusers{$luser}% full.\n";

[...]

           print "Your mailbox: $luser is $lusers{$luser}% full.\n\n";

[...]

Exécuter

crontab -e

pour créer une tâche cron pour ce script :

0 0 * * * /usr/local/sbin/quota_notify &> /dev/null

(Note (un peu hors sujet) :sur Ubuntu crontab -e ouvrira automatiquement l'éditeur nano. Si vous avez l'habitude de travailler avec l'éditeur vi (comme moi), lancez les commandes suivantes :

rm -f /etc/alternatives/editor
ln -s /usr/bin/vi /etc/alternatives/editor

Ensuite, exécutez crontab -e et vi apparaîtra.)

12 Tester le suffixe

Pour voir si Postfix est prêt pour SMTP-AUTH et TLS, exécutez

telnet localhost 25

Après avoir établi la connexion à votre type de serveur de messagerie Postfix

ehlo localhost

Si vous voyez les lignes

250-STARTTLS

et

250-AUTH

tout va bien :

[email protected] :/usr/local/sbin# telnet localhost 25
Essai 127.0.0.1...
Connecté à localhost.localdomain.
Le caractère d'échappement est '^]'.
220 server1.example.com ESMTP Postfix (Ubuntu)
ehlo localhost
250-server1.example.com
250-PIPELINING
250-SIZE 10240000
250 -VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connexion fermée par un hôte étranger.
[email protected] :/usr/local/sbin#

Saisissez

quit

pour revenir au shell système.

13 Remplir la base de données et tester

Pour remplir la base de données, vous pouvez utiliser le shell MySQL :

mysql -u root -p
UTILISE mail ;

Il faut au moins créer des entrées dans les tables domaines et utilisateurs :

INSERT INTO `domains` (`domain`) VALUES ('example.com');
INSERT INTO `users` (`email`, `password`, `quota`) VALUES ('[email protected]', CRYPT('secret'), 10485760);

(Veuillez prendre soin d'utiliser la syntaxe ENCRYPT dans la deuxième instruction INSERT afin de chiffrer le mot de passe !)

Si vous souhaitez créer des entrées dans les deux autres tables, cela ressemblerait à ceci :

INSERT INTO `forwardings` (`source`, `destination`) VALUES ('[email protected]', '[email protected]');
INSERT INTO `transport` (`domain`, `transport`) VALUES ('exemple.com', 'smtp:mail.exemple.com');

Pour quitter le shell MySQL, tapez

quit;

Pour la plupart des gens, c'est plus facile s'ils ont une interface graphique pour MySQL; par conséquent, vous pouvez également utiliser phpMyAdmin (dans cet exemple sous http://192.168.0.100/phpmyadmin/ ou http://server1.example.com/phpmyadmin/) pour administrer le mail base de données. Encore une fois, lorsque vous créez un utilisateur, assurez-vous d'utiliser la fonction ENCRYPT pour chiffrer le mot de passe :

Je ne pense pas avoir à expliquer davantage la table des domaines et des utilisateurs.

La table des transferts peut avoir des entrées comme celles-ci :

source destination  
[email protected] [email protected] Redirection des e-mails pour [email protected] vers [email protected]
@exemple.com [email protected] Crée un compte fourre-tout pour [email protected] Tous les e-mails destinés à example.com arriveront à [email protected], à l'exception de ceux qui existent dans la table des utilisateurs (c'est-à-dire si [email protected] existe dans la table des utilisateurs, les e-mails à [email protected] arriveront toujours à [email protected]).
@exemple.com @unautredomaine.tld Cela redirige tous les e-mails vers example.com vers le même utilisateur sur anotherdomain.tld. Par exemple, les e-mails à [email protected] seront transférés à [email protected]
[email protected] [email protected], [email protected] Transférer les e-mails de [email protected] vers deux adresses e-mail ou plus. Toutes les adresses e-mail répertoriées sous destination reçoivent une copie de l'e-mail.

La table de transport peut avoir des entrées comme celles-ci :

domaine transport  
exemple.com  : Distribue les e-mails pour example.com localement. C'est comme si cet enregistrement n'existait pas du tout dans cette table.
exemple.com smtp:mail.anotherdomain.tld Envoie tous les e-mails pour example.com via smtp au serveur mail.anotherdomain.com.
exemple.com smtp:mail.anotherdomain.tld:2025 Envoie tous les e-mails pour example.com via smtp au serveur mail.anotherdomain.com, mais sur le port 2025, et non 25 qui est le port par défaut pour smtp.
exemple.com

smtp :[1.2.3.4]
smtp :[1.2.3.4]:2025
smtp :[mail.anotherdomain.tld]

Les crochets empêchent Postfix d'effectuer des recherches dans l'enregistrement DNS MX pour l'adresse entre crochets. Logique pour les adresses IP.
.exemple.com smtp:mail.anotherdomain.tld Le courrier pour n'importe quel sous-domaine de example.com est livré à mail.anotherdomain.tld.
* smtp:mail.anotherdomain.tld Tous les e-mails sont envoyés à mail.anotherdomain.tld.
[email protected] smtp:mail.anotherdomain.tld Emails for [email protected] are delivered to mail.anotherdomain.tld.

See

man transport 

pour plus de détails.

Please keep in mind that the order of entries in the transport table is important! The entries will be followed from the top to the bottom.

Important: Postfix uses a caching mechanism for the transports, therefore it might take a while until you changes in the transport table take effect. If you want them to take effect immediately, run

postfix reload 

after you have made your changes in the transport table.

14 References

  • Tutorial:ISP-style Email Service with Debian-Sarge and Postfix 2.1:http://workaround.org/articles/ispmail-sarge/
  • Postfix + Quota:http://vhcs.net/new/modules/newbb/viewtopic.php?topic_id=3496&forum=17
  • Mail Passwords Encrypted using saslauthd:http://www.syscp.de/docs/public/contrib/cryptedmailpws

  • Postfix MTA:http://www.postfix.org/
  • Postfix Quota Patch:http://web.onda.com.br/nadal/
  • phpMyAdmin :http://www.phpmyadmin.net/
  • Ubuntu :http://www.ubuntu.com/

Ubuntu
  1. Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 14.04LTS)

  2. Hébergement virtuel avec Proftpd et MySQL (incl. Quota) sur Ubuntu 14.04LTS

  3. Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 13.10)

  4. Utilisateurs virtuels et domaines avec Sendmail

  5. Serveur de messagerie avec des utilisateurs virtuels et des domaines utilisant Postfix et Dovecot sur un VPS CentOS 6

Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 12.10)

Hébergement virtuel avec vsftpd et MySQL sur Ubuntu 12.10

Hébergement virtuel avec Proftpd et MySQL (incl. Quota) sur Ubuntu 12.10

Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Debian Wheezy)

Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (CentOS 6.3 x86_64)

Utilisateurs virtuels et domaines avec Postfix, Courier, MySQL et SquirrelMail (Fedora 18 x86_64)