Archiv

Archiv für die Kategorie ‘Apache – PHP’

hahaha Webcrawler legt den Apachen lahm / DDoS

19. Januar 2011 Keine Kommentare

Vor ein paar Tagen war ich auf einem Rechner zu Gast, der sofort nach dem Start des Apache2 so viele Prozesse öffnete bis dieser in die Knie geht. Das error.log Dokument zeigt dies auch an ...server reached MaxClients setting...

Das access.log File zeigt zu diesem Zeitpunkt folgende Einträge an:

62.226.71.77 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
67.230.15.201 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
82.228.255.82 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
67.230.15.201 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
67.230.15.201 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
85.247.44.177 - - [01/Dec/2010:19:13:10 +0100] "GET /apache2-default/ HTTP/1.1" 200 44 "-" "hahaha"
83.119.147.38 - - [01/Dec/2010:19:13:10 +0100] "GET /apache2-default/ HTTP/1.1" 200 44 "-" "hahaha"
62.226.71.77 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
83.119.147.38 - - [01/Dec/2010:19:13:10 +0100] "GET /apache2-default/ HTTP/1.1" 200 44 "-" "hahaha"
84.24.148.207 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
81.185.240.110 - - [01/Dec/2010:19:13:10 +0100] "GET /apache2-default/ HTTP/1.1" 200 44 "-" "hahaha"
77.180.6.60 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
62.226.71.77 - - [01/Dec/2010:19:13:10 +0100] "GET /apache2-default/ HTTP/1.1" 200 44 "-" "hahaha"
86.20.52.230 - - [01/Dec/2010:19:13:10 +0100] "GET /apache2-default/ HTTP/1.1" 200 44 "-" "hahaha"
87.147.56.201 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
82.168.48.203 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
84.29.49.141 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
82.168.211.13 - - [01/Dec/2010:19:13:10 +0100] "GET /apache2-default/ HTTP/1.1" 200 44 "-" "hahaha"
207.161.34.194 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
77.180.6.60 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
87.94.124.6 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
212.99.78.126 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
83.119.147.38 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
83.119.147.38 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
87.208.63.191 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
77.180.6.60 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"
212.99.78.126 - - [01/Dec/2010:19:13:10 +0100] "GET / HTTP/1.1" 302 303 "-" "hahaha"

Es ist ziemlich leicht zu erkennen was hier passiert. Verschiedene IP Adressen rufen mittels des User Agents „hahaha“ die Webseite so oft auf, bis dem Apache2 bzw. dem Server an sich die Puste ausgeht. Man könnte hier von einer Distributed Denial of Service (DDoS) Attacke sprechen.
Der Angriff erfolgt dabei von so vielen IP Adressen, dass die Rechner die diese Anfragen absenden vermutlich nicht einmal was davon mitbekommen. Am Webserver der Domain wo alle diese Anfragen zusammenlaufen ergibt dies pro Sekunde mehrere hundert Abfragen und den damit verbundenen Ausfall.

Da die IP Adressen sehr unterschiedlich waren, war der kleinste gemeinsame Nenner dieser Anfragen der User Agent „hahaha“. Dieser wurde mit folgenden beiden Zeilen in der vhost.conf (oder auch im .htaccess File) geblockt:

# Block User-Agent Apache2
SetEnvIfNoCase User-Agent "hahaha" bad_bot
Deny from env=bad_bot

Danach erfolgten keine Angriffe mehr. Es scheint als könnte der Angreifer bei seinen Bots nur das Ziel steuern, nicht aber den Namen. Ein Glück…

KategorienApache - PHP

[error] Unable to configure RSA server private key

10. September 2010 Keine Kommentare

Heute zeigte mir ein Apache2 Webserver mit geplantem SSL Support folgende Meldung an:


[Fri Sep 10 12:29:02 2010] [error] Unable to configure RSA server private key
[Fri Sep 10 12:29:02 2010] [error] SSL Library Error: 185073780 error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch

Das hat zumeist den Grund, dass Key und SSL Zertifikat nicht zusammenpassen. Um zu prüfen ob Key (.key), Zertifikat (.crt) und Zertifikatrequest (.csr) genau zusammenpassen kann man folgende Befehle ausführen:

openssl x509 -noout -modulus -in dateiname.crt | openssl md5
openssl rsa -noout -modulus -in dateiname.key | openssl md5
openssl req -noout -modulus -in dateiname.csr | openssl md5

Nur wenn alle 3 md5 Hashes genau zusammenpassen ist alles richtig gelaufen. In meinem Fall wurde die .csr Datei falsch übertragen und es kam ein Zertifikat dabei heraus, dass nicht genau zum Key passte. Der Apache2 quittierte dann beim Starten mit oben genannter Meldung den Dienst.

KategorienApache - PHP

PHP Sessionverwaltung mittels Cronjob

1. Mai 2008 1 Kommentar

Da viele Webseiten auf per PHP generierten Sessiondateien basieren, die im in der php.ini angegebenen session.save_path abgespeichert werden, muss man sich Gedanken machen wie man diese wieder los werden möchte.

PHP erstellt Sessions, aber löscht diese nicht. Warum weiß niemand. Also muss ein Cronjob her der dies übernimmt:

# Öffnen der Zieldatei für unseren Cronjob
nano /etc/cron.d/php
# Einfügen einer Zeile dieser Art
09,39 *     * * *     root   for i in /home/www/*/phptmp; do find $i -type f -cmin +1440 -print0 | xargs -r -0 rm; done

Dieser Cronjob schaut in jedem Verzeichnis unter /home/www/ ob es in einem Unterverzeichnis einen Ordner namens „phptmp“ gibt. Diesen verwende ich immer für die Sessions => php.ini session.save_path = /home/www/beispiel.de/phptmp

Dort werden alle Dateien die älter sind als 1440 Minuten = 1 Tag gesucht und anschließend gelöscht.

Wer dies nicht tut und gleichzeitig eine große Webapplikation im laufen hat, wird bald merken was es bedeutet dass die minimale Dateigröße in einem Linux Dateisysteme immer der bei der Partitionierung angegebenen Blockgröße entspricht (ext3 default = 1024 Byte).

KategorienApache - PHP