/ debian

Configurer Nginx en reverse-proxy avec Let's Encrypt pour Proxmox

Il y a plusieurs solutions pour sécuriser l’accès à l’interface Proxmox, mais si vous avez l’habitude tout comme moi de nginx, elle est la plus intéressante car elle permet non seulement d’utiliser le domaine de votre choix pour accéder à l’interface sur le port standard 443, mais également de ne pas vous retrouver bloqué par le firewall en cas de mauvaise configuration.

Dans ce tutorial, nous allons donc voir comment installer nginx et comment le configurer pour obtenir un certificat Let’sEncrypt et sécuriser ainsi l’interface de Proxmox.

On commence par installer nginx :

apt-get install nginx

Puis on créer un fichier /etc/nginx/conf.d/proxmox.conf :

upstream proxmox {
    server "votre.serveur.hostname";
}

server {
    server_name proxmox.votredomaine.com;
    rewrite ^(.*) https://$host$1 permanent;
location /.well-known {
            alias /var/www/html/.well-known;
    }

}

Pour appliquer la configuration, on utilise la commande service nginx reload.
On peut désormais passer à l’installation de Let’s Encrypt si ce n’est pas déjà fait.

cd /opt
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Il ne nous reste plus qu’à générer le certificat via la commande :

./letsencrypt-auto certonly --webroot -w /var/www/html -d proxmox.votredomaine.com --email votreemail@votredomaine.com --text --agree-tos

Let’s Encrypt va alors effectuer l’opération de vérification en créer un dossier .well-known dans /var/www/html puis générer votre certificat. Nous pouvons donc désormais ajouter les lignes suivantes à notre fichier /etc/nginx/conf.d/proxmox.conf afin d’utiliser le certificat :

server {
    listen 443;
    server_name proxmox.votredomaine.com;
    ssl on;
    ssl_certificate     /etc/letsencrypt/live/proxmox.votredomaine.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/proxmox.votredomaine.com/privkey.pem;
    proxy_redirect off;
    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass https://localhost:8006;
        proxy_buffering off;
        client_max_body_size 0;
        proxy_connect_timeout  3600s;
        proxy_read_timeout  3600s;
        proxy_send_timeout  3600s;
        send_timeout  3600s;
    }
}

On utilise à nouveau la commande service nginx reload pour appliquer la configuration et nous pouvons désormais accéder à l’interface proxmox via l’adresse : https://proxmox.votredomaine.com.
Vous pouvez ajouter un cron pour renouveler automatiquement votre certificat letsencrypt tous les 30 jours :

0 0 1 * * /opt/letsencrypt-auto certonly --webroot -w /var/www/html -d proxmox.votredomaine.com --email votreemail@votredomaine.com --text --agree-tos