NginX HTTPS Reverse Proxy

Ce guide décrit les étapes de configuration d’un reverse Proxy permettant du HTTPS en extérieur vers du HTTP en local.

1/ Installer Nginx

Installation NGINX
sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
sudo systemctl enable nginx
Ajout des règles Firewall (CentOS)
sudo firewall-cmd --permanent --zone=public --add-service=http 
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

2/ Configurer le reverse proxy HTTP

Voici une configuration simple en HTTP vers la machine locale 192.168.0.2

Nginx Reverse Proxy HTTP classique
server {
        listen 80;
        server_name     machine2.monsite.fr;
        location ~ /\. { deny all; access_log off; log_not_found off; }
        location / {
                proxy_pass      http://192.168.0.2;
        }
}

Ensuite pour générer le certificat SSL via Let’s Encrypt il faut autoriser l’accès au dossier .well-known :

Configuration Let's Encrypt
server {
        listen 80;
        server_name     machine2.monsite.fr;
        #Nécéssaire pour la génération du certificat SSL
        location ~ /\.well-known{
                root /var/www/html;
                allow all;
        }
        location ~ /\. { deny all; access_log off; log_not_found off; }
        location / {
                proxy_pass      http://192.168.0.2;
        }
}

3/ Générer le certificat SSL

Génération des certificats Let's Encrypt
/opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 --webroot --webroot-path /var/www/html -d machine2.monsite.fr

Les certificats seront générés dans le dossier /etc/letsencrypt/live/[ALIAS.DOMAINE]

  • /etc/letsencrypt/live/machine2.monsite.fr/fullchain.pem;
  • /etc/letsencrypt/live/machine2.monsite.fr/privkey.pem;
  • /etc/letsencrypt/live/machine2.monsite.fr/fullchain.pem;

4/ Créer la clé  Diffie-Hellman

Cette clé d’échange renforce la sécurité et sera utilisée comme paramètre dans la configuration HTTPS de Nginx.

dhparam
openssl dhparam -out /etc/ssl/private/dh4096.pem 4096

5/ Configurer le reverse proxy HTTPS

Redirection 301 du HTTP sur HTTPS
server {
        listen 80;
        server_name     machine2.monsite.fr;
        #Nécéssaire pour la génération du certificat SSL
        location ~ /\.well-known{
                root /var/www/html;
                allow all;
        }
        location ~ /\. { deny all; access_log off; log_not_found off; }
        return              301 https://$host$request_uri;
        location / {
                proxy_pass      http://192.168.0.2;
        }
}
Configuration HTTPS
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name machine2.monsite.fr;
    ssl on;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_certificate /etc/letsencrypt/live/machine2.monsite.fr/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/machine2.monsite.fr/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/machine2.monsite.fr/fullchain.pem;
    ssl_session_timeout 1d;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/ssl/private/dh4096.pem;

    location ~ /\.well-known{
     root /var/www/html;
     allow all;
    }

    location / {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto https;
      proxy_pass http://192.168.0.2;
      proxy_read_timeout 90;
    }
}

6/ Redémarrage

Redémarrage Nginx
sudo systemctl restart nginx.service

Voilà la configuration est terminée, il ne reste plus qu’à redémarrer Nginx (en supposant que la configuration web de votre machine destination est déjà faite)

Nginx : 502 Bad Gateway

En reverse Proxy, il peut arriver qu’un site retourne une erreur 502 bad Gateway avec des headers trop gros (comme un site sous Symfony).

Pour palier à ce problème, il suffit d’ajouter ces quelques lignes dans la configuration Nginx :

proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

Emails vers Google bloqués ou en SPAM

Si vous avez ce type de message pour l’envoi sur des adresses « gmail » :

550-5.7.1 [::ipv6::] Our system has detected that this message does not meet 
550-5.7.1 IPv6 sending guidelines regarding PTR records and authentication. 
550-5.7.1 Please review https://support.google.com/mail/?p=ipv6_authentication_error
550-5.7.1 for more information.

C’est que vous n’avez pas d’enregistrement PTR (reverse DNS) IPv6 valide. Dans ce cas 2 options possibles :

  • Ajouter un enregistrement PTR valide pour l’IPv6
  • Désactiver l’envoi des email via IPv6 ( peut se faire par exemple dans la config de POSTFIX, dans le fichier /etc/postfix/main.cf, remplacer inet_protocols = all par inet_protpocols = ipv4 puis redémarrer postfix)

PHP : Connexion Soap

Hop pour aide mémoire :

Connexion au web service SOAP
//Parametres de connexion
$username = "moi";
$password = "mon_mot_de_passe";
$wsdl= "https://mon_url/fichier.wsdl";
$location = "https://mon_url/end_point";


//On définit les paramètres de connexion
$options = array(
	'trace'=>1,
    'login' => $username,
    'password' => $password,
    'soap_version'   => SOAP_1_1,
    'location' => $location,
    'uri' => $wsdl,
    'cache_wsdl' => WSDL_CACHE_NONE,
);

//Connexion établie
$client = new SoapClient($wsdl, $options);
Connexion avec un certificat SSL auto signé
<?php
//Parametres de connexion
$username = "moi";
$password = "mon_mot_de_passe";
$wsdl= "https://mon_url/fichier.wsdl";
$location = "https://mon_url/end_point";


//On By pass le certificat auto signé (aucun controle)
$context = stream_context_create([
    'ssl' => [
        // SSL/TLS options
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true,
    ]
]);

//On définit les paramètres de connexion
$options = array(
	'trace'=>1,
    'login' => $username,
    'password' => $password,
    'soap_version'   => SOAP_1_1,
    'stream_context' => $context,
    'location' => $location,
    'uri' => $wsdl,
    'cache_wsdl' => WSDL_CACHE_NONE,
);

//Connexion établie
$client = new SoapClient($wsdl, $options);
Appels des web services
<?php


//Il est possible de récupérer lesliste des services/méthodes disponibles sur ce web service
$methodes = $client->__getFunctions());

//2 méthodes possibles pour appeler les web srvices

//Methode 1 : On appelle le web service avec les parametres sous forme de tableau
//$response = $client->__soapCall('getInfosClient', array("id" => "123456789")); 

//Methode 2 : On appelle le web service avec les valeurs les unes à la suite des autres
$response = $client->getInfosClient("12346789");

IONIC : Cross Domain localhost:8100

Tester IONIC dans un navigateur c’est bien mais dès qu’il faut accéder à un serveur tierce ça devient tout de suite plus compliqué avec les navigateurs modernes qui n’autorisent pas ce genre de pratique à l’insu de l’utilisateur…
Pour régler ce problème de la manière la plus simple, cela se fait grâce à un htaccess :

.htaccess
<IfModule mod_headers.c>
    Header always set Access-Control-Allow-Origin "http://localhost:8100"
    Header always set Access-Control-Allow-Headers "origin, Authorization, Content-Type"
    Header always set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
    Header always set Access-Control-Allow-Credentials "true"
</IfModule>

RewriteEngine On         
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]  

Une fois les tests terminés, il faudra penser à supprimer tout ça 🙂

Reset Mysql Root Password

C’est tout simple :

1 - On stoppe Mysql:
sudo service mysql stop
ou
sudo /etc/init.d/mysql stop
2 - On démmare Mysq sans controle de droits :
mysqld_safe --skip-grant-tables
3 - On se connecte en root sans password :
mysql -u root mysql
4 - Puis on change le mot de passe :
UPDATE user SET Password=PASSWORD('mon mot de passe super balaise') WHERE User='root';
FLUSH PRIVILEGES;
exit;
5 - On stoppe Mysql et on le redémarre avec les contrôles d'accès :
sudo killall mysqld
sudo service mysql start
ou
sudo /etc/init.d/mysql start

Les bonnes commandes Linux

Connaître l’espace occupé par les dossiers d’un répertoire :

du -sh * | sort -nr | head
du -hx --max-depth=1 /var/log

Connaître le nombre de connexions actives sur un port :

netstat -anp | grep :443 | grep ESTABLISHED | wc -l

Libérer la mémoire cache

sysctl -w vm.drop_caches=3

 

Cookies… la recette ultime !

Voilà un petit article qui n’aura pas de rapport avec l’informatique pour une fois : la recette ultime des cookies !!!
Pour les cookies Internet voilà un petit article bien sympathique chez Korben 😉

Pour la réalisation de cette recette il vous faudra :

  • 140 grammes de beurre
  • 160 grammes de sucre
  • 80 gramme de cassonade
  • 2 œufs
  • 4 cuillères à soupe de lait
  • 2 sachets de sucre vanillé
  • 300 grammes de farine
  • 2 tablettes de chocolat noir
  • 1 tablette de chocolat au lait

Le beurre

Dans un saladier, ramollir les 140 grammes de beurres 15 secondes au micro-ondes. Attention j’ai bien écris ramollir pas rendre liquide !

Sucre

Ajouter les 160 grammes de sucre, puis les 80 grammes de cassonade, les 2 sachets de sucre vanillé et bien mélanger le tout.

Oeufs, lait et farine

Ajouter les 2 œufs, les 4 cuillères de lait et les 300 grammes de farine et bien mélanger le tout de manière à obtenir une patte avec une texture sans grumeaux.

Chocolat

Découper les tablettes de chocolat en petits carrés de 0,5 cm puis mélanger à la patte.

Cuisson

Avec ces quantités vous devriez pouvoir faire 4 fournées de 16 cookies 🙂
Faite de petites boules de pattes (pas la peine de faire ce propre, elles s’aplatirons lors de la cuisson) et faite cuire pendant 10 à 15min à 150°.

Voili voilo les bons cookies 🙂