Retour d'expérience Sympa CNAM 07 juin 2007. p 1



Documents pareils
Plan. Présentation du logiciel Sympa Architecture La gestion des hôtes virtuels Listes avec inclusion des abonnés Les modules d authentification

Plan. Présentation du logiciel Sympa Architecture La gestion des hôtes virtuels Listes avec inclusion des abonnés Les modules d authentification

WWSympa, une interface web pour Sympa

DNS et Mail. LDN 15 octobre DNS et Mail. Benjamin Bayart, Fédération FDN. DNS - fichier de zone. DNS - configuration

TrustedBird, un client de messagerie de confiance

S E C U R I N E T S C l u b d e l a s é c u r i t é i n f o r m a t i q u e I N S A T. Tutoriel Postfix

I. Paramétrage de apache2

A. À propos des annuaires

Catalogue des formations 2015

Messagerie & Groupeware. augmentez l expertise de votre capital humain

Request Tracker pour les Nuls. Yves Agostini - YVESAGO

Samson BISARO Christian MAILLARD

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Configuration d'un annuaire LDAP

Présentation du relais HTTP Open Source Vulture. Arnaud Desmons Jérémie Jourdin

Artica. VIPTrack avec la Messagerie. Révision Du 21 Mars version

LISTES DE DISTRIBUTION GÉRÉ PAR SYMPA DOCUMENT EXPLICATIF DE ÉCOLE POLYTECHNIQUE

Hébergement de sites Web

L3 informatique TP n o 2 : Les applications réseau

Installation du DNS (Bind9)

Retour d'expérience avec : OCS Inventory & GLP

OpenLDAP, un outil d administration Réseau. Une implémentation d OpenLDAP

Phase 1 : Introduction 1 jour : 31/10/13

LINUX REDHAT, SERVICES RÉSEAUX/INTERNET

Vos outils de messagerie dans le Cloud avec LotusLive Notes. Session LOT12 Xavier Défossez - Lotus Technical Sales

Configuration avancée de Postfix

Zimbra. S I A T. T é l : ( ) F a x : ( )

Savoir-faire Linux Inc Administration et Conseil Linux

Fiabilisez la diffusion de vos messages!

Configurer la supervision pour une base MS SQL Server Viadéis Services

Planifier les rapports d

Installation de Premium-RH

Couche application. La couche application est la plus élevée du modèle de référence.

Joomla! Création et administration d'un site web - Version numérique

arcopole Studio Annexe 4 Intégration LDAP et processus d authentification Site du programme arcopole :

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Windows Server 2012 R2 Administration

CASE-LINUX MAIL. Introduction. CHARLES ARNAUD Linux MAIL

2013 Microsoft Exchange 2007 OLIVIER D.

Programmation Web. Madalina Croitoru IUT Montpellier

Maarch Framework 3 - Maarch. Tests de charge. Professional Services. 11, bd du Sud Est Nanterre

Plan. Présentation du logiciel Sympa Architecture La gestion des hôtes virtuels Listes avec inclusion des abonnés Les modules d authentification

Apache Camel. Entreprise Integration Patterns. Raphaël Delaporte BreizhJUG

Architecture de serveurs virtualisés pour la communauté mathématique

Serveur mail sécurisé

FILIÈRE TRAVAIL COLLABORATIF

Mise à jour des compétences d'administrateur Exchange Server 2003 ou 2007 vers Exchange Server 2010

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

M2-ESECURE Rezo TP3: LDAP - Mail

Journée Josy/PLUME. Outils logiciels libres utiles à tout ASR SAMBA. Maurice Libes. Centre d'océanologie de Marseille UMS 2196 CNRS

SQL Server et Active Directory

LES ACCES ODBC AVEC LE SYSTEME SAS

Synchronisation Mysql (Replication)

Retour d expérience sur Prelude

Artica. Domain throttling avec Postfix. Révision Du 04 Février 2011 version

FORMATION TALEND. Page 1 sur 9

Exchange Server 2010 Exploitation d'une plateforme de messagerie

Du 03 au 07 Février 2014 Tunis (Tunisie)

Les Content Delivery Network (CDN)


SIP. Plan. Introduction Architecture SIP Messages SIP Exemples d établissement de session Enregistrement

Documentation Honolulu 14 (1)

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Les Utilisateurs dans SharePoint

Dr.Web Les Fonctionnalités

//////////////////////////////////////////////////////////////////// Administration bases de données

Présentation de la solution Open Source «Vulture» Version 2.0

Table des matières Avant-propos... V Scripting Windows, pour quoi faire?... 1 Dans quel contexte?

Fonctionnement du courrier électronique

Annuaires LDAP et méta-annuaires

RELEASE NOTES. Les nouveautés Desktop Manager 2.8

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

Ocs Inventory et GLPI s appuie sur un serveur LAMP. Je vais donc commencer par installer les paquets nécessaires.

Architecture Orientée Service, JSON et API REST

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

25 septembre Migration des accès au Registre national en protocole X.25 vers le protocole TCP/IP, pour les utilisateurs du Registre national

Document d architecture

WebSSO, synchronisation et contrôle des accès via LDAP

sshgate Patrick Guiran Chef de projet support

REQUEA. v PD 20 mars Mouvements d arrivée / départ de personnels Description produit

Smart Notification Management

Divers éléments. Protocoles d'applications. Un agent Utilisateur. MUA - Agents Utilisateurs de Courriel. Simple Mail Transfer Protocol

VADE MECUM COURRIERS ELECTRONIQUES. Comprendre, s'organiser et gérer durablement la communication électronique

A. Architecture du serveur Tomcat 6

Nouveautés Ignition v7.7

L annuaire et le Service DNS

Le serveur de listes de diffusion Sympa

Sébastien Geiger IPHC Strasbourg

Alfstore workflow framework Spécification technique

OS Réseaux et Programmation Système - C5

Session N : 5 Relais de messagerie sécurisé et libre

Exchange Server 2013 Préparation à la certification MCSE Messaging - Examen

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Table des matières Page 1

Prise en main d un poste de travail sous Windows sur le réseau du département MMI de l'upemlv. d après M. Berthet et G.Charpentier

Transcription:

SYMPA : retour d'expérience p 1

Les Listes deen diffusion Mise oeuvre : avant Utilisation des familles de listes pour les différentes messageries Assigne la priorité, les scénarios, les contraintes par famille Une partie de la QoS est gérée par les smtp Utilisation des LDAP et SQL named filters et des Custom::Condition pour les droits Interroge les bases de données existantes Développement d'un service central de stratégies de droits Utilisation des listes automatiques pour les listes «à la demande» définition d'une charte de nommage plusieurs familles automatiques Intégration de wwsympa dans la charte des portails existants Création d'un portail de listes à façon pour expliquer et tester les droits accompagnement sur les listes automatiques p 2

Messagerie de commandement 1/3 Un ensemble de listes mises à jour sur l'annuaire LDAP Création d'une famille dans sympa Stockage de la liste des listes d'une famille dans une table SQL Création d'une interface pour gérer les listes dans la famille script quotidien : réinstancie les familles met à jour les annuaires sur les listes publiques pour Thunderbird màj des contacts dans AD/Exchange pour Outlook force la màj des membres Listes avec sources de données LDAP Abonnement/Désabonnement fermé, réception forcé à mail SQL déf. listes XML LDAP + AD sympa p 3

Messagerie de commandement 2/3 L'interface d'admin de la famille : phpmyedit Gestion des sources de données : en SQL ou via wwsympa p 4

Messagerie de commandement 3/3 config.tt2 send commandement subscribe close unsubscribe close... scenari/send.commandement search(cmdt.sql,[sender]) smtp,smime,md5 -> do_it cmdt.sql sql_named_filter_query db_type mysql db_name,db_host,db_user,db_passwd statement SELECT COUNT(*) FROM personnels WHERE uid=concat( SUBSTRING_INDEX(SUBSTRING_INDEX([sender], '\@', 1), '\+', 1), '\@', SUBSTRING_INDEX([sender], '\@', -1)) AND position = 'chef' p 5

Listes automatiques 1/12 Rappel : forte croissance du périmètre ne peut anticiper la demande pas de nouvelle charge d'administration p 6

Listes automatiques 2/12 Définition d'une charte de nommage le nom de la liste doit porter la définition du périmètre des destinataires liste.sites-56@ liste.sites-paca@ liste.civils.sites-56@ Logique charte/lexique => expression dans le SI Eléments de la charte à traduire en requête ldap sites => (objectclass=organizationalunit) 56 => (zipcode=56*) Implémenter les droits si requis Interface utilisateur Rendre humaine la notation technique Routage smtp p 7

Listes automatiques 3/12 Un exemple de charte : liste.chefs-56 <mail> ::= 'liste.' <personnels> '-' <unites> <personnels> ::= 'personnels' <categorie> <categorie> ::= 'chefs' 'plongeurs' 'pilotes'... <unite> ::= <dept> <region> <site> <dept> ::= '0' '1' '2'... <region> ::= 'idf' 'paca'... <site> ::= 'site-' <lieu> <lieu> ::= 'grenoble' 'lyon'... p 8

Listes automatiques 4/12 Façon all-in-one TT2 : auto-cio.40 [CHIEF INFO OFF of 40] /home/sympa/etc/families/age occupation/config.tt2... user_data_source include2 [% occupations = { cto = { title=>"chief technical officer", abbr=>"chief TECH OFF" }, coo = { title=>"chief operating officer", abbr=>"chief OPER OFF" }, cio = { title=>"chief information officer", abbr=>"chief INFO OFF" }, } nemes = listname.split(' '); THROW autofamily "SYNTAX ERROR: listname must begin with 'auto ' " IF (nemes.size!= 2 nemes.0!= 'auto'); tokens = nemes.1.split('\.'); THROW autofamily "SYNTAX ERROR: wrong listname syntax" IF (tokens.size!= 2! occupations.${tokens.0} tokens.1 < 20 tokens.1 > 99 ); age = tokens.1 div 10; %] custom_subject [[% occupations.${tokens.0}.abbr %] of [% tokens.1 %]] subject Every [% tokens.1 %] years old [% occupations.${tokens.0}.title %] include_ldap_query attrs mail filter (&(objectclass=inetorgperson)(employeetype=[% occupations.${tokens.0}.abbr %])(personage=[% age %]*)) p 9

Listes automatiques 5/12 On crée des modules perl pour n'avoir qu'un seul code Categories.pm our $fonctions = { 'chefs' => { lib=>"chefs", filtre=>"(organizationalrole=chef)", }, 'civils' => { lib=>"civils", filtre=>"(employeetype=civil)", },... Sites.pm our $sites = { 'orleans'=> { lib=>'orléans', filtre=>'(zipcode=45000)', },... On rassemble la logique métier dans un module qui renvoie un hash Automate.pm use $fonctions;... sub compute { my $listname = shift; # logique métier return { hash des paramètres de la liste }; } p 10

Listes automatiques 6/12 On va utiliser un même module pour les droits et la conf.tt2 sympa.conf automatic_list_create automate scenari/automatic_list_creation.automate CustomCondition::automate([sender],[family],[automatic_listname]) smtp,md5,smime -> do_it scenari/send.automate CustomCondition::automate([sender],'commandement', [list->name] smtp,md5,smime -> do_it custom_conditions/ automate.pm Template::Plugin ::Automate::filter() Template ::Plugin ::Automate families/ commandement/ config.tt2 filter() [% USE $Automate %] p 11

Listes automatiques 7/12 Template/Plugin/Automate.pm On crée un nouveau filtre pour TT2, qui sera utilisable pour les scénarios via CustomCondition package Template::Plugin::Automate; use Template::Plugin::Filter; use base qw( Template::Plugin::Filter ); sub filter { # 'conf?liste.chefs-17' 'soap?liste.chefs-17' my ($self, $param) = @_; ($rien, $action, $listname) = $param =~ m/^\s*(([a-z]+)\?)?(.*)\s*$/; # calcule la conf en fonction du nom de la liste } if ($action eq 'soap') { # pas très élégant, soit return {param=>conf }; }else { return "include_ldap_2level_query\nfilter1...\nfilter2..."; } p 12

Listes automatiques 8/12 config.tt2 [% USE Automate %] visibility secret priority 5... [% 'conf?' _ listname FILTER $Automate %] expl/liste/config visibility secret priority 5... include_ldap_2level_query filter1... filter2... p 13

Listes automatiques 9/12 custom_conditions/automate.pm gère les droits pour sympa, comme pour le serveur soap use Template::Plugin::Automate; my $conf = Template::Plugin::Automate::filter('conf?liste.chefs-56'); return -1; # interdit return 1; # a les droits return undef; # erreur survenue p 14

Listes automatiques 10/12 interface client XUL p 15

Listes automatiques 11/12 main.cf transport_maps = regexp:/etc/postfix/transport_regexp sympa_destination_recipient_limit = 1 sympabounce_destination_recipient_limit = 1 sympafamily_destination_recipient_limit = 1 transport_regexp /^bounce+.*\@lists\.gendarmerie\.fr$/ sympabounce: /^.*+owner\@lists\.gendarmerie\.fr$/ sympabounce: /^liste\..*-(owner request editor unsubscribe subscribe)\@lists\.gendarmerie\.fr$/ sympa: /^liste\..*\@lists\.gendarmerie\.fr$/ sympafamily: /^.*\@lists\.gendarmerie\.fr$/ sympa: master.cf sympa unix n n pipe flags=r user=sympa argv=/usr/lib/sympa/bin/queue ${recipient} sympabounce unix n n pipe flags=r user=sympa argv=/usr/lib/sympa/bin/bouncequeue ${user} sympafamily unix n n pipe flags=r user=sympa argv=/usr/lib/sympa/bin/familyqueue ${user} commandement p 16

Listes automatiques 12/12 Notes La logique métier peut être hors de sympa (webservices) Sympa cache pendant 1 heure, mais nous pouvons utiliser Cache::File Réutiliser le même module pour accepter le mail au niveau smtp Les utilisations peuvent être simples : Constituer rapidement une fonctionnalité listes/sgbd Donner des fonctionnalités de listes à des applications Valoriser son SIRH p 17

Les Listes de :diffusion : avant Postfix master.cf Postfix permet d'enchaîner différents filtres pour traiter un message. Il gère les files d'attente et passe le mail à des pipes ou des sockets sous le protocole smtp. On peut utiliser ce principe pour contrôler le mail avant qu'il ne soit donné à sympa : vérification liste inexistante vérification sommaire de droits On peut créer un daemon smtp facilement avec perl. Ici on déclare donner le mail à un daemon écoutant sur :25001 Il va nous redonner le mail sur :25002 (on met postfix à l'écoute) master.cf : smtp inet n -o content_filter=smtp:localhost:25001 127.0.0.1:25002 inet n -o content_filter= - - - smtpd smtpd p 18

Les Listes de diffusion1/3 : avant Net::Server::Mail package MonServeur; use Net::Server::PreFork; @ISA = qw(net::server::prefork); use Net::Server::Mail::ESMTP; # maintenance cpan gie PACKAGE ->run(port=>25001, background=>1); sub process_request { # un mail arrive my $smtp = new Net::Server::Mail::ESMTP; $smtp->register('net::server::mail::esmtp::8bitmime'); $smtp->set_callback( DATA => \&control ); $smtp->process; return; } p 19

Les Listes de diffusion2/3 : avant Net::Server::Mail use Email::Simple; sub control { $session = shift; $sender = $session->get_sender(); @recipients = $session->get_recipients(); $mail = Email::Simple->new( $session->{_data} ); $en_string = $mail->as_string; # ai-je un fichier config contenant status open dans expl/ # pour cette liste? } if ($bad) { return (0, 554, 'non merci'); }else { renvoie_postfix($en_string, $sender, \@recipients, 25002); } p 20

Les Listes de diffusion3/3 : avant Net::Server::Mail use Net::SMTP; sub renvoie_postfix { my ($en_string, $sender, $recipients, $port) = @_; } my $smtp = Net::SMTP->new( 'localhost', Port => $port, ); $smtp->mail($sender); $smtp->recipient(@$recipients); $smtp->data(); $smtp->datasend($$en_string); $smtp->dataend(); $smtp->quit; p 21

Les Listes de diffusion qpsmtpd 1/3 : avant Problème : le mail a été accepté, on doit envoyer un bounce Solution : mettre notre traitement en frontal de postfix, pour refuser le mail lors de la transaction qpsmtpd est un daemon perl sur Net::Server ou mod_perl2 (perl.org, apache.org, lists.mysql.org) mise en oeuvre très simple (plugins) postfix reçoit le mail dans un pipe (cleanup) p 22

Les Listes de diffusion qpsmtpd 2/3 : avant qpsmtpd fournit des hooks à chaque étape du protocole SMTP Un plugin est un script perl qui : fournit une ou plusieurs méthode à appeler lors de ces hooks renvoie un code d'erreur : DONE : fin du traitement, j'ai tout fait DECLINED : rien à signaler pour moi DENY : refuser en 550 DENYSOFT : refuser en 450 *_DISCONNECT : avec déconnection p 23

Les Listes de diffusion qpsmtpd 3/3 : avant appliqué à sympa : use Qpsmtpd::DSN; # RFC 1893 sub hook_rcpt { # RCPT TO my ($self, $transaction, $recipient) = @_; return (DECLINED) unless $recipient->host && $recipient->user; my $host = lc $recipient->host; my $user = lc $recipient->user; #... cherche config, met en File::Cache return Qpsmtpd::DSN->no_such_user("mail to $bad not accepted here") if ($pas_de_status_open_pour_cette_liste_et_robot) # on laisse les autres plugins agir à leur tour return (DECLINED); } p 24

Architecture t ho t ho ldap mysql s ap sn s ap sn heartbeat / mon ldap réplication mysql NFS / DRBD p 25

Quelques chiffres 2000 listes en familles Fonds de 900 listes automatiques (suppression hebdomadaire) 1.500.000 mails émis / mois Plus grosse liste : 87.000 membres (ldap) Les 10 plus grosses listes font 500.000 inscriptions 40 listes non utilisées Archives quasi-inexistantes Serveur 6GB, bi-xeon Plus gros consommateur : snapshot openldap Load average : Min: 0.00 Avg: 0.10 Max: 2.26 p 26

Avenir Nouvelle montée en puissance attendue par de nouveaux critères pour joindre ses pairs Intégration de fonctionnalités Sympa dans Thunderbird Meilleur traitement des bounces p 27