Comment pare-feu automatiquement les interfaces de réseau privé DigitalOcean avec Droplan

De Get Docs
Aller à :navigation, rechercher

Introduction

La fonctionnalité de réseau privé de DigitalOcean offre à vos Droplets une interface réseau qui est accessible uniquement aux autres Droplets de la même équipe ou du même compte et située dans le même centre de données.

L'utilitaire droplan peut aider à sécuriser les interfaces réseau privées sur un Droplet en ajoutant des règles de pare-feu iptables qui autorisent uniquement le trafic provenant de vos autres Droplets dans le même centre de données. En installant et en exécutant l'utilitaire sur chaque Droplet, vous pouvez vous assurer que vos systèmes n'accepteront que le trafic local les uns des autres.

Ce guide couvrira l'installation de droplan sur un Droplet individuel, la planification d'une tâche cron pour l'exécuter régulièrement et la garantie que les règles de pare-feu persistent lorsque le Droplet est redémarré ou perd de l'alimentation.

Conditions préalables

Ce guide suppose que vous avez au moins deux droplets Linux dans la même région, chacun configuré avec un utilisateur non root avec des privilèges sudo pour les tâches administratives. Plus précisément, il fournit des instructions pour les versions récentes de Debian, Ubuntu et CentOS. Sur les systèmes CentOS, il désactivera firewalld, vous devez donc savoir qu'il peut remplacer toute configuration de pare-feu existante.

Récupération d'un jeton d'accès personnel en lecture seule

L'utilitaire droplan Afin de demander à l'API une liste de vos Droplets, la commande droplan a besoin d'accéder à un jeton d'accès personnel avec portée de lecture. Vous pouvez récupérer un jeton en accédant au panneau de configuration DigitalOcean, en cliquant sur API dans le menu supérieur, puis en cliquant sur le bouton Générer un nouveau jeton. Entrez un nom descriptif pour le nouveau jeton, dans le champ Nom du jeton, tel que "droplan readonly", et décochez la case Write (Facultatif) :

Cliquez sur Générer un jeton et copiez le jeton résultant sur votre machine locale :

Remarque : Assurez-vous de conserver une copie du jeton, sinon vous devrez en générer un nouveau. Il ne peut pas être récupéré à partir du Panneau de configuration après la première fois qu'il est affiché.


Pour plus de détails sur ce processus et les bases de l'utilisation de l'API, voir Comment utiliser l'API DigitalOcean v2.

Installation de Droplan

Installation des prérequis Debian et Ubuntu

Si vous utilisez Debian ou une distribution dérivée de Debian telle qu'Ubuntu, installez le package unzip en utilisant apt-get :

sudo apt-get install unzip iptables-persistent

Nous aurons besoin de iptables-persistent dans un moment lorsque nous configurerons des règles de pare-feu persistantes. Le programme d'installation vous demandera probablement si vous souhaitez enregistrer les règles de pare-feu actuelles au moment de l'installation. Cela ne devrait pas faire de mal si vous dites oui.

Installation des prérequis CentOS

Si vous utilisez CentOS 7, installez les packages unzip et iptables-services en utilisant yum :

sudo yum install unzip iptables-services

Nous aurons besoin de iptables-services dans un moment lorsque nous configurerons des règles de pare-feu persistantes.

Récupération et extraction d'archives

Visitez la page releases sur le projet GitHub droplan et recherchez une URL pour la dernière version qui prend en charge votre architecture. Copiez l'URL, connectez-vous à l'un de vos Droplets et récupérez le fichier avec wget ou curl :

wget https://github.com/tam7t/droplan/releases/download/v1.0.0/droplan_1.0.0_linux_amd64.zip

Maintenant, utilisez la commande unzip pour extraire le binaire droplan de l'archive de version :

unzip droplan_1.0.0_linux_amd64.zip

Créez un répertoire dans /opt pour droplan, et déplacez-y le binaire :

sudo mkdir /opt/droplan
sudo mv ./droplan /opt/droplan/

Le répertoire /opt est un emplacement standard pour les logiciels installés à partir de sources autres que les référentiels de packages officiels d'une distribution.

Création de règles Iptables

Avec le binaire droplan en place, vous pouvez l'utiliser pour créer des règles. Exécutez la commande sous sudo, en définissant la variable d'environnement DO_KEY sur votre jeton :

sudo DO_KEY=personal_access_token /opt/droplan/droplan

Maintenant, vérifiez vos règles iptables :

sudo iptables -L

En supposant que vous ayez deux autres Droplets dans la même région, vous devriez voir quelque chose comme ceci :

OutputChain INPUT (policy ACCEPT)
target     prot opt source               destination
droplan-peers  all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain droplan-peers (1 references)
target     prot opt source               destination
ACCEPT     all  --  droplet_ip1       anywhere
ACCEPT     all  --  droplet_ip2        anywhere

Pour confirmer que ces règles s'appliquent uniquement à eth1, vous pouvez ajouter l'option -v pour une sortie plus détaillée, qui inclura des interfaces :

sudo iptables -L -v

Règles Iptables persistantes

Pour l'instant, tous vos autres Droplets de la même région peuvent se connecter au système actuel, tandis que le trafic provenant de systèmes que vous ne contrôlez pas est bloqué. Si le système redémarre, cependant, les règles iptables disparaîtront. Il est également probable que vous créerez de nouveaux Droplets (ou supprimerez ceux qui existent) à un moment donné dans le futur. Afin de résoudre ces problèmes, nous nous assurerons que les règles persistent au redémarrage, et planifierons l'exécution régulière de droplan et apporterons les modifications nécessaires au pare-feu.

Règles persistantes sur Debian ou Ubuntu

Les règles de pare-feu sont conservées dans /etc/iptables/rules.v4 (et /etc/iptables/rules.v6 pour les règles ipv6). Vous pouvez générer une nouvelle version de ce fichier à l'aide de la commande iptables-save :

sudo iptables-save | sudo tee /etc/iptables/rules.v4

Règles persistantes sur CentOS 7

Par défaut, CentOS 7 utilise le service firewalld à la place d'iptables. Puisque nous avons déjà installé le package iptables-services ci-dessus, nous pouvons utiliser systemctl pour arrêter ce service et le masquer, en veillant à ce qu'il ne soit pas redémarré :

sudo systemctl stop firewalld
sudo systemctl mask firewalld

Activez maintenant le service iptables :

systemctl enable iptables

Avec le service iptables en place, enregistrez les règles de pare-feu actuelles :

sudo service iptables save

Test de la persistance des règles

Vous souhaiterez peut-être redémarrer le système, vous reconnecter et vérifier que les règles ont persisté. Tout d'abord, redémarrez :

sudo reboot

Maintenant, reconnectez-vous à votre Droplet (cela prendra quelques secondes), et vérifiez les règles :

sudo iptables -L

Planification d'une tâche Cron pour mettre à jour les règles Iptables

Dans une dernière étape, nous nous assurerons que droplan s'exécute périodiquement afin qu'il détecte les changements dans votre collection de Droplets.

Commencez par créer un nouveau script appelé /opt/droplan/refresh.sh, en utilisant nano (ou l'éditeur de votre choix) :

sudo nano /opt/droplan/refresh.sh

Collez ce qui suit en décommentant la ligne appropriée pour votre distribution en supprimant le début # :

/opt/droplan/refresh.sh

#!/usr/bin/env bash

/opt/droplan/droplan

# Uncomment for Centos:
# service iptables save

# Uncomment for Debian or Ubuntu:
# iptables-save > /etc/iptables/rules.v4

Quittez et enregistrez le fichier, puis marquez-le comme exécutable :

sudo chmod +x /opt/droplan/refresh.sh

Ensuite, créez un nouveau fichier sur /etc/cron.d/droplan :

sudo nano /etc/cron.d/droplan

Ajoutez la ligne suivante au fichier afin d'exécuter le script en tant que root toutes les 5 minutes :

crontab

*/5 * * * * root PATH=/sbin:/usr/bin:/bin DO_KEY=personal_access_token /opt/droplan/refresh.sh > /var/log/droplan.log 2>&1

Cela exécutera le script refresh.sh une fois toutes les 5 minutes, comme indiqué par */5 dans le premier champ, et consignera sa sortie la plus récente dans /var/log/droplan.log.

Quittez et enregistrez le fichier. Vous pouvez maintenant utiliser la commande watch, qui affiche la sortie d'une autre commande toutes les quelques secondes, pour vous assurer que le script s'exécute correctement :

sudo watch cat /var/log/droplan.log

Une fois le script exécuté, vous devriez voir une sortie semblable à celle-ci :

Sample CentOS OutputEvery 2.0s: cat droplan.log                      Fri Mar 25 01:14:45 2016

2016/03/25 01:14:02 Added 2 peers to droplan-peers
iptables: Saving firewall rules to /etc/sysconfig/iptables: [  OK  ]

Sur les systèmes dérivés de Debian, systemctl iptables save n'affichera aucune sortie.

Appuyez sur Ctrl-C pour quitter watch.

Remarque : étant donné que l'API est limitée en débit, vous devrez peut-être ajuster la fréquence des mises à jour si vous avez de nombreux Droplets. Vous pouvez en savoir plus sur cron ou l'API elle-même.


Conclusion et prochaines étapes

Maintenant que vous avez configuré le pare-feu sur un seul Droplet, vous devrez répéter ce processus avec le reste de votre infrastructure. Pour plus d'une poignée de Droplets, il serait probablement plus facile d'automatiser ce processus. Si vous utilisez Terraform de Hashicorp pour les systèmes de provisionnement, vous pouvez trouver des exemples de modèles sur le projet Droplan GitHub. Pour un aperçu général des tâches d'automatisation comme celle-ci, voir An Introduction to Configuration Management.

Pour plus de détails sur les pare-feu, voir Qu'est-ce qu'un pare-feu et comment ça marche ?