Nginx-extras, php-fpm – Reverse Proxy Cache – Ssl offloading sous Gnu/Debian Jessie

nginx [engine x] est un logiciel de serveur Web écrit par Igor Sysoev. Ses sources sont disponibles sous une licence de type BSD.

Cet article est une actualisation d’un ancien article diffusé sur ce site.

Nous utilisons ce serveur comme un « reverse proxy cache » pour délivrer plus efficacement les textes, images, sons et vidéo de nos sites hébergés sur notre plate-forme (une ferme de serveur Nginx et non plus Apache comme auparavant). Cette configuration fonctionne sous Gnu/Debian Jessie, mais aussi avec la version Backports sous Wheezy. Nous forçons aussi l’usage du SSL dont est chargé le Nginx qui joue le rôle de reverse proxy cache.

Cette configuration fonctionne avec Moodle, WordPress, Drupal et Owncloud. Elle ne nécessite pas de mettre le cgi.fix_pathinfo du php.ini à zéro et donc permet de laisser la version par défaut du fichier concernant ce paramètre.

Nous utilisons la version extras car elle intègre les modules upstream fair, upload_progress et le OCSP stapling. Nous utilisons un certificat ssl de la société Startcom.

Voici la configuration du serveur Nginx, sur distribution Gnu/Linux Debian Jessie, dans ce contexte :

# apt-get install nginx-extras

Sous Wheezy

# apt-get install -t wheezy-backports nginx-extras

/etc/nginx/nginx.conf

user www-data;

worker_processes auto;  # enfin auto !!!

worker_rlimit_nofile 16536;

error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;

timer_resolution 1ms;

events {
    worker_connections 1024;
    multi_accept on;
    use epoll;
    accept_mutex_delay 1ms;
}

http {

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

 # Client connection
 client_body_temp_path /tmp 1 2;
 client_header_timeout 5s;
 client_body_timeout 5s;
 send_timeout 10m;
 connection_pool_size 256k;
 client_header_buffer_size 16k;
 large_client_header_buffers 1024 256k; 
 request_pool_size 128k; 
 keepalive_requests 1000;
 keepalive_timeout 10;
 client_max_body_size 2G;
 client_body_buffer_size 1m;
 client_body_in_single_buffer on;
 open_file_cache max=10000 inactive=120s; 
 open_file_cache_valid    45s;
 open_file_cache_min_uses 0;
 open_file_cache_errors   off;
 reset_timedout_connection on;

  gzip on;
  gzip_static on;
  gzip_disable "msie6";  # trop vieux....
  gzip_min_length 1000;
  gzip_buffers 16 32k;
  gzip_comp_level 9;
  gzip_types  text/x-js image/svg+xml image/x-icon image/png text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;
  gzip_vary on;
  gzip_proxied any;  

 # PROGRESS.
  upload_progress uploads 1m;


  ignore_invalid_headers on;
  index index.html;
  add_header Connection close;
  autoindex off;

  # Network optimizations
  output_buffers 1000 128k;
  postpone_output 1460;
  sendfile on;   # off dans le server qui stream 
  sendfile_max_chunk 256k;
  tcp_nopush on;
  tcp_nodelay on;

  server_tokens  off;

  server_names_hash_max_size 5120;
  server_names_hash_bucket_size 256;
  
  upstream_fair_shm_size 1024k;
  
  #### SSL
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/nginx/ssl/startssl-ca.pem;
  resolver 127.0.0.1 valid=300s;
  resolver_timeout 10s;
  ssl_session_cache shared:SSL:32m;
  ssl_buffer_size 8k;
  ssl_session_timeout 10m;

  log_format  access_proxy       '{"ip": "$remote_addr",'
                                 '"port": "$remote_port",'
				 '"host": "$host",'
                                 '"path": "$request_uri",'
                                 '"status": "$status($upstream_status)",'
                                 '"referrer": "$http_referer",'
                                 '"user_agent": "$http_user_agent",'
                                 '"length": $bytes_sent/$gzip_ratio($sent_http_content_type),'
                                 '"generation_time_milli": $request_time($upstream_response_time),'
                                 '"date": "$time_local"}';

       log_format stats '$host $http_x_forwarded_for - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
		        '"$http_user_agent"';
					


  access_log "/var/log/nginx/access.log" access_proxy;

  include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/*;
 }

les fichiers dans le /etc/nginx/conf.d/ complètent la configuration du reverse proxy :

/etc/nginx/conf.d/proxy.conf

# COMMON PARAMS
proxy_temp_path   /var/lib/nginx/proxy 1 2;
# A cause des CGN ou NAT maison on veut le port tcp dans les logs.
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection Close;
proxy_pass_header Set-Cookie;
proxy_pass_header P3P;
proxy_pass_header User-Agent;
proxy_set_header X-Accel-Buffering on;
proxy_redirect off;
proxy_intercept_errors on;
proxy_ignore_client_abort on;
# qui attends plus de 2mn aujourd'hui ?
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 120;
proxy_buffer_size 128k;
proxy_buffers 65536 128k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 128k;

/etc/nginx/conf.d/backend.conf

upstream backend {
server A max_fails=1 fail_timeout=1; 
server B max_fails=1 fail_timeout=1; 
fair; # sois fair et tais toi.
}

/etc/nginx/conf.d/cache.conf

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:4m inactive=180s max_size=100m;
proxy_cache_min_uses 0;
proxy_cache_methods GET;
proxy_cache_key "$host$request_uri$cookie_PHPSESSID";

/etc/nginx/conf.d/fcgicache.conf

fastcgi_cache_path /var/cache/fcgicache levels=1:2 keys_zone=fcgimicrocache:8m max_size=200m;
fastcgi_cache_min_uses 0;
fastcgi_cache_methods GET;
fastcgi_buffer_size 128k;
fastcgi_buffers 65536 128k;
fastcgi_cache_key $scheme$proxy_host$request_uri;

/etc/nginx/conf.d/security.conf

# un anti-ddos et brut force de fortune.
limit_conn_zone $binary_remote_addr zone=parip:4m;
limit_conn_zone $server_name zone=parserver:4m;

Nous utilisons pour le SSL, le support TLS SNI, Les fichiers pour les virtualhost sont donc les suivants :

/etc/nginx/sites-available/00-default.conf

server {

   listen IP EXTERNE:80 default_server;

   server_name _;

   limit_conn parip 5;
   limit_conn parserver 100;

   return 444;

}

   listen IP EXTERNE:443 ssl;

    
     ssl_certificate           /etc/nginx/ssl/MON CERTIFICAT + INTERMEDIATE.pem;
     ssl_certificate_key       /etc/nginx/ssl/MA CLE de CERTIFICAT.key;

     ssl_prefer_server_ciphers on;
     # nous corsons le SSL..... 
     ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers             "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   
   server_name _;

   limit_conn parip 5;
   limit_conn parserver 100;

   return 444;

}

##########################  si BACKEND sur un même serveur ou pas #######################

server {
   listen IP BACKEND:6666 default_server;

   server_name _;

   limit_conn parip 5;
   limit_conn parserver 100;

   return 444;

}


Sur le Nginx, reverse Proxy cache:
/etc/nginx/sites-available/monnomdeserveur.conf

server {

listen IPEXTERNE:80;

server_name www.monnomdeserveursanswww;

   limit_conn parip 5;
   limit_conn parserver 100;

return 301  http://monnomdeserveursanswww;

}

server {

listen IPEXTERNE:80;
server_name monnomdeserveursanswww;

   limit_conn parip 5;
   limit_conn parserver 100;

return 301  https://monnomdeserveursanswww;

}

server {
   listen IP EXTERNE:443 ssl;

    
     ssl_certificate           /etc/nginx/ssl/MON CERTIFICAT + INTERMEDIATE.pem;
     ssl_certificate_key       /etc/nginx/ssl/MA CLE de CERTIFICAT.key;

     ssl_prefer_server_ciphers on;
     ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers             "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   
   server_name www.monnomdeserveursanswww;

   limit_conn parip 5;
   limit_conn parserver 100;

return 301  https://monnomdeserveursanswww;

}

server {
   listen IP EXTERNE:443 ssl;

    
     ssl_certificate           /etc/nginx/ssl/MON CERTIFICAT + INTERMEDIATE.pem;
     ssl_certificate_key       /etc/nginx/ssl/MA CLE de CERTIFICAT.key;

     ssl_prefer_server_ciphers on;
     ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;
     ssl_ciphers             "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
   
   server_name monnomdeserveursanswww;

   limit_conn parip 5;
   limit_conn parserver 100;

    # je travaille pas pour rien !
     location ~ /\. { deny  all; access_log off; log_not_found off; }
     location ~ ~$ { deny  all; access_log off; log_not_found off; }

     location ~* .(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(.php)?|xtmpl)$|^(code-style.pl|Entries.*|Repository|Root|Tag|Template)$
       {   deny all; access_log off; log_not_found off;     }


 ## je bosse maintenant
     client_max_body_size 2G;

    location / {

    
      proxy_cache microcache; 
      proxy_cache_valid 200 302 2s;
      proxy_cache_valid 404 3s;
      proxy_cache_valid any 1s;
      proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
      proxy_ignore_headers Cache-Control Expires;
      proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
      proxy_cache_bypass  $http_pragma $http_authorization;
      proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
      proxy_no_cache $http_pragma $http_authorization;
      add_header X-Micro-Cache $upstream_cache_status;
      add_header X-Content-Options nosniff;
      add_header Strict-Transport-Security "max-age=7200";
   
      ## HTTPS
      add_header              Front-End-Https   on;

      proxy_cache_lock on;
      proxy_http_version 1.1;  # 1.0.... mais vous rigolez...
      proxy_pass http://backend_www;

      track_uploads uploads 30s;

   
  }}

#### la conf du BACKEND sur un serveur différent (tiers application) ou identique (en 127.0.0.1).
/etc/nginx/sites-available/monnomdeserveur.conf

server {
	listen IPBACKEND:6666;
	server_name monnomdeserveur;
     
	client_max_body_size 2G;  # merci owncloud...
   	
        root /srv/...MON CHEMIN..../html;
	index index.php;
        
        gzip off;

        access_log "/var/log/nginx/vhosts.access.log" stats;
        location = /favicon.ico {
	    log_not_found off;
	    access_log off;
         }

         location = /robots.txt {
	     allow all;
	     log_not_found off;
	     access_log off;
          }

location / {
	try_files $uri $uri/ /index.php?$args;
}
  location ~ [^/]\.php(/|$) {
                fastcgi_split_path_info ^(.+?\.php)(/.+)$;
                
# certains préfèrent: try url =404; mais non....
                  if (!-f $document_root$fastcgi_script_name) {
		                          return 404;
					               
                # With php5-fpm:
                fastcgi_intercept_errors on;
                fastcgi_cache fcgimicrocache;
                ## The cache key.
                fastcgi_cache_key $scheme$request_method$host$request_uri;
                fastcgi_cache_valid 200 302 2s;
                fastcgi_cache_valid 404 3s;
                fastcgi_cache_valid any 1s;
                fastcgi_cache_use_stale error timeout invalid_header updating http_500;                
                fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
                ## Bypass the cache.
                fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
                fastcgi_cache_bypass $http_pragma $http_authorization;
                fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment; 
                fastcgi_no_cache $http_pragma $http_authorization;
                fastcgi_cache_lock on;
                include fastcgi_params;
                fastcgi_read_timeout 300;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param HTTPS on;
		fastcgi_pass unix:/var/run/php-fpm.sock;
        }

# Cachons nous ! un bon score sur gtmetrix...
  location ~* \.(?:ico|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
           
             expires 1y;
	     add_header Pragma public;
             add_header Cache-Control "public";
             access_log off;
             tcp_nodelay off;
             }

     location ~* \.(?:js|css)$ {
            
             expires 1w;
	     add_header Pragma public;
             add_header Cache-Control "public";
             add_header Vary "Accept-Encoding";
             access_log off;
             tcp_nodelay off;
           }
}

Pour vider la cache, il faut en plus du redémarrage du serveur Nginx, ne pas oublier d’effacer le contenu du répertoire /var/cache/nginx/.

La commande nginx -t est pratique pour vérifier la conformité de la configuration.

Il n’y a pas d’Ipv6 car c’est de la M….on en veut plus.

Publié dans Internet, Libre, Techno, Tutoriel | Marqué avec , , , , | Commentaires fermés sur Nginx-extras, php-fpm – Reverse Proxy Cache – Ssl offloading sous Gnu/Debian Jessie

Paquet Nginx-extras avec RTMP sous Gnu/Linux Debian Jessie

Pour installer le module RTMP dans le paquet Nginx-extras de la Debian 8.0, il vous faut mettre les lignes dans votre /etc/apt/sources.list suivantes:

ex: 
deb http://ftp.fr.debian.org/debian/ jessie main 
deb-src http://ftp.fr.debian.org/debian/ jessie main 
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

Ensuite, si ce n’est pas déjà fait, vous préparez l’environnement de compilation et récupérez les sources de Nginx et du module RTMP

mkdir nginxrtmp
cd nginxrtmp
sudo apt-get install build-essential git gcc make jed libpcre3-dev
sudo apt-get source nginx-extras
sudo apt-get build-dep nginx-extras

récupérons le dernier source du module RTMP

git clone https://github.com/arut/nginx-rtmp-module
mv nginx-rtmp-module nginx-1.6.2/debian/modules/

la version de Nginx sous Jessie est actuellement la 1.6.2-5

jed nginx-1.6.2/debian/rules

modifiez la ligne 113 et ajouter la ligne 114 :

 --add-module=$(MODULESDIR)/ngx_http_substitutions_filter_module \  (Ligne 113 ajout du backslash)
 --add-module=$(MODULESDIR)/nginx-rtmp-module                       (Ligne 114)

sauvegardez votre modification.

sudo apt-get -b source nginx-extras

Vous ne devriez pas rencontrer d’erreur.
vous disposez maintenant des fichiers suivants:

nginx_1.6.2-5_all.deb	      nginx-extras_1.6.2-5_amd64.deb	  nginx-full-dbg_1.6.2-5_amd64.deb
nginx-common_1.6.2-5_all.deb  nginx-extras-dbg_1.6.2-5_amd64.deb  nginx-light_1.6.2-5_amd64.deb
nginx-doc_1.6.2-5_all.deb     nginx-full_1.6.2-5_amd64.deb	  nginx-light-dbg_1.6.2-5_amd64.deb

les paquets nginx-common et nginx-extras seront nécessaires à l’installation.

Cette manipulation sera effectuée à chaque mise à jour de Nginx de la distribution Gnu/linux Debian Jessie.

Nous verrons dans un prochain article comment l’installer, le configurer et l’utiliser.

Publié dans Libre, Techno, Tutoriel | Marqué avec , , , , | Commentaires fermés sur Paquet Nginx-extras avec RTMP sous Gnu/Linux Debian Jessie

Milter-greylist pour Postfix Gnu/Linux Debian Wheezy

Cet article vient en complément des articles précédents et il permet de mettre en place une Greylist‘ pour lutter contre le spam. Pour cela nous allons utiliser milter-greylist.

Ce programme est disponible sous Gnu/Linux Debian Wheezy 7.0 en version >=4.3.9. Pour l’installer avec les dépendances nécessaires à notre configuration, rien de plus simple avec notre habituelle commande :

apt-get install milter-greylist

Dans la version Gnu/linux Debian wheezy, il a été compilé avec le SPF et la gestion des listes de blocage que nous utiliserons pour que Postfix n’est plus à le prendre en charge.

Pour configurer, nous devons éditer le fichiers et intégrer la configuration suivante dans :
/etc/milter-greylist/greylist.conf

# Simple greylisting config file

# base des ips blacklistées ou whitelistées.
dumpfile "/var/lib/milter-greylist/greylist.db" 600
dumpfreq 1d

# si on veut des logs bien verbeux dé-commenter le paramêtre suivant
# verbose

# On ne pas de message donnant trop d'indication au refus de mail
quiet

# ne rien ajouter à l'entete du mail reçu sauf si derrière on "score" le niveau de spam
report none

# MX peering pas de mx secondaire pourquoi faire ?
#peer 192.0.2.17
#peer 192.0.2.18

# list de serveurs acceptables
dnsrbl "MTAWL" list.dnswl.org 127.0.0.0/16

# list de serveurs pas acceptables ?! 😉
dnsrbl "NJABL" dnsbl.njabl.org 127.0.0.0/24
dnsrbl "CBL ABUSEAT" cbl.abuseat.org 127.0.0.0/24
dnsrbl "SORBS" dnsbl.sorbs.net 127.0.0.0/24
dnsrbl "SPAMCOP" bl.spamcop.net 127.0.0.0/24
dnsrbl "SPAMHAUS" zen.spamhaus.org 127.0.0.0/24
dnsrbl "SPAMCANNIBAL" bl.spamcannibal.org 127.0.0.0/24

# Notre réseau...
list "mon reseau" addr { 127.0.0.1/8 ::1 }

# ... ne subit pas de greylist ou contrôle.
racl whitelist list "mon reseau"

# les acceptables non plus.
racl whitelist dnsrbl "MTAWL"                                                                                                                               

# les autres on ne veut pas de vous !
racl blacklist dnsrbl "SORBS"  msg "Bad reputation - listed on dnsbl.sorbs.net blacklist" flushaddr
racl blacklist dnsrbl "CBL ABUSEAT" msg "Bad reputation - listed on cbl.abuseat.org blacklist" flushaddr
racl blacklist dnsrbl "SPAMCOP" msg "Bad reputation - listed on bl.spamcom.net backlist" flushaddr
racl blacklist dnsrbl "NJABL" msg "Bad reputation - listed on dnsbl.njabl.org blacklist" flushaddr
racl blacklist dnsrbl "SPAMHAUS" msg "Bad reputation - listed on zen.spamhaus.org blacklist" flushaddr
racl blacklist dnsrbl "SPAMCANNIBAL" msg "Bad reputation - listed on bl.spamcannibal.org blacklist" flushaddr

# si le spf  est absent , on greylist par précaution.
racl greylist spf softfail delay 30m
# on blacklist le spf qui existe mais ne correspond pas. 
racl blacklist spf fail flushaddr
# par défaut on greylist et si le greylist est bon, on whiteliste pendant 30j
racl greylist default delay 7m autowhite 30d

le fichier pour permettre le démarrage de milter-greylist :
/etc/default/milter-greylist

 
ENABLED=1
SOCKET="inet:14123@[127.0.0.1]"

Pour terminer, nous configurons Postfix en ajoutant :
/etc/postfix/main.cf

 ....
milter_default_action = accept
milter_connect_macros = j _ {client_addr} {client_name} {client_port} {daemon_name} v
milter_protocol = 6
smtpd_milters = inet:localhost:14123
.....

et nous désactivons le filtre pour les envois smtp authentifiés :
/etc/postfix/master.cf

submission inet n       -       -       -       -       smtpd
......
-o smtpd_milters=
.............

Maintenant, vos utilisateurs recevrons bien moins de Spams. n’oubliez pas de supprimer les dnsbl dans postfix qui seront en double emploi avec ceux de milter-greylist. Nous avons seulement maintenu la règle suivante dans notre configuration de Postfix précédente : reject_rhsbl_sender dsn.rfc-ignorant.org

Publié dans Internet, Libre, Techno, Tutoriel | Marqué avec , , , , , , , | Commentaires fermés sur Milter-greylist pour Postfix Gnu/Linux Debian Wheezy

Ajout du service XMPP aux comptes Mail avec Prosody

Cet article vient en complément à l’article précédent et il permet d’apprendre à configurer un service XMPP associé aux comptes des utilisateurs de mail. Pour cela nous allons utiliser le serveur XMPP Prosody.
Le serveur XMPP Prosody est disponible sous Gnu/Linux Debian Wheezy 7.0 en version >=0.8. Pour l’installer avec les dépendances nécessaires à notre configuration, rien de plus simple avec notre habituelle commande :

apt-get install prosody libluacyrus

Nous allons donc utiliser SASL pour authentifier les comptes, cette authentification sera faite sur la base de données gérer par le PostfixAdmin que nous avons mis en place pour gérer nos comptes mails.

La particularité des cette authentification est qu’elle ne permet pas d’enregistrer via le protocole XMMP des nouveaux utilisateurs, ni même de faire modifier son mot de passe. Cela n’est possible que dans le cadre de la gestion des comptes Mails. le service XMPP est considéré comme un service annexe à nos comptes utilisateurs.

Les informations complémentaires, qui servent à la gestion du compte XMPP, sont maintenues dans la base de Prosody située dans /var/lib/prosody.

Pour des raisons technique, nous somme dans l’obligation d’avoir les mots de passe en clair dans la base de données (ceci est notre cas) en attendant que l’authentification avec SCRAM-SHA-1 soit généralisée et supportée par nos applications.

Pour configurer, cette configuration sera appliquée à tous les hôtes virutels, nous devons modifier ou ajouter les options suivantes :
/etc/prosody/prosody.cfg.lua

admins = { "LECOMPTEQUISERALADMINDEPROSODY" }; // exemple: admins = { "admin@exemple.com" }
use_libevent = true; //meilleures performances.
c2s_require_encryption = true;
anonymous_login = false;
allow_unencrypted_plain_auth = false;  // sauf connection en TLS/SSL.
authentication = "cyrus";
storage = "internal";

Il faut ajouter un répertoire /etc/sasl pour y mettre le fichier qui permettra l’authentification avec les informations situées dans la base postgresql que nous avons crée lors de l’article précédent avec PostfixAdmin.

# mkdir -p /etc/sasl

Dans ce répertoire nous créons le fichier /etc/sasl/prosody.conf dans le quel nous mettons la configuration suivante :

pwcheck_method: auxprop
mech_list: PLAIN
minimum_layer: 0
auxprop_plugin: sql
log_level: 2
sql_engine: pgsql
sql_hostnames: localhost // ou le nom du serveur où se trouve Postgresl-server.
sql_user: NOMUTILISATEURPOSTFIXDOVECOT // le nom qui a seulement lecture seul sur la base.
sql_database: NOMBASEDEDONNEES
sql_passwd: LEMOTDEPASSETRESSECRET
sql_mda: sha1
sql_usessl: no  // de préférence yes si la base est sur un serveur distant.
sql_select: select password from "PREFIX"mailbox where username = '%u@%r'

Pour terminer, nous activons le ou les domaines qui seront avec le service XMPP en plus du service de mail.
/etc/prosody/conf.avail/MONDOMAINE.TLD.cfg.lua

 
VirtualHost "MONDOMAINE.TLD"
enabled = true;
ssl = {
    key = "/etc/prosody/certs/LACLECERTIFICAT.key";
    certificat = "/etc/prosody/certs/LECERTIFCAT.crt";
};

Puis, nous activons le domaine géré :

# cd /etc/prosody/conf.d/
# ln -s ../conf.avail/MONDOMAINE.TLD.cfg.lua .

Maintenant, vos utilisateurs mail pourront utiliser le service XMPP en utilisant le même identifiant et mot de passe que pour le service mail. Le mot de passe est modifiable via votre webmail Roundcube, un miniSSO ;).

Publié dans Libre, Techno, Tutoriel | Marqué avec , , , , , , | Commentaires fermés sur Ajout du service XMPP aux comptes Mail avec Prosody