Jails, Nginx & Reverse proxy sécurisé

Status
Not open for further replies.

vitria

Cadet
Joined
Jun 10, 2017
Messages
3
Bonjour à tout-e-s,

J'ai actuellement deux nas, un mon freenas et un syno qui est largement moins puissant.
Mon syno fait reverse proxy vers mon freenas pour divers services dans des Prisons.

J'aimerai mettre en place une Prison avec un nginx faisant reverse (sur lequel je pourrai donc rediriger directement le trafic). Et faire en sorte que les communications entre le nginx et mes différentes Prisons se fassent via https.
Je manque malheureusement de compétences sur nginx, est-ce que quelqu'un pourrai m'expliquer la marche à suivre ?
 

boxeman

Explorer
Joined
Mar 26, 2017
Messages
57
Salut

j’utilise un FreeBSD avec une jail nginx pour reverse proxy vers différents services selon le nom dns
et dans certains cas, selon l'uri

ma conf est en gros :

dans /usr/local/etc/nginx/nginx.conf
Code:
user  www;
worker_processes  2;

events {
  worker_connections  1024;
  multi_accept off;
}
http {
  include  mime.types;
  default_type  application/octet-stream;
  server_names_hash_bucket_size 64;
  client_max_body_size 64m;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 60;
  keepalive_requests 100;
  #gzip  on;
  include sites-enabled/vhost_*.conf;
}


dans un répertoire /usr/local/etc/nginx/site_enabled
un fichier default :
Code:
server {
  listen 80 default_server;
  server_name localhost;
  index index.html index.htm;
  server_tokens 'off';
  location '/.well-known/acme-challenge' {
  default_type "text/plain";
  root  /www/letsencrypt-auto;
  }
}

qui ne sert qu'à letsencrypt pour renouveler mes certifcats ssl

un fichier par vhost sur ce modèle :
Code:
server {
  listen 443 ssl;
  server_name $MY_FQDN;
  index index.html index.htm;
  server_tokens 'off';
  ssl_certificate  /$PATH_TO_MY_FQDN_CERT/fullchain.pem;
  ssl_certificate_key  /$PATH_TO_MY_FQDN_KEY/privkey.pem;
  ssl_session_cache  shared:SSL:1m;
  ssl_protocols TLSv1.2;
  ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
  ssl_prefer_server_ciphers  on;
  ssl_dhparam /usr/local/etc/letsencrypt/dhparam.pem;
  location / {
  proxy_pass http://$MON_SERVICE_INTERNE:$SON_PORT/;
  }
}


cas d'un vhost redirigeant selon l'uri
Code:
server {
  listen 443 ssl;
  server_name $AUTRE_FQDN;
  index index.html index.htm;
  server_tokens 'off';
  ssl_certificate  /usr/local/etc/letsencrypt/live/$AUTRE_FQDN/fullchain.pem;
  ssl_certificate_key  /usr/local/etc/letsencrypt/live/$AUTRE_FQDN/privkey.pem;
  ssl_session_cache  shared:SSL:1m;
  ssl_protocols TLSv1.2;
  ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
  ssl_prefer_server_ciphers  on;
  ssl_dhparam /usr/local/etc/letsencrypt/dhparam.pem;
  location / {
  proxy_pass http://$SITE_INTERNE/;
  sub_filter 'http://$SITE_INTERNE/' 'https://$AUTRE_FQDN/';
  sub_filter_last_modified on;
  }
  location /service1/ {
  proxy_pass http://ip_service1:81/;
  }
  location /service2/ {
  proxy_pass http://ip_service2:81/;
  }
}

l'ordre des location est importante....
je crois que j'avais utilisé sub_filter pour éviter que le site renvois la vrai url dans un cas ou détecte que le service est via un reverse proxy.. je sais plus...

si tu héberges une jail nginx sur ton Freenas et que tu reverseproxy des services sur ton Freenas, pas forcément besoin de ssl entre eux je dirais
pour tester, modifies ton fichier hosts et testes en interne ton reverse proxy

en espérant que ca peut t'aider
 

hunkdeath

Cadet
Joined
May 19, 2017
Messages
7
Bonjour

Je vien sur ce topic car le module nginx m interse pour faire mon web server j ai trouver un tuto en anglais snif mais je voudrai savoir si celui ci serai le plus adapté pour notre freenas.
voi ci le lien: digitalocean.com
 

boxeman

Explorer
Joined
Mar 26, 2017
Messages
57
Bonjour

Je vien sur ce topic car le module nginx m interse pour faire mon web server j ai trouver un tuto en anglais snif mais je voudrai savoir si celui ci serai le plus adapté pour notre freenas.
voi ci le lien: digitalocean.com

ca devrait être ok dans une jail , après comme tout tuto, il peut y avoir de légère adaptations du aux différences de versions logiciels...
je viens de lire en travers, il ne semble pas parler de la rotation des logs, c'est quelque chose à ne pas oublier :p
 

vitria

Cadet
Joined
Jun 10, 2017
Messages
3
Salut

j’utilise un FreeBSD avec une jail nginx pour reverse proxy vers différents services selon le nom dns
et dans certains cas, selon l'uri

ma conf est en gros :

dans /usr/local/etc/nginx/nginx.conf
Code:
user  www;
worker_processes  2;

events {
  worker_connections  1024;
  multi_accept off;
}
http {
  include  mime.types;
  default_type  application/octet-stream;
  server_names_hash_bucket_size 64;
  client_max_body_size 64m;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 60;
  keepalive_requests 100;
  #gzip  on;
  include sites-enabled/vhost_*.conf;
}


dans un répertoire /usr/local/etc/nginx/site_enabled
un fichier default :
Code:
server {
  listen 80 default_server;
  server_name localhost;
  index index.html index.htm;
  server_tokens 'off';
  location '/.well-known/acme-challenge' {
  default_type "text/plain";
  root  /www/letsencrypt-auto;
  }
}

qui ne sert qu'à letsencrypt pour renouveler mes certifcats ssl

un fichier par vhost sur ce modèle :
Code:
server {
  listen 443 ssl;
  server_name $MY_FQDN;
  index index.html index.htm;
  server_tokens 'off';
  ssl_certificate  /$PATH_TO_MY_FQDN_CERT/fullchain.pem;
  ssl_certificate_key  /$PATH_TO_MY_FQDN_KEY/privkey.pem;
  ssl_session_cache  shared:SSL:1m;
  ssl_protocols TLSv1.2;
  ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
  ssl_prefer_server_ciphers  on;
  ssl_dhparam /usr/local/etc/letsencrypt/dhparam.pem;
  location / {
  proxy_pass http://$MON_SERVICE_INTERNE:$SON_PORT/;
  }
}


cas d'un vhost redirigeant selon l'uri
Code:
server {
  listen 443 ssl;
  server_name $AUTRE_FQDN;
  index index.html index.htm;
  server_tokens 'off';
  ssl_certificate  /usr/local/etc/letsencrypt/live/$AUTRE_FQDN/fullchain.pem;
  ssl_certificate_key  /usr/local/etc/letsencrypt/live/$AUTRE_FQDN/privkey.pem;
  ssl_session_cache  shared:SSL:1m;
  ssl_protocols TLSv1.2;
  ssl_ciphers EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH;
  ssl_prefer_server_ciphers  on;
  ssl_dhparam /usr/local/etc/letsencrypt/dhparam.pem;
  location / {
  proxy_pass http://$SITE_INTERNE/;
  sub_filter 'http://$SITE_INTERNE/' 'https://$AUTRE_FQDN/';
  sub_filter_last_modified on;
  }
  location /service1/ {
  proxy_pass http://ip_service1:81/;
  }
  location /service2/ {
  proxy_pass http://ip_service2:81/;
  }
}

l'ordre des location est importante....
je crois que j'avais utilisé sub_filter pour éviter que le site renvois la vrai url dans un cas ou détecte que le service est via un reverse proxy.. je sais plus...

si tu héberges une jail nginx sur ton Freenas et que tu reverseproxy des services sur ton Freenas, pas forcément besoin de ssl entre eux je dirais
pour tester, modifies ton fichier hosts et testes en interne ton reverse proxy

en espérant que ca peut t'aider

Boxeman,
Ce que je comprends de ta solution, c'est que tu fais du reverse proxy de tes jails jusqu'à ton frontend. Puis que tu passe en SSL.

Pour ma part, je souhaite que ce soit les communications entre le frontend et les jails qui soit protégé.
Tu parles de modifier le fichier hosts celui de quel élément ?
 

boxeman

Explorer
Joined
Mar 26, 2017
Messages
57
au lieu d'avoir d'avoir un "proxy_pass http://XXX ;" tu peux mettre un "proxy_pass https://XXX ;"

mais afin d'éviter un man in middle, il serait bien d'ajouter des directives selon les locations :
proxy_ssl_trusted_certificate /%PATH_TO_%/%CA_SIGNED_SERVER_CRT%.crt;
proxy_ssl_verify on;
à toi de récupérer le certificat signant le certificat serveur de ton service...ou d'avoir ta propre pki ( avec easy-rsa par exemple)

enfin après, si c'est pour un usage "HOME", c'est beaucoup pour pas grand chose la sécurisation ssl entre le reverse proxy et les services quand c'est au final sur la même machine...à part utiliser du CPU, le gain de sécurité est moyen, et je pense qu'il y a d'autres points de sécurité qu'il faut que tu n'oublies pas ( suivis des maj de sécurité de nginx, update des binaires FreeBSD dans la jail, ....et question architecture design, la jail nginx n'est pas au final dans un DMZ donc a accès à tout ton réseau local)

celui de ton PC, c'est dans le cas ou ta conf nginx a plusieurs vhosts dont les noms DNS sont résolus sur l'ip public de ta box...c'est pour tester si ca fonctionne avant de modifier la redirection de ports dans ta box..
 
Status
Not open for further replies.
Top