Sé curisation ré séau du sérvéur d applications GlassFish Certaines adresses IP ont été effacées dans ce document pour des raisons évidentes de sécurité. 1
Table des matières... 1 Contexte... 2 1 ère solution : Iptables... 3 Introduction... 3 En pratique... 3 Bloquer le port 8080 du serveur apache (en **.**.**.**) :... 4 Quelques images pour résumer :... 5 2 ème solution (à privilégier) : via le serveur Glassfish... 6 Test final... 7 Contexte Dans le cadre de mon stage de 2 ème année de BTS, j ai été amené à sécuriser un serveur d applications GlassFish. J étais sur un poste client sous Windows 7, et je me connectais au serveur avec le logiciel de contrôle à distance VNC. Le serveur en question était un serveur de test : le clone du serveur de production. Sur ce serveur virtualisé sous CentOS 6.5 (sous KDE), iptables était installé ainsi que l'environnement d'applications java glassfish couplé au serveur apache. Le but était de mettre en place une solution permettant de bloquer le port d entré par défaut de la plateforme GlassFish (serveur d applications java) : le port 8080. Ainsi les requêtes passeront obligatoirement par le port 80 (puis 443 par la suite, voir le doc sécurisation SSL), et le serveur apache les redirigera en local vers le bon port (voir le doc sur la redirection avec reverse proxy). 2
1 ère solution : Iptables Introduction Iptables est un pare-feu en ligne de commande, souvent installé sur les distributions linux par défaut. Il permet principalement de d autoriser ou de bloquer les ports et @ IP venant et sortant d une machine. Les commandes principales sont disponibles sous forme de tableau sur le site suivant : http://olivieraj.free.fr/fr/linux/information/firewall/fw-03-05.html Ou plus simplement en tapant dans un terminal : man iptables En pratique Lors du stage, le but était d interdire l accès à un serveur web directement via l adresse IP suivit du port, obligeant ainsi la requête à passer par le serveur apache et en passant par un reverse proxy sécurisé. Le poste utilisé est sous CentOS 6.5 (interface KDE). Le problème consiste à bloquer l accès au serveur directement via le port 8080 par n importe quel utilisateur, on bloque donc le port 8080 en entrée du serveur : La commande : Nmap -st -O localhost Permet de contrôler les ports ouverts du serveur: 3
On pourra aussi utiliser Advanced LAN Scanner sous Windows afin de vérifier à distance les ports ouverts et avec un service actif : La configuration d iptables se trouve dans le fichier /etc/sysconfig/iptables On peut retrouver cette configuration avec la commande iptables L Bloquer le port 8080 du serveur apache (en **.**.**.**) : Pour bloquer le port 8080 en entrée du serveur, il faut taper : /sbin/iptables A INPUT p tcp dport 8080 j DROP Pour l autoriser à nouveau, il faut d abord supprimer la règle précédente : /sbin/iptables D INPUT p tcp dport 8080 j DROP Puis autoriser le port 8080 : /sbin/iptables A INPUT p tcp dport 8080 j ACCEPT -A signifie ajout d une règle (à la fin de la liste, elle ne sera pas prioritaire sur les anciennes, pour être traité en 1 er, il faut appliquer la règle I, comme insertion) -D (delete) signifie suppression d une règle, cela permet d éviter d avoir trop de règles en même temps qui peuvent se contredire (la liste de règles utilise les 1 er éléments de la liste en priorité) INPUT signifie que la règle est appliquée pour les connexions entrantes -p pour le protocole (ici tcp bloqué) -dport pour le port destination (ici une requête externe à destination de la machine sur le port 8080 est bloquée) -j définie l action à effectuer : DROP signifie interdire la règle décrite avant ACCEPT pour accepter la règle Puis, après chaque configuration, il faut sauvegarder la configuration (pour que ça soit toujours valable après un redémarrage), puis redémarrer le service iptables : 4
/sbin/service iptables save /sbin/service iptables restart Quelques images pour résumer : Bloquer le port, sauver la configuration et redémarrer le service : Vérifier la/les règle(s) entrée(s) : - Avec le terminal : - En graphique : 5
2 ème solution (à privilégier) : via le serveur Glassfish L utilisation d iptables est une solution gratuite et efficace pour gérer un pare-feu sous linux. Toutefois, cela rajoute ici un produit sur le serveur, et donc de la gestion supplémentaire pour le gestionnaire de serveur. La 2 ème solution proposée est de faire en sorte que le serveur GlassFish n écoute que localement (c est-à-dire qu en 127.0.0.1). Ainsi, l accès au port 8080 sera impossible car jamais ouvert par le serveur GlassFish. Pour cela il faut aller voir dans Configurations > server-config > configuration réseau > processus d écoute réseau > http-listener-1 et modifier l adresse IP d écoute, comme sur la capture d écran cidessous (par défaut l adresse était 0.0.0.0, ce qui autorisait n importe qui à passer par le port 8080): 6
Test final Quel que soit la méthode utilisée, le port 8080 est bien bloqué en entrée du serveur, le test a été réalisé avec Advanced LAN Scanner sur le poste client, et a donné naturellement le même résultat avec les 2 solutions : On constate bien que le port 8080 n est plus présent dans les «open ports», mais fait bien partie des «closed ports» (446 65535 closed). 7