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

introduction

La fonction de réseau privé de DigitalOcean offre à vos gouttelettes une interface réseau qui est uniquement accessible aux autres gouttelettes de la même équipe ou du même compte et situés 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 n’autorisent que 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 couvre l’installation de + droplan + sur un Droplet individuel, la planification d’un travail + cron + pour l’exécuter régulièrement, et l’assurance que les règles de pare-feu persistent lors du redémarrage ou de la perte de puissance de Droplet.

Conditions préalables

Ce guide suppose que vous avez plusieurs droplets Linux dans la même région, chacun étant configuré avec un utilisateur non root avec les privilèges + sudo + pour les tâches administratives. Plus précisément, il fournit des instructions pour les dernières versions 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 gouttelettes, la commande + droplan + a besoin d’accéder à un * jeton d’accès personnel * avec une portée en lecture. Vous pouvez récupérer un jeton en accédant au panneau de configuration de DigitalOcean, en cliquant sur * API * dans le menu du haut, 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 en lecture seule», puis décochez la case * Écrire (facultatif) *:

image: https: //assets.digitalocean.com/articles/droplan/enter_name_small.png [Générer un nouveau jeton]

Cliquez sur * Générer le jeton * et copiez le jeton résultant sur votre ordinateur local:

image: https: //assets.digitalocean.com/articles/droplan/display_token_small.png [jetons d’accès personnel]

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

Installer Droplan

Installer les prérequis de Debian et Ubuntu

Si vous êtes sur Debian ou sur une distribution dérivée de Debian telle que Ubuntu, installez le paquetage + unzip + en utilisant + apt-get +:

sudo apt-get install unzip iptables-persistent

Nous aurons besoin de + iptables-persistent + à un moment où nous configurons des règles de pare-feu persistantes. Le programme d’installation vous demandera probablement si vous souhaitez enregistrer les règles de pare-feu en vigueur 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 paquets + unzip et` + iptables-services` en utilisant + yum:

sudo yum install unzip iptables-services

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

Récupérer et extraire des archives

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

wget https://github.com/tam7t/droplan/releases/download//

Maintenant, utilisez la commande + unzip + pour extraire le binaire + droplan + de l’archive de publication:

unzip

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

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 paquets officiels d’une distribution.

Créer des 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= /opt/droplan/droplan

Maintenant, vérifiez vos règles iptables:

sudo iptables -L

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

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  --         anywhere
ACCEPT     all  --          anywhere

Pour confirmer que ces règles ne sont appliquées qu’à * 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 le moment, toutes vos autres gouttelettes de la même région peuvent se connecter au système actuel, tandis que le trafic des 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éiez de nouvelles gouttelettes (ou supprimiez celles existantes) à un moment donné dans l’avenir. Pour faire face à ces problèmes, nous veillerons à ce que les règles persistent au redémarrage, et planifions l’exécution régulière de + droplan + et apportons 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 en utilisant 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 de iptables. Puisque nous avons déjà installé le paquet + 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, sauvegardez 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’un travail périodique pour mettre à jour les règles Iptables

Enfin, nous nous assurerons que + droplan + est exécuté périodiquement afin de détecter les modifications dans votre collection de gouttelettes.

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

sudo nano /opt/droplan/refresh.sh

Collez ce qui suit, en supprimant la mise en commentaire de la ligne appropriée pour votre distribution en supprimant le signe ++ initial:

/opt/droplan/refresh.sh

#!/usr/bin/env bash

/opt/droplan/droplan

# Uncomment for Centos:


# Uncomment for Debian or Ubuntu:

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

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

Ensuite, créez un nouveau fichier dans + / 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 * racine * toutes les 5 minutes:

crontab

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

Ceci exécutera le script + refresh.sh + toutes les 5 minutes, comme indiqué par le signe + * / 5 + dans le premier champ, et enregistrera 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 le résultat 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 ressemblant à ceci:

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 + ne va afficher aucune sortie.

Appuyez sur * Ctrl-C * pour quitter + watch.

Conclusion et prochaines étapes

Maintenant que vous avez configuré le pare-feu sur un seul Droplet, vous souhaiterez répéter ce processus avec le reste de votre infrastructure. Pour plus d’une poignée de gouttelettes, il serait probablement plus facile d’automatiser ce processus. Si vous utilisez les Terraform de Hashicorp pour les systèmes d’approvisionnement, vous pouvez trouver des modèles sur le Droplan GitHub. projet. Pour un aperçu général de l’automatisation de tâches telles que celle-ci, voir An Introduction à la gestion de la configuration.

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