Apache2 - DOS voorkomen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Sinds twee dagen heb ik mijn website overgeheveld van shared hosting naar een VPS bij Leaseweb - wat dus betekent zelf de webserver opzetten en configureren - standaard LAMP-stack. Leuk! Spannend! Lekker optimaliseren met APC, MySQL instellingen, caching, headers tweaken, iedereen blij.

...totdat rond 3 of 4 uur 's ochtends Baidu langskomt :/. Of tenminste, dat is de theorie - ik geloof dat op een bepaald punt er door iets teveel requests veroorzaakt wordt waardoor Apache gewoon niks meer kan leveren.

Nu heb ik Baidu een IP block gegeven - had ik al eerder gedaan, maar ik had de wildcards verkeerd gedaan. Problem solved.

Alleen nu wil ik dit soort situaties - een effectieve DOS - voorkomen in de toekomst, voor zover mogelijk. Concrete vraag, wat voor instellingen en optimalisaties kan ik nog doen - zij het in Apache, PHP, MySQL, of de hele webserver - om dit in de toekomst te voorkomen? Helpt het bijvoorbeeld als ik de maximum requesttijd omlaag schroef? (deze staat volgens mij nog op de standaard 5 minuten oid).

Zie ook een screenshot van 'top' ten tijde van de downtime; ik heb ondertussen ook mod_status ingesteld zodat Apache mij diepere informatie over actieve requests kan geven. Wat ik zelf kan zien is dat de verschillende Apache2 processen nogal lang draaien, maar ook dat het CPU gebruik en dergelijke niet al te hoog is. Komt het misschien gewoon omdat er teveel processen open staan, dat de limiet van het aantal workers te snel bereikt wordt, maar dat de spiders de pagina's zodanig langzaam downloaden dat de processen niet snel genoeg weer vrijgegeven worden?

iig, suggesties en evt. links naar resources (bij voorkeur met tekst & uitleg) - die ik zelf niet heb kunnen vinden, helaas - zijn welkom. Screenshot:

Afbeeldingslocatie: http://i.imgur.com/sT1VN.png

Acties:
  • 0 Henk 'm!

  • Keiichi
  • Registratie: Juni 2005
  • Laatst online: 21:53
Hoe goed zijn je script geoptimaliseerd? Ik heb zo'n indruk dat ze veel geheugen gebruiken en dat ze vrij lang duren.

Solar @ Dongen: http://solar.searchy.net/ - Penpal International: http://ppi.searchy.net/


Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

DOS of DDOS?

Al gekeken naar Fail2Ban; wordt er vaak ingezet om automagisch een hoog aantal requests van 1 IP te blokkeren.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 04-10 16:17

Kees

Serveradmin / BOFH / DoC
Zo te zien loop je nogal keihard te swappen, ik zou proberen wat aan het geheugengebruik te doen van verschillende dingen (apache, mysql, update-apt niet draaien op dat moment). Verder zou ik je robots.txt aanpassen zodat search spiders niet teveel requests doen (rate limiting).

Kortom, wat ik hier zie is puur een geheugenprobleem, want je zit op dit moment gewoon keihard te swappen = dodelijk voor je performance.

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Keiichi schreef op zondag 01 januari 2012 @ 13:20:
Hoe goed zijn je script geoptimaliseerd? Ik heb zo'n indruk dat ze veel geheugen gebruiken en dat ze vrij lang duren.
Geen idee, het is allemaal 3rd party software: De meeste performance wordt ingenomen door vBulletin (3.8.x). Ook draait er Wordpress, maar die pagina's worden allemaal gecached en dus slechts statisch geserveerd. Zoals ik aangaf in de OP worden alle scripts in APC geladen: ik heb APC zodanig veel geheugen gegeven dat het alle scripts kan bevatten (op het moment wordt 60 MB van de 64 gebruikt). De scripts zelf zijn denk ik dus ook niet het probleem; pagina's worden vaak binnen 300 ms gegenereerd, soms duurt het wat langer, maar dat is voornamelijk de forums homepage, waar waarschijnlijk wat brakke queries op staan.
quote: Kees
Verder zou ik je robots.txt aanpassen zodat search spiders niet teveel requests doen (rate limiting).
Is geregeld: Baidu respecteert deze regels echter niet, of zet een tiental spiders in die ze misschien wel respecteren (de rate limiting), maar met z'n tienen telt het toch wel op. Ik heb Baidu ondertussen een IP ban gegeven.

Maar je hebt waarschijnlijk een punt wat betreft het geheugengebruik: Ik zal kijken of ik wat niet-noodzakelijke processen uit kan zetten, en anders bij de hosting extra geheugen aanvragen.

Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

Om geheugen te besparen zou je Apache kunnen inruilen voor een lichtere server zoals lighttpd of nginx.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
8088 schreef op zondag 01 januari 2012 @ 17:47:
Om geheugen te besparen zou je Apache kunnen inruilen voor een lichtere server zoals lighttpd of nginx.
En anders keep-alive uitzetten en/of php in fastcgi-modus draaien.

300ms voor een pagina is ook vrij lang.

Acties:
  • 0 Henk 'm!

  • AE86
  • Registratie: Februari 2004
  • Laatst online: 27-02-2023
Mocht je nog een keer het probleem ondervinden kun je eens een fullstatus van Apache opvragen. Hieruit wordt al beter duidelijk wat er exact gebeurd.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

500M voor een Apache + MySQL + Memcached + APC server is niet bepaald veel...

MySQL wil al redelijk wat gebeugen gebruiken, Apache is niet heel zuinig. APC probeert alles in z'n geheugen te houden en Memcached is ook specifiek alleen geheugenintensief. Naast het draaien van al dit spul heb je ook nog je webrequests waarbij (waarschijnlijk dus) veel geheugen gebruikt wordt.

Ik zou dus gewoon wat meer geheugen bestellen... 512MB is niet meer van deze tijd ;)

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

Wolfboy schreef op zondag 01 januari 2012 @ 21:31:
512MB is niet meer van deze tijd ;)
Voor een niet al te druk vBulletin forum is 512MB meer dan toereikend. Het moet alleen wel slim benut worden. Het geheugen uitbreiden is slechts symptoombestrijding en nodeloze geldverspilling als er niet eerst naar andere (voor de hand liggende) opties gekeken wordt.

[ Voor 29% gewijzigd door 8088 op 01-01-2012 21:43 ]

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

8088 schreef op zondag 01 januari 2012 @ 21:42:
[...]

Voor een niet al te druk vBulletin forum is 512MB meer dan toereikend. Het moet alleen wel slim benut worden. Het geheugen uitbreiden is slechts symptoombestrijding en nodeloze geldverspilling als er niet eerst naar andere (voor de hand liggende) opties gekeken wordt.
Heb je goed gezien hoeveel er in de swap zit ten opzichte van het fysieke geheugen? ;)
Daarnaast is 512MB echt niet meer dan toereikend voor de situatie die YopY heeft. Veder is meer geheugen vaak een goedkopere en sneller optie om resultaat te boeken.

Acties:
  • 0 Henk 'm!

  • 8088
  • Registratie: December 2000
  • Niet online

8088

NaN

Erkens schreef op zondag 01 januari 2012 @ 21:49:
Heb je goed gezien hoeveel er in de swap zit ten opzichte van het fysieke geheugen? ;)
Ja.

Do you seek to engage in or have you ever engaged in terrorist activities, espionage, sabotage, or genocide?


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 00:01
8088 schreef op zondag 01 januari 2012 @ 21:42:
Voor een niet al te druk vBulletin forum is 512MB meer dan toereikend. Het moet alleen wel slim benut worden. Het geheugen uitbreiden is slechts symptoombestrijding en nodeloze geldverspilling als er niet eerst naar andere (voor de hand liggende) opties gekeken wordt.
Helemaal mee eens.

Screenshot in de TS heeft veel tasks; ik neem aan dat je mpm-prefork gebruikt en ~140+ Apache processen draaien? MaxClients heb je in ieder geval nog niet (juist) configured; hiermee zou je thrashing mee moeten voorkomen (48%sy 22%wa komt voornamelijk door kswapd zo te zien).

Daarmaast kun je kiezen uit any of:
  • KeepAliveTimeout verlagen
  • Je scripts fixen, als requests lang duren
  • ipv. mpm-prefork mpm-worker draaien; threads schalen iets beter dan forks (echter, de PHP-manual over mpm-worker).
Mocht dat niet helpen, dan zou je Apache kunnen swappen voor nginx (zoals iemand al suggereerde). Enige vereiste is dat je al je content onder dezelfde user served.

Acties:
  • 0 Henk 'm!

  • Keeper of the Keys
  • Registratie: Augustus 2002
  • Laatst online: 15-09 21:18
Alleen je totale MySQL geheugen gebruik (swap + res = virt) is al ca. 1,5x je fysieke geheugen, en elke apache instance gebruikt doodleuk ca. 0.5x je fysieke geheugen.

Je swaparea die in gebruik is is 3,5x je fysieke geheugen (van de 8x in totaal beschikbaar), dus idd of minder geheugen slobberende daemons gebruiken/scripts optimaliseren of meer RAM toevoegen (en afgaande op het huidige gebruik zou ik dan minstens naar 2GB RAM gaan).

Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 00:01
Keeper of the Keys schreef op maandag 02 januari 2012 @ 12:07:
Alleen je totale MySQL geheugen gebruik (swap + res = virt) is al ca. 1,5x je fysieke geheugen
Nee. Je fysieke geheugengebruik kun je terugvinden onder RES; VIRT bevat ook mmap'ed files, shared(!) libraries en allocated stack/heap.

Acties:
  • 0 Henk 'm!

  • CAPSLOCK2000
  • Registratie: Februari 2003
  • Laatst online: 02-10 22:42

CAPSLOCK2000

zie teletekst pagina 888

Pas op, RES is verradelijk. RES laat alleen zien wat je daadwerkelijk aan fysiek geheugen gebruikt. Zodra je begint te swappen dan daalt RES voor het proces dat uitgeswapt wordt. Als je bij mysql "5900 bytes" ziet betekend dat dus niet dat MySQL slecht 5900 bytes nodig heeft, maar dat er nog maar 5900 bytes over zijn en dat de rest is uitgeswapt.

This post is warranted for the full amount you paid me for it.


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 00:01
Dat is ook een goede. En over swap zegt de developer van htop:
It is not possible to get the exact size of used swap space of a process. Top fakes this information by making SWAP = VIRT - RES, but that is not a good metric, because other stuff such as video memory counts on VIRT as well (for example: top says my X process is using 81M of swap, but it also reports my system as a whole is using only 2M of swap. Therefore, I will not add a similar Swap column to htop because I don't know a reliable way to get this information (actually, I don't think it's possible to get an exact number, because of shared pages).
Zodra TS z'n geheugengebruik weer op orde heeft kun je dus pas weer zien wat MySQL echt gebruikt.

Acties:
  • 0 Henk 'm!

  • HarmoniousVibe
  • Registratie: September 2001
  • Laatst online: 02-10 11:31
Zo te zien is je bottleneck geheugen. Als je dan opcode caching gebruikt (dit moet allemaal in het geheugen worden geplaats!), dan snij je jezelf daarmee in de vingers. Dingen als APC/Memcached en zelfs MySQL-caching vreten geheugen. Dat soort grappen worden meestal alleen uitgehaald als je enorm CPU-bounded bent en/of veel geheugen over hebt. Ik zou opcode caching uitzetten en alleen zeer conservatieve MySQL-caching doen. Dan kom je nog geheugen tekort waarschijnlijk, maar dan is de kans kleiner dat je processen starven en helemaal niet meer antwoorden.

12 × LG 330Wp (Enphase) | Daikin FTXM-N 3,5+2,0+2,0kW | Panasonic KIT-WC03J3E5 3kW


Acties:
  • 0 Henk 'm!

  • Dikke Foaf
  • Registratie: November 2002
  • Laatst online: 29-09 00:03
Hoeveel trafiek krijgt deze website te verwerken? Hoeveel is het in de piekmoment? Hoeveel is het minimum en hoeveel tijdens je zogenaamde 'DOS'?
Heb je er na de IP block van Baidu nog steeds last van?
Zoja, van waar komen de requests dan? Allemaal 1 IP? Of random?
En aan welke snelheid komen ze binnen?

Zelf hebben we ook een site draaien waarop Baidu nogal agressief spidert, maar dat gaat dan eerder over ongeveer 1 req/s van de Baidu spider. Al hebben we ook eens gehad dat Baidu even lekker los ging, maar na 2 dagen was dat weer over. Google bot spidert ongeveer 8x minder dan Baidu.
Verder heb ik ook eens onze eigen url ingetikt in Baidu en we stonden dan nog zelfs niet bovenaan in de resultaten :)
Hier ging Baidu even los voor bijna 2 dagen.
De load die er voor de 7e te zien is, is ook bijna uitsluitend afkomstig van Baidu.


Gezien je beperkte geheugen zou ik proberen om het maximum aantal MySQL en Apache2 childs te gaan beperken. Je kan daarmee natuurlijk wel minder requests tegelijk serveren, vraag is hoeveel je er moet kunnen afhandelen per seconde natuurlijk.
Ik zou ook het geheugengebruik van APC en memcached proberen te verminderen zodat je meer ruimte laat in het geheugen.
Eventueel niet alle PHP files in APC gaan steken, maar eerder de meest gebruikte zodat je toekomt met minder memory(40MB bijv.), consequentie is natuurlijk iets meer CPU use.
Of APC naar de disk laten cachen ipv naar het memory (minder snel natuurlijk).
Is memcached strikt nodig? APC kan ook 'user items' cachen...

Hoe staat je keepalive geconfigureerd?
Hoe lang duurt het gemiddeld om de meest opgevraagde pagina's binnen te krijgen?
En hoeveel requests zijn er nodig om de meest opgevraagde pagina's binnen te krijgen?

Eventueel proberen om te vertrekken van een minimal install (Ubuntu bijv?) zodat er om te beginnen alleen draait wat nodig is en je ook alleen extra toevoegt wat nodig is?

[ Voor 8% gewijzigd door Dikke Foaf op 04-01-2012 02:35 ]


Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

8088 schreef op zondag 01 januari 2012 @ 21:42:
[...]

Voor een niet al te druk vBulletin forum is 512MB meer dan toereikend. Het moet alleen wel slim benut worden. Het geheugen uitbreiden is slechts symptoombestrijding en nodeloze geldverspilling als er niet eerst naar andere (voor de hand liggende) opties gekeken wordt.
Het kan meer dan toereikend zijn, maar niet met alle bovengenoemde software pakketten erbij die allemaal een deel van het geheugen opeisen.

Dan zal je een aantal consessies moeten doen wat me niet zinnig lijkt. De TS heeft er (zo te zien) wel plezier in om z'n server te tweaken en met nieuwe software te spelen, dan heb je gewoon meer geheugen nodig.

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 00:01
Juist als je wat wilt tweaken kun je meer met minder geheugen. Er zijn voldoende tips gegeven die sowieso geheugengebruik wat inperken, maar we moeten het doen met een screenshotje van top en helaas blijft een reactie van TS vooralsnog uit...
Pagina: 1