Upload
dohanh
View
215
Download
0
Embed Size (px)
Citation preview
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
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.