{{tag>smtp mail serveur howto installation postfix antivirus antispam amavis spamassassin}} ====== Configurer un antivirus et antispam sur votre serveur de mail ====== Comme vous avez pu le voir sur la page [[sysadmin:install_postfix_sasl|précédente]], certaines directives de la configuration de postfix appellent amavis pour le filtrage du contenu. Amavis peut être perçu comme un conteneur pouvant contenir ... ce que l'en veut ... pour filtrer le contenu des mails. L'idée est donc d'utiliser ce conteneur pour effectuer sur les mails : * du filtrage antispam avec spamassassin (SA) * du filtrage de virus avec clamav Le configuration sera la suivante : utilisation de clamav en démon, mais utilisation de spamassassin sans utiliser le démon. Les bases de signature de virus de clamav seront mises a jour grâce à clamav-freschlam. ===== Prérequis ===== Comme d'habitude nous nous baserons sur une machine en debian stable (squeeze à l'heur ou j'écris ces lignes). L'utilisation de l'antispam va générer pas mal de requêtes DNS, il est donc fortement conseillé d'avoir un serveur/cche DNS local sur ce serveur. ===== Installation de base ===== # apt-get install amavisd-new clamav clamav-freshclam clamav-daemon spamassassin ===== Installation(s) optionnelle(s) ===== ==== Archives en pièce jointe ==== Si vous souhaitez que clamav puisse regarder a l'intérieur des pièces jointes compressées pour y chercher des virus, il est conseillé d'installer les paquets suivants. Vous pouvez néanmoins réduire cette liste si vous ne souhaitez pas gérer tous les types d'archives ci dessous. # apt-get install arj unrar-free zoo nomarch lzop cabextract p7zip Si vous avez ajouté les depots non-free, vous pouvez utiliser cette commande à la place : apt-get install lha arj unrar zoo nomarch lzop cabextract p7zip ==== Partition dédiée à la quarantaine ==== Si comme moi vous souhaitez utiliser une partition séparée pour la quarantaine (dans mon cas un //Logical Volume// LVM de 500 Mo sur le //Volume Group// vg0) : # lvcreate -n virusmails -L 500M vg0 # mkfs.ext4 /dev/vg0/virusmails # echo "/dev/vg0/virusmails /var/lib/amavis/virusmails ext4 defaults 0 2" >> /etc/fstab # mount /var/lib/amavis/virusmails # chown amavis:amavis /var/lib/amavis/virusmails ==== Répertoires temporaires d'amavis en tmpfs ==== Pour gagner en performance on peut utiliser des partitions tmpfs pour les fichiers temporaires d'amavis. Ainsi les acces se feront en mémoire et non plus sur le disque. La taille de ces lecteurs tmpfs est à modifier selon la charge du serveur, la configuration et bien sur la quantité de RAM disponible. Pour simplifier /var/lib/amavis/tmp est dépendant du nombre d’instances d’amavisd et de la taille maximale d’un message. Les paramètres mis ici sont ok pour 5 instances et un message_size_limit de 10 Mo, ce qui est largement suffisant dans la config par défaut d’amavisd (2 instances) * stopper amavis s'il est démarré :# /etc/init.d/amavis stop * déclarer ces partitions dans le fichier /etc/fstab (adaptez les tailles au besoin) : # cat << EOF >> /etc/fstab tmpfs /var/lib/amavis/db tmpfs rw,size=10m,mode=750,uid=amavis,gid=amavis 0 0 tmpfs /var/lib/amavis/tmp tmpfs rw,size=150m,mode=770,uid=amavis,gid=amavis 0 0 EOF * monter ces partitions : # mount /var/lib/amavis/db # mount /var/lib/amavis/tmp * redémarrer amavis :# /etc/init.d/amavis start ==== Pas de compilation des règles spamassassin ==== Pour gagner en performance on peut aussi choisir de compiler les règles spamassassin. Ce choix n'a pas été fait pour ne pas avoir a installer "inutilement" un compilateur sur un serveur. ===== Configuration initiale ===== ==== Configuration de clamav ==== * ajouter l’utilisateur clamav au groupe amavis :# adduser clamav amavis * La configuration par défaut de clamd conviendra ==== Configuration de clamav-freshclam ==== * Modifier le fichier /etc/clamav/freshclam.conf pour utiliser en plus un miroir de signature français, et notifier le demon clamd qu'une mise a jour de la base de signature à été effectuée, par exemple à l'aide de la commande suivante : # cat << EOF >> /etc/clamav/freshclam.conf DatabaseMirror db.fr.clamav.net NotifyClamd /etc/clamav/clamd.conf EOF la directive NotifyClamd prend bien comme valeur l'emplacement du fichier de configuration de clamd, ca n'est pas une erreur, l'application se chargeant d'aller parcourir ce fichier pour y trouver l'emplacement du socket à utiliser * Il ne reste plus qu'a redémarrer ces services pour prendre cette configuration en compte : # /etc/init.d/clamav-freshclam restart # /etc/init.d/clamav-daemon restart ==== Configuration d'amavis ==== * Editer le fichier /etc/amavis/conf.d/50-user et y mettre le contenu suivant en remplacant "mail.mondomaine.com" par le "mailname" de votre serveur de mail et en adaptant votre(vos) nom(s) de domaine use strict; # # Place your configuration directives here. They will override those in # earlier files. # # See /usr/share/doc/amavisd-new/ for documentation and examples of # the directives you can use in this file # # nombre de fils (prefork) (valeurs courantes : entre 2 et 30) $max_servers = 2; # les domaines mail gérés par ce serveur (tous les sous domaines seront inclus) @local_domains_maps = ( [ '.domaine.com', '.domaine.org', '.domaine2.com' ] ); $sa_tag_level_deflt = -1000; # ajouter le score antispam dans les entetes a partir de ce score (dans ce cas pour tous les mails) $myhostname = "mail.mondomaine.com"; # optionnel - liste des domaines pour lesquels ne pas effectuer de check sur l'entete des mails (connus comme étant pourris ;p) @bypass_header_checks_maps = (['.lesjeudis.com', '.lists.ubuntu.com']); # pour rendre la definition de bypass_header_checks_maps ci dessus utile si vous l'avez défini @bad_header_lovers_maps = @bypass_header_checks_maps; # reinjection de mail dans postfix a la sortie d'amavis $notify_method = 'smtp:[127.0.0.1]:10025'; $forward_method = 'smtp:[127.0.0.1]:10025'; # ne pas bouncer les messages bannis (virus) : inutile de notifier la personne qui spamme de virus que cette adresse mail répond $final_banned_destiny = D_DISCARD; # accepter les messages ayant un mauvais entete $final_bad_header_destiny = D_PASS; # et ne pas les stocker en plus en quarantaine $bad_header_quarantine_to = undef; # laisser passer le spam (il sera taggué comme spam) $final_spam_destiny = D_PASS; #donc ne pas mettre le spam en quarantaine : ca n'a pas de sens vu que le mail a été délivré a l'utilisateur $spam_quarantine_to = undef; #------------ Do not modify anything below this line ------------- 1; # ensure a defined return * Editer le fichier /etc/amavis/conf.d/15-content_filter_mode et dé-commenter (enlever les # de début de lignes) les 2 couples de ligne suivants pour activer les filtrages antivirus et antispam : * @bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); * @bypass_spam_checks_maps = ( \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); * Redémarrer maintenant amavis pour prendre tout cela en compte : # /etc/init.d/amavis restartEn regardant de plus pres dans le fichier de log /var/log/syslog, vous devriez voir des lignes contenant : amavis[4860]: ANTI-SPAM-SA code loaded ... amavis[4860]: Using primary internal av scanner code for ClamAV-clamd indiquant bien qu'amavis utilisera le démon clamd, ainsi que SpamAssassin. ===== Configuration du routage postfix ===== Maintenant que chacune des briques est en place il est temps de configurer postfix pour utiliser tout ca. Utiliser la commande suivante pour ajouter la configuration nécessaire : * Le point d'entrée postfix->amavis :cat << EOF >> /etc/postfix/master.cf # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== amavisfeed unix - - n - 2 lmtp -o lmtp_data_done_timeout=1200 -o lmtp_send_xforward_command=yes -o lmtp_tls_note_starttls_offer=no EOF Le nombre dans la colonne "maxproc" (ici 2) doit être le meme que le $max_servers défini dans la configuration d'amavis. Adapter au besoin * Configuration d'un nouveau service pour réinjecter le mail a sa sortie d'amavis dans postfix : cat << EOF >> /etc/postfix/master.cf 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o smtpd_delay_reject=no -o smtpd_client_restrictions=permit_mynetworks,reject -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o smtpd_restriction_classes= -o mynetworks=127.0.0.0/8 -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters -o local_header_rewrite_clients= -o smtpd_milters= -o local_recipient_maps= -o relay_recipient_maps= EOF * Et pour finir ajouter le filtrage du contenu dans postfix : ajouter dans le fichier /etc/postfix/main.cf : # filtrage du contenu avec amavis content_filter=amavisfeed:[127.0.0.1]:10024 * Il ne reste plus qu'a recharger la configuration de postfix :# /etc/init.d/postfix reload. On peut vérifier grace a la commande suivant qu'il ecoute bien maintenant sur 127.0.0.1:10025 :# netstat -tulpen | grep master tcp 0 0 127.0.0.1:10025 0.0.0.0:* LISTEN 0 17164728 6345/master tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 0 15608256 6345/master TODO : test eicar spam+virus TODO: finir =) sa-learn; sa-update ===== References ===== * http://www.starbridge.org/spip/spip.php?article12#Amavisd-et-SA * http://www.collet-matrat.com/?p=270 * http://www.majorxtrem.be/2009/11/19/installation-serveur-mail-postfix-amavisd-mysql-spamassassin-dspam-courier-imap/ * http://wiki.centos.org/HowTos/Amavisd