Introducció a AWS WAF

AWS WAF (Web Application Firewall) és un servei que ajuda a protegir les aplicacions web contra atacs comuns que poden afectar la disponibilitat, comprometre la seguretat o consumir recursos excessius. AWS WAF permet definir regles personalitzades per filtrar el trànsit web entrant i bloquejar peticions malicioses.

Característiques clau d'AWS WAF

  • Protecció contra atacs comuns: Protegeix contra atacs com SQL injection, cross-site scripting (XSS) i altres vulnerabilitats de les aplicacions web.
  • Regles personalitzades: Permet crear regles personalitzades per filtrar el trànsit web segons les necessitats específiques de l'aplicació.
  • Integració amb altres serveis d'AWS: Es pot integrar amb Amazon CloudFront, Application Load Balancer (ALB) i API Gateway per proporcionar protecció a les aplicacions web.
  • Monitoratge i mètriques: Proporciona mètriques detallades i registres d'activitat per ajudar a monitoritzar i analitzar el trànsit web.

Configuració d'AWS WAF

Pas 1: Crear un Web ACL

Un Web ACL (Access Control List) és un conjunt de regles que defineixen com AWS WAF ha de filtrar el trànsit web. Per crear un Web ACL:

  1. Accedeix a la consola de gestió d'AWS.
  2. Navega a AWS WAF & Shield.
  3. Selecciona Create web ACL.
  4. Proporciona un nom per al Web ACL i selecciona la regió.
  5. Selecciona el tipus de recurs que vols protegir (CloudFront, ALB, API Gateway).
  6. Defineix les regles que vols aplicar.

Pas 2: Definir regles

Les regles d'AWS WAF es poden crear utilitzant condicions predefinides o personalitzades. Algunes de les condicions predefinides inclouen:

  • IP match conditions: Permet bloquejar o permetre trànsit des de determinades adreces IP.
  • String match conditions: Permet filtrar peticions que continguin cadenes de text específiques.
  • Size constraint conditions: Permet filtrar peticions basades en la mida de certs elements (com el cos de la petició).

Exemple de creació d'una regla

import boto3

# Crear un client d'AWS WAF
waf_client = boto3.client('waf')

# Crear una condició de coincidència d'IP
ip_set = waf_client.create_ip_set(
    Name='MyIPSet',
    ChangeToken=waf_client.get_change_token()['ChangeToken'],
    IPSetDescriptors=[
        {
            'Type': 'IPV4',
            'Value': '192.0.2.0/24'
        },
    ]
)

# Crear una regla que utilitzi la condició de coincidència d'IP
rule = waf_client.create_rule(
    Name='MyIPMatchRule',
    MetricName='MyIPMatchRuleMetric',
    ChangeToken=waf_client.get_change_token()['ChangeToken'],
    Predicates=[
        {
            'Negated': False,
            'Type': 'IPMatch',
            'DataId': ip_set['IPSet']['IPSetId']
        },
    ]
)

# Afegir la regla al Web ACL
web_acl = waf_client.create_web_acl(
    Name='MyWebACL',
    MetricName='MyWebACLMetric',
    DefaultAction={'Type': 'ALLOW'},
    ChangeToken=waf_client.get_change_token()['ChangeToken'],
    Rules=[
        {
            'Action': {'Type': 'BLOCK'},
            'Priority': 1,
            'RuleId': rule['Rule']['RuleId']
        },
    ]
)

Pas 3: Associar el Web ACL amb un recurs

Després de crear el Web ACL i definir les regles, has d'associar-lo amb el recurs que vols protegir (per exemple, un CloudFront distribution o un Application Load Balancer).

  1. Navega a la consola del recurs (per exemple, CloudFront).
  2. Selecciona el recurs que vols protegir.
  3. A la configuració del recurs, selecciona el Web ACL que has creat.

Exercici pràctic

Objectiu

Configurar AWS WAF per protegir una aplicació web contra atacs de SQL injection.

Passos

  1. Crear una condició de coincidència de SQL injection:

    • A la consola d'AWS WAF, crea una nova condició de coincidència de SQL injection.
    • Defineix els camps de la petició que vols inspeccionar (per exemple, el cos de la petició).
  2. Crear una regla que utilitzi la condició de coincidència de SQL injection:

    • Crea una nova regla a AWS WAF.
    • Afegeix la condició de coincidència de SQL injection a la regla.
  3. Crear un Web ACL i afegir la regla:

    • Crea un nou Web ACL.
    • Afegeix la regla de SQL injection al Web ACL amb una acció de bloqueig.
  4. Associar el Web ACL amb un recurs:

    • Associa el Web ACL amb el recurs que vols protegir (per exemple, un CloudFront distribution).

Solució

import boto3

# Crear un client d'AWS WAF
waf_client = boto3.client('waf')

# Crear una condició de coincidència de SQL injection
sql_injection_set = waf_client.create_sql_injection_match_set(
    Name='MySQLInjectionSet',
    ChangeToken=waf_client.get_change_token()['ChangeToken'],
    SqlInjectionMatchTuples=[
        {
            'FieldToMatch': {
                'Type': 'BODY'
            },
            'TextTransformation': 'URL_DECODE'
        },
    ]
)

# Crear una regla que utilitzi la condició de coincidència de SQL injection
rule = waf_client.create_rule(
    Name='MySQLInjectionRule',
    MetricName='MySQLInjectionRuleMetric',
    ChangeToken=waf_client.get_change_token()['ChangeToken'],
    Predicates=[
        {
            'Negated': False,
            'Type': 'SqlInjectionMatch',
            'DataId': sql_injection_set['SqlInjectionMatchSet']['SqlInjectionMatchSetId']
        },
    ]
)

# Crear un Web ACL i afegir la regla
web_acl = waf_client.create_web_acl(
    Name='MyWebACL',
    MetricName='MyWebACLMetric',
    DefaultAction={'Type': 'ALLOW'},
    ChangeToken=waf_client.get_change_token()['ChangeToken'],
    Rules=[
        {
            'Action': {'Type': 'BLOCK'},
            'Priority': 1,
            'RuleId': rule['Rule']['RuleId']
        },
    ]
)

Resum

En aquesta secció, hem après què és AWS WAF i com pot ajudar a protegir les aplicacions web contra atacs comuns. Hem vist com configurar un Web ACL, definir regles personalitzades i associar el Web ACL amb un recurs. També hem realitzat un exercici pràctic per configurar AWS WAF per protegir una aplicació web contra atacs de SQL injection. Amb aquests coneixements, estàs preparat per començar a utilitzar AWS WAF per millorar la seguretat de les teves aplicacions web.

© Copyright 2024. Tots els drets reservats