Un filtre anti spam et anti virus pour tous les mails en moins de 10 mn

Comme vous avez peut-être pu le voir sur le site ici, la configuration avec amavis et spamassassin et clamAV n’a rien de complexe pour mettre en œuvre sur son serveur de mail.
L’article est toujours valable pour une configuration un peu plus poussée.
Je vous propose dans cette procédure de garder votre serveur actuel, et de mettre en frontal un serveur relais qui va assurer le filtrage. Ne mettons pas tous nos œufs dans le même panier.
L’installation du serveur se fait en moins de 10 minutes.
Le serveur relais sera sur une DMZ avec le pare feu en frontal qui assurera la redirection du port 25. Pourquoi un firewall en frontal me direz-vous ? Parce que dans tous les cas de figure c’est mieux et surtout si il y a une attaque avec des millions de requêtes SMTP vous pourrez gérer les DROP de paquets directement sur votre firewall sans aller toucher au serveur relais.
Il ne faut pas une grosse machine, si elle est virtualisée (ce qui est mon cas) vous pourrez adapter la puissance en fonction du besoin.
L’avantage de la solution est que vous n’avez pas à toucher votre serveur mail actuel.
Votre machine sera une version minimale de Debian avec simplement le serveur SSH installé.
Voici le schéma :

Schémà filre mail

J’ai un réseau DMZ et un réseau serveur, adaptez à votre infrastructure avec des vlan ou pas.
Lancez les commandes suivantes :

su root

apt-get install postfix

Editez le fichier suivant:

nano /etc/postfix/main.cf

Et modifiez les paramètres en gras pour votre configuration

smtpd_banner = $myhostname ESMTP $mail_name
biff = no

# appending .domain is the MUA’s job.
append_dot_mydomain = no

# Uncomment the next line to generate « delayed mail » warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

myhostname = filtre.infos-reseau.local
mydomain = infos-reseau.local
myorigin = $mydomain
inet_interfaces = all
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
#mydestination = localhost, localhost.local.domain
mydestination = mail.infos-reseau.com, localhost
relay_domains = infos-reseau.com
relayhost =
mynetworks = 192.168.1.0/24 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
transport_maps = hash:/etc/postfix/transport
append_at_myorigin = no
local_recipient_maps =
smtpd_helo_required = yes
smtpd_recipient_restrictions =
permit_mynetworks reject_unauth_destination

# Content filtering
content_filter = smtp-amavis:[127.0.0.1]:10024

Maintenant nous allons dire à postfix qu’il n’est là que pour faire le relais vers le serveur de notre choix. Editez le fichier comme suit:

nano /etc/postfix/transport

et ajoutez (remplacez ce qui est en gras pour votre configuration):

infos-reseau.com smtp:[192.168.1.100]

pour que tous les mails soient envoyés vers notre serveur de mail.

Maintenant un petit redémarrage du serveur s’impose pour charger la nouvelle configuration.

/etc.init.d.postfix restart

Passons à l’installation de l’antispam, l’antivirus etc etc

apt-get install amavisd-new spamassassin clamav-daemon libnet-dns-perl libmail-spf-xs-perl pyzor razor

Après toujours pareil on ajoute les droits réciproquement d’amavis sur clamav et de clamav sur amavis


sudo adduser clamav amavis
sudo adduser amavis clamav

Redémarrage de Clamav


/etc/init.d/clamav-daemon restart

Editez le fichier suivant:

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

et remplacez le contenu du fichier par le suivant


use strict;

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

#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:

@bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If You wish to enable it, please uncomment the following lines:

@bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

1; # ensure a defined return

 

A nouveau un petit redémarrage d’amavis s’impose

/etc/init.d/amavis restart

Remplacez ensuite le contenu du fichier suivant via

nano /etc/postfix/master.cf


pickup unix n – – 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks
cleanup unix n – – – 0 cleanup
qmgr unix n – n 300 1 qmgr
#qmgr unix n – n 300 1 oqmgr
tlsmgr unix – – – 1000? 1 tlsmgr
rewrite unix – – – – – trivial-rewrite
bounce unix – – – – 0 bounce
defer unix – – – – 0 bounce
trace unix – – – – 0 bounce
verify unix – – – – 1 verify
flush unix n – – 1000? 0 flush
proxymap unix – – n – – proxymap
proxywrite unix – – n – 1 proxymap
smtp unix – – – – – smtp
relay unix – – – – – smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n – – – – showq
error unix – – – – – error
retry unix – – – – – error
discard unix – – – – – discard
local unix – n n – – local
virtual unix – n n – – virtual
lmtp unix – – – – – lmtp
anvil unix – – – – 1 anvil
scache unix – – – – 1 scache
#
# ====================================================================
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# Many of the following services use the Postfix pipe(8) delivery
# agent. See the pipe(8) man page for information about ${recipient}
# and other message envelope options.
# ====================================================================
#
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
maildrop unix – n n – – pipe
flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
#
uucp unix – n n – – pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender – $nexthop!rmail ($recipient)
#
# Other external delivery methods.
#
ifmail unix – n n – – pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix – n n – – pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix – n n – 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman unix – n n – – pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}

smtp-amavis unix – – – – 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

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_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 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

 

Allez dernier redémarrage:

/etc.init.d.postfix restart

On y est, c’est fonctionnel. N’oubliez pas de faire la redirection du port 25 sur le firewall pour l’adresse ip publique pointe bien vers votre serveur de filtrage, puis de modifier le pointage de MX et du nom de domaine.

si vous souhaitez faire un test ouvrez une session smtp en telnet, comme suit


telnet monippublique 25

puis

HELO mail.infos-reseau.com
MAIL FROM:<antoine@infos-reseau.com>
RCPT TO:contact@infos-reseau.com
DATA
test.
.

Quelques commandes qui peuvent vous servir:

affichera les mails de la file d’attente retardée (deferred)

qshape deferred

affichera les mails de la file d’attente active

qshape active

Vider la file d’attente retardée (deferred)

postsuper -d ALL deferred

Vider toutes les files

postsuper -d ALL

Voir ce qui se passe en temps réel sur le traitement

tail -f /var/log/syslogL

Ensuite vous pouvez affiner la configuration ici

Leave Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *