introduction
DigitalOceanCloud Firewalls fournit un service de pare-feu puissant au niveau du réseau, protégeant vos ressources contre le trafic non autorisé.
Bien que vous puissiez configurer Cloud Firewalls via le panneau de configuration DigitalOcean, lorsque vous devez gérer plusieurs droplets, devez scripter un processus ou préférez travailler à partir du terminal, une interface de ligne de commande peut constituer un meilleur choix.
Dans ce didacticiel, nous allons apprendre à utiliserdoctl
, lesDigitalOcean Command-Line Client officiels, pour créer et gérer les pare-feu Cloud pour un serveur Web.
Conditions préalables
Pour ce tutoriel, vous aurez besoin de:
-
doctl
version 1.7.0 installé et authentifié en suivant lesofficial installation instructions in thedoctl
GitHub repository. (Utilisez la commandedoctl version
pour vérifier la version dedoctl
que vous exécutez.) -
Une clé SSH ajoutée à votre compte DigitalOcean en suivant le tutoriel deHow To Use SSH Keys with DigitalOcean Droplets.
Nous allons créer une image de pile LAMP (Linux, Apache, MySQL, PHP) en un clic exécutant Ubuntu 16.04, dans la régionnyc1, et nous la placerons sur un droplet de 512 Mo. Cependant, avant de commencer ce didacticiel, nous vous recommandons de vous familiariser avecdoctl
et les pare-feu Cloud en lisantHow To Use Doctl, the Official DigitalOcean Command-Line Client etAn Introduction To DigitalOcean Cloud Firewalls.
[[step-1 -—- setting-up-the-web-server]] == Étape 1 - Configuration du serveur Web
Premièrement, nous choisirons une région pour notre Droplet. Nous utiliseronsnyc1 dans ce didacticiel, mais vous pouvez voir toutes les régions et leurs slugs avec la commande suivante:
doctl compute region list
OutputSlug Name Available
nyc1 New York 1 true
sfo1 San Francisco 1 true
ams2 Amsterdam 2 true
sgp1 Singapore 1 true
lon1 London 1 true
nyc3 New York 3 true
ams3 Amsterdam 3 true
fra1 Frankfurt 1 true
tor1 Toronto 1 true
sfo2 San Francisco 2 true
blr1 Bangalore 1 true
Puisque nous ne voulons pas envoyer de mots de passe sur le réseau et que nous voulons réduire la possibilité d'unbrute-force attack, nous sécuriserons notre serveur Web avec une authentification par clé SSH.
Pour créer un Droplet qui inclut une clé SSH,doctl
nécessite l'empreinte de la clé SSH, que vous pouvez obtenir avec la commande:
doctl compute ssh-key list
OutputID Name FingerPrint
9763174 sammy_rsa your_ssh_key_fingerprint
Copiez l'empreinte de la clé SSH que vous souhaitez utiliser avec votre Droplet.
Maintenant, rassemblons tout dans une seule commande qui créera un droplet de 512 Mo nomméweb-1 dans la régionnyc1, en utilisant une image de pile LAMP en un clic exécutant Ubuntu 16.04 avec notre clé SSH.
doctl compute droplet create web-1 \
--region nyc1 \
--image lamp-16-04 \
--ssh-keys your_ssh_key_fingerprint \
--size 512mb
La sortie nous donne une vue d’ensemble du Droplet que nous venons de créer, y compris son ID, son nom, son adresse IPv4, sa mémoire, etc.:
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
52059458 web-1 512 1 20 nyc1 Ubuntu LAMP on 16.04 new
[.note] #Note: Vous devrez attendre quelques minutes pour que le processus d'approvisionnement se termine. Une fois provisionné, le Droplet aura une adresse IPv4 et un état deactive
au lieu denew
.
#
Utilisez la commande suivante pour vérifier l’état de votre Droplet et, s’il est entièrement configuré, notez-le car nous en aurons besoin lors de l’attribution du pare-feu à Droplet à l’étape 2. Ne passez pas cette étape tant que l’état de votre Droplet n’a pas luactive
.
doctl compute droplet list web-1
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
52059458 web-1 203.0.113.1 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
Ensuite, utilisezdoctl
pour vous connecter au Droplet via SSH, en activant votre installation LAMP et en obtenant des instructions supplémentaires sur la préparation de votre serveur pour une utilisation en production. Si vous obtenez un message d'erreurconnection refused
, votre Droplet n'est pas encore prêt. Attendez quelques minutes, puis réexécutez la commandelist
pour vérifier que l’état de votre Droplet est défini suractive
avant de continuer.
doctl compute ssh web-1
Output...
-------------------------------------------------------------------------------
Thank you for using DigitalOcean's LAMP Application.
LAMP has now been enabled. You can access your LAMP instance at:
Your web root is located at /var/www/html and can be seen from
http://203.0.113.1
...
Après avoir configuré le Droplet selon vos besoins, quittez la session SSH.
[environment]
exit
Enfin, pointez votre navigateur Web sur l’adresse IP de Droplet pour vous assurer que la pile LAMP fonctionne correctement. La page d'arrivée par défaut de la pile LAMP DigitalOcean par un clic devrait s'afficher avec le message suivant: «Connectez-vous à votre droplet via SSH pour configurer votre installation LAMP.» Si ce n'est pas le cas, retracez la procédure précédente activé et que vous avez correctement copié l’adresse IP de votre Droplet dans votre navigateur.
Comme nous avons déjà terminé la configuration de LAMP requise pour ce tutoriel, nous sommes prêts à protéger les droplets du trafic non autorisé.
[[step-2 -—- creation-the-firewall-for-the-web-server]] == Étape 2 - Création du pare-feu pour le serveur Web
Pour commencer, nous utiliserons l'ID de droplet que nous avons obtenu de la commandedoctl compute droplet list
à l'étape 1 pour créer un pare-feu cloud nomméweb-firewall
qui autorise les connexions SSH entrantes sur le port22
et toutes les sorties Connexions TCP, UDP et ICMP. Cela nous permettra d’administrer le serveur à partir de la ligne de commande tout en laissant la possibilité à de nombreux services fondamentaux de fonctionner normalement.
Le champprotocol
est obligatoire et doit être défini surtcp
,udp
ouicmp
, et vous devez inclure une valeurports
pour tous les protocoles sauficmp
qui, par sesspecification, n'en a pas besoin.
Le champaddress
spécifie les adresses IP autorisées à accéder à un port donné. Si vous souhaitez autoriser le trafic de toutes les adresses IPv4, utilisez0:0:0:0/0
, et si vous souhaitez autoriser le trafic de toutes les adresses IPv6, utilisez::0/0
.
Enfin, chaque pare-feu que vous créez doit avoir au moins une règle, sous l'indicateur--inbound-rules
ou--outbound-rules
, et toutes les valeurs doivent être saisies sous forme de listeskey:value
séparées par des virgules. Utilisez une chaîne entre guillemets contenant des valeurs séparées par des espaces pour plusieurs règles.
Maintenant, utilisez la commandecreate
pour créer le pare-feu:
doctl compute firewall create --name web-firewall \
--droplet-ids your_droplet_id \
--inbound-rules "protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0" \
--outbound-rules "protocol:icmp,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:all,address:0.0.0.0/0,address:::/0 protocol:udp,ports:all,address:0.0.0.0/0,address:::/0"
La sortie contient un aperçu de base du nouveau Cloud Firewall. Notez l'ID de Cloud Firewall, car vous l'utiliserez à l'étape 3 pour ajouter des règles supplémentaires au pare-feu.
OutputID Name Status Created At Inbound Rules Outbound Rules Droplet IDs Tags Pending Changes
c7b39b43-4fcc-4594-88f2-160a64aaddd4 web-firewall waiting 2017-06-17T21:20:38Z protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0 protocol:icmp,ports:0,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:0,address:0.0.0.0/0,address:::/0 protocol:udp,ports:0,address:0.0.0.0/0,address:::/0 your_droplet_id droplet_id:your_droplet_id,removing:false,status:waiting
Si vous avez besoin de spécifier une plage de ports, utilisez le format suivant:
--inbound-rules "protocol:tcp,ports:8000-8080,address:0.0.0.0/0,address:::/0"
Vous pouvez également utiliser l'indicateurdroplet_id
au lieu de l'indicateuraddress
. Cela peut être particulièrement utile dans les configurations impliquant plusieurs Droplets communiquant entre elles.
--inbound-rules "protocol:tcp,ports:8000-8080,droplet_id:your_droplet_id"
Et, vous pouvez combiner plusieurs champsaddress
oudroplet_id
en une seule règle, comme:
--inbound-rules "protocol:tcp,ports:8000-8080,droplet_id:your_first_droplet_id,droplet_id:your_second_droplet_id"
À ce stade, vérifiez que Cloud Firewall fonctionne correctement en indiquant votre navigateur Web à l’adresse IP de Droplet. Vous devriez voir un message indiquant que le site n'est plus accessible. Si ce n'est pas le cas, revérifiez le résultat de la commandecreate
précédente pour vous assurer que vous n'avez manqué aucun message d'erreur.
Enfin, même si notre règle entrante devrait déjà autoriser SSH, nous la vérifierons à l'aide dedoctl
.
doctl compute ssh web-1
Si vous ne parvenez pas à vous connecter au Droplet, la série de didacticielsHow To Troubleshoot SSH vous aidera à diagnostiquer le problème.
Une fois que vous êtes connecté au Droplet, quittez la session SSH:
[environment]
exit
Comme nous avons maintenant vérifié que le pare-feu Cloud fonctionne correctement, nous allons ajouter une règle supplémentaire pour autoriser le trafic entrant sur le serveur Web.
[[step-3 -—- ajoutant-additional-rules]] == Étape 3 - Ajout de règles supplémentaires
En utilisant l'ID de pare-feu que nous avons obtenu de la commandedoctl compute firewall create
à l'étape 2, nous allons maintenant ajouter une règle pour autoriser le trafic TCP entrant pour Apache sur le port80
.
Nous utiliserons la commandeadd-rules
, qui nécessite un ID de pare-feu et au moins une règle. Les règles sont spécifiées à l'aide des indicateurs--outbound-rules
et--inbound-rules
, comme à l'étape 2.
doctl compute firewall add-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
--inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0"
Si vous avez besoin de HTTPS, autorisez le trafic TCP entrant sur le port443
.
doctl compute firewall add-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
--inbound-rules "protocol:tcp,ports:443,address:0.0.0.0/0,address:::/0"
En cas de succès, cette commande ne produira aucune sortie. Si vous recevez un message d'erreur, suivez les instructions à l'écran pour diagnostiquer le problème.
Maintenant, re-pointez votre navigateur Web sur l’adresse IP de votre Droplet. Cette fois, vous devriez voir la page d'arrivée par défaut de la pile LAMP DigitalOcean par un clic. Si ce n'est pas le cas, vérifiez que vous avez bien copié votre adresse IP dans votre navigateur Web, puis tracez à nouveau les étapes précédentes.
Si vous souhaitez protéger d'autres serveurs Web, passez à l'étape 4. Sinon, passez à l’étape 5 où nous allons gérer Cloud Firewalls avec des balises.
[[facultatif-étape-4 -—- ajout de gouttelettes au pare-feu]] == (facultatif) Étape 4 - Ajout de gouttelettes au pare-feu
Si vous possédez plusieurs Droplets, vous pouvez appliquer le même pare-feu Cloud à chacun d'eux.
Utilisez la commandeadd-droplets
pour ajouter des droplets supplémentaires à un pare-feu cloud. Cette commande nécessite un ID de pare-feu cloud comme argument et utilise l'indicateurdroplet-ids
pour déterminer à quels droplets appliquer le pare-feu.
Si vous ne connaissez pas l'ID du pare-feu Cloud, utilisez la commandelist
:
doctl compute firewall list
OutputID Name Status Created At Inbound Rules Outbound Rules Droplet IDs Tags Pending Changes
c7b39b43-4fcc-4594-88f2-160a64aaddd4 web-firewall succeeded 2017-06-17T21:20:38Z protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0 protocol:icmp,ports:0,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:0,address:0.0.0.0/0,address:::/0 protocol:udp,ports:0,address:0.0.0.0/0,address:::/0 52059458
Vous pouvez également utiliser la commandelist
pour obtenir les ID des droplets:
doctl compute droplet list
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
51146959 test-1 203.0.113.1 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
52059458 web-1 203.0.113.2 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
À l'aide de la commandedoctl
suivante, nous allons ajouter le droplettest-1
au pare-feuweb-servers
, qui a un ID dec7b39b43-4fcc-4594-88f2-160a64aaddd4
:
doctl compute firewall add-droplets c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
--droplet-ids 51146959
Si vous ne recevez aucune sortie, la commande a réussi. Si vous recevez un message d'erreur, suivez les instructions à l'écran pour diagnostiquer le problème.
Et, si vous souhaitez ajouter plusieurs gouttelettes à la fois, séparez-les en utilisant des virgules. Notez qu'il n'y a pas d'espace entre deux ID:
--droplet-ids 51146959,52059458
Maintenant, utilisons les balises pour faciliter la gestion de Cloud Firewall.
[[step-5 -—- using-tags]] == Étape 5 - Utilisation des tags
À ce stade, nous avons ajouté des droplets individuels au pare-feu Cloud, mais ces pare-feu prennent également en charge les balises pour faciliter la gestion de plusieurs ressources. Pour mieux comprendre le fonctionnement des balises, consultezHow To Tag DigitalOcean Droplets.
Au cours de cette étape, nous allons étiqueter les gouttelettes, ajouter des balises au pare-feu Cloud, puis supprimer les ID de gouttelettes individuels du pare-feu afin de sécuriser les gouttelettes au moyen de balises.
Avant de pouvoir ajouter un Tag à un Droplet en utilisantdoctl
, nous devons d'abord créer le Tag avec la commandetag create
:
doctl compute tag create web-servers
OutputName Droplet Count
web-servers 0
Une fois la balise créée, appliquez-la au droplet à l'aide de la commandedroplet tag
. Cette commande prend l'ID de droplet comme argument et obtient le nom de la balise à partir de l'indicateur--tag-name
.
doctl compute droplet tag 52059458 \
--tag-name "web-servers"
Si vous souhaitez sécuriser plusieurs droplets avec un pare-feu Cloud, répétez la commande précédente pour chaque droplet.
Ensuite, ajoutez le tag au Cloud Firewall avec la commandeadd-tags
, qui prend l'ID du pare-feu comme argument et obtient la liste des noms de tag à utiliser à partir de l'indicateur--tag-names
:
doctl compute firewall add-tags c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
--tag-names web-servers
Si vous ne recevez aucune sortie, la commande a réussi. Si vous recevez un message d'erreur, suivez les instructions à l'écran pour diagnostiquer le problème.
Et, si vous devez ajouter plusieurs balises, fournissez-les sous forme de liste séparée par des virgules:
--tag-names web-servers,backend-servers
Enfin, nous pouvons supprimer l'ID du droplet du pare-feu, car le droplet fait partie du tagweb-servers
, et ce tag entier est désormais protégé.
doctl compute firewall remove-droplets c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
--droplet-ids 52059458
Répétez l'étape précédente pour chaque Droplet que vous souhaitez sécuriser par balise uniquement.
[.Attention]##
Warning: La suppression des Droplets non marqués du Cloud Firewall laisse les Droplets sans protection contre le trafic non autorisé.
Vous avez maintenant un pare-feu Cloud entièrement configuré qui protégera votre serveur Web du trafic non autorisé. Si vous souhaitez également supprimer une règle du pare-feu, passez à l'étape 6.
[[optional-step-6 -—- remove-rules-from-the-firewall]] == (Facultatif) Étape 6 - Suppression de règles du pare-feu
Si vous souhaitez supprimer une règle d'un pare-feu cloud, utilisez la commanderemove-rules
.
La commanderemove-rules
prend un ID de pare-feu comme argument et les règles sont spécifiées à l'aide des indicateurs--outbound-rules
et--inbound-rules
. Notez que la règle spécifiée doit être exactement la même que celle utilisée lors de la création.
doctl compute firewall remove-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
--inbound-rules protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0
Si vous ne recevez aucune sortie, la commande a réussi. Si vous recevez un message d'erreur, suivez les instructions à l'écran pour diagnostiquer le problème.
Conclusion
Dans ce didacticiel, nous avons utilisédoctl
pour créer des pare-feu Cloud DigitalOcean, ajouter des règles à ces pare-feu, ajouter des gouttelettes supplémentaires aux pare-feu, gérer les pare-feu avec des balises et supprimer des règles des pare-feu.
Pour découvrir d'autres façons d'utiliser les pare-feu Cloud, consultezHow To Organize DigitalOcean Cloud Firewalls.
Et, pour en savoir plus sur le dépannage des pare-feu cloud, visitezHow To Troubleshoot DigitalOcean Firewalls.