From 279bd687180c9eb1739a01ee816372e1e3f1eed4 Mon Sep 17 00:00:00 2001 From: Jan Helak Date: Thu, 5 Dec 2024 14:59:32 +0100 Subject: [PATCH] adding materials for shield and WAF --- notatki/md/09_shield_waf.md | 16 ++++++++++- skrypty/create-alb-in-vpc.sh | 53 ++++++++++++++++++++++++++++++++++++ skrypty/create-ec2-in-vpc.sh | 3 ++ zadania.md | 12 +++++++- 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 skrypty/create-alb-in-vpc.sh diff --git a/notatki/md/09_shield_waf.md b/notatki/md/09_shield_waf.md index 9352b87..e9b089d 100644 --- a/notatki/md/09_shield_waf.md +++ b/notatki/md/09_shield_waf.md @@ -5,6 +5,7 @@ backgroundColor: #fff backgroundImage: url('img/hero-background.svg') --- +#
# :shield: AWS Shield :shield: # :shield: AWS WAF :shield: @@ -14,4 +15,17 @@ backgroundImage: url('img/hero-background.svg') - chrona obejmuje też standardowe ataki warstwy 3 i 4 modelu OSI; - wersja podstawowa (Standard) jest dostępna bezpłatnie; - wersja rozszerzona (Advanced) pozwala na ataki na warstwę 7 modelu OSI; oferuje też dodatkowe narzędzia ochronne i monitorujące; -- wersja rozszerzona chroni następujące usługi: [lista](https://docs.aws.amazon.com/waf/latest/developerguide/ddos-protections-by-resource-type.html) \ No newline at end of file +- wersja rozszerzona chroni następujące usługi: [lista](https://docs.aws.amazon.com/waf/latest/developerguide/ddos-protections-by-resource-type.html) + +--- + +# WAF +- [AWS WAF](https://aws.amazon.com/waf/) (*Web Application Firewall*) - jedna z najbardziej kompleksowych usług bezpieczeństwa; Można ją stosować na następujących zasobach: [lista](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html); +- usługa pozwala na definiowanie własnych reguł bezpieczeństwa, bądź też korzystania z gotowych szablonów; +--- +# WAF +Wybrane funkcje: +- pozwala na filtrowanie ruchu na poziomie warstwy 7 modelu OSI na podstawie adresu IP, nagłówków HTTP, URI, treści zapytania; +- filtruje dostęp botów +- pozwala ustawić limity dostępu do zasobów - tzw. *rate limits*; +- obsługa CAPTCHA; \ No newline at end of file diff --git a/skrypty/create-alb-in-vpc.sh b/skrypty/create-alb-in-vpc.sh new file mode 100644 index 0000000..709ff67 --- /dev/null +++ b/skrypty/create-alb-in-vpc.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Set variables +REGION="us-east-1" +VPC_NAME="uam-bwc-vpc1" +PUBLIC_SUBNET1_NAME="uam-bwc-public-subnet1" +PUBLIC_SUBNET2_NAME="uam-bwc-public-subnet2" +SECURITY_GROUP_NAME="uam-bwc-sg" +TARGET_GROUP_NAME="uam-bwc-tg" +ALB_NAME="uam-bwc-alb" +LISTENER_NAME="uam-bwc-listener" +INSTANCE1_NAME="uam-bwc-httpd1" +INSTANCE2_NAME="uam-bwc-httpd2" + +# Get VPC ID +VPC_ID=$(aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$VPC_NAME" --region $REGION --query 'Vpcs[0].VpcId' --output text) +echo "Found VPC ID: $VPC_ID for VPC Name: $VPC_NAME" + +# Get Public Subnet IDs +PUBLIC_SUBNET1_ID=$(aws ec2 describe-subnets --filters "Name=tag:Name,Values=$PUBLIC_SUBNET1_NAME" --region $REGION --query 'Subnets[0].SubnetId' --output text) +echo "Found Public Subnet 1 ID: $PUBLIC_SUBNET1_ID for Subnet Name: $PUBLIC_SUBNET1_NAME" + +PUBLIC_SUBNET2_ID=$(aws ec2 describe-subnets --filters "Name=tag:Name,Values=$PUBLIC_SUBNET2_NAME" --region $REGION --query 'Subnets[0].SubnetId' --output text) +echo "Found Public Subnet 2 ID: $PUBLIC_SUBNET2_ID for Subnet Name: $PUBLIC_SUBNET2_NAME" + +# Get Security Group ID +SG_ID=$(aws ec2 describe-security-groups --filters "Name=group-name,Values=$SECURITY_GROUP_NAME" --region $REGION --query 'SecurityGroups[0].GroupId' --output text) +echo "Found Security Group ID: $SG_ID for Security Group Name: $SECURITY_GROUP_NAME" + +# Get EC2 Instance IDs +INSTANCE1_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=$INSTANCE1_NAME" --region $REGION --query 'Reservations[0].Instances[0].InstanceId' --output text) +echo "Found EC2 Instance 1 ID: $INSTANCE1_ID for Instance Name: $INSTANCE1_NAME" + +INSTANCE2_ID=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=$INSTANCE2_NAME" --region $REGION --query 'Reservations[0].Instances[0].InstanceId' --output text) +echo "Found EC2 Instance 2 ID: $INSTANCE2_ID for Instance Name: $INSTANCE2_NAME" + +# Create ALB +ALB_ARN=$(aws elbv2 create-load-balancer --name $ALB_NAME --subnets $PUBLIC_SUBNET1_ID $PUBLIC_SUBNET2_ID --security-groups $SG_ID --region $REGION --query 'LoadBalancers[0].LoadBalancerArn' --output text) +echo "Created ALB: $ALB_ARN with name $ALB_NAME" + +# Create Target Group +TARGET_GROUP_ARN=$(aws elbv2 create-target-group --name $TARGET_GROUP_NAME --protocol HTTP --port 80 --vpc-id $VPC_ID --region $REGION --query 'TargetGroups[0].TargetGroupArn' --output text) +echo "Created Target Group: $TARGET_GROUP_ARN with name $TARGET_GROUP_NAME" + +# Register Targets +aws elbv2 register-targets --target-group-arn $TARGET_GROUP_ARN --targets Id=$INSTANCE1_ID Id=$INSTANCE2_ID --region $REGION +echo "Registered EC2 instances with Target Group" + +# Create Listener +LISTENER_ARN=$(aws elbv2 create-listener --load-balancer-arn $ALB_ARN --protocol HTTP --port 80 --default-actions Type=forward,TargetGroupArn=$TARGET_GROUP_ARN --region $REGION --query 'Listeners[0].ListenerArn' --output text) +echo "Created Listener: $LISTENER_ARN on port 80" + +echo "ALB setup complete" \ No newline at end of file diff --git a/skrypty/create-ec2-in-vpc.sh b/skrypty/create-ec2-in-vpc.sh index 525fa69..3c29bf9 100644 --- a/skrypty/create-ec2-in-vpc.sh +++ b/skrypty/create-ec2-in-vpc.sh @@ -41,8 +41,11 @@ USER_DATA=$(cat < /var/www/html/index.html +echo "Page to secure" > /var/www/html/secure.html +echo "Login Page!" > /var/www/html/login.html EOF ) diff --git a/zadania.md b/zadania.md index 0f85139..bbc4cc9 100644 --- a/zadania.md +++ b/zadania.md @@ -95,7 +95,17 @@ Content-Security-Policy-Report-Only: default-src 'none'; form-action 'none'; fra 4. Zapoznaj się z [AWS Lambda @ Edge](https://aws.amazon.com/lambda/edge/) oraz [CloudFront Functions](https://aws.amazon.com/blogs/aws/introducing-cloudfront-functions-run-your-code-at-the-edge-with-low-latency-at-any-scale/). ## Shield + WAF -WIP +1. Przygotuj ALB we własnym VPC za pomocą skryptów: +- [create-vpc.sh](skrypty/create-vpc.sh) +- [create-ec2-with-http.sh](skrypty/create-ec2-with-http.sh) +- [create-alb-in-vpc.sh](skrypty/create-alb-in-vpc.sh) +2. Skonfiguruj usługę AWS WAF dla ALB. Przygotuj własne reguły dla WAF, które będzie blokowały dostęp do strony `/secure.html` na podstawie + - URI + - query string + - CATPCHA +3. Dodaj regułę WAF, która ustawi rate limit dla dostępu do strony `/login.html`. + +2. Zapoznaj się z usługą [AWS Shield](https://aws.amazon.com/shield/) ## IAM 1. Przygotuj nową maszynę EC2, do której dostęp będzie możliwy z konsoli AWS.