Držanje tipke F5 zabije server

Živjo,
pretirano držanje tipke F5 (non stop refreshanje) strani zelooo dvigne porabo rama na strežniku, lahko celo do 2x ali več. Ne upam si pomisliti, kaj bi se zgodilo, če bi to naredilo 20 userjev naenkrat - pravi mini ddos.

Občutno bolj držanje tipke F5 vpliva na strani s kakšnim requestom do baze.
Na strežniku je nameščen Apache 2.2 in MySql in php5.3

Sigurno obstajajo kakšne nastavitve ali pa apache modul, ki pomaga
ugibam:
- mysql max connections per user....,
- apache modul (mod_evasive?)
- ??help

Z F5 tipko sem malo "potestiral" še par ostalih strani in velika večina se jih obesi.
Ne me napadat, nisem pretiraval (refreshal max 10 sekund) in nebom več :)
Ali ostali samo blokirajo moj IP ali pa se server dejansko zabije kot v mojem primeru.

Ima kdo kakšno idejo/izkušnje kako se temu izogniti oz. čimbolje obraniti?

28 odgovorov

Ni šans, da zabije tako močan strežnik. Prav tako se poraba RAMa ne spremeni niti za 1%. Mogoče gre bolj za nastavitve tvojega routerja :)

1
  1. Za testiranje sem inštaliral eno freebsd virtualko z giga rama. Vse nastavitve apacheja, phpja in mysqla so default.

  2. Inštaliral sem sveži wordpress 3.0.1

Prilagam videoprimer, kaj se dogaja s strežnikom ob držanju tipke F5 na prvi(Welcome to WordPress) stani. Wordpres "poje" ves ram in swap. Pa dober tek!

Help

Rešitev problema:

Statične datoteke(html fajli), ki jih apache servira, privzeto pošljejo "Last-Modified" header lahko tudi "Cache-Control" header, ki dovoljuje, da je stran cachirana določen čas. Zato s statiko ni problemov.

PHP sicer enostavno in elegantno generira spletne vsebine, ampak sam NIKOLI ne poskrbi za "Content Negotiation". Za to moramo vedno poskrbeti webmojstri sami.

Moje mnenje je, da bi to morala imeti vsaka spletna stran, ker je dobro za strežnik in tudi za boljšo uporabniško izkušnjo. Poleg vsega tega vam tudi google in ostali crawlerji ne bodo porabili toliko bandwidtha (hammering itd..)

@blackmamba: probaj do iste strani dostopati preko kakega webproxya takrat pa boš videl če dejansko pade server ali samo tebe "timeouta".

Mogoče ma tukaj prste vmes tudi keep-alive, ki po tolkih requestih "zablokira" nadalnje nalaganje strani ... samo misel:P

Tukaj dejansko izvajaš Denial of Service nad določeno spletno stranjo in to, da si ga izvajal nad drugimi spletnimi stranmi brez privoljenja (kibi recimo), je kaznivo...

Zdej pa na kratko:
Če imaš pravilno nastavljen strežnik, bi moral videti connectione/requeste iz enega ipja, ki grejo v višave. Nato potrebuješ modul v apacheju, ki zna banati ta določen ip, oz. spremeniti vsebino na katero dostopa ip z neko error napako. Html se servira miljonkrat hitreje kot php, za znatno manj CPU obremenitve. Veliko hujše cifre, kot si jih napisal v ab-ju za to php stran strežnik pri serviranju html-ja ne ganejo. V primeru serviranja napake se postreže minimalen html. Če ti pa to ni povšeči, pa pač nastaviš modul da ban-a uporabnika za določen čas prek iptables-ov in se ne ukvarjaš z njim več.

Toliko na kratko.

1

bb, thx :) Verjetno pa zna biti problem, ker grejo ponavadi IP-ji googla in ostalih v višave.

Če user samo drži tipko F5 (ali pa se mu zatakne) in nima cacha v browserju disablanega, potem zaleže že last modified header in cachiranje php-ja.

Če pa ima user cache izklopljen, oz. se izvajajo dos napadi iz različnih ipjev, prideta v poštev modula modlimitipconn in modevasive. Pomojm se da s tema moduloma in nekimi zmernimi nastavitvami kar dobro zaščitit strežnik pred takimi "napadi"

Najboljša stvar je pa sigurno optimizirat skripto kar se da dobro, narediti dober (event)caching sistem in uporabiti oboje kar sem zgoraj napisal.

LP

2

Me veseli da si našel rešitev za težavo.