Puncte:0

blocați conexiunea nginx după mai multe 404 s pe aceeași conexiune tcp

drapel de

Aș dori să protejez două servere împotriva atacatorilor care caută orbește urle.

ideea mea este să blochez cererile după o anumită cantitate de 404 coduri de stare.

Aș putea face asta cu fail2ban.

Cu toate acestea, unul dintre servere se află în spatele unui proxy invers pe care nu le controlez și asta nu comunică adresa IP de origine (și va avea nevoie de foarte mult timp înainte ca cererea de redirecționare a adresei IP de origine să fie tratată), adică din punctul de vedere al lui nginx, toate cererile provin din IP-ul proxy-ului revere și evident că nu vreau să blochez tot traficul de intrare dacă cineva provoacă prea multe 404.

Există vreo modalitate (fără fail2ban, cu fail2ban sau cu orice alt instrument) pentru a detecta cel puțin 404 erori de la aceeași conexiune https și să închei această conexiune sau să o lași 404 necondiționat pentru orice cerere ulterioară?

Vă rog să-mi spuneți dacă întrebarea mea nu este clară și voi încerca să o reformulez, pentru a da mai multe informații.

Puncte:1
drapel cn

Puteți configura Nginx să memoreze în cache răspunsurile, inclusiv răspunsurile cu o eroare, cum ar fi 404. Cu toate acestea, din câte știu, nu puteți număra numărul de erori (dar asta nu ar trebui să conteze).

Singura problemă aici este că dacă creați o pagină nouă și mai devreme a fost memorată în cache ca 404, atunci nu va funcționa. Cel puțin, nu imediat (în funcție de cât timp durează cache-ul pentru a expira).

Cu siguranță asta va ajuta foarte mult, totuși. Toate accesările care altfel ar merge la backend-ul tău și ar genera un 404 vor fi oprite la instanța Nginx și vor returna exact aceeași eroare 404 din nou și din nou.

O altă modalitate este să definiți o locație și să rulați o comandă (care ar putea apoi să ruleze ipset pentru a adăuga adresa IP). Deci ceva de genul:

locație /phpmyadmin.php {
  content_by_lua_block {
    os.execute("/usr/bin/block-ip.sh")
  } 
}

Totuși, nu sunt prea sigur cum ai putea face față mai multor căi.


propria mea experiență cu fail2ban este că este destul de lent și „înapoi” (nu proactiv). Dacă chiar doriți să blocați complet o adresă IP, cel mai ușor este să aveți aplicația dvs. trimiteți un mesaj la front-end unde puteți rula iptables pentru a bloca IP-ul. Pentru asta trebuie să redirecționați IP-ul original, ceea ce Nginx nu o face în mod implicit, dar este ușor să adăugați un X-Redirecţionat-Pentru antetul aplicației dvs. poate apoi trimite înapoi la instrumentul mic pe care îl utilizați pentru a adăuga IP-uri la dvs iptables. Rețineți, de asemenea, că nu ar trebui să îl adăugați direct iptables. În schimb, ar trebui să folosiți o listă. Pentru acea privire la ipset.

Dacă nu vă puteți schimba aplicațiile pentru așa ceva și doriți să le utilizați fail2ban, ar trebui să verificați jurnalele Nginx și să detectați acele căi care nu vă plac.

gelonida avatar
drapel de
Multumesc pentru raspunsul tau. da, stocarea în cache 404 s ar putea reduce atacurile DOS dacă mai mulți atacatori scanează un server în perioada de cache; Totuși, ceea ce aș prefera cu adevărat este să opresc pe cineva care încearcă să ghicească adresele URL. Și pe serverele în care nu o pot face din cauza absenței adresei IP de origine, aș dori cel puțin să evit, acea conexiune SSL poate sonda prea multe adrese URL Din curiozitate: Care ar fi configurația pentru a stoca în cache erorile 404? Memorarea în cache a trebuit să fie pe partea serverului, deoarece vreau să atenuez atacurile de la roboți și nu atacurile de la un browser.
drapel cn
@gelonida Gândindu-te la asta, poți rula o comandă shell de la Nginx, așa că ai putea să o folosești pentru a bloca imediat IP-ul (poți primi încă 2 sau 3 accesări, dar asta va fi foarte rapid). Pentru a fi rapid, asigurați-vă că utilizați o regulă care indică o listă de IP-uri gestionate de `ipset`.
gelonida avatar
drapel de
multumesc pentru raspunsul tau actualizat. Încă nu sunt sigur cu ce ajută în cazul meu actual. Probabil că trebuie să aștept până când proxy-ul invers va avea antetul X-Forwarded-For adăugat, dar mai trebuie să văd cum să blochez cererile (Vă rugăm să consultați o întrebare legată: https://serverfault.com/questions/1094926/ can-fail2ban-add-deny-rules-to-nginx-in loc-de-utilizare-iptables )
Puncte:0
drapel il

Nginx are un limit_req modul, astfel încât să îl puteți utiliza ca pre-filtrare.

Vedea https://stackoverflow.com/questions/37877242/nginx-limit-req-based-on-http-header pentru intrebare similara.

De exemplu, numărând și limitând cele 404 încercări (de exemplu, în locația de eroare asociată) și/sau filtrați-le după fail2ban de acum înainte, dacă ați înregistra numai cereri limitate. Astfel ai putea scadea maxretry și găsește timp pentru închisoarea în fail2ban și poate evita încărcarea prea mare cu multe mesaje în jurnal (vezi fail2ban :: wiki / Cele mai bune practici).

Pentru exemplul de filtru (practic nu aveți nevoie de filtrul pe care îl puteți seta pur și simplu failregex etc direct în închisoare), vezi filtru.d/nginx-limit-req.conf. De asemenea, puteți configura nginx să se înregistreze X-Redirecţionat-Pentru antet în loc sau în plus față de IP-ul real. Și chiar interziceți ambele folosind diferite maxretry/găsește timp combinate cu diferite limite și izbucniri limit_req modul.

gelonida avatar
drapel de
Am schimbat titlul și am evidențiat unele părți ale mesajului meu. De fapt, principala problemă este că vreau să detectez 404 pe aceeași conexiune http. Mă tem că va avea nevoie de mult timp înainte ca proxy-ul invers să fie schimbat și să-mi furnizeze informațiile. de care chiar am nevoie.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.