Comment protéger mon environnement Elastic Beanstalk contre les attaques d'hôtes indésirables connus ?
Date de la dernière mise à jour : 28/05/2020
Mes instances AWS Elastic Beanstalk reçoivent des demandes d'un nom d'hôte indésirable. Comment puis-je empêcher mes instances Elastic Beanstalk d'obtenir des demandes de ce nom d'hôte ?
Brève description
Dans un environnement Elastic Beanstalk avec un équilibreur de charge d’application, vous pouvez utiliser AWS WAF comme ressource personnalisée pour protéger vos instances contre les attaques de noms d'hôte indésirables.
Pour bloquer votre environnement Elastic Beanstalk contre les noms d'hôte indésirables, suivez les étapes de l'une des sections suivantes :
- Bloquer un nom d'hôte
- Bloquer plusieurs noms d'hôte
Résolution
Bloquer un nom d'hôte
1. Créez un fichier de configuration waf.config dans votre répertoire .ebextensions.
2. Mettez à jour le fichier waf.config en vous reportant à l'exemple suivant. Veillez à remplacer BlockedHost1 par le nom d'hôte que vous souhaitez bloquer de votre environnement Elastic Beanstalk.
option_settings:
aws:elasticbeanstalk:environment:
LoadBalancerType: application
aws:elasticbeanstalk:customoption:
BlockedHost1: 'exampletoblock.com'
Resources:
BlockedHostnames:
Type: "AWS::WAFv2::RegexPatternSet"
Properties:
Description: 'List of Hostnames to be block by WebACL'
Name: BlockedHostsSet
RegularExpressionList:
- { "Fn::GetOptionSetting" : {"OptionName" : "BlockedHost1" }}
Scope: REGIONAL
WafAcl:
Type: "AWS::WAFv2::WebACL"
Properties:
Description: "Web ACL to Block requests from unknown hosts on AWSEBV2LoadBalancer"
Name: "BlockHostACL"
Scope: REGIONAL
DefaultAction:
Allow: {}
VisibilityConfig:
SampledRequestsEnabled: true
CloudWatchMetricsEnabled: true
MetricName: BlockHostACLMetric
Rules:
- Name: BlockedHostsRule
Priority: 1
Action:
Block: {}
VisibilityConfig:
SampledRequestsEnabled: true
CloudWatchMetricsEnabled: true
MetricName: UnknownHostRule1
Statement:
RegexPatternSetReferenceStatement:
Arn: '`{ "Fn::GetAtt" : ["BlockedHostnames", "Arn" ]}`'
FieldToMatch:
SingleHeader:
Name: Host
TextTransformations:
- Priority: 0
Type: NONE
WebACLAssociation:
Type: AWS::WAFv2::WebACLAssociation
Properties:
ResourceArn: '`{ "Ref" : "AWSEBV2LoadBalancer" }`'
WebACLArn: '`{ "Fn::GetAtt" : ["WafAcl", "Arn" ]}`'
3. Créez ou mettez à jour votre environnement Elastic Beanstalk avec votre fichier waf.config de l'étape 2.
Important : si vous exécutez votre fichier waf.config sur un environnement Elastic Beanstalk existant qui n'a pas d'équilibreur de charge d’application, vous obtenez une erreur. Vous recevez l'erreur, car le type d'équilibreur de charge peut être défini uniquement lors de la création de l'environnement. Pour plus d'informations, consultez Configuration d'un équilibreur de charge d'application. Vous pouvez modifier le type de votre équilibreur de charge avec un déploiement bleu/vert.
4. Pour confirmer que BlockedHost1 ne peut pas envoyer de demandes à votre environnement Elastic Beanstalk, ouvrez un terminal, puis exécutez la commande suivante pour simuler une demande provenant de exampletoblock.com.
$ curl -I -H 'host: exampletoblock.com' http://YOUR-ENV-NAME.YOUR-ENV-ID.AWS-REGION.elasticbeanstalk.com
Remarque : remplacez exampletoblock.com par le nom d'hôte configuré sur waf.config que vous souhaitez bloquer. Remplacez l'URL de la commande par l'URL de votre environnement Elastic Beanstalk.
Si le nom d'hôte est bloqué, vous obtenez une sortie similaire à ce qui suit :
> HTTP/1.1 403 Forbidden
Server: awselb/2.0
Date: Mon, 20 Apr 2020 17:31:14 GMT
Content-Type: text/html
Content-Length: 134
Connection: keep-alive
5. Pour simuler une demande normale, exécutez la commande suivante :
$ curl -I http://ENV-NAME.ENV-ID.eu-west-1.elasticbeanstalk.com
Si la demande aboutit, vous voyez un code de statut 200 réussi et recevez une sortie similaire à ce qui suit :
> HTTP/1.1 200 OK
Date: Mon, 20 Apr 2020 17:38:04 GMT
Content-Type: text/html
Content-Length: 3352
Connection: keep-alive
Server: nginx/1.16.1
Bloquer plusieurs noms d'hôte
Vous pouvez bloquer plusieurs noms d'hôte en ajoutant les noms d'hôte à une liste de contrôle d'accès web (ACL web) qui utilise RegexPatternSet.
Dans votre fichier waf.config ajoutez des noms d'hôte supplémentaires en tant qu'options personnalisées dans la liste RegularExpressionList. Consultez l'exemple suivant :
option_settings:
aws:elasticbeanstalk:environment:
LoadBalancerType: application
aws:elasticbeanstalk:customoption:
BlockedHost1: 'exampletoblock.com'
BlockedHost2: 'anothertoblock.com'
Resources:
BlockedHostnames:
Type: "AWS::WAFv2::RegexPatternSet"
Properties:
Description: 'List of Hostnames to be block by WebACL'
Name: BlockedHostsSet
RegularExpressionList:
- { "Fn::GetOptionSetting" : {"OptionName" : "BlockedHost1" }}
- { "Fn::GetOptionSetting" : {"OptionName" : "BlockedHost2" }}
Scope: REGIONAL
Informations connexes
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?