Configuration Serveur · 8 min read · Jan 17, 2026

Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Ubuntu 12.04 LTS) - Page 3

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 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 se trouvent 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 :

Tout d’abord, nous devons 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; # Vous pouvez modifier ce fichier pour réactiver la vérification des SPAM via spamassassin # et pour réactiver la vérification antivirus. # # Mode de vérification antivirus par défaut # Veuillez noter que la vérification antivirus est DÉSACTIVÉE par # défaut. # Si vous souhaitez l'activer, veuillez décommenter les lignes suivantes : @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); # # Mode de vérification SPAM par défaut # Veuillez noter que la vérification anti-spam est DÉSACTIVÉE par # défaut. # Si vous souhaitez l'activer, veuillez décommenter les lignes suivantes : @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); 1; # assurez un retour défini |

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

vi /etc/amavis/conf.d/20-debian_defaults

| [...] $QUARANTINEDIR = "$MYHOME/virusmails"; $quarantine_subdir_levels = 1; # activer le hachage du répertoire de quarantaine $log_recip_templ = undef; # désactiver les entrées de journal de niveau-0 par destinataire $DO_SYSLOG = 1; # journaliser via syslogd (préféré) $syslog_ident = 'amavis'; # balise d'identification syslog, ajoutée à tous les messages $syslog_facility = 'mail'; $syslog_priority = 'debug'; # passer à info pour supprimer la sortie de débogage, etc $enable_db = 1; # activer l'utilisation de BerkeleyDB/libdb (SNMP et nanny) $enable_global_cache = 1; # activer l'utilisation du cache basé sur libdb si $enable_db=1 $inet_socket_port = 10024; # socket d'écoute par défaut $sa_spam_subject_tag = '*SPAM* '; $sa_tag_level_deflt = 2.0; # ajouter des en-têtes d'information sur le spam si à, ou au-dessus de ce niveau $sa_tag2_level_deflt = 6.31; # ajouter des en-têtes 'spam détecté' à ce niveau $sa_kill_level_deflt = 6.31; # déclenche des actions d'évasion de spam $sa_dsn_cutoff_level = 10; # niveau de spam au-delà duquel un DSN n'est pas envoyé [...] $final_virus_destiny = D_DISCARD; # (données non perdues, voir quarantaine de virus) $final_banned_destiny = D_BOUNCE; # D_REJECT lorsque MTA frontal $final_spam_destiny = D_BOUNCE; $final_bad_header_destiny = D_PASS; # Prone aux faux positifs (pour le spam) [...] |

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

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

| use strict; # Placez vos directives de configuration ici. Elles remplaceront celles des # fichiers précédents. # # Voir /usr/share/doc/amavisd-new/ pour la documentation et des exemples des # directives que vous pouvez utiliser dans ce fichier # $pax='pax'; #------------ Ne modifiez rien en dessous de cette ligne ------------- 1; # assurez un retour défini |

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

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

Maintenant, nous devons configurer Postfix pour diriger les e-mails entrants à travers amavisd-new :

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

Ensuite, ajoutez 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 |

Puis redémarrez Postfix :

/etc/init.d/postfix restart

Maintenant, exécutez

netstat -tap

et vous devriez voir Postfix (master) à l’écoute sur le port 25 (smtp) et 10025, et amavisd-new sur le port 10024 :

root@server1:/etc/courier# 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:10025 : LISTEN 25911/master
tcp 0 0 localhost.localdo:mysql : LISTEN 3895/mysqld
tcp 0 0 :http : LISTEN 4845/apache2
tcp 0 0
:ssh : LISTEN 649/sshd
tcp 0 0 :smtp : LISTEN 25911/master
tcp 0 0 localhost.localdo:10024
: LISTEN 24534/amavisd (mast
tcp 0 52 server1.example.com:ssh 192.168.0.199:4745 ÉTABLI 847/0
tcp6 0 0 [::]:pop3 [::]:
LISTEN 20989/couriertcpd
tcp6 0 0 [::]:imap2 [::]: LISTEN 20921/couriertcpd
tcp6 0 0 [::]:ssh [::]:
LISTEN 649/sshd
tcp6 0 0 [::]:smtp [::]: LISTEN 25911/master
tcp6 0 0 [::]:imaps [::]:
LISTEN 20958/couriertcpd
tcp6 0 0 [::]:pop3s [::]:* LISTEN 21026/couriertcpd
root@server1:/etc/courier#


### 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 installer Razor et Pyzor, exécutez

apt-get install razor pyzor


DCC n'est pas disponible dans les dépôts Ubuntu 12.04, donc nous l'installons comme suit :

cd /tmp  
wget http://www.dcc-servers.net/dcc/source/dcc-dccproc.tar.Z  
tar xzvf dcc-dccproc.tar.Z  
cd dcc-dccproc-1.3.142  
./configure --with-uid=amavis  
make  
make install  
chown -R amavis:amavis /var/dcc  
ln -s /var/dcc/libexec/dccifd /usr/local/bin/dccifd

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

vi /etc/spamassassin/local.cf



| ```
[...]  
#dcc
use_dcc 1
dcc_path /usr/local/bin/dccproc

#pyzor
use_pyzor 1
pyzor_path /usr/bin/pyzor

#razor
use_razor2 1
razor_config /etc/razor/razor-agent.conf

#bayes
use_bayes 1
use_bayes_rules 1
bayes_auto_learn 1

Ensuite, nous devons activer le plugin DCC dans SpamAssassin. Ouvrez /etc/spamassassin/v310.pre et décommentez la ligne loadplugin Mail::SpamAssassin::Plugin::DCC :

vi /etc/spamassassin/v310.pre

| [...] # DCC - effectuer des vérifications de messages DCC. # # DCC est désactivé ici car il n'est pas open source. Voir la licence DCC # pour plus de détails. # loadplugin Mail::SpamAssassin::Plugin::DCC [...] |

Vous pouvez vérifier votre configuration SpamAssassin en exécutant :

spamassassin --lint

Cela ne devrait pas afficher d’erreurs.

Maintenant, il y a un petit bug dans le script d’initialisation d’amavisd-new. Ouvrez /etc/init.d/amavis…

vi /etc/init.d/amavis

… et commentez la ligne STOP=”–stop –quiet –pidfile $PIDFILE –name ${DAEMONNAME}” et ajoutez STOP=”–stop –quiet –pidfile $PIDFILE” à la place :

| [...] set -e START="--start --quiet --pidfile $PIDFILE --name ${DAEMONNAME} --startas ${DAEMON}" #STOP="--stop --quiet --pidfile $PIDFILE --name ${DAEMONNAME}" STOP="--stop --quiet --pidfile $PIDFILE" PARAMS= check_noncompatible_upgrade() [...] |

Redémarrez amavisd-new ensuite :

/etc/init.d/amavis restart

Maintenant, nous mettons à jour nos règles SpamAssassin comme suit :

sa-update --no-gpg

Nous créons un cron job afin que les règles soient mises à jour régulièrement. Exécutez

crontab -e

pour ouvrir l’éditeur de cron job. Créez le cron job suivant :

| 23 4 */2 * * /usr/bin/sa-update --no-gpg &> /dev/null |

Cela mettra à jour les règles tous les deux jours à 4h23.

11 Notifications de dépassement de quota

Si vous souhaitez recevoir des notifications concernant tous les comptes e-mail qui dépassent le quota, créez le fichier /usr/local/sbin/quota_notify :

cd /usr/local/sbin/
vi quota_notify

| #!/usr/bin/perl -w # Auteur <[email protected]> # # Ce script suppose que virtual_mailbox_base est défini # dans le fichier main.cf de postfix. Ce répertoire est supposé contenir # des répertoires qui contiennent eux-mêmes les maildirs de vos utilisateurs virtuels. # Par exemple : # # -----------/ # | # | # home/vmail/domains/ # | | # | | # example.com/ foo.com/ # | # | # ----------------- # | | | # | | | # user1/ user2/ user3/ # | # | # maildirsize # use strict; my $POSTFIX_CF = "/etc/postfix/main.cf"; my $MAILPROG = "/usr/sbin/sendmail -t"; my $WARNPERCENT = 80; my @POSTMASTERS = ('[email protected]'); my $CONAME = 'Ma Société'; my $COADDR = '[email protected]'; my $SUADDR = '[email protected]'; my $MAIL_REPORT = 1; my $MAIL_WARNING = 1; #get virtual mailbox base from postfix config open(PCF, "< $POSTFIX_CF") or die $!; my $mboxBase; while () { next unless /virtual_mailbox_base\s*=\s*(.*)\s*/; $mboxBase = $1; } close(PCF); #assume one level of subdirectories for domain names my @domains; opendir(DIR, $mboxBase) or die $!; while (defined(my $name = readdir(DIR))) { next if $name =~ /^\.\.? ; #skip '.' and '..' next unless (-d "$mboxBase/$name"); push(@domains, $name); } closedir(DIR); #iterate through domains for username/maildirsize files my @users; chdir($mboxBase); foreach my $domain (@domains) { opendir(DIR, $domain) or die $!; while (defined(my $name = readdir(DIR))) { next if $name =~ /^\.\.? ; #skip '.' and '..' next unless (-d "$domain/$name"); push(@users, {"$name\@$domain" => "$mboxBase/$domain/$name"}); } } closedir(DIR); #get user quotas and percent used my (%lusers, $report); foreach my $href (@users) { foreach my $user (keys %$href) { my $quotafile = "$href->{$user}/maildirsize"; next unless (-f $quotafile); open(QF, "< $quotafile") or die $!; my ($firstln, $quota, $used); while () { my $line = $_; if (! $firstln) { $firstln = 1; die "Erreur : fichier de quota corrompu $quotafile" unless ($line =~ /^(\d+)S/ ); $quota = $1; last if (! $quota); next; } die "Erreur : fichier de quota corrompu $quotafile" unless ($line =~ /\s*(-?\d+)/); $used += $1; } close(QF); next if (! $used); my $percent = int($used / $quota * 100); $lusers{$user} = $percent unless not $percent; } } #send a report to the postmasters if ($MAIL_REPORT) { open(MAIL, "| $MAILPROG"); select(MAIL); map {print "To: $_\n"} @POSTMASTERS; print "From: $COADDR\n"; print "Subject: Rapport quotidien de quota.\n"; print "RAPPORT QUOTIDIEN DE QUOTA :\n\n"; print "----------------------------------------------\n"; print "| % UTILISATION | NOM DU COMPTE |\n"; print "----------------------------------------------\n"; foreach my $luser ( sort { $lusers{$b} <=> $lusers{$a} } keys %lusers ) { printf("| %3d | %32s |\n", $lusers{$luser}, $luser); print "---------------------------------------------\n"; } print "\n--\n"; print "$CONAME\n"; close(MAIL); } #email a warning to people over quota if ($MAIL_WARNING) { foreach my $luser (keys (%lusers)) { next unless $lusers{$luser} >= $WARNPERCENT; # skip those under quota open(MAIL, "| $MAILPROG"); select(MAIL); print "To: $luser\n"; map {print "BCC: $_\n"} @POSTMASTERS; print "From: $SUADDR\n"; print "Subject: AVERTISSEMENT : Votre boîte aux lettres est $lusers{$luser}% pleine.\n"; print "Reply-to: $SUADDR\n"; print "Votre boîte aux lettres : $luser est $lusers{$luser}% pleine.\n\n"; print "Une fois que votre boîte e-mail a dépassé votre quota de stockage mensuel\n"; print "votre facturation mensuelle sera automatiquement ajustée.\n"; print "Veuillez envisager de supprimer des e-mails et de vider votre dossier de corbeille pour libérer de l'espace.\n\n"; print "Contactez <$SUADDR> pour plus d'assistance.\n\n"; print "Merci.\n\n"; print "--\n"; print "$CONAME\n"; close(MAIL); } } |

Assurez-vous d’ajuster les variables en haut (surtout l’adresse e-mail [email protected]).

Nous devons rendre le fichier exécutable :

chmod 755 quota_notify 

Exécutez

crontab -e

pour créer un cron job pour ce script :

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

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.