Avant tout, un très bon lien pour ceux qui ont le courage de tout lire ...: http://forum.swsoft.com/showthread.php?s=&threadid=28645

Passons à l'installation:

Les prérequis:

doivent déjà être installés sur votre serveur:

  • mysqldevel , que l'on rempalcera sur une debian par libmysqlclient10-dev
  • openssl-devel
  • make
  • gcc

Pour cela, on utilise la fonction apt-get, et cela se fait tout seul:

apt-get install libmysqlclient10-dev
apt-get install openssl-devel
apt-get install make
apt-get install gcc

1ère étape: récupérer les fichiers:

Pour cela, on va aller les récupérer sur le site de Mr Meshier qui a eu la bonne idée de compiler tout cela:

cd /tmp
wget http://meshier.com/wp-content/uploads/2006/09/qmail-103-greylist-psa8.tar.gz
tar -xzf qmail-103-greylist-psa8.tar.gz

on se positionne dans le répertoire, et on peut alors passer à la deuxième étape.

2ème étape: modification des fichiers

Dans le fichier Makefile, il va falloir modifier 2 lignes: Modifier

/usr/lib/mysql/libmysqlclient.a

en

/usr/lib/libmysqlclient.a

et cela donc à deux reprises

editer le fichier local.scan.c et adapter les lignes ci-dessous à vos besoins:

#define MYSQLHOST "localhost"
#define MYSQLUSER "greylist"
#define MYSQLPASS "password"
#define MYSQLDB "qmail"
#define BLOCK_EXPIRE 4 /* minutes until email is accepted */
#define RECORD_EXPIRE 1500 /* minutes until record expires */
#define RECORD_EXPIRE_GOOD 36 /* days until record expires after accepting email */

En ce qui me concerne, je met 9 pour BLOCK_EXPIRE et 15 pour EXPIRE_GOOD, ce qui rend le filtre assez agressif, mais c'est un choix perso.

3ème étape: création de la base sql

Il faut maintenant créer la base sql permettant de gérer tout ce monde. Les puristes préfèreront la créer via ssh, mais il semble que Plesk complique la donne dans certains cas.

Ce qu'il faut faire:

  • Créer une base ayant le même non que ce que vous avez indiqué dans MYSQLDB
  • Créer un utilisateur ayant le même nom que ce que vous avez précisé dans MYSQLUSER et avec le même mot de passe que MUYSQLPASS
  • Créer une table selon le schéma ci-dessous:
--
-- Table structure for table `relaytofrom`
--
CREATE TABLE relaytofrom (
id bigint(20) NOT NULL auto_increment,
relay_ip varchar(16) default NULL,
mail_from varchar(255) default NULL,
rcpt_to varchar(255) default NULL,
block_expires datetime NOT NULL default '0000-00-00 00:00:00',
record_expires datetime NOT NULL default '0000-00-00 00:00:00',
blocked_count bigint(20) NOT NULL default '0',
passed_count bigint(20) NOT NULL default '0',
aborted_count bigint(20) NOT NULL default '0',
origin_type enum('MANUAL','AUTO') NOT NULL default 'MANUAL',
create_time datetime NOT NULL default '0000-00-00 00:00:00',
last_update timestamp(14) NOT NULL,
PRIMARY KEY (id),
KEY relay_ip (relay_ip),
KEY mail_from (mail_from(20)),
KEY rcpt_to (rcpt_to(20))
) TYPE=MyISAM;

Pour ceux qui veulent créer la base en ssh:

mysql -u root -p
CREATE DATABASE qmail;
GRANT ALL ON qmail.* TO 'greylist'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

A adapter en fonction de vos choix de noms d'utilisateur, base, ...

4ème étape: installation des fichiers

Il faut maintenant installer les fichiers sur le serveur, et surtout les compiler.

make

Cela doit vous faire dérouler une longue liste ... suffit d'être patient !

/etc/init.d/qmail stop
cp qmail-envelope-scanner /var/qmail/bin/.
cp -f qmail-smtpd /var/qmail/bin/.
chown root.qmail /var/qmail/bin/qmail-envelope-scanner
chown root.qmail /var/qmail/bin/qmail-smtpd
/etc/init.d/qmail start

En principe, tout est désormais prêt.

5ème étape: création d'une tâche cron

On va créer un fichier qui va faire la purge de la base et du fichier tempon.

nano /etc/cron.daily/greylist

on y colle le code suivant, en adaptant certaines lignes à votre installation (on en le répètera jamais assez ...)

#!/usr/bin/perl
use strict;
use warnings;

use constant DBD => 'DBI:mysql:qmail:localhost:3306';
use constant DBUSER => 'milter';
use constant DBPASS => 'greylist';

use DBI;

system ("cat /dev/null > /tmp/greylist_dbg.txt");

my $dbh = DBI->connect(DBD,DBUSER,DBPASS) or die "can't connect to db ", $DBI::errstr, ":$!";

$dbh->do("DELETE FROM relaytofrom WHERE record_expires < NOW() - INTERVAL 1 HOUR AND origin_type = 'AUTO'");
$dbh->do(”OPTIMIZE TABLE relaytofrom”);

$dbh->disconnect;

exit;
---

6ème étape: le test !!

Maintenant, reste à tester le tout:

  • envoyer un mail sur votre serveur depuis un compte externe (genre hotmail, gmail ou autre, mais qui ne soit pas hébergé par votre serveur)
  • taper dans la console ssh:
tail -f /tmp/greylist_dbg.txt

Vous devez voir une ou deux lignes de texte.

  • dernière vérif: aller dans la base de données et vérifier qu'une ligne a bien été créée avec votre adresse mail externe.

Si tout fonctionne, le mail n'arrivera pas immédiatement sur votre serveur, mais après un délai au moins égal au temps indiqué dans le champ BLOCK_EXPIRE

Dans le cas contraire:

  • Vérifier que votre utilisateur de la bdd a suffisamment de droits
  • Reprendre la procédure et vérifier qu'aun point ne bloque.