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

\r\n# COMMON PARAMS\r\nproxy_temp_path   /var/lib/nginx/proxy 1 2;\r\n# A cause des CGN ou NAT maison on veut le port tcp dans les logs.\r\nproxy_set_header Host $http_host;\r\nproxy_set_header X-Real-IP $remote_addr;\r\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\nproxy_set_header X-Forwarded-Proto $scheme;\r\nproxy_set_header Connection Close;\r\nproxy_pass_header Set-Cookie;\r\nproxy_pass_header P3P;\r\nproxy_pass_header User-Agent;\r\nproxy_set_header X-Accel-Buffering on;\r\nproxy_redirect off;\r\nproxy_intercept_errors on;\r\nproxy_ignore_client_abort on;\r\n# qui attends plus de 2mn aujourd'hui ?\r\nproxy_connect_timeout 120;\r\nproxy_send_timeout 120;\r\nproxy_read_timeout 120;\r\nproxy_buffer_size 128k;\r\nproxy_buffers 65536 128k;\r\nproxy_busy_buffers_size 256k;\r\nproxy_temp_file_write_size 128k;

\r\n/etc/nginx/conf.d/backend.conf\r\n

\r\nupstream backend {\r\nserver A max_fails=1 fail_timeout=1; \r\nserver B max_fails=1 fail_timeout=1; \r\nfair; # sois fair et tais toi.\r\n}\r\n

\r\n/etc/nginx/conf.d/cache.conf\r\n

\r\nproxy_cache_path /var/cache/nginx levels=1:2 keys_zone=microcache:4m inactive=180s max_size=100m;\r\nproxy_cache_min_uses 0;\r\nproxy_cache_methods GET;\r\nproxy_cache_key "$host$request_uri$cookie_PHPSESSID";\r\n

\r\n/etc/nginx/conf.d/fcgicache.conf\r\n

\r\nfastcgi_cache_path /var/cache/fcgicache levels=1:2 keys_zone=fcgimicrocache:8m max_size=200m;\r\nfastcgi_cache_min_uses 0;\r\nfastcgi_cache_methods GET;\r\nfastcgi_buffer_size 128k;\r\nfastcgi_buffers 65536 128k;\r\nfastcgi_cache_key $scheme$proxy_host$request_uri;\r\n

\r\n/etc/nginx/conf.d/security.conf\r\n

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

\r\n\r\nNous utilisons pour le SSL, le support TLS SNI, Les fichiers pour les virtualhost sont donc les suivants :\r\n\r\n/etc/nginx/sites-available/00-default.conf\r\n

\r\nserver {\r\n\r\n   listen IP EXTERNE:80 default_server;\r\n\r\n   server_name _;\r\n\r\n   limit_conn parip 5;\r\n   limit_conn parserver 100;\r\n\r\n   return 444;\r\n\r\n}\r\n\r\n   listen IP EXTERNE:443 ssl;\r\n\r\n    \r\n     ssl_certificate           /etc/nginx/ssl/MON CERTIFICAT + INTERMEDIATE.pem;\r\n     ssl_certificate_key       /etc/nginx/ssl/MA CLE de CERTIFICAT.key;\r\n\r\n     ssl_prefer_server_ciphers on;\r\n     # nous corsons le SSL..... \r\n     ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;\r\n     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";\r\n   \r\n   server_name _;\r\n\r\n   limit_conn parip 5;\r\n   limit_conn parserver 100;\r\n\r\n   return 444;\r\n\r\n}\r\n\r\n##########################  si BACKEND sur un même serveur ou pas #######################\r\n\r\nserver {\r\n   listen IP BACKEND:6666 default_server;\r\n\r\n   server_name _;\r\n\r\n   limit_conn parip 5;\r\n   limit_conn parserver 100;\r\n\r\n   return 444;\r\n\r\n}\r\n\r\n\r\n

\r\nSur le Nginx, reverse Proxy cache:\r\n/etc/nginx/sites-available/monnomdeserveur.conf\r\n

\r\nserver {\r\n\r\nlisten IPEXTERNE:80;\r\n\r\nserver_name www.monnomdeserveursanswww;\r\n\r\n   limit_conn parip 5;\r\n   limit_conn parserver 100;\r\n\r\nreturn 301  http://monnomdeserveursanswww;\r\n\r\n}\r\n\r\nserver {\r\n\r\nlisten IPEXTERNE:80;\r\nserver_name monnomdeserveursanswww;\r\n\r\n   limit_conn parip 5;\r\n   limit_conn parserver 100;\r\n\r\nreturn 301  https://monnomdeserveursanswww;\r\n\r\n}\r\n\r\nserver {\r\n   listen IP EXTERNE:443 ssl;\r\n\r\n    \r\n     ssl_certificate           /etc/nginx/ssl/MON CERTIFICAT + INTERMEDIATE.pem;\r\n     ssl_certificate_key       /etc/nginx/ssl/MA CLE de CERTIFICAT.key;\r\n\r\n     ssl_prefer_server_ciphers on;\r\n     ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;\r\n     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";\r\n   \r\n   server_name www.monnomdeserveursanswww;\r\n\r\n   limit_conn parip 5;\r\n   limit_conn parserver 100;\r\n\r\nreturn 301  https://monnomdeserveursanswww;\r\n\r\n}\r\n\r\nserver {\r\n   listen IP EXTERNE:443 ssl;\r\n\r\n    \r\n     ssl_certificate           /etc/nginx/ssl/MON CERTIFICAT + INTERMEDIATE.pem;\r\n     ssl_certificate_key       /etc/nginx/ssl/MA CLE de CERTIFICAT.key;\r\n\r\n     ssl_prefer_server_ciphers on;\r\n     ssl_protocols           TLSv1 TLSv1.1 TLSv1.2;\r\n     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";\r\n   \r\n   server_name monnomdeserveursanswww;\r\n\r\n   limit_conn parip 5;\r\n   limit_conn parserver 100;\r\n\r\n    # je travaille pas pour rien !\r\n     location ~ /\. { deny  all; access_log off; log_not_found off; }\r\n     location ~ ~$ { deny  all; access_log off; log_not_found off; }\r\n\r\n     location ~* .(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(.php)?|xtmpl)$|^(code-style.pl|Entries.*|Repository|Root|Tag|Template)$\r\n       {   deny all; access_log off; log_not_found off;     }\r\n\r\n\r\n ## je bosse maintenant\r\n     client_max_body_size 2G;\r\n\r\n    location / {\r\n\r\n    \r\n      proxy_cache microcache; \r\n      proxy_cache_valid 200 302 2s;\r\n      proxy_cache_valid 404 3s;\r\n      proxy_cache_valid any 1s;\r\n      proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;\r\n      proxy_ignore_headers Cache-Control Expires;\r\n      proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;\r\n      proxy_cache_bypass  $http_pragma $http_authorization;\r\n      proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;\r\n      proxy_no_cache $http_pragma $http_authorization;\r\n      add_header X-Micro-Cache $upstream_cache_status;\r\n      add_header X-Content-Options nosniff;\r\n      add_header Strict-Transport-Security "max-age=7200";\r\n   \r\n      ## HTTPS\r\n      add_header              Front-End-Https   on;\r\n\r\n      proxy_cache_lock on;\r\n      proxy_http_version 1.1;  # 1.0.... mais vous rigolez...\r\n      proxy_pass http://backend_www;\r\n\r\n      track_uploads uploads 30s;\r\n\r\n   \r\n  }}

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

\r\nserver {\r\n	listen IPBACKEND:6666;\r\n	server_name monnomdeserveur;\r\n     \r\n	client_max_body_size 2G;  # merci owncloud...\r\n   	\r\n        root /srv/...MON CHEMIN..../html;\r\n	index index.php;\r\n        \r\n        gzip off;\r\n\r\n        access_log "/var/log/nginx/vhosts.access.log" stats;\r\n        location = /favicon.ico {\r\n	    log_not_found off;\r\n	    access_log off;\r\n         }\r\n\r\n         location = /robots.txt {\r\n	     allow all;\r\n	     log_not_found off;\r\n	     access_log off;\r\n          }\r\n\r\nlocation / {\r\n	try_files $uri $uri/ /index.php?$args;\r\n}\r\n  location ~ [^/]\.php(/|$) {\r\n                fastcgi_split_path_info ^(.+?\.php)(/.+)$;\r\n                \r\n# certains préfèrent: try url =404; mais non....\r\n                  if (!-f $document_root$fastcgi_script_name) {\r\n		                          return 404;\r\n					               \r\n                # With php5-fpm:\r\n                fastcgi_intercept_errors on;\r\n                fastcgi_cache fcgimicrocache;\r\n                ## The cache key.\r\n                fastcgi_cache_key $scheme$request_method$host$request_uri;\r\n                fastcgi_cache_valid 200 302 2s;\r\n                fastcgi_cache_valid 404 3s;\r\n                fastcgi_cache_valid any 1s;\r\n                fastcgi_cache_use_stale error timeout invalid_header updating http_500;                \r\n                fastcgi_ignore_headers Cache-Control Expires Set-Cookie;\r\n                ## Bypass the cache.\r\n                fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;\r\n                fastcgi_cache_bypass $http_pragma $http_authorization;\r\n                fastcgi_no_cache $cookie_nocache $arg_nocache$arg_comment; \r\n                fastcgi_no_cache $http_pragma $http_authorization;\r\n                fastcgi_cache_lock on;\r\n                include fastcgi_params;\r\n                fastcgi_read_timeout 300;\r\n                fastcgi_index index.php;\r\n                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\r\n                fastcgi_param HTTPS on;\r\n		fastcgi_pass unix:/var/run/php-fpm.sock;\r\n        }\r\n\r\n# Cachons nous ! un bon score sur gtmetrix...\r\n  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)$ {\r\n           \r\n             expires 1y;\r\n	     add_header Pragma public;\r\n             add_header Cache-Control "public";\r\n             access_log off;\r\n             tcp_nodelay off;\r\n             }\r\n\r\n     location ~* \.(?:js|css)$ {\r\n            \r\n             expires 1w;\r\n	     add_header Pragma public;\r\n             add_header Cache-Control "public";\r\n             add_header Vary "Accept-Encoding";\r\n             access_log off;\r\n             tcp_nodelay off;\r\n           }\r\n}\r\n\r\n

\r\nPour 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/. \r\n\r\nLa commande nginx -t est pratique pour vérifier la conformité de la configuration.\r\n\r\nIl 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:\r\n

\r\nex: \r\ndeb http://ftp.fr.debian.org/debian/ jessie main \r\ndeb-src http://ftp.fr.debian.org/debian/ jessie main \r\ndeb http://security.debian.org/ jessie/updates main contrib non-free\r\ndeb-src http://security.debian.org/ jessie/updates main contrib non-free\r\n

\r\nEnsuite, 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\r\n

\r\nmkdir nginxrtmp\r\ncd nginxrtmp\r\nsudo apt-get install build-essential git gcc make jed libpcre3-dev\r\nsudo apt-get source nginx-extras\r\nsudo apt-get build-dep nginx-extras\r\n

\r\nrécupérons le dernier source du module RTMP\r\n

\r\ngit clone https://github.com/arut/nginx-rtmp-module\r\nmv nginx-rtmp-module nginx-1.6.2/debian/modules/\r\n

\r\nla version de Nginx sous Jessie est actuellement la 1.6.2-5\r\n

\r\njed nginx-1.6.2/debian/rules\r\n

\r\nmodifiez la ligne 113 et ajouter la ligne 114 : \r\n

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

\r\nsauvegardez votre modification.\r\n

\r\nsudo apt-get -b source nginx-extras\r\n

\r\nVous ne devriez pas rencontrer d’erreur.\r\nvous disposez maintenant des fichiers suivants:\r\n

\r\nnginx_1.6.2-5_all.deb	      nginx-extras_1.6.2-5_amd64.deb	  nginx-full-dbg_1.6.2-5_amd64.deb\r\nnginx-common_1.6.2-5_all.deb  nginx-extras-dbg_1.6.2-5_amd64.deb  nginx-light_1.6.2-5_amd64.deb\r\nnginx-doc_1.6.2-5_all.deb     nginx-full_1.6.2-5_amd64.deb	  nginx-light-dbg_1.6.2-5_amd64.deb\r\n

\r\nles paquets nginx-common et nginx-extras seront nécessaires à l’installation.\r\n\r\nCette manipulation sera effectuée à chaque mise à jour de Nginx de la distribution Gnu/linux Debian Jessie.\r\n\r\nNous 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.

\r\nCe 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 :\r\n

apt-get install milter-greylist

\r\nDans 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.\r\n\r\nPour configurer, nous devons éditer le fichiers et intégrer la configuration suivante dans :\r\n/etc/milter-greylist/greylist.conf\r\n

# Simple greylisting config file\r\n\r\n# base des ips blacklistées ou whitelistées.\r\ndumpfile "/var/lib/milter-greylist/greylist.db" 600\r\ndumpfreq 1d\r\n\r\n# si on veut des logs bien verbeux dé-commenter le paramêtre suivant\r\n# verbose\r\n\r\n# On ne pas de message donnant trop d'indication au refus de mail\r\nquiet\r\n\r\n# ne rien ajouter à l'entete du mail reçu sauf si derrière on "score" le niveau de spam\r\nreport none\r\n\r\n# MX peering pas de mx secondaire pourquoi faire ?\r\n#peer 192.0.2.17\r\n#peer 192.0.2.18\r\n\r\n# list de serveurs acceptables\r\ndnsrbl "MTAWL" list.dnswl.org 127.0.0.0/16\r\n\r\n# list de serveurs pas acceptables ?! ;)\r\ndnsrbl "NJABL" dnsbl.njabl.org 127.0.0.0/24\r\ndnsrbl "CBL ABUSEAT" cbl.abuseat.org 127.0.0.0/24\r\ndnsrbl "SORBS" dnsbl.sorbs.net 127.0.0.0/24\r\ndnsrbl "SPAMCOP" bl.spamcop.net 127.0.0.0/24\r\ndnsrbl "SPAMHAUS" zen.spamhaus.org 127.0.0.0/24\r\ndnsrbl "SPAMCANNIBAL" bl.spamcannibal.org 127.0.0.0/24\r\n\r\n# Notre réseau...\r\nlist "mon reseau" addr { 127.0.0.1/8 ::1 }\r\n\r\n# ... ne subit pas de greylist ou contrôle.\r\nracl whitelist list "mon reseau"\r\n\r\n# les acceptables non plus.\r\nracl whitelist dnsrbl "MTAWL"                                                                                                                               \r\n\r\n# les autres on ne veut pas de vous !\r\nracl blacklist dnsrbl "SORBS"  msg "Bad reputation - listed on dnsbl.sorbs.net blacklist" flushaddr\r\nracl blacklist dnsrbl "CBL ABUSEAT" msg "Bad reputation - listed on cbl.abuseat.org blacklist" flushaddr\r\nracl blacklist dnsrbl "SPAMCOP" msg "Bad reputation - listed on bl.spamcom.net backlist" flushaddr\r\nracl blacklist dnsrbl "NJABL" msg "Bad reputation - listed on dnsbl.njabl.org blacklist" flushaddr\r\nracl blacklist dnsrbl "SPAMHAUS" msg "Bad reputation - listed on zen.spamhaus.org blacklist" flushaddr\r\nracl blacklist dnsrbl "SPAMCANNIBAL" msg "Bad reputation - listed on bl.spamcannibal.org blacklist" flushaddr\r\n\r\n# si le spf  est absent , on greylist par précaution.\r\nracl greylist spf softfail delay 30m\r\n# on blacklist le spf qui existe mais ne correspond pas. \r\nracl blacklist spf fail flushaddr\r\n# par défaut on greylist et si le greylist est bon, on whiteliste pendant 30j\r\nracl greylist default delay 7m autowhite 30d\r\n

\r\nle fichier pour permettre le démarrage de milter-greylist :\r\n/etc/default/milter-greylist\r\n

 \r\nENABLED=1\r\nSOCKET="inet:14123@[127.0.0.1]"\r\n

\r\nPour terminer, nous configurons Postfix en ajoutant :\r\n/etc/postfix/main.cf\r\n

 ....\r\nmilter_default_action = accept\r\nmilter_connect_macros = j _ {client_addr} {client_name} {client_port} {daemon_name} v\r\nmilter_protocol = 6\r\nsmtpd_milters = inet:localhost:14123\r\n.....

\r\net nous désactivons le filtre pour les envois smtp authentifiés :\r\n/etc/postfix/master.cf\r\n

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

\r\nMaintenant, 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.\r\nLe 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 :

\r\n\r\n

apt-get install prosody libluacyrus

\r\n\r\n

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.\r\n\r\nLa 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.

\r\n\r\nLes informations complémentaires, qui servent à la gestion du compte XMPP, sont maintenues dans la base de Prosody située dans /var/lib/prosody.\r\n\r\nPour 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.\r\n\r\nPour configurer, cette configuration sera appliquée à tous les hôtes virutels, nous devons modifier ou ajouter les options suivantes :\r\n/etc/prosody/prosody.cfg.lua\r\n

\r\nadmins = { "LECOMPTEQUISERALADMINDEPROSODY" }; // exemple: admins = { "admin@exemple.com" }\r\nuse_libevent = true; //meilleures performances.\r\nc2s_require_encryption = true;\r\nanonymous_login = false;\r\nallow_unencrypted_plain_auth = false;  // sauf connection en TLS/SSL.\r\nauthentication = "cyrus";\r\nstorage = "internal";

\r\n\r\nIl 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.\r\n

# mkdir -p /etc/sasl

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

pwcheck_method: auxprop\r\nmech_list: PLAIN\r\nminimum_layer: 0\r\nauxprop_plugin: sql\r\nlog_level: 2\r\nsql_engine: pgsql\r\nsql_hostnames: localhost // ou le nom du serveur où se trouve Postgresl-server.\r\nsql_user: NOMUTILISATEURPOSTFIXDOVECOT // le nom qui a seulement lecture seul sur la base.\r\nsql_database: NOMBASEDEDONNEES\r\nsql_passwd: LEMOTDEPASSETRESSECRET\r\nsql_mda: sha1\r\nsql_usessl: no  // de préférence yes si la base est sur un serveur distant.\r\nsql_select: select password from "PREFIX"mailbox where username = '%u@%r'

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

 \r\nVirtualHost "MONDOMAINE.TLD"\r\nenabled = true;\r\nssl = {\r\n    key = "/etc/prosody/certs/LACLECERTIFICAT.key";\r\n    certificat = "/etc/prosody/certs/LECERTIFCAT.crt";\r\n};\r\n

\r\nPuis, nous activons le domaine géré :\r\n

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

\r\n\r\nMaintenant, 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 ;).\r\n

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