Un reverse proxy pour sécuriser votre extranet
Il peut arriver dans notre vie professionnelle de faire de très, très mauvaise rencontres. L’entreprise de transports pour laquelle je viens de travailler s’est vu proposer la réalisation d’un extranet pour la coquette somme de 10 000 euros. Pourquoi pas ? La prestation concurrente à laquelle j’ai été associée lui sera facturée finalement aux alentours de 5 000 euros, intégrant le réalisation du site Internet, le référencement du site, l’installation d’un reverse proxy sur un serveur Linux, la page Extranet.
Face au refus de l’éditeur de passer son serveur Web en SSL qui a cherché à me pourrir la vie, j’ai pensé, afin de sécuriser les échanges de données entre le site Internet et le serveur de l’application, à installer un serveur proxy inverse Apache en SSL sur une Fedora Server 23. J’aurais pu utiliser Nginx.
Dans les fichiers de configuration ci-dessous, 192.168.0.220 désigne le serveur Web de l’application métier ; 192.168.0.221 l’adresse ip du serveur Fedora sur lequel le reverse proxy écoute sur le port 3128. Je n’ai pas pu utiliser le port 443, étant utilisé par l’entreprise pour un Webmail.
Installation du serveur Apache
Sur Fedora Server 23, l’installation de paquets supplémentaires se fait avec la commande dnf :
dnf install httpd mod_ssl
Modification du fichier de configuration /etc/httpd/conf/httpd.conf
J’ai modifié les directives Listen et ServerName du fichier de configuration principal /etc/httpd/conf/httpd.conf du serveur Apache comme suit :
Listen 3128 ServerName 192.168.0.221:3128
Création des certificats
La création de certificats SSL autosignés se réalise à l’aide de la commande openssl :
openssl req -new -x509 -nodes -out /etc/pki/tls/certs/srv-fedora.crt -keyout /etc/pki/tls/private/srv-fedora.key
Création du fichier /etc/httpd/conf.d/reverseproxy.conf
La configuration sur Apache du mode proxy inverse se fait à l’aide des directives suivantes :
<VirtualHost *:3128> ServerName 192.168.0.221 ErrorLog /var/log/httpd/reverseproxy-error.log LogLevel warn CustomLog /var/log/httpd/reverseproxy-access.log combined SSLEngine On SSLCipherSuite HIGH:MEDIUM SSLProtocol all -SSLv2 SSLCertificateFile /etc/pki/tls/certs/srv-fedora.crt SSLCertificateKeyFile /etc/pki/tls/private/srv-fedora.key SSLProxyEngine On SSLProxyCheckPeerExpire On SSLProxyVerifyDepth 10 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] </IfModule> <IfModule mod_rewrite.c> <IfModule mod_proxy.c> ProxyRequests Off ProxyPreserveHost On ProxyPass / http://192.168.0.220/ ProxyPassReverse / http://192.168.0.220/ </IfModule> </IfModule> <Location /> Order deny,allow Allow from all </Location> </VirtualHost>
Lancement du serveur
Depuis le remplacement du système Init V par systemd, le lancement des services se fait à l’aide de la commande systemctl :
systemctl enable httpd systemctl start httpd
Pare-feu
Vous devrez ensuite jouer avec votre pare-feu pour faire une translation à partir de votre adresse ip publique vers l’adresse 192.168.0.221 sur le port 3128 de votre reverse proxy.