« Utiliser un proxy Apache pour Proxmox » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 101 : | Ligne 101 : | ||
</VirtualHost> | </VirtualHost> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[:Catégorie:Proxmox]] | [[Catégorie:Apache]] | ||
[[Catégorie:Proxmox]] |
Version du 27 juin 2018 à 14:32
Notre serveur de test proxmox se trouve à l'intérieur d'un réseau privé.
N'ayant malheureusement pas toujours une connexion supportant IPv6 à l'extérieur on ne peut pas se reposer sur son IPv6 publique pour l'accès et une simple redirection dans le NAT IPv4 ne me convenait pas les ports 80 et 443 étant déjà utilisés sur une autre machine.
Il a donc été nécessaire de créer un reverse proxy dans le serveur Apache existant afin de servir l'interface web de proxmox malgré tout.
Mais c'était sans compter sur les spécificités de ce genre d'interfaces ...
Problèmes rencontrés
Pour créer un proxy c'est relativement rapide dans les cas simple.
En effet si votre serveur possède déjà de nombreux VirtualHost il suffit de lui en ajouter un et de lui configurer les options ProxyPass et ProxyPassReverse.
Proxmox force les connexions SSL
Le premier soucis que j'ai eu, c'est que proxmox force la connexion SSL. En plus de ça les certificats étant ceux par défaut (donc self-signed) mon serveur Apache n'en voulait pas.
Donc on commence par activer le support SSL pour les proxy et on demande à ne pas valider le certificat (on est en interne je rappel, les risques sont limités)
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
Les connexions aux consoles
Les connexions aux consoles se font via des websocket et ne me demandez pas pourquoi mais Apache n'aime pas qu'on mélange tout ...
Il faut donc ajouter des règles de proxy spécifiques pour les destinations de ces connexion WebSocket.
<LocationMatch ^/(api2/json/nodes/[^\/]+/[^\/]+/[^\/]+/vncwebsocket.*)$>
ProxyPass wss://IP.DU.SERVEUR.PROXMOX:8006/$1 retry=0
</LocationMatch>
<Location /websockify>
ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006
ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006
</Location>
Fichier de configuration complet
Le reste du fichier est standard pour un VirtualHost qui fait office de proxy.
Je vous mets ici ma version pour référence si besoin
# Ce VirtualHost est là uniquement pour forcer la connexion SSL
<VirtualHost *:80>
ServerName FQDN_DU_SERVEUR
Redirect / https://FQDN_DU_SERVEUR/
</VirtualHost>
# VirtualHost Proxy pour Proxmox
<VirtualHost *:443>
ServerName FQDN_DU_SERVEUR
CustomLog logs/access_log combined
<Location />
ProxyPass https://IP.DU.SERVEUR.PROXMOX:8006/
ProxyPassReverse https://IP.DU.SERVEUR.PROXMOX:8006/
</Location>
<LocationMatch ^/(api2/json/nodes/[^\/]+/[^\/]+/[^\/]+/vncwebsocket.*)$>
ProxyPass wss://IP.DU.SERVEUR.PROXMOX:8006/$1 retry=0
</LocationMatch>
<Location /websockify>
ProxyPass ws://IP.DU.SERVEUR.PROXMOX:8006
ProxyPassReverse ws://IP.DU.SERVEUR.PROXMOX:8006
</Location>
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile fullchain.pem
SSLCertificateKeyFile privkey.pem
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
ProxyRequests off
ProxyPreserveHost on
RequestHeader unset Accept-Encoding
# On force l'accès via SSL
Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>