GNU/Linux >> Linux Esercitazione >  >> Cent OS

Blocca i robot dannosi con Fail2ban

Fail2ban è uno strumento di sicurezza versatile. Sebbene sia utilizzato principalmente per prevenire attacchi di forza bruta contro SSH, può essere utilizzato anche per proteggere altri servizi.

Esistono bot che scansionano Internet e inviano migliaia di richieste ai server Web nella speranza di trovare vulnerabilità. Questo post riguarda il blocco di tali bot con Fail2ban.

Assumiamo che tu stia utilizzando Apache come server web. Tuttavia, queste istruzioni possono essere facilmente personalizzate per nginx o qualsiasi altro server web.

Tuttavia, tieni presente che Fail2ban non è un firewall per applicazioni Web (WAF) e non può bloccare le richieste dannose se passano. Questo perché fail2ban interviene monitorando i log; Pertanto, prima che Fail2ban possa intraprendere qualsiasi azione, deve essere registrato almeno un tentativo dannoso.

Cos'è comunque un bot cattivo?

In questo post, ci concentreremo sul blocco dei bot che eseguono una delle seguenti operazioni:

  • Cerca nel sito Web un proxy aperto
  • Invia una richiesta GET con parametri che. contengono payload SQL injection
  • Invia una richiesta GET con parametri che. contengono carichi utili di nevrosi

Ovviamente puoi bloccare anche altri tipi di attacchi. Tuttavia, ci limitiamo ai tre casi sopra menzionati per questo articolo.

Installa Fail2ban

Fail2ban è disponibile nel repository della maggior parte delle distribuzioni.

Per installarlo su Debian / Ubuntu esegui:

sudo apt-get update
sudo apt-get install fail2ban

Sotto CentOS dovresti prima usare il repository EPEL; Quindi dovresti attivarlo e avviarlo.

sudo yum -y install epel-release
sudo yum -y install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Nozioni di base su Fail2ban

Al centro del meccanismo di lavoro di Fail2ban ci sono un certo numero di prigioni. In poche parole, una jail istruisce Fail2ban a guardare un certo numero di log e ad applicarvi un filtro ogni volta che il log cambia. Se il numero di corrispondenze per il filtro è uguale al numero massimo di corrispondenze consentite dalla jail, viene eseguita un'azione specificata nella jail.

Quindi devi definire due cose:un filtro e una prigione. La jail è configurata per esaminare i log di Apache alla ricerca di richieste dannose.

Definisci filtri

Un filtro è semplicemente una raccolta di espressioni regolari Python che vengono verificate rispetto a un registro. Qui dovremmo definire filtri per i criteri sopra descritti.

Ma diamo prima un'occhiata a una voce nei log di Apache:

66.249.79.189 - - [17/Jan/2017:14:10:41 +0000] "GET /robots.txt HTTP/1.1" 200 3494 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +https:
//www.google.com/bot.html)"

Si noti che l'intestazione della richiesta GET /robots.txt HTTP/1.1 è tra virgolette doppie. Se si progettano tali regole da soli, è necessario prestare sufficiente attenzione per garantire che solo l'intestazione della richiesta corrisponda. In caso contrario, rischi di bloccare gli utenti legittimi.

I payload di SQL injection generalmente contengono stringhe del formato union select(...) o select concat (...) . Quindi puoi provare a far corrispondere questo modello con la seguente espressione regolare:



(?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])

il <HOST> La parte definisce la posizione dell'indirizzo IP nella voce di registro e il (?i) indica che l'espressione regolare non fa distinzione tra maiuscole e minuscole.

il [^"] nella regex assicura che il testo corrispondente sia racchiuso tra virgolette. Ciò garantisce che l'espressione regolare corrisponda solo all'intestazione della richiesta e nient'altro. il (?:%%2[8C]|[,(]) indica che il union select o select concat segue di conseguenza una virgola (, ) o una parentesi (( ), direttamente o nella loro forma codificata in percentuale.

Spesso i bot che cercano proxy aperti inviano richieste sotto forma di:

101.33.59.9 - - [17/Jan/2017:14:10:41 +0000] "GET https://google.com/ HTTP/1.1" 400 3494 "-" "Mozilla"
101.33.59.9 - - [17/Jan/2017:14:10:44 +0000] "CONNECT yahoo.com:80" 400 3499 "-" "Mozilla"

Un'espressione regolare come la seguente può facilmente corrispondere a queste:

(?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)

L'espressione regolare (?:(?:GET|POST|HEAD) https?: soddisfa i requisiti del primo tipo, mentre l'espressione regolare CONNECT [a-z0-9.-]+:[0-9]+ soddisfa i requisiti del secondo tipo.

I bot che scansionano Shellshock spesso inviano richieste come:

10.11.12.13 - - [17/Jan/2016:16:00:00 +0000] "GET /cgi-bin/printenv.cgi HTTP/1.0" 200 1 "-" "() { test;};echo "Content-type: text/plain"; echo; echo; /bin/rm -rf /var/www/"

Un'espressione regolare come questa corrisponde al modello di Shellshock:

<HOST> -.*"()s*{[^;"]+[^}"]+}s*;

Qui li controlliamo () { <command>; } Pattern e il s tiene conto degli spazi che potrebbero essere inclusi nella richiesta dannosa.

Se li combiniamo ora possiamo scrivere il nostro filtro:

[Definition]
failregex = <HOST> -.*"()s*{[^;"]+[^}"]+}s*;
            (?i)^<HOST> -.*"[^"]+(?:union[^"]+select[^"]*|select[^"]+concat[^"]*)(?:%%2[8C]|[,(])
            (?i)^<HOST> -.*"(?:(?:GET|POST|HEAD) https?:|CONNECT [a-z0-9.-]+:[0-9]+)
ignoreregex =

il ignoreregex ti consente di inserire nella whitelist gli elementi. Puoi aggiungere espressioni regolari ignorate proprio come è stato fatto per failregex.

Salva il filtro sopra in /etc/fail2ban/filter.d/badbot.local

Definisci la prigione

Ora che hai definito il filtro, è il momento di definire la prigione. Qui blocchiamo l'indirizzo IP per sei minuti se invia tre di queste richieste entro sei minuti.

Aggiungi questo al tuo /etc/fail2ban/jail.local File:

[badbot]
enabled   = true
port      = http,https
filter    = badbot
logpath   = /var/log/apache*/*access.log
maxretry  = 3
banaction = iptables-multiport
findtime  = 360
bantime   = 360

Dopo aver configurato la jail, dovresti riavviare fail2ban affinché queste modifiche abbiano effetto. A seconda della tua distribuzione, per riavviarla sarà necessario uno di questi comandi:

sudo systemctl restart fail2ban
sudo service fail2ban restart

fail2ban ora blocca tutti i tentativi di bot dannosi che tentano di attaccare il tuo server web. Puoi estendere queste regole al tuo altro server web o a qualsiasi altro tipo di attacco che potresti vedere.




Cent OS
  1. Sicurezza Linux:proteggi i tuoi sistemi con fail2ban

  2. Utilizzo di Fail2ban per bloccare accessi ISPConfig errati

  3. Proteggi il tuo server Linux con Fail2Ban [Guida per principianti]

  4. Come proteggere Apache e SSH con Fail2Ban su CentOS 8

  5. Come installare Fail2ban con Firewalld su Rocky Linux 8

Configura il server BMC per funzionare con il nuovo blocco IP pubblico

Come installare Fail2ban con Firewalld su Rocky Linux 8.4

Configura OpenDMARC con Postfix su CentOS/RHEL per bloccare lo spoofing e-mail

Come installare Fail2ban con Firewalld su AlmaLinux 8

Come proteggere SSH con Fail2Ban

Ripristino più rapido da un disco con settori danneggiati