Rifiuta i pacchetti IP con un errore ICMP o semplicemente li rilascia?

23

Considera un host con connessione a Internet (il firewall esterno). Cosa si dovrebbe fare con traffico indesiderato: basta rilasciarlo o inviare un errore ICMP come una porta non raggiungibile? (In termini di Linux: iptables -P DROP o iptables -j REJECT ?)

Non si tratta della sicurezza della nostra rete, i pacchetti non vanno in alcun modo. Si tratta di essere un buon cittadino. REJECT potrebbe far partecipare il nostro firewall a un DDoS, se i pacchetti in entrata hanno un'origine falsificata. Ma è sempre la scelta giusta? Ci sono circostanze in cui è meglio inviare un errore ICMP corretto?

    
posta Gilles 23.04.2011 - 16:27
fonte

2 risposte

17

Di solito voto per l'invio di un errore ICMP per UDP e un pacchetto RST per TCP. Rende i problemi di debug molto più semplici. Inoltre, previene fastidiosi timeout: i server di posta e IRC tentano spesso di eseguire una query di identificazione o controllare che il client non sia un proxy aperto.

Se viene eseguito al di fuori del firewall non ci saranno informazioni rilevanti divulgate. A seconda della configurazione, potrebbe persino nascondere che esiste un firewall. Se non ci fosse risposta, sarebbe ovvio che c'è un buco nero.

È importante che i server non inviino alcuna risposta per i pacchetti inviati a un indirizzo di trasmissione al fine di prevenire un effetto di amplificazione in una situazione DoS. Va bene che il firewall invii il messaggio di errore in questa situazione, risultando in una sola risposta.

Errori ICMP e pacchetti TCP-RST non sono più grandi del pacchetto originale più piccolo. Quindi questi non sono interessanti per gli attacchi DDoS.

Modifica : i server autoritativi DNS (e risolutori DNS non configurati) sono molto più interessanti per gli attacchi DDoS riflessivi perché le risposte DNS sono più grandi delle query e pertanto garantiscono all'assistente un'amplificazione gratuita.

    
risposta data 23.04.2011 - 16:41
fonte
5

Hai menzionato iptables , quindi stai implicando linux (almeno come esempio per un sistema operativo con criteri di rete sintonizzabili).

Da molto tempo, linux ha avuto un limite al numero di messaggi di errore ICMP inviati. L'impostazione predefinita è molto bassa: 1 messaggio / i.

Questo comportamento di linux è sintonizzabile con i parametri di rete sysctl : il icmp_ratelimit sysctl

icmp_ratelimit - INTEGER
    Limit the maximal rates for sending ICMP packets whose type matches
    icmp_ratemask (see below) to specific targets.
    0 to disable any limiting,
    otherwise the minimal space between responses in milliseconds.
    Default: 1000

Nota che per impostazione predefinita icmp_ratelimit si applica solo ai messaggi di errore ICMP e all'estinzione di origine, non a tutte le risposte ICMP:

icmp_ratemask - INTEGER
    Mask made of ICMP types for which rates are being limited.
    Significant bits: IHGFEDCBA9876543210
    Default mask:     0000001100000011000 (6168)

    Bit definitions (see include/linux/icmp.h):
        0 Echo Reply
        3 Destination Unreachable *
        4 Source Quench *
        5 Redirect
        8 Echo Request
        B Time Exceeded *
        C Parameter Problem *
        D Timestamp Request
        E Timestamp Reply
        F Info Request
        G Info Reply
        H Address Mask Request
        I Address Mask Reply

    * These are rate limited by default (see default mask above)

quindi questa limitazione della velocità non si applica alla risposta echo per impostazione predefinita.

Con le impostazioni predefinite, DOSare una destinazione con i messaggi di errore ICMP inviati da una finestra Linux sembra molto difficile.

The (...) ICMP unreachable packets are very small

No, non sono sempre minuscole: sotto linux, il messaggio di errore ICMP catturerà il maggior numero possibile di contesto dal pacchetto che lo ha causato, fino al 576 (o MTU di destinazione) , per rendere possibile il demultiplex del messaggio di errore anche quando è stata utilizzata l'incapsulamento complesso in IP , seguendo RFC 1812 :

4.3.2.3 Original Message Header

   Historically, every ICMP error message has included the Internet
   header and at least the first 8 data bytes of the datagram that
   triggered the error.  This is no longer adequate, due to the use of
   IP-in-IP tunneling and other technologies.  Therefore, the ICMP
   datagram SHOULD contain as much of the original datagram as possible
   without the length of the ICMP datagram exceeding 576 bytes. 
    
risposta data 25.09.2011 - 07:56
fonte

Leggi altre domande sui tag