Installer et sécuriser un serveur web LAMP



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

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

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

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

Réaliser un inventaire Documentation utilisateur

Serveur Web Apache - SSL - PHP Debian GNU/Linux

CDS Invenio Installation et configuration de base

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

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

Installation GLPI-OCSNG-SSL Linux Debian Sarge

Procédure d'installation

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

Déploiement d OCS 1.02 RC2 sous Debian Etch 64

Installation UpdatEngine serveur (CentOs apache2 / MySQL)

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

BTS SIO Dossier BTS. PURCHLA Romain

Installation d un hébergement Web à domicile

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

Tutoriel compte-rendu Mission 1

REPARTITION DE CHARGE LINUX

TP Service HTTP Serveur Apache Linux Debian

Faire fonctionner symfony sous wamp et windows avec des vhost. Installation de wamp

SERVEUR HTTP Administration d apache

2013 Installation de GLPI-OCS. Florian MICHEL BTS SIO LYCEE SAINTE URSULE

Préparation d un serveur Apache pour Zend Framework

installer_un_serveur_debian - Documentation Ubuntu Francophone Installation complète d'un serveur web sous Debian 6.0

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

Afin d'éviter un message d'erreur au démarrage du service Apache du type :

Le serveur web Apache

Installer un serveur web de développement avec VirtualBox

Serveur Subversion Debian GNU/Linux

[ GLPI et OCS pour Gentoo 2006] ArtisanMicro. Alexandre BALMES

Installation d' OCS inventory et de GLPI

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

GUIDE D INSTALLATION. Portaneo Enterprise Portal version 4.0

1. La plate-forme LAMP

INSTALLATION NG V2.1 D OCS INVENTORY. Procédure d utilisation. Auteur : GALLEGO Cédric 23/10/2014 N version : v1

GLPI OCS Inventory. 1. Prérequis Installer un serveur LAMP : apt-get install apache2 php5 libapache2-mod-php5 apt-get install mysql-server php5-mysql

CASE-LINUX MAIL - ROUNDCUBE

WEB APPLICATION FIREWALL AVEC APACHE ET MOD_SECURITY

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

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

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

Gestion d identités PSL Installation IdP Authentic

Autorité de certification

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

Maintenance et gestion approfondie des Systèmes d exploitation Master 2 SILI. Année universitaire David Genest

Apache en tant que reverse proxy

Tuto 2 : Configuration Virtual box, Configuration et installation du serveur XiBO

Configuration matériel. Tâche 2 : Installation proprement dite de l application sur un serveur de test virtualisé sous VmWare Workstation.

MANUEL D INSTALLATION D UN PROXY

Gérer ses environnements de développement avec Vagrant RMLL 2012

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

Installation de Zabbix

Note : Ce tutoriel a été réalisé sur GNU/Linux (Ubuntu) avec un serveur LAMP installé en local.

INSTALLATION APACHE POUR WINDOWS (XP OU 2000)

Titre: Version: Dernière modification: Auteur: Statut: Licence:

Architecture de la plateforme SBC

Administration Linux - Apache

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

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

Dans l'épisode précédent

Projet Semestre2-1SISR

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

titre : CENTOS_CUPS_install&config Système : CentOs 5.7 Technologie : Cups Auteur : Charles-Alban BENEZECH

CYBERGATE -TP-APACHE_2.DOC

Installer un gestionnaire de parc GLPI sous Linux

WEBMESTRE : CONCEPTION DE SITES ET ADMINISTRATION DE SERVEURS WEB

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

Sécuriser les applications web de l entreprise

Titre: Version: Dernière modification: Auteur: Statut: Licence:

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

windows. deb etch main deb-src etch main

Installation des outils OCS et GLPI

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

07/03/2014 SECURISATION DMZ

Oracle WebLogic Server (WLS) 11gR1 ( et ) Installation sur Oracle Linux 5 et 6 Hypothèses Installation Oracle Linux 5 (OL5)

Installation Installation. Windows. Tout-en-un. Un livre de Wikilivres.

Hébergement de site web Damien Nouvel

Module 7 : Configuration du serveur WEB Apache

Les serveurs WEBUne introduction

Documentation d'installation Plateforme femme actuelle

Installation et configuration de Vulture Lundi 2 février 2009

GUIDE D INSTALLATION DE L APPLICATION GECOL SUR

L installation a quelque peu changée depuis les derniers tutos, voici une actualisation.

DOCUMENTATION ADMINISTRATEUR

Maintenir Debian GNU/Linux à jour

TP PLACO. Journées Mathrice d'amiens Mars 2010

UE5A Administration Réseaux LP SIRI

OCS Inventory & GLPI

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

2011 Hakim Benameurlaine 1

SECURIDAY 2012 Pro Edition

Apache 2.4 Installation et configuration

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

Comment surfer tranquille au bureau

INTRODUCTION. Mysql-server est un serveur de bases de données. Cest un logiciel libre.

Compte rendu d'activité PTI n 2

Transcription:

Installer et sécuriser un serveur web LAMP Version Date Révision Auteur 1.0 24/01/2015 Initiation du document Shura 1.1 22/11/2015 Ajout des dockers à l annexe Shura

Description Installer un serveur lamp Linux, Apache, MySQL, PHP est plutôt simple, cependant la plupart ne sont pas sécurisés côté système. Il existe pourtant des moyens simples et rapides à mettre en place pour compliquer la vie aux hackers qui tenteront d'en prendre le contrôle. Dans cet article nous allons passer en revue les configurations et outils permettant de blinder votre serveur web. Installation est configuration de base Mise à jour du système Le système choisi et une Debian stable, qu'il faut commencer par mettre à jour. # aptitude update && aptitude upgrade Installer Apache et MySQL Choisissez les paquets appropriés, dans notre cas nous prenons les derniers disponibles à l'écriture de cet article. # aptitude install apache2 apache2-utils php5 php5-dev mysql-server-5.5 php5-mysql PHPMyAdmin PHPMyAdmin est l'outil indispensable pour gérer vos bases de données, nous l'installons également. # aptitude install phpmyadmin A ce stade vous avez un serveur web fonctionnel, dont l'administration des données peut se faire via http://serveur/phpmyadmin. Ce qui n'est pas bon, c est trop facilement trouvable, il faut changer l'url par défaut de phpmyadmin. Éditez le fichier /etc/apache2/conf.d/phpmyadmin.conf et remplacer : Alias /phpmyadmin /usr/share/phpmyadmin par : Alias /alias_phpmyadmin /usr/share/phpmyadmin Recharger la configuration : # service apache2 reload Configuration d'un site web Ajouter un utilisateur Nous allons créer un utilisateur dont les droits se limiteront à la lecture et l'écriture des fichiers de votre site internet. # adduser developper --home /var/www/monsite.com/ 2

L'accès à votre site se fera via client SFTP de façon à crypter la liaison. Pour autoriser et limiter l'accès à cet utilisateur, ajouter les éléments suivant à la fin de la configuration sshd /etc/ssh/sshd_config. Match user developper ChrootDirectory /var/www/monsite.com/ ForceCommand internal-sftp AllowTCPForwarding no Redémarrer le service sshd : # service ssh restart Création des répertoires Répertoires racines du site : # mkdir /var/www/monsite.com # mkdir /var/www/monsite.com/www # chown developper.developper /var/www/monsite.com/www Si vous souhaitez mettre en place sur votre site un système d'upload de fichier, vous pouvez créer le répertoire comme ceci. # mkdir /var/www/path/to/upload # chown developper.developper /var/www/path/to/upload # chmod 777 /var/www/path/to/upload A ce stade vous devriez être capable de vous connecter de manière sécurisée en SFTP (avec FileZilla par exemple), et d'uploader le site avec les droits de l'utilisateur developper. Activation de mod_rewrite Certains sites comme ceux développés avec Zend Framework ont besoin d'un moteur de réécriture à base de règles (définie dans un.htaccess). Pour les utiliser, il faut activer le mod_rewrite d'apache. # a2enmod rewrite (Il ne faut pas oublier l'instruction «AllowOverride all» dans votre VirtualHost) Création du VirtualHost Voici un exemple de configuration d'un VirtualHost (/etc/apache2/sitesavailable/monsite.com) avec mod_rewrite pour le domaine monsite.com situé en /var/www/monsite.com/ : <VirtualHost *:80> ServerAdmin webmaster@monsite.com ServerName www.monsite.com ServerAlias monsite.com DocumentRoot /var/www/monsite.com/www/ <Directory /var/www/monsite.com/www/> Order allow,deny allow from all AllowOverride all </Directory> 3

ErrorLog /var/log/apache2/monsite.com-error.log TransferLog /var/log/apache2/monsite.com-access.log </VirtualHost> Comme ci-dessus, spécifier les fichiers de logs par nom de (sous) domaine, c'est plus facile de s'y retrouver en cas de besoin d analyse. Appliquer la configuration à apache : # a2ensite monsite.com # service apache2 reload Création d'une base MySQL Connectez-vous à phpmyadmin : http://serveur/alias_phpmyadmin Utilisateur : root ; Mot de passe : Celui choisi lors de l'installation de mysql. Puis créer une base de données pour le site ainsi qu'un utilisateur associé. Utiliser de préférence le générateur de mots de passe et ne donner que les droits minimum à votre utilisateur. Généralement ceci suffit : SELECT INSERT UPDATE DELETE Ne perdez pas de vu qu'il est possible avec MySQL d'affiner et de créer des droits même pour un seul champ d'une table. Sans tomber dans l'excès pouvant gêner l'évolution de l'application, il est possible de sécuriser les données. Egalement, ne perdez pas de vu non plus qu'il est possible de créer plusieurs utilisateurs pour des utilisations spécifiques de la base de données ou des tables. Sécurisation Apache Fuites d'informations Afin d'éviter de fournir des informations de versions, par exemple lors d'une erreur 404 mal gérée, il convient de ne pas afficher la bannière de ce type. 4

Ajouter donc les 2 instructions suivantes à la fin du fichier /etc/apache2/conf.d/security : ServerSignature Off ServerTokens Prod Listage de répertoires Pour éviter une erreur d'un développeur qui a oublié de mettre un index il convient de spécifier à la fin du fichier de configuration /etc/apache2/apaches2.conf : <Directory /var/www/* > Options -Indexes </Directory> Remonter dans les répertoires Pour ne pas qu'un script PHP (ex : une backdoor) permette d'explorer les répertoires en amont de celui de /monsite.com il faut le spécifier dans le VirtualHost. <Directory /var/www/monsite.com/www/ >... php_admin_value open_basedir /var/www/monsite.com/... </Directory> Ajouter également : <Directory /var/www/monsite.com/www/ >... php_admin_value upload_tmp_dir /var/www/monsite.com/tmp/... </Directory> Comme vous appliqué cette restriction à /var/www/monsite.com/, le site n'a plus accès à /tmp, il faut créer un nouveau répertoire tmp. # mkdir /var/www/monsite.com/tmp # chown monsite.monsite /var/www/monsite.com/tmp # chmod 777 /var/www/monsite.com/tmp Apache mod_security mod_security est un module de protection d'apache et des failles applicatives PHP connu (XSS, SQL Injection, include, etc.). 5

Installation # aptitude install libapache2-modsecurity # a2enmod mod-security # cd /etc/modsecurity # mv modsecurity.conf-recommended modsecurity.conf Ajout des règles de filtrage Pour les versions <= libapache2-modsecurity_2.6.6 : # wget https://github.com/spiderlabs/owasp-modsecurity-crs/tarball/v2.2.5 # mv v2.2.5 v2.2.5.tar.gz # tar xvzf v2.2.5.tar.gz # mv SpiderLabs-owasp-modsecurity-crs-5c28b52 modsecurity-crs # cd modsecurity-crs # mv modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf Sinon, pour les autres versions, adapter la version des règles à la version de mod_security. À la fin de cette étape les attaques seront logées dans le fichier /var/log/apache2/modsec_audit.log. Configuration Pour activer le mode bloquant éditer le fichier /etc/modsecurity/modsecurity.conf et replacer : SecRuleEngine DetectionOnly Par : SecRuleEngine On Pour exclure un VirtualHost des règles de filtrage comme PHPMyAdmin, ajouter la ligne suivante au VirtualHost /etc/apache2/conf.d/phpmyadmin.conf. SecRuleEngine Off Ajouter à la fin de votre fichier /etc/apache2/apache2.conf ceci afin d'activer les règles : <IfModule security2_module> Include /etc/modsecurity/modsecurity-crs/modsecurity_crs_10_setup.conf Include /etc/modsecurity/modsecurity-crs/base_rules/*.conf </IfModule> Appliquer la configuration : # service apache2 restart Apache mod_evasive mod_evasive est un module de protection d'apache pour contrer les attaques DOS. Il détectera lorsqu'un utilisateur (ou un outil automatisé) demande un trop grand nombre de pages sur un site web selon un délai de temps défini. 6

Installation # aptitude install libapache2-mod-evasive # a2enmod mod-evasive # mkdir -p /var/log/apache2/mod_evasive # chown -R www-data:www-data /var/log/apache2/mod_evasive # ln -s /usr/bin/mail /bin/mail Configuration Ajouter à la fin de votre fichier /etc/apache2/apache2.conf : <IfModule mod_evasive20.c> DOSHashTableSize 3097 # Max 50 requêtes par seconde par IP DOSSiteCount 50 DOSSiteInterval 1 # Max 5 pages ouvertes en 5 secondes par IP DOSPageCount 5 DOSPageInterval 5 # On bloque l'ip 30 secondes DOSBlockingPeriod 30 # Fichiers de log DOSLogDir "/var/log/apache2/mod_evasive/" </IfModule> Quelques explications : Directives Descriptions DOSHashTableSize Taille de la table de hachage. Plus cette valeur sera grande, moins il faudra d'itérations pour identifier un enregistrement. En revanche, la consommation de mémoire sera plus importante. Sur des serveurs Web à forte charge, il est recommandé d'augmenter cette valeur. DOSSiteCount/DOSSiteInterval Le nombre maximal de requêtes qu'une adresse IP peut faire sur le site pendant l'intervalle de temps DOSSiteInterval (en secondes). DOSPageCount/DOSPageInterval Le nombre maximal de requêtes qu'une adresse IP peut faire sur la même URL pendant une unité de temps DOSPageInterval (en secondes). Notez que dans l'url les paramètres ne sont pas pris en compte. DOSBlockingPeriod Durée pendant laquelle une adresse IP en liste noire sera refusée. Une IP refusée se verra retourner une erreur 403. DOSEmailNotify Adresse email à laquelle envoyer une notification lorsqu'une adresse IP est ajoutée en liste noire. DOSSystemCommand Commande appelée lorsqu'une IP est bloquée. On peut, par exemple, utiliser iptable et rejeter toutes les requêtes provenant de cette IP. 7

DOSWhiteList Spécifie une ou plusieurs adresses IP à ne jamais positionner en liste noire. Apache avec SSL Configuration Voici la configuration d'https pour Apache dans le cas d'intégration d'un certificat wildcard. Pour les autres cas Google est votre ami. Activer SSL pour Apache : # a2enmod ssl Ajouter ces lignes au fichier /etc/apache2/ports.conf : <IfModule mod_ssl.c> Listen 443 NameVirtualHost VOTRE_ADRESSE_IP:443 </IfModule> Créer le répertoire suivant et copier vos clés dedans : # mkdir /etc/ssl/ssl-monsite.com/ Re-hash de la structure SSL : # c_rehash /etc/ssl/certs Création du VirtualHost /etc/apache2/sites-available/ssl-monsite.com : <VirtualHost *:443> ServerAdmin webmaster@monsite.com ServerName www.monsite.com ServerAlias monsite.com DocumentRoot /var/www/monsite.com/www/ <Directory /var/www/monsite.com/www/> Order allow,deny allow from all php_admin_value open_basedir /var/www/monsite.com/ php_admin_value upload_tmp_dir /var/www/monsite.com/tmp/ AllowOverride all </Directory> SSLEngine On SSLCertificateFile /etc/ssl/ssl-monsite.com/monserveur.crt SSLCertificateKeyFile /etc/ssl/ssl-monsite.com/monserveur.key ErrorLog /var/log/apache2/monsite.com-error.log TransferLog /var/log/apache2/monsite.com-access.log </VirtualHost> Appliquer la configuration : # a2ensite ssl-monsite.com # service apache2 restart 8

MySQL Politique de mots de passe Les mots de passe de MySQL sont convoités par les attaquants, leur permettant d'avoir accès aux données. Les mots de passe sont stockés dans mysql.user, accessible par défaut avec le compte root. De nombreuses méthodes comme des sites web de craquage en ligne de hash MySQL, attaques par dictionnaire, brutforce ou raimbow tables existent. Pour éviter qu'un attaquant les récupère par exemple avec une SQL Injection, il ne faut JAMAIS utiliser le compte root de MySQL pour autre chose que l'administration. Pour toute autre action, créez des comptes utilisateurs. Un mot de passe fort doit faire au moins 12 caractères et contenir des minuscules, majuscules, chiffres. Post-Installation Exécuter la commande suivante puis répondez «Yes» à toutes les questions : # mysql_secure_installation Bonnes pratiques Éviter autant que possible d'ouvrir le port MySQL à tout le monde, limité l'accès à des IP spécifiques, si le service MySQL est accessible à distance il ne faut pas autoriser l'accès à distance au compte root mais uniquement sur le localhost (PHPMyAdmin aura toujours accès). Lorsque vous créez un compte utilisateur pour une base de données, il ne faut lui donner que les droits absolument nécessaires. Politique de mise à jour Tous les jours de nouvelles failles sont découvertes et des patchs sont publiés, donc les mises à jour d'un système sont importantes pour sa sécurité. On peut définir 2 politiques de mise à jour pour les systèmes critiques et non critiques. Système critique Demandant une administration quotidienne et une forte continuité d'activité, le système critique demandera des mises à jour manuelles de sécurité en contrôlant les dépendances avant upgrade. Attention à la rétrocompatibilité des versions de PHP à mettre à jour avec les applications qui sont en production! Système non critique Ses paquets installés sont peu nombreux et sans problèmes de compatibilités et ne demandant pas de continuité d'activée et d'administration paranoïaque. Les systèmes non critiques pourront faire leurs mises à jour de sécurité automatiquement quotidiennement. # aptitude install unattended-upgrades # dpkg-reconfigure -plow unattended-upgrades Pour paramétrer plus finement les mises à jour (update/upgrade), vous pouvez utiliser le fichier /etc/apt/apt.conf.d/20auto-upgrades. 9

Pour choisir le type de mise à jour autorisé, décommettez les lignes du fichier /etc/apt/apt.conf.d/50unattended-upgrades que vous souhaitez activer. Le résultat des mises à jour sera journalisé dans ce répertoire : /var/log/unattendedupgrades/. Annexe : Durcissement Système Sans parler d'outils d'analyse réseau (ex : SNORT) qui sort du contexte de ce document, lors de projet d'envergure aux données très sensibles il convient de durcir le système en installant un HIDS/IPS et d'isoler les démons sensibles tels qu'apache et MySQL. Cette partie ce veut juste informative, elle permet de donner un point de départ. Il serait trop long de détailler toutes les configurations des outils présentés. Détection d'intrusion H-IDS OSSEC OSSEC est un (Host Intrusion Detection System) est tout à fait applicable à un serveur web. Il permet de surveiller l'intégrité des fichiers systèmes. Il détecte les rootkits, les scans de ports, et analyse les logs du système, des applications et des services. Le logiciel propose également un système de réponses actives (IPS). Manuel d'installation d'ossec : http://ossec-docs.readthedocs.org/en/latest/manual/installation/index.html Isoler les démons Chroot Chroot est utilisé pour isoler un ou plusieurs démons dans une arborescence restreinte. Vous pouvez l'utiliser pour isoler des services d'autres services, pour que les problèmes de sécurité d'un paquet logiciel ne mettent pas en péril le serveur tout entier. Exemple d'installation chroot pour Apache : http://www.howtoforge.com/chrooting-apache2-with-mod_chroot-on-debiansqueeze Entre virtualisation et container Les Dockers Les dockers permettent de simuler un ensemble applicatif au sein de l OS de l hôte, cela de façon isolée au sein d un container. Il ne s agit donc pas de créer une machine virtuelle. Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur virtuel, qui pourra être exécuté sur n'importe quel serveur Linux. https://docs.docker.com/v1.8/articles/security/ 10