Créer un proxy économique avec Amazon Lightsail

par | 20 Mai 2020 | Hébergement, Serveur | 0 commentaires

Dans certains cas, il peut être utile de ne pas révéler l'identité du serveur final qui effectue des requêtes vers internet. Le cas des requêtes de consommation d'API REST avec GuzzleHttp est, par exemple, assez courent. De plus, utiliser une passerelle sous la forme d'un proxy permet aussi d'augmenter le niveau de sécurité et de confidentialité de vos échanges.

La solution consiste à créer un serveur proxy pour réaliser cette tâche, mais cette fonctionnalité doit bien évidement être hébergée sur un serveur distinct du serveur qui exécute les requêtes, sinon, l'IP sortante visible à l'extérieur sera toujours celle du serveur lui-même. Voici les solutions qui s'offrent à nous :

 

1 - Utiliser un serveur proxy public

Il existe un grand nombre de sites qui proposent les coordonnées de serveurs proxy publics, vous pouvez donc les utiliser pour établir des connexions vers internet. Mais l'identité de ces serveurs n'est jamais précisément renseignée. Il est donc difficile de déterminer leur fiabilité (un grand nombre de ceux consignés dans les listes sont inaccessibles au bout de quelques secondes après leur mention) ni leur niveau de confidentialité. Il est donc tout à fait possible que ces serveurs analysent le contenu du traffic qui les traverse et que les données personnelles puissent y être récupérées par des hackers. Si vous utilisez ce type de serveur, il faut donc vous assurer de ne jamais y faire passer des données sensibles, au risque de se les faire voler.

Bref, vous l'aurez compris, je ne vous recommande pas l'utilisation de cette solution, mais si vous persistez, c'est à vos risques et périls

 

2 - Utiliser un proxy commercial

Il s'agit certainement de la solution la plus simple et la plus efficace des 4 mais le niveau de paramétrage d'une offre commerciale du type Nord VPN ou Hide My Ass est toujours plus limité que quand vous exploitez votre propre serveur.

Vous pourrez choisir le pays de sortie vers internet mais pas l'adresse IP ni la location géographique précise de celle-ci. Et certaines offres de VPN commercial ne permettent pas la connexion http ou https au VPN, elles se limitent alors à fournir un client lourd qu'il vous faut installer sur votre machine. Et dans ce cas, il est extrêmement rare que des solutions Linux fassent partie de l'offre.

La majorité des VPN commerciaux ne conserve pas de trace des logs ou des données personnelles qui les traversent, il s'agit d'une solution tout à fait satisfaisante en matière de sécurité et de confidentialité. J'ai déjà eu l'occasion d'exploiter ce type de solution dans le cadre de projets de développement avec Node JS sous Linux et j'ai été très satisfait des résultats. Même si le point de sortie est toujours une surprise que l'on découvre au moment de connecter le VPN 🙂

 

3 - Utiliser un serveur proxy statique

Construire votre propre serveur est une solution simple, rapide et hautement paramétrable. Comme elle est aussi la plus économique, elle retiendra certainement votre attention si vous êtes à l'aise avec le développement et la ligne de commande de Linux.

J'ai testé il y a quelques jours Ttinyproxy (attention, la documentation fournie par Ubuntu sur son site n'est pas complètement à jour, je vous propose une version rafraichie dans les lignes qui suivent) qui s'installe très facilement par la ligne de commande Linux :

apt-get install tinyproxy

 

Pour configurer Tinyproxy, vous pouvez ensuite éditer son fichier de configuration :

nano /etc/tinyproxy/tinyproxy.conf

 

Vous pourrez notamment modifier la liste des adresses ou plages IP qui sont autorisées à se connecter au proxy dans cette catégorie :

# # Allow: Customization of authorization controls. If there are any
# access control keywords then the default action is to DENY. Otherwise,
# the default action is ALLOW.

# # The order of the controls are important. All incoming connections are
# tested against the controls based on order.

Allow 127.0.0.1
#Allow 192.168.0.0/16
#Allow 172.16.0.0/12
#Allow 10.0.0.0/8
Allow --mon ip à ajouter--

 

Il vous faudra ensuite redémarrer le daemon du service afin d'appliquer vos modifications :

service tinyproxy restart

 

4 - Utiliser un serveur proxy dynamique

Dans certains cas d'usage, il peut être intéressant de rendre dynamique la création et la destruction des serveurs proxy que vous utilisez. Cela permet d'en renouveler régulièrement les adresses IP, d'en rafraichir la configuration et/ou de faire des économies budgétaires. Car en effet, si votre serveur proxy n'est en service que quand vous l'utilisez, vous ne paierez qu'à ce moment là. Cela peut être intéressant si la durée de son fonctionnement est proportionnellement courte sur une journée.
C'est, par exemple, comme cela que l'on gère les charges de travail de type batch sur la plateforme Amazon Web Services : on construit le serveur à la volée, on traite les données, puis on termine par la destruction du serveur une fois toutes les tâches réalisées.

Pour obtenir ce résultat, je vais poursuivre mes explications avec la plateforme que j'utilise le plus : Amazon Web Services. Voici les options qui s'offrent à vous :

 

1. Construire un serveur via l'API AWS, accessible sous Linux, en ligne de commande

Cette solution vous permettra de demander à un langage de haut niveau d'exécuter la création du serveur puis d'y lancer un script utilisateur qui configurera Tinyproxy. Idem pour la destruction du serveur, commandée par votre langage de programmation une fois que vous n'avez plus besoin du proxy. Les commandes comme exec() en PHP sont alors utilisées pour jouer les commandes de l'API. Sinon, il est possible d'installer un wrapper PHP pour l'API AWS via composer.

 

2. Construire un serveur via Terraform

Terraform est un outil extrêmement puissant quand il est utilisé pour piloter la plateforme AWS. Il permet, à partir de quelques fichiers YAML de décrire le serveur à construire et les commande à lancer pour initialiser Tinyproxy. La destruction du serveur, via une ligne de commande, est aussi simple.
Terraform fonctionne tout aussi bien avec les serveurs EC2 que LightSail chez AWS.
Découvrez le paramètre user data qui vous permet de créer des scripts d'initialisation sur les serveurs EC2 et LightSail.

 

3. Construire un serveur via Terraform et éxécuter une recette SaltStack

En conjonction avec Terraform, vous pouvez utiliser le moteur de configuration de serveur SaltStack, il permet d'abstraire la partie configuration du serveur et d'éviter les blocages de scripts liés à des aspects trop spécifiques de celle-ci. SaltStack a eu la bonne idée de proposer une formule pour Tinyproxy que vous pouvez réutiliser afin d'automatiser les configuration de votre serveur proxy.
J'ai un faible pour cette solution car elle permet de gérer tous les aspects de la configuration d'un serveur proxy de manière abstraite et programmatique. Elle s'interfacera donc très facilement avec des langages comme NodeJS ou PHP.

 

3 - Utiliser une seconde IP sur son serveur

Si vous maîtrisez la gestion cloud de votre serveur, il vous est possible d'ajouter une seconde adresse IP à votre serveur. Vous pourrez ensuite configurer Tinyproxy pour sortir par cette seconde adresse IP. Et vous pourrez demander à l'API de changer cette adresse IP aussi souvent que vous en avez besoin. La seule difficulté que je connais avec ce type de solution est la nécessité de redémarrer le serveur pour lui attacher une seconde adresse IP et de devoir le faire à nouveau à cahque fois que vous changez d'IP. Selon votre utilisation, cela pourra être handicapant ou non, à vous de voir.

 

Configurer GuzzleHTTP pour utiliser un serveur proxy

Si vous travaillerez dans un environnement de développement PHP, vous serez heureux de savoir qu'il existe une interface HTTP pour PHP très simple à prendre en main, il s'agit de GuzzleHTTP. Et pour ceux qui l'utilisent déjà, j'en profiterai juste pour vous rappeler à quel point la mise en place d'un proxy pour vos requêtes HTTP est simple dans ce contexte. Voici comment procéder :

  1. Installer GuzzleHTTP
    composer require guzzlehttp/guzzle
     
  2. Configurer GuzzleHTTP pour utiliser votre passerelle proxy
    require "/var/www/html/netflix-news.com/wp-content/plugins/netflix-news-news-importer/vendor/autoload.php";
    use GuzzleHttp\Client;
    $client = new Client([
          'proxy' => 'http://--adresse IP de votre serveur proxy--:--Port de votre serveur proxy--'
        ]);
    ... Reste de votre code ...
    

 

 

0 commentaires

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Share This