Limitazione della frequenza con UFW: impostazione dei limiti


22

La pagina man di UFW menziona che può impostare il limite di iptables per me:

ufw supporta la limitazione della velocità di connessione, utile per proteggere dagli attacchi di login a forza bruta. ufw negherà le connessioni se un indirizzo IP ha tentato di avviare 6 o più connessioni negli ultimi 30 secondi. Vedi http://www.debian-administration.org/articles/187 per i dettagli. L'uso tipico è:

     ufw limit ssh/tcp

Purtroppo questa è tutta la documentazione che ho trovato. Vorrei attenermi a UFW e non usare comandi iptables più complicati (per mantenere le cose "semplici").

Come utilizzerei ufw per limitare tutto il traffico in entrata (quindi non in uscita) sulla porta da 80 a 20 connessioni ogni 30 secondi? Come disabiliterei il limite di velocità per le porte da 30000 a 30005? La limitazione della velocità è abilitata per impostazione predefinita per tutte le porte?

Risposte:


21

UFW è progettato per essere "semplice", il che in questo caso significa che non hai il controllo sui dettagli della velocità a cui le connessioni sono limitate. Se vuoi scavare nella fonte Python di UFW, potresti scoprire come modificarlo. Le informazioni appropriate sono (sul mio sistema Ubuntu 10.04) in/usr/share/pyshared/ufw/backend_iptables.py

Mettendo da parte il problema dei tempi, quindi, ecco alcune risposte alle tue domande a risposta rapida alla fine.

  1. Supponendo che 10.10.10.0/24 sia la tua rete locale, questo applica la regola di limitazione predefinita alla porta 80 / tcp in arrivo:

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. e 3. La limitazione della velocità non è attivata per impostazione predefinita. Per aggiungerlo a tutte le porte (di destinazione) tranne l'intervallo desiderato, utilizzare questa regola. Nota che le regole (anche con gli intervalli) sono unità atomiche e non possono essere suddivise. Ad esempio, non è possibile aggiungere una regola per qualsiasi porta, quindi deleteuna regola (inesistente) per un determinato intervallo per rimuoverlo. limitnon è neppure un argomento accettabile ufw default.

    ufw limit from any to any port 0:29999,30006:65535
    

Questo significa che la tariffa non può mai essere impostata?
Tom,

2
Non senza hackerare la fonte, almeno non per UFW 0.30pre1-0ubuntu2, che è attuale per Ubuntu 10.04. Dall'aspetto delle cose nella fonte attuale , ciò non è cambiato. Puoi comunque mettere le regole di iptables in /etc/ufw/after.rules (o /etc/ufw/before.rules), e anche quelle saranno usate. Vedi man ufw-framework per maggiori informazioni.
bonsaiviking,

@bonsaiviking È posible su iptable, se sì allora iptable è backend di ufw.
Nullpointer

6

Come menzionato nel post precedente, puoi personalizzare user.rules. Ho bisogno del mio limite di velocità di connessione smtp fino a 12 connessioni in 6 secondi. Ho aggiunto una regola come mostrato prima sotto. Nota: questo aggiunge una regola limite che consente 6 in 30 secondi per impostazione predefinita

ufw limit smtp

e ho modificato il /lib/ufw/user.rules (tengo una copia personalizzata di questo file con molte altre modifiche) come mostrato di seguito ...

### tuple ### limit tcp 25 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 6 --hitcount 12 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 25 -j ufw-user-limit-accept

Ho trovato user.rules in / etc / ufw
Otto Kanellis

5

il limite di velocità può essere modificato nel file delle regole ufw che può essere trovato /lib/ufw/user.rules. per impostazione predefinita non ci sono limiti abilitati per tutte le porte. dovresti aggiungere ogni porta manualmente o modificando il file user.rules.


1

Vale la pena sottolineare possibili conseguenze indesiderate dell'uso della funzione LIMIT di ufw.

Supponiamo che uno abbia posto un limite generale sulla porta 22 / tcp come prima regola ufw:

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     LIMIT IN    Anywhere                  
...

con il presupposto che eventuali connessioni operanti al di sotto del limite potrebbero essere filtrate seguendo le regole uww e infine la politica di default di "deny (incoming)".

Almeno per 0,35, questa ipotesi sarebbe sbagliata. In effetti la logica LIMIT IN accetta immediatamente qualsiasi input non rifiutato dal criterio limite.

In psuedocode, la logica LIMIT è

if CONDITION then DENY else ACCEPT

mentre altre regole ufw sembrano avere una logica:

if CONDITION then (DENY|ACCEPT) else continue to next rule.

Personalmente ho scoperto che si trattava di un comportamento imprevisto per ufw LIMIT, che ho scoperto solo trovando inaspettatamente molti tentativi di accesso alla porta 22 nel file di registro di sistema che non avrebbero mai dovuto verificarsi a causa del filtraggio di altre regole ufw.

Dettagli della conferma del comportamento

Le righe pertinenti del codice iptables inserite da ufw sono le seguenti:

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

L'elenco sopra può essere creato con

iptables -S | grep ufw-user-limit

Le prime due righe sono consecutive in ufw-user-inputcui è possibile confermare

iptables -S | grep ufw-user-input
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.