Come proteggere NGINX con filtri Fail2ban personalizzati

Fail2Ban è un'ottima misura di sicurezza da implementare per il tuo server di applicazioni web. Viene fornito con una gamma di funzionalità, filtri predefiniti e azioni che possono avere un impatto immediato sul divieto di bot web dannosi, sul prosciugamento delle risorse di sistema e sull'arresto degli attacchi, che è la parte più cruciale di qualsiasi sito web.

Tuttavia, la maggior parte delle persone, amministratori di sistema e proprietari di siti Web, a volte cercano qualcosa in più rispetto a quello che fail2ban ha da offrire. Nel seguente tutorial imparerai come creare e utilizzare filtri personalizzati sul tuo server Nginx, che possono essere ottimizzati in base alle tue esigenze e ampliati in seguito.

Assicurati di testare e usare con cautela i nuovi filtri fail2ban. Tieni presente che le impostazioni dovranno essere adattate alle tue esigenze.

Aggiungi nuove jail Fail2Ban

Il tutorial presuppone che tu abbia installato Fail2ban e che tu abbia familiarità con come configurare le jail e le impostazioni. Di seguito sono riportate alcune jail aggiuntive che dovrai modificare a tuo piacimento se stai utilizzando ulteriori azioni di ban come Cloudflare o segnalando AbuseIPDB.org ecc.

Aggiungi le seguenti jail che desideri utilizzare nel tuo file /fail2ban/jail.local.

sudo nano /etc/fail2ban/jail.local
[nginx-403] abilitato = porta vera = filtro http,https = azione nginx-403 = iptables-allports logpath = %(nginx_access_log)s bantime = 1440 m # 1 giorno findtime = 1440 m # 1 giorno maxretry = 4 [nginx-noagent] abilitato = true port = http,https filter = nginx-noagent action = iptables-allports logpath = %(nginx_access_log)s bantime = 1440m # 1 giorno findtime = 1440m # 1 giorno maxretry = 3 [nginx-noauth] abilitato = true filter = nginx-noauth action = iptables-allports logpath = %(nginx_error_log)s bantime = 1440 m # 1 giorno findtime = 1440 m # 1 giorno maxretry = 5 [nginx-nologin] abilitato = true filter = nginx-nologin action = iptables =-allports %(nginx_access_log)s bantime = 1440m # 1 giorno findtime = 1440m # 1 giorno maxretry = 5 [nginx-noscript] abilitato = true action = iptables-allports filter = nginx-noscript logpath = %(nginx_access_log)s bantime = 1440m giorno findtime = 1440m # 1 giorno maxretry = 3 [nginx-noproxy] abilitato = true action = ipt ables-allports filter = nginx-noproxy logpath = %(nginx_access_log)s bantime = 1440m # 1 giorno findtime = 1440m # 1 giorno maxretry = 0 [nginx-nowordpress] enabled = true action = iptables-allports filter = nginx-nowordpress logpath = %(nginx_access_log)s bantime = 1440m # 1 giorno findtime = 1440m # 1 giorno maxretry = 3 [portscan-block] abilitato = true action = iptables-allports filter = portscan-block logpath = %(ufw_log)s bantime = 1440m # 1 giorno findtime = 1440m # 1 giorno maxretry = 5

Annuncio


Crea nuovi filtri Fail2Ban

Successivamente, è necessario creare un nuovo file di filtro per ciascuno di questi filtri e inserire .conf alla fine del file.

Nota, il file di creazione è qualcosa che devi fare da solo.

create file /location/fail2ban/filter.d/nginx-403.conf [Definizione] failregex = ^ -. "(GET|POST|HEAD). HTTP.*" 403 ignoreregex = create file /location/fail2ban/filter.d/nginx-noagent.conf [Definizione] failregex = ^ -. "-" "-"$ ^ -. "-" "curl.*"$ ignoreregex = crea file /location/fail2ban/filter.d/nginx-noauth.conf [Definizione] failregex = nessun utente/password è stato fornito per l'autenticazione di base. cliente: utente. non è stato trovato in. client: utente . password mismatch.*client: ignoreregex = crea file /location/fail2ban/filter.d/nginx-nologin.conf [Definizione] failregex = ^ -.*POST /sessions HTTP/1.." 200 ignoreregex = crea file /location/ fail2ban / filter.d / nginx-noscript.conf [Definizione] failregex = ^ - GET.. (.php | .asp | .exe | .pl | .cgi | \ SCGI) ignoreregex = creare il file / posizione / fail2ban / filtro .d/nginx-noproxy.conf [Definizione] failregex = ^ -. GET http. ignoreregex = create file /location/fail2ban/filter.d/nginx-nowordpress.conf [Definizione] failregex = ^ .* "(GET|POST |HEAD) /+(?i)(wp(-|/)|xmlrpc.php|\?author=1) ^ .* "(GET|POST|HEAD|PROPFIND) /+(?i)(a2billing|admin |apache|axis|blog|cfide|cgi|cms|config|etc|.git|hnap|inc|jenkins|jmx-|joomla|lib|linuxsucks|msd|muieblackcat|mysql|myadmin|n0w|owa-autodiscover|pbxip |pma|recordings|sap|sdk|script|service|shell|sqlite|vmskdl44rededd|vtigercrm|w00tw00t|webdav|websql|wordpress|xampp|xxbb) ^ .* "(GET|POST|HEAD) /[^"]+ .(asp|cgi|exe|jsp|mvc|pl)( |\?) ^ .*(?i)(/bash|burger-imperia|changelog|h undejo|hvd-store|jorgee|masscan|pizza-imperia|pizza-tycoon|servlet|testproxy|uploadify) ignoreregex = journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx crea file /location/fail2ban/filter.d/portscan- block.conf [Definizione] failregex = . [BLOCCO UFW] IN=. SRC= ignora le chiamate comuni di rilevamento dei dispositivi multicast sulle reti LOCALI IPv4/IPv6 continua a vietare le chiamate non locali (WAN) a qualsiasi porta associata ignoreregex = SRC=(10.|172.1[6-9].|172.2[0-9]. |172.3[0-1]|192.168.|fe\w :). DST=(static.ip.address.here|224.0.0. ). PROTO=(2|UDP)(\s+|.* DPT=(1900|3702|5353|5355) LUNGHEZZA=\d*\s+)$

Prova nuovi jail/filtri Fail2ban

Per finire, assicurati di riavviare fail2ban nel tuo sistema operativo tramite il suo comando.

Per la maggior parte delle distribuzioni Linux, il seguente comando dovrebbe funzionare se si esegue systemd.

sudo systemctl riavvia fail2ban

Altre distribuzioni non systemd o altri sistemi riavviano il sistema o il servizio fail2ban.

Una volta riavviato fail2ban, eseguire il seguente comando fail2ban-client status per visualizzare il jail.

sudo fail2ban-client status nginx-noscripts

Esempio di output:

Stato del carcere: nginx-noscripts |- Filtro | |- Attualmente fallito: 0 | |- Totale fallito: 0 | - File list: /var/log/nginx/access.log - Azioni |- Attualmente bannate: 95 |- Totale bannate: 107 `- Elenco IP vietati:

Come ha mostrato l'output sopra, hai 95 indirizzi IP vietati, con un totale di 107 inclusi i ban storici attivi e inattivi.


Annuncio


Commenti e Conclusione

Hai imparato come configurare alcune jail aggiuntive alla tua configurazione fail2ban per il tuo server Nginx nel tutorial. Nel complesso, è possibile ottenere un'eccellente sicurezza lato server, i filtri possono essere regolati e ottimizzati e ciò che è stato mostrato è solo un assaggio di ciò che si può fare di più per soddisfare situazioni ed esigenze specifiche.

L'unico inconveniente di fail2ban è l'esecuzione di cluster di server, per ora non è praticabile a meno che non si utilizzi Cloudflare e li si blocchi sul proxy inverso, ad esempio, ma per gli operatori di server singoli, puoi praticamente bloccare il tuo server come Fort Knox.

sottoscrivi
Notificami
15 Commenti
Feedback in linea
Visualizza tutti i commenti

Ciao! Ti dispiace se condivido il tuo blog con il mio myspace?
gruppo? Ci sono molte persone che penso apprezzerebbero davvero il tuo
contenuto. Per favore mi faccia sapere. Grazie

ciao,
habe bereits Fail2Ban laufen mit 13 Jails.
Habe jetzt Deinen nginx-nowordpress Jail in meine Jail.local hinzugefügt und auch die nginx-nowordpress erstellt.
Nach service fail2ban restart habe ich aber auf einmal nur noch 12 Jails, eigentlich müssten es aber 14 sein.

2 Jails die nicht in der Jail.local sind, sondern in xy.local und xyz.local sind also weg…

Ciao,

Ho controllato di nuovo la prigione senza wordpress. Rimosso "journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx" dal filtro. => Dopodiché una delle mie jail già esistenti non funziona più. Disabilitato la tua jail senza wordpress => tutte le mie jail funzionano di nuovo.

Ho provato la tua jail di portscan-block incl. il filtro. => Fail2ban non si riavvia più. Devi disabilitare di nuovo la tua prigione.

Ho provato di nuovo la tua jail senza wordpress, rimosso "journalmatch = _SYSTEMD_UNIT=nginx.service + _COMM=nginx" dal filtro. => una delle mie jail già esistenti non funziona più. Disabilitato la tua prigione senza wordpress, tutte le mie prigioni funzionano di nuovo.

Ho provato anche portscan-block jail => fail2ban non si avvia più. Devo disabilitare di nuovo la tua prigione e tutto è di nuovo a posto

Grazie Joshua, lo preparerò nei prossimi giorni

Ti ho inviato una mail con i file :) Molte grazie!

Wow, è stata una risposta veloce, grazie.
Sono su Ubuntu 20.4 LTS con Fail2Ban V 1.57 (l'ultimo che ottieni con l'aggiornamento apt).
No, ho 11 carceri su 13 in jail.local. Solo 2 carceri sono in carceri separate per qualsiasi motivo...

Grazie per il controllo

Michael

Spiacente fail2ban-client -V mostrami 0.11.1

Sì con Nginx, proverò a cambiare la sintassi per il filtro come proposto nella tua prima citazione...

Ma per ora devo andare a letto :)

Grazie per l'aiuto veloce finora :)

15
0
Mi piacerebbe che i tuoi pensieri, per favore commenta.X