Serverlast hoch ssh sehr zäh - Erste Hilfe Maßnahme?

stefkey

Member
Hallo,

was macht man als erstes wenn der Server per SSH nur extrem zäh erreichbar ist... pro Befehl dauert es 2-4 Minuten bis was kommt. Direkt mal neu starten oder nur Dienste nacheinander deaktivieren?

Die CPU Belastung ist laut Controlpanel 0-1%
 
Herausfinden was die Last verursacht, beheben. Falls dabei spezifische Fragen auftauchen, melde dich einfach nochmal.
 
okay, aber der allererste Schritt ist doch den Server neuzustarten oder geht man da anders vor? Da die Website noch nach langem warten erreichbar war lief der apache wohl noch, mysql war wohl down (mysql fehler auf der Wensite) und imap lief auch noch.

per ssh habe ich versucht mit "/etc/init.d/apache2 stop" etwas zu bewegen da ging es nach 10 Minuten warten auch nicht weiter... Dann habe ich halt den Server neu gestartet- jetzt läuft wieder alles und die Logs sind sauber.

Nun aber trotzdem nochmal meine Frage: Was macht man als Erstes?
Server neu starten, oder zuerst mal per ssh Prozesse killen und sehen ob das hilft?

Ahhh ja: da gibts ja noch "kill" hmmm, jetzt ists leider zu spät - er läuft ja wieder. Hätte ich mal was mit kill probieren sollen?
 
top zeigt als durchschnittliche CPU Auslastung >120, sonst nur 0.00 bis 1.00
aber in der Liste war in der Spalte %CPU nur Prozesse mit maximal 0-1%, vondaher für mich nichts Auffällges

Aber es waren ca 120 Apache Prozesse wo sonst eigentlich nur 10-20 aktiv sind. Was hat das zu bedeuten?
 
und ganz viele Festplattenoperationen laut Controlpanel seit dem "Absturz"
über 100 Lese IOps wo sonst nur 20-40 sind.
 
Das könnte entweder an einem fehlerhaften Script gelegen haben, oder es könnte sich um eine Slowloris Attacke gehandelt haben. Ohne Logs kann man das nicht sagen.

PS: Dann mal die Festplatten überprüfen.
 
aha! Danke - gutes Stichwort Slowloris

Wikipedia schreibt:
Es gibt derzeit kein wirksames Mittel gegen einen Slowloris Angriff, aber es gibt Möglichkeiten, dessen Auswirkungen zu verringern. Diese umfassen:

die maximale Anzahl gleichzeitiger Verbindungen des Webserver erhöhen
die maximale Anzahl von Verbindungen von einer IP-Adresse beschränken
die Zeitspanne, die ein Client verbunden bleiben darf, verringern

Speziell für den Apache Webserver gibt es eine Reihe von Modulen, die den Schaden durch Slowloris verringern können, so zum Beispiel mod_limitpconn, mod_qos, mod_evasive, mod_security, mod_noloris, und mod_antiloris.[1][2][3] Seit Version 2.2.15 enthält Apache das Modul mod_reqtimeout, welches von den Entwicklern als offizielle Lösung vorgeschlagen wird.[4]

Weitere Gegenmaßnahmen sind Reverse Proxys, Firewalls, Load Balancer, Layer-3-Switches[5] und die Verwendung eines Webservers, der immun gegen diese Art des Angriffs ist.

Kann ich in einer apache-log sehen das von einer ip viele verbindungen geöffnet wurden? welche Logs soll ich sichten?
 
Die Festplatten würde ich trotzdem überprüfen. Eine defekte Platte kann auch ohne ersichtliche Ursache eine hohe Load verursachen.

Wenn du bei Apache bleiben möchtest, kannst du dir mod_qos, mod_reqtimeout und/oder mod_antiloris ansehen, sowie iptables Regeln wie "iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 80 -j DROP" verwenden, um IPs mit zu vielen Verbindungen zu droppen. Syn-Deflate könnte auch helfen.

Die anderen Möglichkeiten wären auf LiteSpeed umzusteigen (ohnehin besser als Apache), bei welchem man im Panel Verbindungslimits setzen kann. Oder NGINX als Reverse Proxy vor Apache setzen und hier "limit_req" und "limit_conn" zu verwenden und zusätzlich ggf. noch eine Regex für fail2ban schreiben, welche die Error Logs von NGINX ausliest und IPs bannt, die das Connection oder Request Limit erreichen.

Ich bin mir sicher, dass es sogar noch mehr Möglichkeiten gibt. :)
 
Es gibt derzeit kein wirksames Mittel gegen einen Slowloris Angriff,
Natürlich gibt es das. Falls man die in Wikipedia beschriebenen Gegenmittel mit iptables und einem Reverse-Proxy realisiert gibt es eigentlich keine wirkliche Möglichkeit mit Slowloris den Server nur ansatzweise lahm zu legen. Falls man entsprechend viele Bots zusammenkratzt kann man dann auch direkt einen echten DDoS fahren respektiv es kommt dann schon an einen DDoS weil man dann den Kernel (spezifisch connection tracking resp. open-files Limit) und nicht mehr Apache überlastet

op zeigt als durchschnittliche CPU Auslastung >120, sonst nur 0.00 bis 1.0
Das ist nicht (wirklich) die CPU-Auslastung sondern den Durchschnitt der gleichzeitig laufenden Prozesse je Zeitraum. (1,5,15 min)
Eine Auslastung von 1 bei 1 CPU-Kern bedeutet durchschnittlich 100% Belastung, eine Auslastung von 120 entsprechend dass dein System 12'000% seiner Maximalkapazität gibt. Kein Wunder also dass es "zäh" ist.

Ohne Logs kann man das nicht sagen.
/sign
Da es sich um vServer handelt kann es sein dass dein System durch Nachbarn ausgebremst wird, je nach Setup, Anbieter und vServer-Art kann dies die Machine bis hin zu es-geht-nichts-mehr ausbremsen

welche Logs soll ich sichten?
Falls dein vServer auf OpenVZ/Virtuozzo basiert, bitte die /proc/user_beancounters
Ansonsten mal einen relevanten Auszug der Kernel-Log, Apache-Log sowie bitte bei einem solchen Fall von Verlangsamung ein Screenshot von "atop 1" (muss evtl nachinstalliert werden)

Dann mal die Festplatten überprüfen.
Je nach vServer-Art nicht möglich / nicht notwendig.

Kann ich in einer apache-log sehen das von einer ip viele verbindungen geöffnet wurden?
Falls es sich um einen Angriff handelt und dies Slowloris sein sollte (aktuell noch sehr fraglich) dann nicht. Andere Angriffe (wie Loic/Hoic) schon
 
Je nach vServer-Art nicht möglich / nicht notwendig
Oh, ich habe nur "Server" gelesen und nicht auf die Kategorie geachtet. Dann hat sich das mit der Überprüfung natürlich erledigt.

Falls das gleiche noch mal passieren sollte, wäre es sinnvoll, wenn du als erstes "netstat -atun | awk '{print $5}' | cut -d: -f1 | sed -e '/^$/d' |sort | uniq -c | sort -n" ausführst, um zu sehen, ob es IPs mit zu vielen Verbindungen gibt. In den Logs wird darüber nichts zu finden sein (zumindest mit Apache und ohne entsprechende Module). Lediglich GET oder POST Flood lässt sich an den Access Logs gut erkennen.
 
Back
Top