Serveurs Web

Proxmox derrière le reverse proxy Apache httpd

Table des matières

logo_apache + proxmox_logo



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 ...

apache-reverseproxy-proxmox



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
Cette page a été vue 1612 fois