
Amazon Web Services : Groupes de sécurité
La sécurité est l'un des éléments de la configuration de l'infrastructure, souvent négligé. Souvent, les administrateurs se concentrent sur la fourniture de fonctionnalités et la satisfaction des exigences, sans se soucier de sécuriser l'infrastructure contre les attaques, en pensant que tout ira probablement bien. Chez Droptica, nous construisons souvent des sites web d'entreprise sur Drupal pour des banques et d'autres institutions soucieuses de la sécurité, nous n'avons donc pas le luxe de ne pas penser à la sécurité.
Cependant, vous n'avez pas besoin de mécanismes très sophistiqués et de solutions pour assurer une sécurité de base... Voyons cela.
Filtrage du trafic réseau
L'un des moyens de protéger les réseaux et les systèmes contre les intrusions est l'utilisation des pare-feu - des outils pour bloquer les connexions indésirables entrantes et sortantes, et par conséquent refuser les demandes d'accès au réseau ou aux services considérés comme dangereux.
Le type le plus simple de pare-feu est un filtre de paquets qui vérifie les adresses réseau et les ports des paquets afin de déterminer s'ils doivent être refusés ou autorisés à atteindre la machine cible. Dans une telle solution, le pare-feu dispose d'un ensemble de règles qui déterminent le sort du paquet en fonction de la direction de la connexion (en particulier, de quelle adresse il provient et vers quelle adresse il est dirigé), du numéro de port réseau et de son type (par exemple TCP, UDP ou ICMP).
AWS : Groupes de sécurité
Les politiques des Groupes de Sécurité fonctionnent exactement de la même manière qu'un pare-feu de filtrage de paquets et sont utilisées pour contrôler le trafic dans le réseau AWS. Amazon vous permet de définir des règles pour la plupart de leurs produits exposés aux réseaux externes.
Lorsqu'une nouvelle instance EC2 est déployée, l'administrateur lui assigne au moins une politique. Chacune d'elles peut être modifiée à tout moment - toutes les modifications sont appliquées automatiquement et immédiatement.
Amazon vous permet de configurer des politiques pour le trafic entrant et sortant. Voici un exemple de règles pour notre serveur de test.
Configuration des Groupes de Sécurité
Le principal objectif des politiques des Groupes de Sécurité est de rendre disponibles au monde extérieur les services qui le nécessitent. L'exécution de logiciels supplémentaires sur les serveurs (par exemple solr, redis, memcached) est une pratique courante, mais ceux-ci ne doivent pas être accessibles aux utilisateurs. C'est pourquoi il est important de commencer par considérer ce qui doit être visible pour les autres.
Dans le cas d'un serveur web, la politique des ports ouverts pourrait ressembler à cela :
- SSH (22) - si vous souhaitez gérer le serveur à distance (vous pouvez autoriser uniquement le trafic du réseau interne),
- HTTP (80) - pour le trafic non sécurisé;
- HTTPS (443) - pour le trafic sécurisé.
Bien sûr, ce ne sont pas les seuls services. Parfois, il est nécessaire de configurer un serveur de messagerie (SMTP, IMAP) ou une API dédiée (port 8080 et autres). Cependant, il s'agit de la configuration de base recommandée.
Exemple avec Terraform
Il est également bon de suivre l'idée de maintenir l'infrastructure en tant que code - cela facilite et rationalise la gestion de vos serveurs, c'est pourquoi nous utilisons cette approche chez Droptica. Ci-dessous, vous trouverez un exemple de code Terraform utilisé pour gérer les Groupes de Sécurité.
resource "aws_security_group" "web-sg" {
name = "web-sg"
vpc_id = "${aws_vpc.vpc.id}"
description = "Autoriser les connexions WEB entrantes"
tags {
Name = "web-sg"
}
# Autoriser SSH entrant
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# Autoriser HTTP entrant
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# Autoriser HTTPS entrant
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# Autoriser ICMP entrant
ingress {
from_port = -1
to_port = -1
protocol = "icmp"
cidr_blocks = ["0.0.0.0/0"]
}
# Autoriser tout le trafic sortant
egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
}
Au début, nous définissons uniquement les informations de base - le nom, la description et l'identifiant réseau, auxquels la politique donnée sera assignée. Ensuite, nous définissons les filtres (nous avons utilisé les filtres décrits dans la section précédente).
Les valeurs from_port et to_port vous permettent de définir des plages - vous pouvez, par exemple, ouvrir tous les ports de 8000 à 9000. Les sections ingress se réfèrent au trafic entrant et les egress se réfèrent au trafic sortant.
Résumé
Les Groupes de Sécurité ne sont guère une solution ultime qui transformera vos serveurs en forteresses impénétrables, mais ils vous permettent de limiter la visibilité de ce qui ne devrait pas être accessible au public. Attribuer des politiques par défaut à tous les services est une erreur courante commise par les administrateurs novices, ce qui conduit à ouvrir tous les services au public. C'est pourquoi il vaut la peine d'en apprendre plus et de comprendre ce sujet.