Mailman et les pertes de mot de passe

Que faire en cas de perte du mot de passe qui permet d’accéder à l’interface d’administration d’une liste gérée par Mailman ? Voici la réponse...

Perte du mot de passe d’une liste gérée par mailman

Il vous suffit de vous connecter en root sur votre serveur et utiliser la commande suivante :

/var/lib/mailman/bin/change_pw -l nom_de_votre_liste -p votre_nouveau_mot_de_passe

Perte du mot de passe admin de mailman

Il vous faut dans ce cas faire :

mmsitepass nouveau_mot_de_passe
Learn more »

Mettre en place un serveur de mail + webmail + liste de diffusion

Ce tutoriel explique comment mettre en place un serveur de mail sous Debian avec Postfix et Courier-imap / Courier-pop avec l’ajout du webmail Squirrelmail et le gestionnaire de liste de diffusion Mailman

Installation

aptitude update
aptitude install postfix courier-imap courier-pop3 mailman

Configuration

Après les demandes de l’installeur de postfix, votre fichier /etc/postfix/main.cf devrait ressembler à ceci :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

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

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

myhostname = monsite.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = monsite.com
relayhost =
mynetworks = 127.0.0.0/8, monsite.com
mailbox_command =
mailbox_size_limit = 51200000
recipient_delimiter = +

La variable mynetworks ainsi positionnée ne permet alors un envoi de mail que depuis la machine locale et évite ainsi que votre machine soit un "open relay."

Envoi des mails dans Courrier

Dans /etc/postfix/main.cf, il faut ajouter la ligne :

home_mailbox = Maildir/

Vous avez ainsi :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

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

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

myhostname = monsite.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = monsite.com
relayhost =
mynetworks = 127.0.0.0/8, monsite.com
# mailbox_command =
mailbox_size_limit = 51200000
recipient_delimiter = +

# Envoi dans Courier
home_mailbox = Maildir/

Pour chacun de vos utilisateur systèmes, il vous faut alors créer un dossier Maildir qui se fait via la commande :

maildirmake /home/utilisateur/Maildir

Attention à bien positionner les droits et les appartenances (ce doit être ceux de l’utilisateur et non root...)

chmod 777 -R /home/utilisateur/Maildir
chown utilisateur: -R /home/utilisateur/Maildir

Relancez alors Postfix :

/etc/init.d/postfix restart ou reload

Tests

Envoyez un mail à l’un de vos utilisateurs.

Dans /home/utilisateur/Maildir/new vous devez voir apparaitre un fichier qui n’est autre que votre mail (un coup de less vous le confirmera)

Mise en place du webmail

  • Récupérer la dernière version de Squirrelmail
  • Décompresser le fichier :
tar xzf fichier.tar.gz
tar xjf fichier.tar.bz2
  • Renommer le répertoire Squirrelmail en webmail :
mv squirrelmail-version webmail
  • Déplacez le répertoire webmail à la racine de votre site :
mv webmail /var/www/
  • Exécutez le script de configuration de Squirrelmail ./configure dans /var/www/webmail/ :
    • adaptez les valeurs à votre configuration
    • Une solution simple peut être de taper D dans le menu principal et de choisir courier comme serveur imap. Les valeurs par défaut sont correctes.
    • Dans le menu "Server Settings", changez la variable "domain name" pour l’adapter au votre
    • Dans le menu "Languages", remplacez "en_US" par "fr_FR"
    • n’oubliez pas de sauvegardez vos modifications !
    • Rendez vous sur http://monsite.com/webmail/src/configtest.php pour vérifier que tout fonctionne bien.
    • Testez Squirrel avec un des comptes mails (authentification, envoi de mail, etc)
Problèmes possibles :
  • Droits non suffisants sur ./data/ :
chmod 777 /var/www/webmail/data/
  • Squirrelmail ne s’affiche pas en français : il vous faut récupérer les packs de langue.
  • Mettre le français comme langue par défaut : il suffit d’aller dans la configuration de Squirrel et dans la rubrique Languages, remplacer en_US par fr_FR
  • Envoi impossible :
    • Vérifiez que Postfix est bien lancé
    • Vérifiez que mynetworks est bien configuré

Mise en place du gestionnaire de liste de diffusion mailman

Mailman est un gestionnaire de listes de diffusion assez puissant et relativement simple à utiliser.

Les listes ici seront de la forme liste@monsite.com

Je me base essentiellement sur la doc présente dans /usr/share/doc/mailman/README.Posftix et autres éléments trouvés sur internet.

  • Dans /etc/mailman/mm_cfg.py, Décommentez la ligne
MTA = ’Postfix’
  • Exécutez /var/lib/mailman/bin/genaliases
  • Vérifiez les permissions et les appartenances des deux fichiers suivants dans /var/lib/mailman/data/ :
-rw-rw----  1 root     list    3419 2005-01-26 12:49 aliases
-rw-r--r--  1 root     list 49152 2005-01-26 12:49 aliases.db

Il faut donc faire et contrairement à la doc : * ne pas changer l’appartenance des fichiers aliases à list:daemon - on laisse root:list * chmod 666 aliases*, sinon mailman refusait de me créer mes listes :-( * Dans /etc/postfix/main.cf, il vous faut ajouter les informations suivantes :

unknown_local_recipient_reject_code = 550

# Gestion de mailman => ajout de hash:/var/lib/mailman/data/aliases
alias_maps = hash:/etc/postfix/aliases, hash:/var/lib/mailman/data/aliases
  • Générez la liste de maintenance (saisissez un mail pour le responsable de la liste et un mot de passe qui sera demandé pour toute création de nouvelle liste) :
newlist mailman
  • Dans votre fichier de configuration d’apache, ajoutez le bloc suivant :
 ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
 Alias /pipermail/ /var/lib/mailman/archives/public/
 <Directory /usr/lib/cgi-bin/mailman/>
     AllowOverride All
     Options ExecCGI
     Order allow,deny
     Allow from all
</Directory>

et relancez Apache pour que la modification soit prise en compte.

/etc/init.d/apache2 reload
  • Rendez-vous sur http://www.monsite.com/mailman/create pour créer votre première liste de diffusion
  • Si d’aventure il vous dit que vous n’avez pas le droit de créer la liste alors il vous faut réinitialiser le mot de passe des listes puis recommencer le processus :
mmsitepass nouveaumotdepasse

Fichier de configuration

Mailman

Au final, vous avez le fichier mailman suivant : /etc/mailman/mm_cfg.py

#######################################################
#    Here's where we get the distributed defaults.    #

from Defaults import *

##############################################################
# Put YOUR site-specific configuration below, in mm_cfg.py . #
# See Defaults.py for explanations of the values.            #

#-------------------------------------------------------------
# The name of the list Mailman uses to send password reminders
# and similar. Don't change if you want mailman-owner to be
# a valid local part.
MAILMAN_SITE_LIST = 'mailman'

#-------------------------------------------------------------
# If you change these, you have to configure your http server
# accordingly (Alias and ScriptAlias directives in most httpds)

# Pour que vos listes soient accessibles sous la forme http://www.monsite.com/mailman/
DEFAULT_URL_PATTERN = 'http://%s/mailman/'

PRIVATE_ARCHIVE_URL = '/mailman/private'
IMAGE_LOGOS         = '/images/mailman/'

#-------------------------------------------------------------
# Default domain for email addresses of newly created MLs
DEFAULT_EMAIL_HOST = 'monsite.com'
#-------------------------------------------------------------
# Default host for web interface of newly created MLs
DEFAULT_URL_HOST   = 'monsite.com'
#-------------------------------------------------------------
# Required when setting any of its arguments.
add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)

#-------------------------------------------------------------
# The default language for this server.
# Pour la prise en compte du français
DEFAULT_SERVER_LANGUAGE = 'fr'

#-------------------------------------------------------------
# Iirc this was used in pre 2.1, leave it for now
USE_ENVELOPE_SENDER    = 0              # Still used?

#-------------------------------------------------------------
# Unset send_reminders on newly created lists
DEFAULT_SEND_REMINDERS = 0

#-------------------------------------------------------------
# Uncomment this if you configured your MTA such that it
# automatically recognizes newly created lists.
# (see /usr/share/doc/mailman/README.{EXIM,...})
# MTA=None   # Misnomer, suppresses alias output on newlist

#-------------------------------------------------------------
# Uncomment if you use Postfix virtual domains, but be sure to
# read /usr/share/doc/mailman/README.POSTFIX first.
MTA='Postfix'

# Note - if you're looking for something that is imported from mm_cfg, but you
# didn't find it above, it's probably in /usr/lib/mailman/Mailman/Defaults.py.

Postfix

Votre fichier /etc/postfix/main.cf :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

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

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

myhostname = monsite.com
alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = monsite.com
relayhost =
mynetworks = 127.0.0.0/8, monsite.com
# mailbox_command =
mailbox_size_limit = 0
recipient_delimiter = +

# Envoi dans Courier
home_mailbox = Maildir/

# Ajout de mailman
unknown_local_recipient_reject_code = 550
View details »

Mise en place du greylisting sous Postfix

Je continue ma série de tutoriels sur la prévention de spams. Après la mise en place de règles anti-spam et RBL, voici comment mettre en place le Greylisting sous Postfix.

Installation

Il vous suffit d’installer postgrey :

aptitude install postgrey

Configuration

Dans /etc/postfix/main.cf, il vous faut ajouter dans le bloc smtpd_recipient_restrictions. la ligne :

check_policy_service inet:127.0.0.1:60000,

Si vous avez appliqué le tutoriel sur les règles anti-spam et RBL, vous obtenez la chose suivante :

smtpd_recipient_restrictions = reject_non_fqdn_sender,
reject_non_fqdn_recipient, reject_unknown_sender_domain,
reject_unknown_recipient_domain,
permit_mynetworks,
reject_unauth_destination,
reject_unauth_pipelining,
reject_invalid_hostname,
reject_rbl_client relays.ordb.org,
reject_rbl_client opm.blitzed.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
check_policy_service inet:127.0.0.1:60000,
permit

Si vous souhaitez personnaliser le message envoyé par postgrey, éditez le fichier /etc/default/postgrey et plus précisément la variable POSTGREY_TEXT.

Mise en production

Il vous suffit de relancer Postgrey et Postfix pour que vos modificatiosn soient prises en compte :

/etc/init.d/postgrey restart
/etc/init.d/postfix restart
View details »

Se prémunir des spams via l’implémentation de RBL et autres restrictions dans Postfix

Les RBL (Realtime Blackhole List) sont des listes noires tenues par des sites et qui aident à l’identification des spams (en très résumé). Ce tutoriel explique comment mettre en place ces règles de RBL au niveau de Postfix, ainsi que d’autres restrictions, pour limiter considérablement le nombre de spams qui tombent dans votre boîte et ce sans trop surcharger le serveur (requiert moins de ressource par exemple que de mettre en place SpamAssassin...)

Paramétrage de Postfix

Dans /etc/postfix/main.cf, il vous faut ajouter :

# Rejeter tout mail mal formaté
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_non_fqdn_hostname

# Règles RBL + Tri sur le format du mail
smtpd_recipient_restrictions =
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_sender_domain,
    reject_unknown_recipient_domain,
    permit_mynetworks,
    reject_unauth_destination,
    reject_unauth_pipelining,
    reject_invalid_hostname,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client sbl-xbl.spamhaus.org,
    reject_rbl_client bl.spamcop.net,
    permit

Les 4 sites répertoriés pour les lignes reject_rbl_client correspondent aux sites qui seront consultés pour vérifier si le mail est ou non un spam ou peut être considéré comme tel.

Les autres lignes testent surtout le format ou le contenu du mail (domaine invalide, expéditeur inconnu, etc).

Mise en production

Il vous suffit de relancer Postfix :

/etc/init.d/postfix restart

En savoir plus...

  • http://rbls.org/ : Pour tester si votre IP a été blacklisté par un des serveurs de RBL
View details »

Serveur de mail et listes de diffusion multidomaines

Après avoir brillamment mis en place un serveur de mail pour un domaine, il se peut que vous souhaitiez héberger sur la même machine d’autres domaines et donc envoyer des mails pour ces différents domaines. C’est ce que nous allons voir...

Je suppose que votre serveur de mail pour la gestion d’un domaine est bien configuré. Sinon, rendez-vous sur l'autre tutoriel.

Bla bla introductif

Ce tutoriel explique comment gérer les mails de plusieurs domaines sur une seule et même machine avec une seule instance de postfix.

Pour la gestion des domaines virtuels, deux solutions : * Gestion des domaines virtuels mais avec des comptes systèmes, ce que je présente ici * Gestion des domaines virtuels avec des comptes virtuels, qui est une solution plus propre mais plus complexe à mettre en place.

J’ai choisi la première solution de part sa simplicité et dans la mesure ou je ne prévois pas d’héberger des milliards de compte ou alors que des comptes de personnes en qui j’ai confiance.

Scénario

Dans mon cas, j’ai : * Domaine principal : monsite.com * Domaine virtuel : monsite2.com

les mails sur monsite.com marchent au poil. je dois donc ajouter la gestion dans postfix pour les mails et listes de monsite2.com

Gestion des domaines virtuels dans Postfix

C’est d’une simplicité déroutante, dans /etc/postfix/main.cf, ajoutez :

# Gestion des domaines virtuels + mailman pour les domaines virtuels
virtual_alias_domains = monsite2.com
virtual_alias_maps = hash:/etc/postfix/virtual_alias

L’instruction "virtual_alias_domains" indique le ou les noms de domines virtuels que postfix doit gérer. S’il y en a plusieurs, ils doivent être séparés par une virgule : toto.com, titi.com, etc.

Ensuite, il faut établir la correspondance entre les adresses mails et les comptes systèmes. Or dans /etc/aliases, on a déjà toute une série d’alias qui sont définis pour gérer les principales adresses. Il faut donc un fichier équivalent.

Le contenu de /etc/aliases :

#/etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: toto

J’ai ajouté la dernière ligne afin de ne pas consulter les mails de root (surtout si les mots de passe passent en clair donc tout est orienté vers un utilisateur lambda appelé toto.

Ces fichiers indiquent ainsi que toutes les adresses de gauche seront redirigées vers celle de droite.

La gestion de webmaster@monsite.com and co est donc assurée. Tous les mails, dont les spams, arriveront donc sur le compte toto.

Attaquons nous aux alias de monsite2.com :

Il vous faut dans tous les cas créer un compte système qui recevra les emails. Pour ma part, j’ai créé un compte "webmaster-site2". Je ne pouvais pas créer un compte webmaster sous peine de casser un alias de /etc/aliases.

Une fois défini, créez le fichier /etc/postfix/virtual_alias. Il contient les infos suivantes :

# /etc/postfix/virtual_alias - Gestion des domaines virtuels
#
#
# ne pas oublier de faire un postmap /etc/postfix/virtual_alias apres chaque modification
#

#
# monsite2.com
#

webmaster@monsite2.com    webmaster-site2
webmestre@monsite2.com    webmaster-site2
info@monsite2.com         webmaster-site2
contact@monsite2.com      webmaster-site2

Les mails envoyés sur ces quatre adresses atterriront donc dans la boite de webmaster-site2.

Une fois le fichier sauvegardé, il faut que postfix prenne en compte ces modifications :

postmap /etc/postfix/virtual_alias
/etc/init.d/postfix reload (pour que les modifications faites dans main.cf soient également prises en compte)

Mailman et les domaines virtuels

Là aussi, c’est assez simple (comme quoi...)

Dans /etc/postfix/main.cf, ajouter à l'instruction "virtual_alias_maps" :

hash :/var/lib/mailman/data/virtual-mailman

Ce qui nous donne :

virtual_alias_maps = hash:/etc/postfix/virtual_alias, hash:/var/lib/mailman/data/virtual-mailman

Dans /etc/mailman/m_cfg.py, ajoutez :

# Gestion des domaines virtuels
# POSTFIX_STYLE_VIRTUAL_DOMAINS = ['dom2.ain', 'dom3.ain']
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['monsite2.com']
add_virtualhost('www.modeledulibre.info', 'monsite2.com')

ou bien :

# Gestion des domaines virtuels
# POSTFIX_STYLE_VIRTUAL_DOMAINS = ['dom2.ain', 'dom3.ain']
POSTFIX_STYLE_VIRTUAL_DOMAINS = ['monsite2.com']
VIRTUAL_HOSTS = { 'www.monsite2.com': 'monsite2.com',
                  'www.do.main.two': 'do.main.two',
    }

Rajoutez ensuite dans votre fichier de virtual host apache :

ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
Alias /pipermail/ /var/lib/mailman/archives/public/
<Directory /usr/lib/cgi-bin/mailman/>
    AllowOverride All
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

Relancez Apache, Postfix et Mailman pour que vos modifications soient prises en compte.

Rendez vous alors sur http://www.monsite2com/mailman/create.

Bizarrement, en tapant http://monsite2com/mailman/create il me dit que mon virtual host n’existe pas...

C’est fini...

View details »