Postfix : Différence entre versions
(→Postfix-TLS) |
(→Configuration) |
||
| (5 révisions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 33 : | Ligne 33 : | ||
#La règle myhostname renseigne le nom de la machine sur laquelle s’exécute (est installé) Postfix. | #La règle myhostname renseigne le nom de la machine sur laquelle s’exécute (est installé) Postfix. | ||
| − | myhostname = | + | myhostname = your hostname |
#La règle mail_name définit le nom du système de messagerie du serveur | #La règle mail_name définit le nom du système de messagerie du serveur | ||
| Ligne 55 : | Ligne 55 : | ||
################################# | ################################# | ||
| − | #Le paramètre virtual_mailbox_domains indique à Postfix que | + | #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 = | + | #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 = | + | #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. | ||
| Ligne 376 : | Ligne 376 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br /> | <br /> | ||
| + | |||
| + | == 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 | ||
| + | <syntaxhighlight> | ||
| + | |||
| + | pwcheck_method: saslauthd | ||
| + | mech_list: PLAIN LOGIN | ||
| + | |||
| + | |||
| + | </syntaxhighlight> | ||
| + | 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]] == | == [[Postfix-TLS]] == | ||
| Ligne 389 : | Ligne 403 : | ||
=== Configuration === | === Configuration === | ||
| − | Une fois | + | 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 |
<pre> | <pre> | ||
| Ligne 428 : | Ligne 442 : | ||
#echo $to_address > /tmp/to.txt | #echo $to_address > /tmp/to.txt | ||
| − | if [ $to_address != "admin. | + | if [ $to_address != "admin.diouxx.be" ] |
then | then | ||
/usr/bin/altermime --input=in.$$ \ | /usr/bin/altermime --input=in.$$ \ | ||
| Ligne 1 183 : | Ligne 1 197 : | ||
nomUtilisateur: nomUtilisateur@domaine | nomUtilisateur: nomUtilisateur@domaine | ||
... | ... | ||
| − | denis: denis@ | + | denis: denis@diouxx.be |
| − | devleeschauwer: ddevleeschauwer@ | + | devleeschauwer: ddevleeschauwer@diouxx.be |
</pre> | </pre> | ||
| Ligne 1 268 : | Ligne 1 282 : | ||
{{ Console | /usr/sbin/cyrreconstruct -rxf user.nomUtilisateur }} | {{ Console | /usr/sbin/cyrreconstruct -rxf user.nomUtilisateur }} | ||
<br> | <br> | ||
| + | |||
| + | === 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. | ||
| + | <br> | ||
| + | {{ Console root | sudo apt-get install mailutils }} | ||
| + | <br> | ||
| + | |||
| + | 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 : | ||
| + | <pre> | ||
| + | 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 | ||
| + | </pre> | ||
| + | Pour que l'on reçoive un mail lors d'une connexion en tant que root, il suffit de rajouter cette ligne au fichier {{ File | /root/.bashrc }} | ||
| + | <pre> | ||
| + | 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 | ||
| + | </pre> | ||
| + | |||
| + | Maintenant, des qu'on se connecte en root directement via '''ssh''' ou via la commande '''sudo su''', un mail est envoyé. | ||
[[Catégorie:Système]] | [[Catégorie:Système]] | ||
Version actuelle datée du 7 novembre 2017 à 08:28
Avant toute chose, il est nécessaire d'installer et configurer Cyrus-Imap
Sommaire
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 LOGINEn 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
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 $?
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
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
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
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
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
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}
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 :
[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 :
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
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 :
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 :
Stopping amavisd: amavisd-new.
Starting amavisd: amavisd-new.
Stopping ClamAV daemon: clamd.
Starting ClamAV daemon: clamd.
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.
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 :
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
Pour créer une nouvelle boite mail, il faut se connecter sur l'interface administration de cyrus :
- --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
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
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 :
Supprimer boite mail
Pour supprimer une boite mail, on doit, premièrement, se connecter à l'outil cyradm :
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
On peux vérifier la suppression effective via :
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
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 :
Reconstruire la boite mail :
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.
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é.
