Salta al contenuto

Come posso risolvere i problemi relativi a una regola di Firewall di rete che non funziona come previsto?

10 minuti di lettura
0

Desidero risolvere i problemi relativi a una regola di Firewall di rete AWS che non funziona come previsto.

Breve descrizione

I seguenti scenari possono far sì che le regole di Firewall di rete non funzionino come previsto:

  • Il traffico non viene indirizzato simmetricamente attraverso il firewall.
  • La regola di Firewall di rete non è configurata correttamente.

Nota: prima di risolvere i problemi relativi a Firewall di rete, verifica le seguenti configurazioni:

  • Gli endpoint del firewall sono distribuiti nelle relative sottoreti e tabelle di routing dedicate. Le sottoreti del firewall non devono avere alcuna risorsa del carico di lavoro.
  • Le tabelle di routing instradano il traffico attraverso l'endpoint del firewall. Controlla la metrica di Amazon CloudWatch ReceivedPackets per verificare che Firewall di rete abbia ricevuto pacchetti. Se la metrica ReceivedPackets ha un valore pari a zero, verifica che le tabelle di routing abbiano una route corretta che punti verso l'endpoint del firewall.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Verifica inoltre di utilizzare la versione più recente di AWS CLI.

Verifica il routing simmetrico attraverso il firewall

Per un modello di distribuzione centralizzato di Firewall di rete, attiva la modalità appliance per il collegamento del gateway di transito alla VPN del cloud privato virtuale (VPC) di ispezione.

  1. Per verificare se la modalità appliance è attiva, esegui questo comando AWS CLI describe-transit-gateway-vpc-attachments:

    aws ec2 describe-transit-gateway-vpc-attachments \
        --filters Name=transit-gateway-attachment-id,Values=tgw-attach-example
  2. Per attivare la modalità appliance, esegui questo comando AWS CLI modify-transit-gateway-vpc-attachment:

    aws ec2 modify-transit-gateway-vpc-attachment \
        --transit-gateway-attachment-id tgw-attach-example \
        --options ApplianceModeSupport="enable"

    Nota: sostituisci tgw-attach-example con l'ID collegamento del gateway di transito alla VPN del VPC di ispezione.

Quando distribuisci un endpoint del firewall in una sottorete pubblica, la tabella di routing di ingresso del gateway Internet deve essere instradata alla sottorete privata tramite l'endpoint del firewall. La tabella di routing della sottorete privata deve inoltre instradare il traffico Internet allo stesso endpoint del firewall. Per ulteriori informazioni, consulta Simple single zone architecture with an internet gateway using AWS Network Firewall (Architettura a zona singola semplice con un gateway Internet che utilizza Firewall di rete AWS).

Per una distribuzione del firewall multi-AZ, la tabella di routing di ingresso del gateway Internet deve instradare il traffico verso le sottoreti private attraverso lo stesso endpoint del firewall. La tabella di routing deve inoltre trovarsi nella stessa zona di disponibilità della sottorete privata. Per ulteriori informazioni, consulta Multi zone architecture with an internet gateway using AWS Network Firewall (Architettura multi-zona con un gateway Internet che utilizza Firewall di rete AWS).

Correggi una regola di Firewall di rete configurata in modo errato

I problemi con le regole di Firewall di rete possono dipendere dalla configurazione della regola.

Regole stateless

Affinché il traffico fluisca in entrambe le direzioni, applica regole stateless sia alle regole di ingresso che alle regole di uscita. Se applichi una regola di ingresso per il traffico in entrata, devi applicare anche una regola di uscita per il traffico di risposta. Se applichi una regola di uscita per il traffico di risposta, devi applicare anche una regola di ingresso per il traffico in entrata. Questa configurazione delle regole è simile a una lista di controllo degli accessi (ACL). Per ulteriori informazioni, consulta Working with stateless rule groups in AWS Network Firewall (Utilizzo di gruppi di regole stateless in Firewall di rete AWS).

Azioni predefinite stateless per i pacchetti

Rivedi le azioni predefinite stateless sia per i pacchetti completi che per i pacchetti frammentati nella policy del firewall. Le impostazioni delle azione predefinite determinano il modo in cui il motore stateless del firewall gestisce i singoli pacchetti quando non soddisfano le regole stateless. Applica l'azione predefinita stateless per i pacchetti frammentati solo ai frammenti di pacchetti IPv4 che utilizzano il protocollo di trasporto UDP. Per ulteriori informazioni, consulta Firewall policy settings in AWS Network Firewall (Impostazioni della policy del firewall in Firewall di rete AWS).

Nota: il protocollo IPv6 non supporta la frammentazione della rete. Se un host invia un pacchetto più grande dell'unità di trasmissione massima (MTU) dell'host ricevente, l'host ricevente elimina il pacchetto. Anche i dispositivi lungo il percorso elimimano i pacchetti di dimensioni superiori all'MTU del dispositivo.

Regole stateful

Affinché il motore di regole stateful ispezioni il traffico, il motore di regole stateless deve inoltrare entrambe le direzioni del flusso di traffico ai gruppi di regole stateful. Per ulteriori informazioni, consulta Network Firewall stateless and stateful rules engines (Motore di regole stateless e stateful di Firewall di rete).

Le regole di Firewall di rete devono fare riferimento a indirizzi IP privati

Se una sottorete o un carico di lavoro privato ha indirizzi IP pubblici e privati, la regola di Firewall di rete deve fare riferimento all'indirizzo IP privato.

Variabili del gruppo di regole

I gruppi di regole stateful di Firewall di rete utilizzano la variabile HOME_NET per definire l'ambito dell'ispezione del firewall. Se non specifichi esplicitamente la variabile HOME_NET, per impostazione predefinita la variabile è l'intervallo CIDR del VPC in cui è distribuito Firewall di rete. In questa configurazione predefinita, Firewall di rete ispeziona il traffico proveniente da origini all'interno del VPC.

Quando distribuisci un Firewall di rete centralizzato, la variabile HOME_NET del gruppo di regole deve includere il VPC remoto o gli intervalli CIDR di origine da cui proviene il traffico. Per ulteriori informazioni, consulta Stateful domain list rule groups in AWS Network Firewall (Gruppi di regole con elenco di domini staful in Firewall di rete AWS).

Per controllare il traffico proveniente solo da determinate sottoreti private e non dall'intero VPC, la variabile HOME_NET deve contenere solo gli intervalli CIDR della sottorete di origine. Nell'esempio seguente, la variabile HOME_NET contiene gli intervalli CIDR della sottorete di origine:

"RuleVariables": {
        "IPSets": {
           "HOME_NET": {
             "Definition": [
               "10.0.0.0/16",
               "10.1.0.0/16",
               "192.168.2.0/24"
             ]
           }
        }
    }

Utilizza l'API DescribeRuleGroup per controllare i dettagli del gruppo di regole stateful. Se l'oggetto RuleVariables non è presente nella risposta, il gruppo di regole del firewall utilizza le impostazioni predefinite. Le impostazioni predefinite per HOME_NET sono impostate sull'intervallo CIDR del VPC di Firewall di rete.

Ordine di valutazione delle regole

Le applicazioni che utilizzano TCP richiedono il completamento dell'handshake a 3 vie prima che l'applicazione invii le richieste. Il primo pacchetto che il firewall vede nella connessione è un TCP SYN dall'origine. Se regole in conflitto bloccano i pacchetti TCP di livello inferiore, l'handshake a 3 vie non ha esito positivo e si verifica il timeout dell'applicazione.

Ad esempio, per rilevare il nome host, un gruppo di regole dell'elenco di domini utilizza l'intestazione Host nella richiesta HTTP, oltre che l'estensione SNI (Server Name Indication) nell'handshake TLS. Affinché avvenga una richiesta HTTP e una negoziazione TLS, è necessario che venga prima completato l'handshake TCP a 3 vie iniziale sulle porte 80 (HTTP) e 443 (HTTPS).

Quando utilizzi regole che coinvolgono come livelli sia l'applicazione che il trasporto, consenti il traffico sulle porte TCP richieste dall'applicazione. Rivedi l'ordine di valutazione delle regole per verificare che le regole precedenti corrispondano al traffico.

Con l'ordine delle azioni predefinite, verifica che altre regole non blocchino il traffico durante la valutazione. Utilizza la parola chiave flow nelle regole per evitare la corrispondenza con pacchetti di protocollo di livello inferiore prima che vengano identificati i protocolli dell'applicazione di livello superiore.

Rivedi gli esempi di configurazione delle regole

Configurazione errata delle regole per il traffico TCP

Nell'esempio seguente, la regola è configurata in modo errato bloccando tutte le connessioni TCP in uscita e consentendo solo le richieste HTTP a example.com. Poiché tutto il traffico TCP viene eliminato, il client di origine non può inviare la richiesta dell'applicazione HTTP.

pass http $HOME_NET any -> $EXTERNAL_NET 80 (http.host; dotprefix; content:"example.com"; endswith; msg:"Allowed HTTP domain"; sid:172191; rev:1;)
drop tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"Drop outbound TCP traffic"; sid:172192; rev:1;)

Configurazione corretta della connessione TCP

Nell'esempio seguente, la regola "Allow TCP" stabilisce la connessione TCP. Dopodiché la regola "Allowed HTTP domain" consente le connessioni all'host HTTP example.com. La regola "Drop all other HTTP domains" blocca il resto del traffico HTTP e la regola "Default Egress TCP Drop" blocca tutto il resto del traffico TCP ad eccezione del traffico HTTP a livello di applicazione.

pass tcp $HOME_NET any -> $EXTERNAL_NET 80 (msg:"Allow TCP"; flow: not_established; sid:172190; rev:1;)
pass http $HOME_NET any -> $EXTERNAL_NET 80 (http.host; dotprefix; content:"example.com"; endswith; msg:"Allowed HTTP domain"; sid:172191; rev:1;)
drop http $HOME_NET any -> $EXTERNAL_NET 80 (msg:"Drop all other HTTP domains"; sid:172192; rev:1; flow: to_server;)
drop tcp $HOME_NET any -> any any (app-layer-protocol:!http; msg:"Default Egress TCP Drop"; flow:to_server; sid:172193;)

Nota: sostituisci example.com con il tuo dominio di destinazione.

La regola Allow TCP (sid:172190) consente di stabilire una connessione TCP sulla porta 80. Utilizza la parola chiave flow: not_established per consentire la configurazione iniziale della connessione. La regola Allowed HTTP domain (sid:172191) consente il traffico HTTP verso example.com controllando l'intestazione host HTTP. La regola Drop all other HTTP domains (sid:172192) blocca il traffico HTTP verso domini diversi da example.com utilizzando la parola chiave flow: to_server. La regola Default Egress TCP Drop (sid:172193) blocca tutto il traffico TCP che non utilizza HTTP come protocollo a livello di applicazione utilizzando la parola chiave app-layer-protocol:!http.

L'ordine delle azioni predefinite consente automaticamente i pacchetti che non corrispondono a nessuna regola definita.

Con un ordine di valutazione rigido, i gruppi di regole vengono valutati in ordine di priorità, a partire dal numero più basso. Le regole di ogni gruppo di regole vengono elaborate nell'ordine in cui sono definite. Verifica che le configurazioni delle regole e l'ordine di priorità manuale siano corretti. Non abbinare una regola di priorità inferiore al traffico di rete. Scrivi le regole in base all'azione predefinita che hai selezionato nella policy rigida del firewall. Per ulteriori informazioni, consulta Managing evaluation order for Suricata compatible rules in AWS Network Firewall (Gestione dell'ordine di valutazione per regole compatibili con Suricata in Firewall di rete AWS).

Configurazione errata che causa timeout

Nell'esempio seguente, la configurazione specificata elimina tutto il traffico TCP per impostazione predefinita prima che il firewall possa rilevare la richiesta HTTP a livello di applicazione. Questa configurazione causa timeout imprevisti.

Default Action: Drop all
Rule: pass http $HOME_NET any -> $EXTERNAL_NET 80 (http.host; dotprefix; content:"example.com"; endswith; msg:"Allowed HTTP domain"; sid:172191; rev:1;)

Configurazione corretta che consente l'handshake TCP a 3 vie

Nell'esempio seguente, Firewall di rete consente il completamento dell'handshake TCP a 3 vie e consente solo il traffico HTTP per il dominio example.com.

Default Action: Drop established
Rule: pass http $HOME_NET any -> $EXTERNAL_NET 80 (http.host; dotprefix; content:"example.com"; endswith; msg:"Allowed HTTP domain"; sid:172191; rev:1;)

Per altri esempi di regole del firewall, consulta Examples of stateful rules for Network Firewall (Esempi di regole staeful per Firewall di rete).

Informazioni correlate

Deployment models for AWS Network Firewall (Modelli di distribuzione per Firewall di rete AWS)

Defining rule actions in AWS Network Firewall (Definizione delle azioni delle regole in Firewall di rete AWS)

Domain list inspection for traffic from outside the deployment VPC (Ispezione dell'elenco di domini per il traffico proveniente dall'esterno del VPC di distribuzione)

AWS UFFICIALEAggiornata 7 mesi fa