Secure Socket Layer, apache 2 et iptables 1 Installation d
Transcription
Secure Socket Layer, apache 2 et iptables 1 Installation d
M2 IFI, le 30 janvier 2011 Secure Socket Layer, apache 2 et iptables But : faire cohabiter 2 serveurs web, un non-securisé et un sécurisé et filtrer les accès par firewall. 1 Installation d’openssl Openssl est une boîte à outils implémentant SSL et TLS qui contient tous les chiffres à clé secrète et à clé publique qui permettent d’établir des connexions sécurisées ainsi que de délivrer des certificats. Récupérez à l’adresse http://www.openssl.org ou sur un de ses mirroirs http://openssl. linux-mirror.org ou par montage nfs de le-serveur :/linux/contribs/securite, openssl-0.9.8l.tar.gz. Lisez tout d’abord les fichiers README et INSTALL qui décrivent la marche à suivre puis installez openssl sur votre PC dans le répertoire /usr/local/openssl. Avant de procéder à l’installation d’un serveur sécurisé, il faut dire au système d’utiliser la nouvelle librairie, en conflit avec celle installée avec la distribution. Pour cela, éditez le fichier /etc/ld.so.conf et ajoutez-y la ligne : /usr/local/openssl/lib. Exécutez ensuite la commande /sbin/ldconfig. 2 Installation d’Apache 2 Le serveur apache et sa documentation peuvent être obtenus à l’adresse http://httpd.apache. org. Récupérez la version 2.2.14 sur le-serveur. Lisez tout d’abord les fichiers README et INSTALL qui décrivent la marche à suivre. N’oubliez surtout pas de faire un ./configure -help pour que le script de configuration prenne en compte le module SSL et qu’il utilise la librairie openssl. Faites l’installation d’apache dans le répertoire /usr/local/apache2 avec le module ssl. Pour tester, exécutez : /usr/local/apache2/bin/apachectl start et vérifiez le bon fonctionnement du serveur web. Ensuite, il faut créer les clés et les certificats et modifier la configuration pour obtenir un serveur sécurisé. 2.1 Sécurisation de http Il faut créer un couple de clés et un certificat en mode auto-certification avant de modifier les fichiers de configuration. Il faut utiliser successivement (et avec les bons paramètres) les commandes : openssl genrsa openssl req openssl x509 Quelques indications sur les pages de man ou bien là : http://blog.taragana.com/index.php/archive/openssl-how-to-create-self-signed-certificate/fr/ 2.2 Configuration et personnalisation Pour que les versions sécurisées et non sécurisées cohabitent, on crée deux serveurs virtuels, un non sécurisé qui écoute sur le port 80 et un sécurisé qui écoute sur le port 443. Modifiez les fichiers /usr/local/apache2/conf/httpd.conf et /usr/local/apache2/conf/extra/httpd-ssl.conf. Le second est appelé dans le premier par la directive Include. Pour prendre en compte SSL, le second fichier utilise un hôte virtuel qui écoute sur le port 443. Il faut également repositionner les directives SSLCertificateFile et SSLCertificateKeyFile. Modifiez ensuite les fichiers de configurations pour que ceux-ci pointent respectivement sur les pages /export/www et /export/wwws. Cela consiste à changer le DocumentRoot et le Directory du serveur, c’est à dire le répertoire dans lequel le serveur ira chercher les fichiers qu’il publie. Actuellement il s’agit du répertoire /usr/local/apache2/htdocs. Créez le répertoire /export/www/ et faites pointer le DocumentRoot sur ce répertoire. Créez un autre répertoire /export/wwws et ajoutez un serveur virtuel sécurisé de racine ce répertoire. 1 Remarque : il ne suffit pas de changer le DocumentRoot, en effet, Apache à un système d’autorisation d’accès ACL1 qu’il faut modifier également. Une lecture des commentaires présents dans le fichier de configuration vous sera très utile. 2.3 Ce que ça change Pour voir ce qui change entre une connexion sécurisée et une connexion non sécurisée, utilisez tcpdump pour voir en quoi la connexion est modifiée. Vous pouvez aussi utiliser la commande /usr/local/openssl/bin/openssl s_client -connect machine :port -state -debug 3 Ajout du firewall 3.1 Introduction à iptables iptables filtre des paquets qui traversent une machine au moyen des chaînes prédéfinies : INPUT, OUTPUT et FORWARD (cf. Fig. 2). Quand un paquet arrive sur une interface réseau, le noyau examine sa destination, c’est le routage. S’il est destiné à la machine, il traverse la chaîne INPUT. S’il est autorisé à poursuivre son chemin (par la décision ACCEPT), il est traité par le processus local auquel il est destiné. En revanche, si la décision est DROP, le paquet est supprimé. Quand le forwarding est activé et que le paquet est destiné à une autre interface, le paquet traverse la chaîne FORWARD et, s’il est accepté, il poursuit son chemin. Si le forwarding n’est pas activé ou si on ne sait pas comment transmettre ce paquet, le paquet est supprimé. Enfin, un programme exécuté par la machine peut également envoyer des paquets. ils sont dirigés vers la chaîne OUTPUT. Si la chaîne accepte ces paquets, ils continuent leur chemin vers l’interface réseau à laquelle ils sont destinés. ACCEPT|DROP prerouting d cision routage ACCEPT|DROP décision routage postrouting ACCEPT|DROP output ACCEPT|DROP ACCEPT|DROP input ACCEPT|DROP output processus local processus local Fig 1. :Traversée des règles de NAT. forward Fig 2. :Traversée des chaînes iptables. Une chaîne est une liste ordonnée de règles. Chaque règle permet d’exprimer une condition et une décision de routage. Si la règle ne s’applique pas au paquet, on consulte la règle suivante. Enfin, lorsqu’on a épuisé l’ensemble des règles, le noyau applique la politique par défaut de la chaîne (ACCEPT|DROP). Les instructions sur ces chaînes sont : -N créer une nouvelle chaîne -L afficher les règles d’une chaîne -X effacer une chaîne vide -F vider toutes les règles d’une chaîne -P changer la politique d’une chaîne prédéfinie -Z réinitialiser les compteurs de toutes les règles Les options de manipulations de règles à l’intérieur d’une chaîne sont : -A ajouter une nouvelle règle -D effacer une règle à une certaine position dans une chaîne -I insérer une nouvelle règle à une position donnée dans une chaîne -R remplacer une règle à une certaine position dans une chaîne 3.2 Opérations sur une seule règle Par les commandes -A pour ajouter et -D pour détruire, interdisez ping sur le loopback : iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP ping -c 127.0.0.1 1 Access Control List où droits d’accès aux fichiers. 2 Détruisez ensuite cette règle par iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP l’option -s définit l’IP de la source des paquets, -p le type de protocole, et -i précise l’interface. D’autres options, -sport et -dport, permettent de spécifier resp. le port de source des paquets et le port de destination pour un protocole donné. On peut également spécifier une plage d’adresses comme yyy.yyy.yyy.yyy/x avec x le nombre correspondant à la classe du sous-réseau défini et yyy.yyy.yyy.yyy l’adresse de votre réseau. netmask 255.0.0.0 255.255.0.0 255.255.255.0 255.255.255.255 3.3 x 8 16 24 32 sous-réseau classe A classe B classe C point à point Politique de sécurité «stricte» En utilisant la politique stricte suivante sur la passerelle : iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT (1) autorisez tout le traffic en entrée sur la boucle locale ; (2) autorisez l’accès au DNS situé sur le-serveur, 192.168.1.1 ; (3) autorisez les réponses du proxy squid de le-serveur en entrée de votre passerelle ; (4) autorisez l’accès par ssh (et vérifier le bon fonctionnement) comme serveur et comme client ; (5) autorisez les requêtes http et https sur votre serveur web. 3.4 Audit (logging) Afin de faciliter la mise au point de votre firewall, ou por voir qui vous attaque, il est possible de tracer l’effet des règles. Cela peut être réalisé par l’option LOG bien placée. iptables -A INPUT -p tcp -j LOG --log-prefix "Paquets TCP en INPUT" Cet audit est tracé dans le log du noyau, qu’on peut modifier dans /etc/syslog.conf (cf TP 1). 4 Sauvegarde et restauration Vérifier le bon fonctionnement des scripts (iptables-save et iptables-restore). Que faudrait-il faire pour lancer le firewall à chaque redémarrage de la machine ? 3 Dies ist ein WWF-Dokument und kann nicht ausgedruckt werden! Das WWF-Format ist ein PDF, das man nicht ausdrucken kann. So einfach können unnötige Ausdrucke von Dokumenten vermieden, die Umwelt entlastet und Bäume gerettet werden. Mit Ihrer Hilfe. Bestimmen Sie selbst, was nicht ausgedruckt werden soll, und speichern Sie es im WWF-Format. saveaswwf.com This is a WWF document and cannot be printed! The WWF format is a PDF that cannot be printed. It’s a simple way to avoid unnecessary printing. So here’s your chance to save trees and help the environment. Decide for yourself which documents don’t need printing – and save them as WWF. saveaswwf.com Este documento es un WWF y no se puede imprimir. ® SAVE AS WWF, SAVE A TREE Un archivo WWF es un PDF que no se puede imprimir. De esta sencilla manera, se evita la impresión innecesaria de documentos, lo que beneficia al medio ambiente. Salvar árboles está en tus manos. Decide por ti mismo qué documentos no precisan ser impresos y guárdalos en formato WWF. saveaswwf.com Ceci est un document WWF qui ne peut pas être imprimé! Le format WWF est un PDF non imprimable. L’idée est de prévenir très simplement le gâchis de papier afin de préserver l’environnement et de sauver des arbres. Grâce à votre aide. Définissez vous-même ce qui n’a pas besoin d’être imprimé et sauvegardez ces documents au format WWF. saveaswwf.com ® WWF International – World Wide Fund For Nature, Gland/Switzerland.