Postfix : Différence entre versions

De DiouxX's Wiki
Aller à : navigation, rechercher
(Procédures)
(Configuration)
 
Ligne 55 : Ligne 55 :
 
#################################
 
#################################
  
#Le paramètre virtual_mailbox_domains indique à Postfix que test.pass.be est un domaine de boîtes-aux-lettres virtuelles.
+
#Le paramètre virtual_mailbox_domains indique à Postfix que domain.be est un domaine de boîtes-aux-lettres virtuelles.
 
#Si vous l'oubliez, Postfix rejetera le courrier (relais interdit) ou ne sera pas en mesure de le livrer (le courrier de exmple.com bouclera).
 
#Si vous l'oubliez, Postfix rejetera le courrier (relais interdit) ou ne sera pas en mesure de le livrer (le courrier de exmple.com bouclera).
#virtual_mailbox_domains = test.pass.be
+
#virtual_mailbox_domains = domain.be
  
 
#Le paramètre virtual_mailbox_base indique le répertoire de base pour toutes les boîtes aux lettres virtuelles.
 
#Le paramètre virtual_mailbox_base indique le répertoire de base pour toutes les boîtes aux lettres virtuelles.
Ligne 90 : Ligne 90 :
 
#La règle masquerade_domains définit les règles de supression des noms d’hôtes et/ou de sous-domaines dans les adresses d’enveloppe et les en-têtes de message de l’expéditeur
 
#La règle masquerade_domains définit les règles de supression des noms d’hôtes et/ou de sous-domaines dans les adresses d’enveloppe et les en-têtes de message de l’expéditeur
 
#(et non du destinataire!!!).
 
#(et non du destinataire!!!).
#masquerade_domains = admin.pass.be
+
#masquerade_domains = domain.be
  
 
#La règle masquerade_exceptions définit les comptes pour lesquels ne s’appliqueront pas les règles de la directive masquerad_domains.
 
#La règle masquerade_exceptions définit les comptes pour lesquels ne s’appliqueront pas les règles de la directive masquerad_domains.

Version actuelle datée du 7 novembre 2017 à 08:28

Cette page permet de réaliser la mis en place ainsi que la configuration de Postfix

Avant toute chose, il est nécessaire d'installer et configurer Cyrus-Imap

Cyrus Imap

Pour l'installation et la configuration de Cyrus Imap, veuillez vous référencer à la page suivante

Postfix

Installation

Configuration

La configuration de postfix est réalisé via deux fichiers

  • main.cf
  • master.cf


Le fichier main.cf qui permet de paramétrer postfix

#########################################
#	REGLES GENERALES		#
#########################################

#La règle smtpd_banner définit le message d’accueil du serveur Postfix
#smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_banner = DIOUXX

#Desactivation notification terminal
biff = no

#La règle myhostname renseigne le nom de la machine sur laquelle s’exécute (est installé) Postfix.
myhostname = your hostname

#La règle mail_name définit le nom du système de messagerie du serveur
mail_name = Postfix

#La règle mydomain renseigne le nom de domaine auquel appartient la machine sur laquelle s’exécute Postfix.
mydomain = diouxx.be

#La règle mydestination énumère tous les domaines pour lesquels le serveur Postfix acceptera les mails afin de les distribuer en local.
#"distribuer en local" signifie: livrer les mails à tous les utilisateurs ayant un compte UNIX ou un compte virtuel (c’est à dire simplement une BàL) sur une machine qui appartient à 
#l’un des domaines de la liste de la règle mydestination.
#A la place de $mydomain on peut bien sûr mettre le nom de domaine en toute lettre !
mydestination = $myhostname, www.$mydomain, $mydomain, localhost, localhost.$mydomain

inet_interfaces = all

#proxy_interfaces = 193.190.248.8

#################################
#	VIRTUAL DOMAIN		#
#################################

#Le paramètre virtual_mailbox_domains indique à Postfix que domain.be est un domaine de boîtes-aux-lettres virtuelles.
#Si vous l'oubliez, Postfix rejetera le courrier (relais interdit) ou ne sera pas en mesure de le livrer (le courrier de exmple.com bouclera).
#virtual_mailbox_domains = domain.be

#Le paramètre virtual_mailbox_base indique le répertoire de base pour toutes les boîtes aux lettres virtuelles.
#C'est un mécanisme évitant les erreurs : le courrier ne peut être livré n'importe où.
#virtual_mailbox_base = /var/spool/cyrus/mail

# Le paramètre virtual_mailbox_maps indique la table des correspondances entre les adresses virtuelles et les boîtes-aux-lettres (ou les répertoires).
#virtual_mailbox_maps = hash:/etc/postfix/vmailbox

#virtual_alias_domains = /etc/postfix/virtual_domains

#Il est possible de mixer les alias virtuels avec des boîtes-aux-lettres virtuelles.
#virtual_alias_maps = hash:/etc/postfix/virtual

#virtual_minimum_uid = 100
#virtual_uid_maps = static:5000
#virtual_gid_maps = static:5000

##########################################
#	MASQUAGE DES NOMS D'HOTES	 #
##########################################

#La règle myorigin renseigne la partie réseau de l’adresse d’enveloppe ou d’en-tête des mails qui seront envoyés par Postfix.
myorigin = $mydomain

#La règle append_at_myorigin initialise ou non (yes/no) la réécriture des adresses en ajoutant à ces adresses
#append_at_myorigin = yes

#La règle append_dot_mydomain initialise ou non la réécriture des adresses en ajoutant à ces adresses
#append_dot_mydomain = yes

#La règle masquerade_domains définit les règles de supression des noms d’hôtes et/ou de sous-domaines dans les adresses d’enveloppe et les en-têtes de message de l’expéditeur
#(et non du destinataire!!!).
#masquerade_domains = domain.be

#La règle masquerade_exceptions définit les comptes pour lesquels ne s’appliqueront pas les règles de la directive masquerad_domains.
#masquerade_exceptions =

#########################################
#	CONTROLE D ACCES RELAYAGE	#
#########################################

#La règle mynetworks énumère les réseaux ou adresses des machines qui peuvent utiliser le serveur postfix pour envoyer/relayer du courrier vers l’extérieur.
mynetworks = 127.0.0.0/8 
#mynetworks_style = class

#La règle relay_domains indique les domaines et sous-domaines vers lesquels Postfix va relayer (faire suivre) le courrier.
relay_domains = $mydestination 

#La règle relayhost définit la passerelle SMTP qui est rellement connectée à Internet.
#Cette règle ne concerne que les mails SORTANT.
relayhost = 

#################################
#	CONFIGURATION TLS	#
#################################
smtp_use_tls=no
smtpd_use_tls=yes
#smtpd_tls_security = may
smtpd_tls_CApath = /etc/postfix/tls
smtpd_tls_key_file = /etc/postfix/tls/postfix.key
smtpd_tls_cert_file = /etc/postfix/tls/postfix.crt
smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes 

#########################################
#	CONFIGURATION SASL		#
#########################################

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = 
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes

#########################################
#	TABLE DE RECHERCHES		#
#########################################

#La règle default_database_type définit le type de base de données que l’on souhaite utiliser.
#default_database_type = hash

#########################
#	ALIAS		#
#########################

#La règle alias_maps définit le type (hash, NIS, LDAP, etc...) et l’emplacement du fichier texte dont se servira la commande postalias ou newalises
#pour re/construire le(s) fichier(s) de base de données (.db) d’alias utilisés par l’agent de distribution local.
alias_maps = hash:/etc/aliases

#La règle alias_database définit l’emplacement des fichiers texte dont se servira la commande newaliases pour construire les fichiers base de données d’alias,
#c’est à dire uniquement les fichiers qui doivent être indexés par la commande newaliases.
#alias_database = hash:/etc/aliases.db
alias_database = hash:/etc/aliases

#La règle default_privs définit les privilèges de Postfix lors de la distribution en local à un alias.
#default_privs = nobody

#La règle allow_mail_to_commands définit dans quel cadre Postfix doit délivrer le courrier à une commande.
#allow_mail_to_commands = alias,forward, include

#La règle allow_mail_to_files définit dans quel cadre Postfix doit délivrer le courrier à un fichier.
#allow_mail_to_files = alias,forward, include

#########################################################
#	REECRITURE ET/OU REDIRECTION D ADRESSES		#
#########################################################


#########################################
#	GESTION FILE D ATTENTE		#
#########################################

#La règle queue_directory définit l’emplacement du répertoire racine de la file d’attente de Postfix.
queue_directory = /var/spool/postfix

#################################
#	DISTRIBUTION LOCALE	#
#################################

mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp

local_recipient_maps = $alias_maps
#local_recipient_maps =

#########################
#	GESTION BAL	#
#########################

home_mailbox = Maildir/

#Limitation de la taille des BAL
mailbox_size_limit = 0

#Taille maximal des messages
#Taille = 20 Mo
message_size_limit = 20480000

#########################
#	AMAVIS		#
#########################

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

smtpd_recipient_restrictions = permit_sasl_authenticated,
	   permit_mynetworks,
           reject_unauth_destination,
#           check_policy_service inet:127.0.0.1:60000
           check_policy_service inet:127.0.0.1:10023

#########################
#	SECURITE	#
#########################

#Bloque une partie de SPAM en obligeant la requete HELO
smtpd_helo_required = yes

#Utilisation de postgrey 
#check_policy_service = inet:127.0.0.1:10023


Le fichier master.cf permet de définir la manière dont postfix va communiquer via les différents protocoles qu'il accepte

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
#	-o content_filter=spamassassin
#smtp      inet  n       -       -       -       1       postscreen
#smtpd     pass  -       -       -       -       -       smtpd
#dnsblog   unix  -       -       -       -       0       dnsblog
#tlsproxy  unix  -       -       -       -       0       tlsproxy
submission inet n       -       -       -       -       smtpd
#  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
#  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_client_restrictions=permit_sasl_authenticated
  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       -       -       -       qmqpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  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_fallback_relay=
#       -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  -       -       n       -       -       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}
#
# ====================================================================
#
# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
#
# Specify in cyrus.conf:
#   lmtp    cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
#
# Specify in main.cf one or more of the following:
#  mailbox_transport = lmtp:inet:localhost
#  virtual_transport = lmtp:inet:localhost
#
# ====================================================================
#
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
cyrus     unix  -       n       n       -       -       pipe
#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
#
# ====================================================================
# Old example of delivery via Cyrus.
#
#old-cyrus unix  -       n       n       -       -       pipe
#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
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}

#Amavis
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

#Spamassasin
spamassassin  unix  -   n     n     -   -   pipe
    user=spamd    argv=/usr/bin/spamc -f  -e
    /usr/sbin/sendmail -oi -f ${sender} ${recipient}


SMTPD.conf

Avant d'aller plus loin, il est important de veiller à ce que le fichier smtpd.conf soit créé dans /etc/postfix/sasl/ avec les paramètres

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

En effet : l'utilisation de la balise "smtpd_sasl_path = variable" implique d'un fichier /etc/postfix/sasl/[variable].conf soit créé et instancié. Ce fichier est utilisé directement par postfix pour configurer l'accès SASL. Sinon, des messages RCPT TO style Relay Acces Denied ou Acces Denied peuvent se produire.

Postfix-TLS

Disclaimer

Le disclaimer est un service qui permet de rajouter un message (typiquement une clause de confidentialité) à la fin des mails. Dans la suite, nous verrons comment modifier le disclaimer afin qu'il n'ajoute un message que pour les mails sortants

Installation

Pour l'instant, l'installation est réalisé grâce à la commande apt

Konsole.png
[root@ordi ~]# apt-get install altermime


Configuration

Une fois installé, nous allons pouvoir configurer altermime mais avant cela, nous allons créer un utilisateur spécifique ainsi que les différents dossier dont doit disposer altermime

useradd -r -c "Postfix Filters" -d /var/spool/filter filter
mkdir /var/spool/filter
chown filter:filter /var/spool/filter
chmod 750 /var/spool/filter

Une fois cela réalisé, il nous faut créer le script disclaimer dans /etc/postfix/disclaimer

#!/bin/sh
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL=/usr/sbin/sendmail


# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15

# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit
$EX_TEMPFAIL; }

cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }

#Modification pour uniquement mails sortant
# obtain From address
#from_address=`grep -m 1 "From:" in.$$ | cut -d "<" -f 2 | cut -d ">" -f 1`
to_address=`grep -m 1 "To:" in.$$ | cut -d : -f 2 | cut -d @ -f 2`

#echo $from_address > /tmp/from.txt
#echo $to_address > /tmp/to.txt

if [ $to_address != "admin.diouxx.be" ]   
then
        /usr/bin/altermime --input=in.$$ \
                        --disclaimer=/etc/postfix/disclaimer.txt \
                        --disclaimer-html=/etc/postfix/disclaimer.html \
                        --xheader="X-Copyrighted-Material: Please visit http://www.company.com/privacy.htm" || \
                                { echo Message content rejected; exit $EX_UNAVAILABLE; }
fi

$SENDMAIL -oi "$@" <in.$$

exit $?


BlocNotes.png
À noter !
La modification par rapport au script d'origine se situe au niveau du IF. En effet, le script va récupérer le champ du destinataire et vérifier si son adresse mail correspond au domaine du serveur postfix ou non. Si ce n'est pas le cas, il s'agit d'un mail sortant


Il faut également modifier le propriétaire du script ainsi que les droits

Konsole.png
[root@ordi ~]# chgrp filter /etc/postfix/disclaimer
[root@ordi ~]# chmod 750 /etc/postfix/disclaimer


Il est nécessaire maintenant de créer le fichier /etc/postfix/disclaimer.txt qui va contenir le message à rajouter aux mails sortant.

Il ne reste plus qu'a modifier le fichier /etc/postfix/master.cf afin de lui indiquer qu'il doit utiliser le service disclaimer pour envoyer les mails. Pour cela, il faut rajouter ces deux lignes si au début du fichier

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       -       -       -       smtpd
   -o content_filter=dfilt:
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}

Redemmarez postfix pour qu'il prenne en compte les modifications que l'on a apportés

Konsole.png
[root@ordi ~]# /etc/init.d/postfix restart


Amavis

Amavis est le logiciel qui va permettre de réaliser le transport des mails de postfix jusqu'aux filtres anti-spam et antivirus. Il repassera le mail à postfix pour sa destination final seulement si ce mail est considéré comme "propre"

Installation

Pour l'instant, l'installation se réalise avec la commande apt

Konsole.png
[root@ordi ~]# apt-get install amavis


Configuration

Nous allons devoir en premier lieux, configurer postfix pour qu'il accepte de travailler avec amavis. Pour ce faire nous éditions les deux fichier suivants :

  • /etc/postfix/master.cf
  • /etc/postfix/main.cf


Pour le fichier /etc/postfix/master.cf , nous allons rajouter les lignes suivantes :

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


Pour le fichier /etc/postfix/main.cf , ajoutons également les lignes suivantes à la fin du fichier :

content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

smtpd_recipient_restrictions = permit_sasl_authenticated,
           permit_mynetworks,
           reject_unauth_destination,
           check_policy_service inet:127.0.0.1:60000


Nous devons activer les filtres, normalement il suffit de décommenter les lignes suivantes du fichier /etc/amavis/conf.d/15-cintent_filter_mode

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


Il ne nous reste qu'a configurer la mise en quarantaine en éditant le fichier /etc/amavis/conf.d/50-user

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
#

$QUARANTINEDIR = '/var/spool/virusmails';              # Quarantine Directory
$spam_quarantine_method = 'local:spam-%b-%i-%n'; # Filename in $QUARANTINEDIR
$spam_quarantine_to = 'spam-quarantine';         # Put Spam in Quarantine Directory
# $spam_quarantine_to = "admin\@$mydomain"; # Send Spam to Adminstrator
# $spam_quarantine_to = undef;                   # Do nothing with Spam
$final_spam_destiny = D_DISCARD;
#$spam_admin = "admin\@$mydomain";          # Where to send Notification

#------------ Do not modify anything below this line -------------
1;  # ensure a defined return


Il nous faut pas oublier de créer le répertoire qui va accueillir les mails infectés ou considéré comme spam

Konsole.png
[root@ordi ~]# mkdir /var/spool/virusmails
[root@ordi ~]# chown amavis:amavis /var/spool/virusmails


BlocNotes.png
À noter !
L'emplacement du dossier qui contiendra les mails infectés ou considéré comme spam est renseigné via la variable $QUARANTINEDIR


Il reste encore l'installation et la configuration de spamassasin et clamav

Spamassassin

Spamassassin est le logiciel qui comme son nom l'indique va permettre de détecter si les mails que l'ont reçoit sont des spams ou non

Installation

Pour l'instant, l'installation se réalise avec la commande apt

Konsole.png
[root@ordi ~]# apt-get install spamassassin


Configuration

La configuration de spamassassin se réalise avec le fichier /etc/default/spamassassin et /etc/spamassassin/local.cf. Normalement, le fichier devrait ressembler à ceci. Tandis que le fichier /etc/postfix/master.cf doit être modififié afin d'indiquer à postfix qu'il doit utiliser spamassasin

/etc/postfix/master.cf

Au début du fichier la section consacré à smtp doit ressembler à ceci :

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master").
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================

smtp      inet  n       -       -       -       -       smtpd
   -o content_filter=spamassassin
   -o content_filter=dfilt:
dfilt     unix    -       n       n       -       -       pipe
    flags=Rq user=filter argv=/etc/postfix/disclaimer -f ${sender} -- ${recipient}


Warning.png
Attention !
il est impératif que la ligne spamassassin soit avant la ligne dfit. Sans cela, le disclaimer ne sera pas mis pour les mails sortant


/etc/default/spamassassin

# /etc/default/spamassassin
# Duncan Findlay

# WARNING: please read README.spamd before using.
# There may be security risks.

# Change to one to enable spamd
ENABLED=1

# Options
# See man spamd for possible options. The -d option is automatically added.
SAHOME="/var/lib/spamassassin/"

# SpamAssassin uses a preforking model, so be careful! You need to
# make sure --max-children is not set to anything higher than 5,
# unless you know what you're doing.

OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} -s ${SAHOME}spamd.log"

# Pid file
# Where should spamd write its PID to file? If you use the -u or
# --username option above, this needs to be writable by that user.
# Otherwise, the init script will not be able to shut spamd down.
PIDFILE="${SAHOME}spamd.pid"

# Set nice level of spamd
#NICE="--nicelevel 15"

# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=0

/etc/spamassassin/local.cf


# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
# Only a small subset of options are listed below
#
###########################################################################

#   Add *****SPAM***** to the Subject header of spam e-mails
#
 rewrite_header Subject *****SPAM - SPAM_SCORE_*****


#   Save spam messages as a message/rfc822 MIME attachment instead of
#   modifying the original message (0: off, 2: use text/plain instead)
#
 report_safe 0


#   Set which networks or hosts are considered 'trusted' by your mail
#   server (i.e. not spammers)
#
# trusted_networks 212.17.35.


#   Set file-locking method (flock is not safe over NFS, but is faster)
#
# lock_method flock


#   Set the threshold at which a message is considered spam (default: 5.0)
#
 required_score 2.0


#   Use Bayesian classifier (default: 1)
#
 use_bayes 1
 use_bayes_rules 1

#   Bayesian classifier auto-learning (default: 1)
#
 bayes_auto_learn 1


#   Set headers which may provide inappropriate cues to the Bayesian
#   classifier
#
# bayes_ignore_header X-Bogosity
# bayes_ignore_header X-Spam-Flag
# bayes_ignore_header X-Spam-Status


#   Some shortcircuiting, if the plugin is enabled
# 
ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
#
#   default: strongly-whitelisted mails are *really* whitelisted now, if the
#   shortcircuiting plugin is active, causing early exit to save CPU load.
#   Uncomment to turn this on
#
# shortcircuit USER_IN_WHITELIST       on
# shortcircuit USER_IN_DEF_WHITELIST   on
# shortcircuit USER_IN_ALL_SPAM_TO     on
# shortcircuit SUBJECT_IN_WHITELIST    on

#   the opposite; blacklisted mails can also save CPU
#
# shortcircuit USER_IN_BLACKLIST       on
# shortcircuit USER_IN_BLACKLIST_TO    on
# shortcircuit SUBJECT_IN_BLACKLIST    on

#   if you have taken the time to correctly specify your "trusted_networks",
#   this is another good way to save CPU
#
# shortcircuit ALL_TRUSTED             on

#   and a well-trained bayes DB can save running rules, too
#
# shortcircuit BAYES_99                spam
# shortcircuit BAYES_00                ham

# Enable or disable network checks
skip_rbl_checks         0
use_razor2              0
use_dcc                 0
use_pyzor               0

endif # Mail::SpamAssassin::Plugin::Shortcircuit


Par acquis de conscience, vérifier que le dossier renseigner par la variable SAHOME existe bien et qu'il appartienne bien à l'utilisateur spamd. Si ce n'est pas le cas, exécutez les commandes suivantes :

Konsole.png
[root@ordi ~]# groupadd -g 5001 spamd
[root@ordi ~]# useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
[root@ordi ~]# mkdir /var/lib/spamassassin
[root@ordi ~]# chown spamd:spamd /var/lib/spamassassin
[root@ordi ~]# chmod 755 /var/lib/spamassassin


Mise a jour de la base SPAM

Pour mettre a jour la base anti-spam, il suffit d’exécuter la commande suivante :

Konsole.png
[root@ordi ~]# sa-update -D


BlocNotes.png
À noter !
On peux exécuter cette commande dans une tache cron afin de mettre à jour la bas tous les soirs


Le service spamassassin est maintenant configurer.

ClamAV

ClamAV est le logiciel anti-virus qui va scanner tous les mails que l'on reçoit

Installation

Pour l'instant, l'installation se réalise avec la commande apt

Konsole.png
[root@ordi ~]# apt-get install clamav clamav-daemon


Configuration

La seule configuration à réalisé est de rajouter l'utilisateur clamav, qui a été crée lors de l'installation du paquet, au groupe amavis :

Konsole.png
[root@ordi ~]# adduser clamav amavis
Ajout de l'utilisateur « clamav » au groupe « amavis »...
Ajout de l'utilisateur clamav au groupe amavis
Fait.


Test de Spamassassin et Clamav

Avant de pouvoir tester le bon fonctionnement de Spamassassin et Clamv, il est nécessaire de démarrer/redémarrer les services dans l'ordre suivant :

Konsole.png
[root@ordi ~]# /etc/init.d/spamassassin restart
Starting SpamAssassin Mail Filter Daemon: spamd.


Konsole.png
[root@ordi ~]# /etc/init.d/amavis restart
Stopping amavisd: amavisd-new.
Starting amavisd: amavisd-new.


Konsole.png
[root@ordi ~]# /etc/init.d/clamav-daemon restart
Stopping ClamAV daemon: clamd.
Starting ClamAV daemon: clamd.


Konsole.png
[root@ordi ~]# /etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.


Test de Spamassassin

Vous trouverez dans la doc un exemple de Spam: /usr/share/doc/spamassassin/examples/sample-spam.txt Il suffit de coller cette ligne dans un mail et de l'envoyer :

 XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Il sera détecté comme Spam si tout va bien

Test de Clamav

Vous procèderez de la même manière, avec le code suivant, récupéré sur www.eicar.org :

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Si tout se passe correctement, le mail sera placé en quarantaine.

BlocNotes.png
À noter !
Pour vérifier le bon fonctionnement de l'anti-spam et l'anti-virus, consulter le fichier log /var/log/mail.log . On peux utiliser la commande tail -f /var/log/mail.log pour plus de faciliter


Submission

Les manipulations décrites ci-dessus permettent d'activer une authentification sécurisée sur le port 25/tcp. Or, dans le cadre de la lutte ant-virus et anti-spam, ce port est de plus en plus souvent filtré dans les réseaux, surtout les réseaux publics. Si nous proposons un service sur le port 25/tcp, il risque donc de ne pas être accessible depuis n'importe où...

Pour ce faire, on va configurer Postfix pour qu'il sache recevoir des connexions sur le port 587/tcp (submission). On imposera que ces connexions soient chiffrées en TLS et on imposera également une authentification SASL. Nous proposerons ainsi à nos utilisateurs un service leur permettant d'envoyer des mails depuis n'importe quel client de messagerie connecté à Internet (le port 587/tcp n'est pas filtré puisqu'il est censé toujours proposer des services avec authentification, donc pas (trop) de spam ni virus).

Cette technique est décrite dans la RFC 2476.

Pour activer le service, il suffit de le rajouter/décommenter dans le fichier /etc/postfix/master.cf :

   # lignes à ajouter dans /etc/postfix/master.cf :
   # submission : on ouvre le port 587/tcp sur lequel on impose TLS
   # et on n'accepte que les clients authentifiés. Cela impose d'avoir
   # déjà configuré TLS et SASL, bien entendu.
   # service  type private unpriv  chroot  wakeup  maxproc command + args
   submission inet n       -       -       -       -       smtpd
           -o smtpd_tls_security_level=encrypt
           -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Notes :

   sur les anciennes versions de Postfix (< 2.3), on indique smtpd_enforce_tls=yes au lieu de smtpd_tls_security_level=encrypt)
   ne pas oublier d'ouvrir le port 587/tcp vers le serveur au niveau du parefeu : c'est un service à ouvrir à tout Internet 

Ce service est notamment activé sur la messagerie de Montréal, vous trouverez le mode d'emploi côté client ici : MessagerieAufOrg/EnvoiSmtpSortant

Syslog-ng

Installation

Pour installer Syslog, référencez vous à la page consacré à Syslog-ng

Configuration

Le fichier /etc/syslog-ng/syslog-ng.conf sur le serveur Postfix doit ressembler à ceci :

@version: 3.0

######
# options
 
options {
        # disable the chained hostname format in logs
        # (default is enabled)
        chain_hostnames(0);
 
        # the time to wait before a died connection is re-established
        # (default is 60)
        time_reopen(10);
 
        # the time to wait before an idle destination file is closed
        # (default is 60)
        time_reap(360);
 
        # the number of lines buffered before written to file
        # you might want to increase this if your disk isn't catching with
        # all the log messages you get or if you want less disk activity
        # (say on a laptop)
        # (default is 0)
        #sync(0);
 
        # the number of lines fitting in the output queue
        log_fifo_size(2048);
 
        # enable or disable directory creation for destination files
        create_dirs(yes);
 
        # default owner, group, and permissions for log files
        # (defaults are 0, 0, 0600)
        owner(root);
        #group(adm);
        perm(0640);
 
        # default owner, group, and permissions for created directories
        # (defaults are 0, 0, 0700)
        dir_owner(root);
        #dir_group(root);
        dir_perm(0755);
 
        # enable or disable DNS usage
        # syslog-ng blocks on DNS queries, so enabling DNS may lead to
        # a Denial of Service attack
        # (default is yes)
        use_dns(no);
 
        # maximum length of message in bytes
        # this is only limited by the program listening on the /dev/log Unix
        # socket, glibc can handle arbitrary length log messages, but -- for
        # example -- syslogd accepts only 1024 bytes
        # (default is 2048)
        #log_msg_size(2048);
 
	#Disable statistic log messages.
	stats_freq(0);
 
	# Some program send log messages through a private implementation.
	# and sometimes that implementation is bad. If this happen syslog-ng
	# may recognise the program name as hostname. Whit this option
	# we tell the syslog-ng that if a hostname match this regexp than that
	# is not a real hostname.
	bad_hostname("^gconfd$");
 
	flush_lines (0);
};
 
 
############################
# Sources
############################
# all known message sources
source s_all {
        # message generated by Syslog-NG
        #internal();
        # standard Linux log source (this is the default place for the syslog()
        # function to send logs to)
        unix-stream("/dev/log");
        # messages from the kernel
        #file("/proc/kmsg" log_prefix("kernel: "));
        # use the following line if you want to receive remote UDP logging messages
        # (this is equivalent to the "-r" syslogd flag)
        # udp();
};
 
source postfix {
	#file("/var/log/mail.err" follow_freq(1) flags(no-parse));
	#file("/var/log/mail.info" follow_freq(1) flags(no-parse));
	file("/var/log/mail.log" follow_freq(1) flags(no-parse));
	#file("/var/log/mail.warn" follow_freq(1) flags(no-parse));
};
 
 
###########################
# Destinations
###########################
#Serveur distant
destination srv_dist {
	udp ("192.168.100.20" port(514));
};
 
#Local
destination local_messages {
	file("/var/log/syslog-ng/messages");
};
 
destination postfix {
        file("/var/log/syslog-ng/$HOST/postfix.log");
};

 
 
################################
# Filters
################################
# all messages from the auth and authpriv facilities
filter f_auth { facility(auth, authpriv); };
 
# all messages except from the auth and authpriv facilities
filter f_syslog { not facility(auth, authpriv); };
 
# respectively: messages from the cron, daemon, kern, lpr, mail, news, user,
# and uucp facilities
filter f_cron { facility(cron); };
filter f_daemon { facility(daemon); };
filter f_kern { facility(kern); };
filter f_lpr { facility(lpr); };
filter f_mail { facility(mail); };
filter f_news { facility(news); };
filter f_user { facility(user); };
filter f_uucp { facility(uucp); };
 
# some filters to select messages of priority greater or equal to info, warn,
# and err
# (equivalents of syslogd's *.info, *.warn, and *.err)
filter f_at_least_info { level(info..emerg); };
filter f_at_least_notice { level(notice..emerg); };
filter f_at_least_warn { level(warn..emerg); };
filter f_at_least_err { level(err..emerg); };
filter f_at_least_crit { level(crit..emerg); };
 
# all messages of priority debug not coming from the auth, authpriv, news, and
# mail facilities
filter f_debug { level(debug) and not facility(auth, authpriv, news, mail); };
 
# all messages of info, notice, or warn priority not coming form the auth,
# authpriv, cron, daemon, mail, and news facilities
filter f_messages {
        level(info,notice,warn)
            and not facility(auth,authpriv,cron,daemon,mail,news);
};
 
# messages with priority emerg
filter f_emerg { level(emerg); };
 
# complex filter for messages usually sent to the xconsole
filter f_xconsole {
    facility(daemon,mail)
        or level(debug,info,notice,warn)
        or (facility(news)
                and level(crit,err,notice));
};
 
###################################################
# Filtre "perso"
##################################################

filter postfix { program("postfix") or program("cyrus"); };
 
######
# logs
# order matters if you use "flags(final);" to mark the end of processing in a
# "log" statement
 
# these rules provide the same behavior as the commented original syslogd rules
 
#log {
#        source(s_all);
#	destination(srv_dist);
#	filter(f_auth);
#};

log {
        source(s_all);
	filter(postfix);
        destination(postfix);
};

 
log {
	source(s_all);
	destination(srv_dist);
};
 
#log {
#	source(s_all);
#	destination(local_messages);
#};


Concernant la machine ayant le rôle de serveur log, Il faut modifier le fichier /etc/syslog-ng/syslog-ng.conf en rajoutant les parties suivantes :

...
#Partie Destination
destination postfix {
        file("/var/log/syslog-ng/$HOST/$DAY.$MONTH.$YEAR-postfix.log");
};
...

#Partie Filtre
filter postfix { program("postfix"); };
...

#Partie Log paths
log {
        source(local);
        filter(postfix);
        destination(postfix);

};
...


Migration

Pour la migration voir ICI

Troubleshooting

setaclmailbox: cyrus: lrswipcda: System I/O error

Si on rencontre l'erreur suivante sur un utilisateur mail, il faut reconstruire sa boite mail. Pour ce faire, il faut se connecter en tant qu'utilisateur cyrus :

Konsole.png
[root@ordi ~]# su cyrus


Reconstruire la boite mail :

/usr/sbin/cyrreconstruct -rxf user.nomUtilisateur

testsaslauthd : "connect() : No such file or directory 0"

Si lors d'un redémarrage du serveur mail ou d'un autre service et que vous tentez de réaliser un testsaslauthd, il se peut que l'erreur connect() : No such file or directory 0

Il faut refaire un lien symbolique :

rm -rf /var/run/saslauthd
ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd

Pour automatiser le tout, on peux rajouter cette commande au fichier /etc/rc.local

#Commande pour Postfix
ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd
exit 0

Procédures

Manipulation Queue

  • Vider la queue : postsuper -d ALL
  • Lister les messages : postqueue -p
  • Supprimer message : postsuper -d ID ( L'ID est donné via la commande du dessus)
  • Mettre un messages en attente (hold) : postsuper -h ID
  • Remettre un messages en mode normale (actif) : postsuper -H ID
  • Remettre en Queue un message : postsuper -r ID
  • Pour tous les messages : postsuper -r ID
  • Afficher le contenu d'un message : postcat -q ID
  • Forcer l'envoie des messages en Queue (flush) : postqueue -f


Créer nouvelle boite mail

Warning.png
Attention !
L'utilisateur doit d'abord être créée dans le LDAP


Pour créer une nouvelle boite mail, il faut se connecter sur l'interface administration de cyrus :

Konsole.png
[user@ordi ~]$ cyradm --user cyrus localhost
Password:


  • --user: cyrus est l'administrateur du service cyrus
  • localhost: Parce qu’on est connecté sur la machine où est installé cyrus

Une fois connecter, on peux créer la nouvelle boite mail :

cm user.nomUtilisateur


Warning.png
Attention !
Toujours mettre user. avant le nom d'utilisateur sinon cela crée une boite mail partagée


On peux vérifier qu'elle a bien été créée en rentrant la commande lm (listmailbox)

Il faut maintenant donner tous les droits à l'utilisateur cyrus sur la boite mail crée. Sans cela, cyrus ne pourra pas la supprimer, lui assigner des quotas ...

setacl user.nomutilisateur cyrus all


Dans ce cas-ci, on assigne tous les droits à l'utilisateur cyrus sur la boite. C'est une question de faciliter pour la manipulation dans le futur des boites mails


Pour maintenant vérifier l'authentification, on utilise la commande testsaslauthd

Konsole.png
[user@ordi ~]$ testsaslauthd -u user -p password
0: OK "Success."


La partie authentification est réalisé. La dernière étape est de créer l'alias. On édite le fichier /etc/aliases et on rajoute une ligne au format suivant :

nomUtilisateur: nomUtilisateur@domaine
...
denis: denis@diouxx.be
devleeschauwer: ddevleeschauwer@diouxx.be

Il faut recharger la base d'alias :

Konsole.png
[user@ordi ~]$ postalias /etc/aliases


Supprimer boite mail

Pour supprimer une boite mail, on doit, premièrement, se connecter à l'outil cyradm :

Konsole.png
[user@ordi ~]$ cyradm --user cyrus localhsot
Password:


Pour supprimer la boite mail, entrez la commande dm :

dm user.nomUtilisateur

Si une erreur "deletemailbox: Permission denied" apparait, c'est un problème de droits sur la boite. Pour régler cela, rentrez les commandes suivantes :

localhost> setacl user.test cyrus all
localhost> dm user.test

Vérifier la suppression de la boite mail via la commande lm

Les démarches ci-dessus, expliquent comment supprimer une boite mail mais on peut aussi supprimer l’utilisateur. Quittez l'outil cyradm. Pour supprimer l'utilisateur, on utilise la commande saslpasswd

Konsole.png
[user@ordi ~]$ saslpasswd -d nomUtilisateur


On peux vérifier la suppression effective via :

Konsole.png
[user@ordi ~]$ sasldblistusers2


Il reste plus qu'a supprimer l'alias de l’utilisateur et recréer la base d'alias.

  • Éditez le fichier /etc/aliases et supprimer la ligne correspondant au nom d'utilisateur
  • Pour reconstruire la base d'alias, entrez la commande postalias /etc/aliases

Assigner/Modifier quotas

Pour assigner ou modifier les quotas d'un utilisateur, tout se passe dans l'outil cyradm

Konsole.png
[user@ordi ~]$ cyradm --user cyrus loclahost
Password:


BlocNotes.png
À noter !
La taille des quotas s'exprime en Ko. Donc si on spécifie 1024, cela veux dire qu'on assigne 1Mo de quotas à l'utilisateur.


localhost> setquota user.nomUtilisateur 1024

Pour vérifier le quota d'un utilisateur :

localhost> listquota user.nomUtilisateur


Whitelist/Blacklist

Pour ajouter une adresse mail à la whitelist, il suffit de la rajouter dans le fichier /etc/spamassassin/local.cf

#
#WhiteList
#
whitelist_from  utilisateur@domaine
whitelist_from  *@domaine

#
#Blacklist
#
blacklist_from utilisateur@domaine
blacklist_from *@domaine

Restaurer Boit mail

Après avoir restauré la boite mail ( ou une partie de celle-ci ), il faut reconstituer l'indexation. Pour ce faire, il faut se connecter en tant qu'utilisateur cyrus :

Konsole.png
[root@ordi ~]# su cyrus


Reconstruire la boite mail :

Konsole.png
[user@ordi ~]$ /usr/sbin/cyrreconstruct -rxf user.nomUtilisateur


Envoi d'un email lors d'une connexion SSH

Il est possible d'envoyer un mail lorsqu'une personne se connecte à un serveur.

On installe d'abord le paquet mailutils qui permettra d'envoyer un mail.

Konsole.png
[root@ordi ~]# sudo apt-get install mailutils


A l'installation, on nous demandera de configurer postfix. On choisira une configuration Système satellite

  • Nom de courrier : domain.be
  • Serveur relais SMTP : smtp.domain.be

Une fois la configuration faite, on peux tester l'envoi de mail via cette commande :

echo 'NOTIFICATION - Acces SSH en '` id | cut -d "(" -f2 | cut -d ")" -f1`' sur '`hostname`' le: ' `date` `who` | mail -s "NOTIFICATION - Connexion en "`id | cut -d '(' -f2 | cut -d ')' -f1`" via SSH depuis: `who | cut -d"(" -f2 | cut -d")" -f1`" mail@domain.be

Pour que l'on reçoive un mail lors d'une connexion en tant que root, il suffit de rajouter cette ligne au fichier /root/.bashrc

echo 'NOTIFICATION - Acces SSH en '` id | cut -d "(" -f2 | cut -d ")" -f1`' sur '`hostname`' le: ' `date` `who` | mail -s "NOTIFICATION - Connexion en "`id | cut -d '(' -f2 | cut -d ')' -f1`" via SSH depuis: `who | cut -d"(" -f2 | cut -d")" -f1`" mail@domain.be

Maintenant, des qu'on se connecte en root directement via ssh ou via la commande sudo su, un mail est envoyé.