procédure serveur webportfoliomagalie.weebly.com/.../serveur_web_scuris.pdfprocédure serveur web...

16
Procédure Serveur Web Dans cette procédure, je vais vous montrer les différentes étapes à suivre pour mettre en place un Serveur Web (Sécurisé) sous le système d’exploitation Linux Debian. Chaque étape étant expliquée de façon logique et ordonnée. JOAO Benjamin 04/05/2014

Upload: dohanh

Post on 15-Sep-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Procédure Serveur Web

Dans cette procédure, je vais vous montrer les

différentes étapes à suivre pour mettre en place

un Serveur Web (Sécurisé) sous le système

d’exploitation Linux Debian. Chaque étape

étant expliquée de façon logique et ordonnée.

JOAO Benjamin

04/05/2014

Procédure Serveur Web

mai. 4

2

Démarche à suivre pour mettre en place un serveur web sécurisé.

Contexte

La direction de la M2L (Maison des Ligues) souhaiterait mettre en place un

réseau dans lequel il y aurait un serveur dédié qui pourrait héberger un service Web

sécurisé (sur une plateforme tel que Windows 2008 server ou Linux Debian), ainsi que

deux postes clients sur des plateformes propriétaire ou libre.

1) Mise en place de Debian

Création d’une machine virtuelle sous Linux Debian sur la ferme de serveur du lycée à

l’adresse https://scvmm/.

Informations sur la machine virtuelle :

Modèle : VM Blanc

ISO : debian-7.3.0-amd64-DVD

Utilisateur : sisr3-2014-13

Mot de passe : Btssisr3

Installation Debian.

Lancement de la machine virtuelle.

Configuration de la carte réseau :

Procédure Serveur Web

mai. 4

3

2) Configuration de démarrage

Configuration des listes sources de Debian Wheezy sur le terminal :

nano /etc/apt/sources.list

Copier les sources listes ci-dessous :

deb http://debian.proxad.net/debian/ wheezy main contrib non-free

deb http://security.debian.org/ wheezy/updates main contrib non-free

deb http://debian.proxad.net/debian/ wheezy-updates main contrib non-free

Mise à jour des paquetages de la première utilisation de l’OS :

Utiliser le compte système (administrateur) : sudo ou su

apt-get update

apt-get upgrade

Copie de sauvegarde des fichiers de configuration.

/ ! \ Après toute modification, il faut recharger le service (commande : service

nom_service reload) ou le redémarrer complètement ce qui interrompt les connexions

établies sur le serveur (commande : service nom_service restart).

3) Installation du service Apache

La licence Apache est une licence de logiciel libre et open source. Le logiciel libre

Apache2 ou Apache HTTP Server est un serveur HTTP créé et maintenu au sein de la

fondation Apache.

Installation des paquetages :

apache2.2-common

apache2-utils

apache2 pour la version de base.

Installation des paquetages :

apache2-mpm-prefork,

libapache2-mod-chroot,

libapache2-mod-auth-pam,

libapache2-mod-auth-sys-group

Procédure Serveur Web

mai. 4

4

Ce qui permettra d’ajouter des fonctions d’authentification, la gestion du multi-

processing et la possibilité de changer le service en mode root.

Test d’apache depuis un navigateur web avec l’adresse IP 172.16.77.4. Il faut voir un

message "It Works" correspondant à une page "Index.html".

Remarque : Le répertoire des fichiers HTML et PHP est /var/www.

Les principaux fichiers de configuration se trouve dans /etc/apache2.

4) Installation de PHP

Le module PHP5 est un interpréteur PHP qui vient en complément d’Apache.

Installation du module :

php5

Ce qui installera : php5_common, php5-gd, php5-cli et libapache2-mod-php5.

Cette étape permet de prendre en charge PHP car apache doit être complété par un

interpréteur.

Procédure Serveur Web

mai. 4

5

Redémarrer le serveur apache à l’aide de la commande : service apache2 restart.

Test en déposant un fichier (du programmeur du groupe) avec du code PHP dans le

répertoire /var/www.

5) Prise en charge MySQL avec apache/PHP

Installation du paquetage :

libapache2-mod-auth-mysql

Ce qui permettra la gestion de l’authentification MySQL.

Installation du paquetage :

php5-mysql

Ce qui permettra les échanges entre PHP et la base de données MySQL.

Redémarrage d’apache avec la commande restart.

Test en entrant une connexion à une base MySQL dans un fichier PHP sur /var/www.

Remarque : Pour des raisons de sécurité, le compte root n’est pas autorisé à établir de

connexions à la base de données depuis d’autres machines que localhost.

6) Serveur de base de données MySQL

Installation du paquetage :

mysql-server.

Mettre un mot de passe à l’utilisateur root.

Test en vérifiant la connexion à la base grâce à la commande : mysql –u (nom de

l’utilisateur) [-p] [nom de la base de données].

PhpMyAdmin est une application Web de gestion pour les systèmes de gestion de base

de données MySQL réalisée en PHP.

Pour l’administration par PhpMyAdmin, installer le paquetage :

phpmyadmin

Procédure Serveur Web

mai. 4

6

Choisir la configuration automatique du serveur apache, en implantant la base de

données nécessaire à la gestion de PhpMyAdmin, en configurant un mot de passe pour

PhpMyAdmin.

Vérification du fonctionnement par un navigateur : http://172.16.77.4/phpmyadmin

Authentification pour accéder à la base de données :

Identifiant : root

Mot de passe : Btssisr3

Accès à la base de données MySQL :

Procédure Serveur Web

mai. 4

7

7) Serveur SSH

Installation du paquettage :

apt-get install openssh-server

Il faut ensuite configuration ssh afin de changer le port d’écoute :

nano /etc/ssh/sshd_config

8) Serveur FTP

File Transfer Protocol (protocole de transfert de fichiers), ou FTP, est un protocole de

communication destiné à l'échange informatique de fichiers sur un réseau TCP/IP.

Il permet, depuis un ordinateur, de copier des fichiers vers un autre ordinateur du

réseau, ou encore de supprimer ou de modifier des fichiers sur cet ordinateur.

Installation du paquetage :

proftpd

Nous devions choisir une installation Indépendamment, c'est-à-dire que le service sera

lancé seul, sans passer par le gestionnaire de service inet.

Vérification du fonctionnement à partir d’un navigateur : ftp://172.16.77.4/.

Le dossier /home de l’utilisateur doit apparaître

Installation du logiciel FileZilla Client sur la machine hôte

Création d'un nouveau compte utilisateur sur la base de données afin de permettre à

celui ci d'accéder au compte FTP.

Connexion rapide au client FTP :

o Hôte : 172.16.77.4

o Identifiant : sisr3-web-13

o Mot de passe : Btssisr3

o Port : 21

Procédure Serveur Web

mai. 4

8

9) Configuration avec MySQL (authentification)

Installation du paquetage :

proftpd-mod-mysql

Création de la base pour proftpd sous MySQL avec les tables ftpgroup et ftpuser (soit

le compte de connexion au compte MySQL).

Configuration du fichier sql.conf qui devait être appelé dans proftp.conf et nous avons

ensuite redémarré le service :

service proftp restart

10) Connexion et échange cryptes avec SSL

C'est un système qui permet d'échanger des informations entre 2 ordinateurs de façon

sûre. SSL assure 3 choses:

Confidentialité : Il est impossible d'espionner les informations échangées.

Intégrité : Il est impossible de truquer les informations échangées.

Authentification : Il permet de s'assurer de l'identité du programme, de la

personne ou de l'entreprise avec lequel on communique.

Procédure Serveur Web

mai. 4

9

Création du répertoire où nous devions stocker les clés et certificats grâce des

commandes cd /etc/ssl et mkdir « Nom du certificat ».

Installation d’SSL avec la commande :

apt-get install openssl

Créer le certificat nécessaire dans le répertoire /etc/apache2/ssl, avec les commandes :

mkdir /etc/apache2/ssl

/usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf

/etc/apache2/ssl/apache.pem

11) Configuration d’apache avec SSL

Tout d’abord, la configuration d’apache nécessite l’activation du module SSL, soit

grâce à la commande :

a2enmod ssl

Ensuite nous avons vérifié que la ligne ci-dessous était dans le répertoire

/etc/apache2/mods-enabled/ssl.load

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so

En tapant dans la barre du navigateur https://172.16.77.4/, soit l’adresse du serveur, le

message ci-dessous s’affiche

Connexion au serveur depuis le client avec le logiciel FileZilla Client. Sauf que cette

fois ci, nous devons prendre en compte la connexion avec SSL.

Procédure Serveur Web

mai. 4

10

12) Etape non réalisé pour améliorer la sécurisation

Pour plus de sécurisé sur le serveur web, nous pourrions installer les paquets suivants :

Filtrer le trafic via le Firewall

Le firewall (pare-feu) est l’élément indispensable pour sécuriser son serveur. Il va en

effet filtrer tout le trafic en n’autorisant que les échanges permis par l’administrateur.

Sans firewall correctement réglé, tous les trafics sont plus ou moins permis et ce genre

de faille est détectable par un simple scan de ports.

Installer le paquettage suivant :

apt-get install iptables

Créons le script :

nano /etc/init.d/firewall

Ecrire : #!/bin/sh

On efface les règles précédentes pour partir sur de bonnes bases :

iptables -t filter -F

iptables -t filter –X

On bloque par défaut tout le trafic

iptables -t filter -P INPUT DROP

iptables -t filter -P FORWARD DROP

iptables -t filter -P OUTPUT DROP

On ne ferme pas les connexions déjà établies :

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Nous indiquons avec les paramètres -m et --state de ne pas fermer les connexions qui

sont déjà établies.

On autorise le loopback (Pour ne pas se bloquer !)

iptables -t filter -A INPUT -i lo -j ACCEPT

iptables -t filter -A OUTPUT -o lo -j ACCEPT

Procédure Serveur Web

mai. 4

11

Ouvrir les ports utilisés. Dans notre cas, pour le serveur web (port 80) :

iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT

iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT

Il ne vous reste qu’à spécifier toutes les règles nécessaires.

Service port d’écoute protocole

Ssh 22 tcp

web/HTTP 80 tcp

FTP 20 et 21 tcp

mail/SMTP 25 tcp

mail/POP3 110 tcp

mail/IMAP 143 tcp

DNS 53 tcp et udp

Cas particulier du ping :

Le ping est basé sur un protocole particulier (ICMP) qui n’a pas de port prédéfini.

Mais il faut absolument autoriser le ping car c’est la méthode la plus couramment

utilisée pour savoir si votre serveur est en vie. Voici donc les règles :

iptables -t filter -A INPUT -p icmp -j ACCEPT

iptables -t filter -A OUTPUT -p icmp -j ACCEPT

Enfin, nous allons lancer notre firewall :

chmod +x /etc/init.d/firewall

/etc/init.d/firewall

Il est important de charger ce script au démarrage de la machine afin qu’un simple

reboot ne vous laisse pas sans protection :

update-rc.d firewall defaults

Procédure Serveur Web

mai. 4

12

Portsentry (scan de ports)

Cet utilitaire permet de bloquer en temps réel la plupart des scans de port connus

(même très discrets et échappant aux règles de filtrage du firewall basiques). Je

rappelle au passage que scanner les ports signifie tester tous les ports d’une machine

afin de déterminer ceux qui sont ouverts (les portes d’entrées en gros).

Installer portsentry :

apt-get install portsentry

Pour le configurer :

nano /usr/local/psionic/portsentry/portsentry.conf

Ou :

nano /etc/portsentry/portsentry.conf

Commentez les lignes KILL_HOSTS_DENY.

Décommentez la ligne KILL_ROUTE="/sbin/iptables -I INPUT -s $TARGET$ -

j DROP".

On démarre le logiciel (il faut le lancer deux fois, pour TCP et UDP) :

portsentry –audp

portsentry –atcp

Vous pouvez tester tout ça avec nmap (si vous voulez tester en local, il vous faut

modifier le fichier portsentry.ignore en enlevant le localhost).

Procédure Serveur Web

mai. 4

13

Fail2ban (brute-force, dictionnaire, déni de service)

Fail2ban est un petit utilitaire qui se base sur les logs de la machine pour chercher des

actions suspectes répétées (par exemple, des erreurs de mots de passe) dans un laps de

temps donné. S’il en trouve, il bannira l’IP de l’attaquant via iptables. Ce type de

logiciel est indispensable, car, bien que léger, il offre une bonne protection contre les

attaques basiques indiquées ci-dessus.

Pour installer fail2ban :

apt-get install fail2ban

Pour la configuration :

nano /etc/fail2ban/jail.conf

Remplir le champ ci-dessous :

o destmail : indiquez une adresse mail si vous voulez recevoir des mails

d’alerte de la part de fail2ban.

Le niveau de protection peut être modulé via les champs suivants (notez que la

configuration par défaut suffit normalement) :

o bantime : temps de bannissement des IP suspectes ;

o maxretry : nombre de tentatives de connexion permise avant

bannissement.

Enregistrez et quittez.

Enfin, pour recharger la nouvelle configuration :

/etc/init.d/fail2ban restart

Procédure Serveur Web

mai. 4

14

Rkhunter (rootkit et backdoors)

Rkhunter est un utilitaire qui est chargé de détecter d’éventuels rootkits sur votre

serveur. Il est relativement léger (s’exécute une fois par jour par défaut) donc on aurait

tort de se priver.

Installer rkhunter :

apt-get install rkhunter

Il est conseillé de modifier un peu la configuration :

nano /etc/default/rkhunter

Remplir les champs ci-dessous :

o report_email : indiquez un mail pour recevoir des alertes de rkhunter

o rkhunter cron_daily_run : mettez « yes » pour une vérification

quotidienne de votre machine via un cron.

Surveiller les logs

La plupart des logiciels cités plus haut vous enverront des notifications par mail en cas

d’alerte. Cependant, surveiller les logs est important, car ils reflètent la « vie » de votre

serveur.

Les logs les plus intéressants sont :

/var/log/auth.log qui contient toutes les tentatives d’accès au serveur. Il peut

être utile de filtrer le contenu, par exemple : cat /var/log/auth.log | grep

authentication failure

/var/log/message et /var/log/syslog contient un peu de tout (erreurs, bugs,

informations, etc)

/var/log/fail2ban est le log d’alerte de fail2ban. Cherchez notamment : cat

/var/log/fail2ban | grep ban

/var/log/snort/alert vous indiquera les logs d’alertes de Snort

/var/log/rkhunter pour voir les rapports quotidien de Rkhunter. Faites attention

aux erreurs trouvées, ce n’est pas bon signe (même si le risque de faux positifs

existe ici).

Procédure Serveur Web

mai. 4

15

Logwatch

Logwatch notamment permet de résumer plusieurs logs afin de ne vous retourner que

des anomalies si possible. Cela évite un long et fastidieux travail de recherche.

Installer logwatch :

apt-get install logwatch

nano /usr/share/logwatch/default.conf/logwatch.conf

Pour le bon sens :

Environ 90 % des problèmes informatiques relèvent de l’utilisateur. C’est pourquoi,

avant même de penser à sécuriser sa machine, il faut garder en mémoire quelques

règles de bon sens :

interdire les utilisateurs sans mot de passe (ce sont d’énormes failles

potentielles)

toujours choisir de bons mots de passe : 8 caractères minimum, pas un mot qui

se trouve dans le dictionnaire, si possible des chiffres, des majuscules, des

symboles... au besoin, un outil comme pwgen vous en génèrera

automatiquement des bons (apt-get install pwgen)

maintenir son système à jour (apt-get update et apt-get upgrade)

toujours utiliser ssh pour l’accès à distance (et non telnet ou des services

graphiques, sauf s’ils sont en tunnel à travers ssh)

En premier lieu, il faut regarder du côté de ssh, puisque c’est tout de même un accès

direct à votre machine.

nano /etc/ssh/sshd_config

Et il est conseillé de changer les champs suivants :

Port : le port par défaut est 22 et n’importe quel attaquant le sait. Changer le

port force à effectuer un scan (ou équivalent) avant de réfléchir à attaquer

(attention de bien changer le port dans le firewall)

PermitRootLogin : mettre à « no » afin d’interdire le login en root

AllowUsers : indique une liste d’utilisateur autorisé à se connecter via ssh. Cela

peut être utile si vous avez des utilisateurs qui ne sont pas censés se connecter

sur la machine.

Et on redémarre :

/etc/init.d/ssh restart

Apache : le serveur web le plus courant - donne par défaut de nombreuses

informations à quiconque s’y connecte. Vu que cela ne sert à rien que votre serveur

web donne au monde votre distribution Linux, autant limiter cela :

nano /etc/apache2/apache2.conf

Procédure Serveur Web

mai. 4

16

Passez ServerSignature à « off » et ServerTokens à « Prod » pour rendre votre serveur

web plus discret.

/etc/init.d/apache2 restart

Pour la plupart des logiciels de base, il existe quelques recommandations de prudence.

Voici une liste non exhaustive :

Service conseil

Mysql interdire les accès sans mot de passe (on peut exécuter l’utilitaire

/usr/bin/mysql_secure_installation fourni avec mysql-server)

FTP ne surtout pas créer de FTP anonymes

Mail

utiliser un anti-spam (spamassassin par exemple) et - si possible - utiliser les

connexions sécurisées (SSL ou TLS) offertes par tout serveur de mail qui se

respecte

Scanner de port :

Nmap est le meilleur outil de scan de ports : il va tenter d’ouvrir des connexions sur

un grand nombre de ports de votre machine afin de déterminer s’ils sont ouverts ou

non.

Installer nmap :

apt-get install nmap

Le mieux est d’effectuer le scan le plus incisif et par conséquent, le moins discret

possible :

nmap -v ip_ou_nom_de_la_machine

Vous aurez alors la liste des ports ouverts.

Vous pouvez aussi tester un port en particulier avec l’argument -p port. Il n’est pas

recommandé d’utiliser nmap sur quiconque autre que vous-mêmes.