Configuration Serveur · 9 min read · Jan 12, 2026

Utilisateurs et domaines virtuels avec Postfix, Courier, MySQL et SquirrelMail (Debian Squeeze) - 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, préfixée à tous les messages $syslog_facility = 'mail'; $syslog_priority = 'debug'; # passez à 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 à ce niveau ou au-dessus $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 dans # les 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-daemon restart  
 /etc/init.d/clamav-freshclam 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 -o smtpd_bind_address=127.0.0.1 |

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 établis)  
 Proto  Recv-Q  Send-Q  Adresse locale           Adresse étrangère         État       PID/nom du programme  
 tcp      0      0  *:sunrpc                *:*                     LISTEN      605/portmap  
 tcp      0      0  *:ssh                   *:*                     LISTEN      1110/sshd  
 tcp      0      0  *:55384                 *:*                     LISTEN      617/rpc.statd  
 tcp      0      0  *:smtp                  *:*                     LISTEN      23615/master  
 tcp      0      0  localhost.localdo:10024 *:*                     LISTEN      22454/amavisd (mast  
 tcp      0      0  localhost.localdo:10025 *:*                     LISTEN      23615/master  
 tcp      0      0  localhost.localdo:mysql   *:*                     LISTEN      3838/mysqld  
 tcp      0      52 server1.example.com:ssh 192.168.0.199:3809      ÉTABLI   1136/0  
 tcp6     0      0  [::]:pop3               [::]:*                 LISTEN      19519/couriertcpd  
 tcp6     0      0  [::]:imap2              [::]:*                 LISTEN      19476/couriertcpd  
 tcp6     0      0  [::]:www                [::]:*                 LISTEN      4429/apache2  
 tcp6     0      0  [::]:ssh                [::]:*                 LISTEN      1110/sshd  
 tcp6     0      0  [::]:imaps              [::]:*                 LISTEN      19503/couriertcpd  
 tcp6     0      0  [::]:pop3s              [::]:*                 LISTEN      19536/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 Debian Squeeze, 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.138  
 ./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 DCC # licence 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.

Redémarrez amavisd-new ensuite :

/etc/init.d/amavis restart

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

sa-update --no-gpg

(Ensuite, nous allons créer un travail cron. Par défaut, la commande crontab -e lance l’éditeur nano sur Debian Squeeze. Si vous êtes habitué à vi, vous voudrez peut-être changer cela :

update-alternatives --config editor

Sélectionnez votre éditeur préféré :

root@server1:/tmp/dcc-dccproc-1.3.138# update-alternatives –config editor
Il y a 3 choix pour l’éditeur alternatif (fournissant /usr/bin/editor).

Sélection Chemin Priorité Statut

  • 0 /bin/nano 40 mode auto
    1 /bin/nano 40 mode manuel
    2 /usr/bin/vim.nox 40 mode manuel
    3 /usr/bin/vim.tiny 10 mode manuel

Appuyez sur entrée pour conserver le choix actuel[*], ou tapez le numéro de sélection : <– 2
update-alternatives: utilisant /usr/bin/vim.nox pour fournir /usr/bin/editor (éditeur) en mode manuel.
root@server1:/tmp/dcc-dccproc-1.3.138#

)

Nous créons un travail cron afin que les ensembles de règles soient mis à jour régulièrement. Exécutez

crontab -e

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

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

11 Notifications de dépassement de quota

Si vous souhaitez recevoir des notifications concernant tous les comptes de messagerie 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 sur le quota.\n"; print "RAPPORT QUOTIDIEN SUR LE 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 toute assistance supplémentaire.\n\n"; print "Merci.\n\n"; print "--\n"; print "$CONAME\n"; close(MAIL); } } |

Assurez-vous d’ajuster les variables en haut (en particulier 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 travail cron 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.