Proxmox derrière le reverse proxy Apache httpd
Table des matières
Dans ce court article, je souhaite vous expliquer comment paramétrer Apache httpd comme reverse proxy et accéder à une interface Proxmox située dans un réseau non exposé. J'ai eu du mal à trouver et affiner une configuration fonctionnelle. Je vous la partage donc ici.
Nous sommes d'accord, il existe d'autres reverse-proxy tels que NGNIX, cependant, j'utilise déjà Apache httpd sur la machine exposée sur Internet, il est donc plus facile de créer un VirtualHost spécifique pour utiliser les modules reverse-proxy plutôt que de changer la configuration actuelle.
Côté performance, Apache httpd est largement suffisant.
Apache httpd, en tant que reverse-proxy nous permettra de :
- faire du filtrage sur l'IP source
- porter un certificat Let's Encrypt
- Et bien plus ...
Il est nécessaire que les modules suivants soient activés sur Apache httpd :
- Les modules proxy : proxy, proxy_connect
- Les modules proxy http : proxy_http, proxy_http2
- Les modules proxy WebSocket : proxy_wstunnel
La machine concernée étant sous Gentoo, j'ai du activer les USE FLAG suivants :
Sur Red Hat Enterprise Linux et dérivées, c'est automatiquement installé et actif avec le paquet httpd installé, via :
- /etc/httpd/conf.modules.d/00-proxy.conf
- /etc/httpd/conf.modules.d/10-proxy_h2.conf
Proxmox écoutant en HTTPS, on va s'assurer de faire du HTTPS de bout en bout.
Vu que je suis sur Gentoo, mon fichier .conf de VirtualHosts est dans /etc/apache2/vhosts.d et les logs sont stockés dans /var/log/apache2.
Dans le monde Red Hat, le fichier de VirtualHost serait un fichier .conf dans /etc/httpd/conf.d/ et les logs sont à stocker dans /var/log/httpd.
On va créer quand même un VirtualHost écoutant sur le port 80 (http) pour pouvoir générer nos certificats Let's Encrypt (sur un répertoire bidon) et forcer une redirection en HTTPS :
Ensuite, on créé dans le même fichier de VirtualHost celui écoutant sur le port 443 (HTTPS) qui lui fera la fonction de proxy, et porte le certificat Let's Encrypt :
Evidemment, après chaque modification, il faudra penser à recharger la configuration d'Apache httpd.
Sous Gentoo (OpenRC) :
Sous Red Hat Enterprise Linux et dérivées (Systemd) :
+
Introduction
Dans ce court article, je souhaite vous expliquer comment paramétrer Apache httpd comme reverse proxy et accéder à une interface Proxmox située dans un réseau non exposé. J'ai eu du mal à trouver et affiner une configuration fonctionnelle. Je vous la partage donc ici.
Nous sommes d'accord, il existe d'autres reverse-proxy tels que NGNIX, cependant, j'utilise déjà Apache httpd sur la machine exposée sur Internet, il est donc plus facile de créer un VirtualHost spécifique pour utiliser les modules reverse-proxy plutôt que de changer la configuration actuelle.
Côté performance, Apache httpd est largement suffisant.
Apache httpd, en tant que reverse-proxy nous permettra de :
- faire du filtrage sur l'IP source
- porter un certificat Let's Encrypt
- Et bien plus ...
Prérequis
Il est nécessaire que les modules suivants soient activés sur Apache httpd :
- Les modules proxy : proxy, proxy_connect
- Les modules proxy http : proxy_http, proxy_http2
- Les modules proxy WebSocket : proxy_wstunnel
La machine concernée étant sous Gentoo, j'ai du activer les USE FLAG suivants :
Code TEXT :
www-servers/apache apache2_modules_proxy apache2_modules_proxy_connect apache2_modules_proxy_http apache2_modules_proxy_http2 apache2_modules_proxy_wstunnel
Sur Red Hat Enterprise Linux et dérivées, c'est automatiquement installé et actif avec le paquet httpd installé, via :
- /etc/httpd/conf.modules.d/00-proxy.conf
- /etc/httpd/conf.modules.d/10-proxy_h2.conf
VirtualHost Apache httpd
Proxmox écoutant en HTTPS, on va s'assurer de faire du HTTPS de bout en bout.
Vu que je suis sur Gentoo, mon fichier .conf de VirtualHosts est dans /etc/apache2/vhosts.d et les logs sont stockés dans /var/log/apache2.
Dans le monde Red Hat, le fichier de VirtualHost serait un fichier .conf dans /etc/httpd/conf.d/ et les logs sont à stocker dans /var/log/httpd.
On va créer quand même un VirtualHost écoutant sur le port 80 (http) pour pouvoir générer nos certificats Let's Encrypt (sur un répertoire bidon) et forcer une redirection en HTTPS :
Code TEXT :
<VirtualHost *:80> DocumentRoot /var/www/localhost/htdocs/proxmox ServerName proxmox.linuxtricks.fr ServerAdmin [email protected] ErrorLog /var/log/apache2/proxmox.linuxtricks.fr-error_log TransferLog /var/log/apache2/proxmox.linuxtricks.fr-access_log ServerSignature Off <Directory /var/www/localhost/htdocs/proxmox> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory> # Redirection Lets Encrypt RewriteEngine on RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge/ RewriteRule (.*) https://proxmox.linuxtricks.fr$1 [R=301,L] </VirtualHost>
Ensuite, on créé dans le même fichier de VirtualHost celui écoutant sur le port 443 (HTTPS) qui lui fera la fonction de proxy, et porte le certificat Let's Encrypt :
Code TEXT :
<VirtualHost *:443> ServerName proxmox.linuxtricks.fr ServerAdmin [email protected] ServerSignature Off # Options Proxy ProxyRequests off ProxyPreserveHost on # Options SSL pour la fonctionnalité Proxy SSLProxyEngine on SSLCertificateFile /etc/letsencrypt/live/proxmox.linuxtricks.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/proxmox.linuxtricks.fr/privkey.pem # Désactivation de la vérification du certificat de Proxmox SSLProxyVerify none SSLProxyCheckPeerCN off SSLProxyCheckPeerName off SSLProxyCheckPeerExpire off # Redirections sur le proxmox ProxyPass / https://192.168.21.250:8006/ max=100 ProxyPassReverse / https://192.168.21.250:8006/ # Réécritures d'URL pour les Websockets qu'utilise Proxmox RewriteEngine on RewriteCond %{HTTP:Upgrade} websocket [NC] RewriteCond %{HTTP:Connection} upgrade [NC] RewriteRule ^/?(.*) "wss://192.168.21.250:8006/$1" [P,L] # Filtrage IP pour accéder à Proxmox (IP fiables, remplacées dans l'exemple) <Location / > Require ip 1.2.3.4 </Location> </VirtualHost>
Evidemment, après chaque modification, il faudra penser à recharger la configuration d'Apache httpd.
Sous Gentoo (OpenRC) :
Code BASH :
/etc/init.d/apache2 reload
Sous Red Hat Enterprise Linux et dérivées (Systemd) :
Code BASH :
systemctl reload httpd.service