Installation von Lighttpd mit FastCGI auf Debian 5/6

Lighttpd ist ein schmaller aber sehr leistungsfähiger Webserver, der ebenso
auch wenige Ressourcen benötigt und sich somit ebenfalls dazu eignet ein wenig
in richtung DDoS vorzubeugen. Da dieser Webserver auch bei DDoS-Angriffen
wesentlich mehr standhalten kann als ein gewöhnlicher Apache Server.

Zu beginn bevor wir lighttpd installieren updaten wir erst einmal unser System.

root@localhost:~# apt-get update && apt-get upgrade

Danach installieren wir die Webserver Software

root@localhost:~# apt-get install lighttpd

Nun sollte beim ansurfen der Server-IP-Adresse unser lighttpd server uns
die bisherige Ordnerstruktur ausgeben können.

Ist dies der Fall fahren wir fort.

Nun installieren wir einen MySQL-Server sowie Client auf unserem Server.

root@localhost:~# apt-get install -y mysql-server mysql-client

Währrend der Installation werden wir nach einem MySQL-Kennwort gefragt für den Root
Benutzer. Dort wählen wir ein sicheres Passwort aus.

Nach der Installation von MySQL installieren wir nun PHP.

root@localhost:~# apt-get install -y php5-cgi php5-cli

Nun passen wir erst einmal die PHP Konfiguration an.

root@localhost:~# nano /etc/php5/cgi/php.ini

Dort suchen wir zuerst einmal nach

cgi.fix_pathinfo=1

diese zeile ist auskommentiert. Wir kommentieren sie wieder ein indem wir das Simikolon
am anfang der Zeile entfernen.

Nun führen wir noch ein paar optimierungen durch.

Wir suchen jetzt nach „disable_functions“.

Diese Zeile ersetzen wir durch:

disable_functions = show_source, system, shell_exec, passthru, exec, popen, proc_open, symlink, wordwrap, url_fopen, phpcredits, escapeshellarg, escapeshellcmd, proc_close, proc_get_status, proc_nice, proc_terminate, virtual, ini_alter, ini_restore, set_include_path, php_ini_scanned_files, memory_get_usage

Dadurch deaktivieren wir erst einmal ein paar PHP-„Features“ die falls ein Angriff auf den Server statt finden sollte
für den Angreifer nicht verwendbar sind. Z.b. wird dadurch das Ausführen von bash commands auf der shell unterbunden.

Als nächstes suchen wir nach expose_php = On.

Dies setzen wir auf off

expose_php = Off

Dadurch verhindern wir schon einmal die Ausgabe der PHP Version in den Headern.

Nun speichern wir unsere Konfiguration.
Als nächstes editieren wir die lighttpd konfiguration.

root@localhost:~# nano /etc/lighttpd/lighttpd.conf

Dort ersetzen wir die zu ladenden Module durch:

server.modules = (
	"mod_access",
	"mod_alias",
	"mod_compress",
 	"mod_redirect",
  "mod_evasive",
  "mod_fastcgi",	
  "mod_rewrite",
)

Dadurch fügen wir evasive, fastcgi und rewrite mit hinzu.
Evasive dient zur limitierung von Zugriffen auf den Webserver. Fastcgi benötigen wir für unser PHP und
zu guter letzt der mod_rewrite. Den so manch eine CMS verwendet um die Adressen dynamisch zu überschreiben.

Darunter fügen wir hinzu:

evasive.max-conns-per-ip = 10

Dadurch sagen wir das eine IP-Adresse maximal 10 Verbindungen pro Minute zeitgleich aufbauen darf.
Das unterbindet schon einmal ein paar unerwünschte „Benutzer“ die warscheinlich sogar unfreiwillig zu uns connecten möchten (DDoS).

Als nächstes suchen wir nach server.dir-listing.

Dies stellen wir auf „disable“.

server.dir-listing = "disable"

Dadurch wird die Auflistung von Dateien innerhalb eines Verzeichnisses wo keine index file geschrieben ist deaktiviert.

Nun zu letzt schreiben fügen wir eine neue Zeile ans Ende des Dokumentes ein.
Danach fügen wir diesen Schnipsel mit ein:

 fastcgi.server = ( ".php" =>
      (( "socket" => "/tmp/php-fastcgi.socket",
          "bin-path" => "/usr/bin/php-cgi",
          "max-procs" => 10,
          "bin-environment" => (
              "PHP_FCGI_CHILDREN" => "10",
              "PHP_FCGI_MAX_REQUESTS" => "500" 
          ),
          "broken-scriptfilename" => "enable" 
      ))
  )

Dadurch sagen wir unserem Webserver was er zu tun hat, wenn eine PHP-Datei aufgerufen wird.

Jetzt müssen wir den Webserver restarten dies tuhen wir mit:

root@localhost:~# /etc/init.d/lighttpd restart

Jetzt sollte unser PHP richtig implementiert sein.
Dies können wir testen indem wir eine neue Datei erstellen.

root@localhost:~# nano /var/www/index.php

Wir schreiben folgenden Inhalt in diese Datei und speichern sie.


Nun rufen wir unsere IP-Adresse auf und müssten dann die PHPinfo File ausgegeben bekommen.

scrollen wir nun weiter runter müssten wir die deaktivierten PHP-Funktionen sehen können.
Nun wäre es gut diese zu überprüfen.

Ist alles korrekt dann können wir nun fortfahren.

Jetzt können wir mit dem finalen Part anfangen. Die Installation der restlichen Komponenten

root@localhost:~# apt-get install -y php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Nach Abschluss der Installation müssen wir nun unseren Webserver noch einmal restarten, damit die Änderungen wirksam werden.

root@localhost:~# /etc/init.d/lighttpd restart

Ist dies geglückt können wir nun mit dem Upload unserer Dateien fortfahren.
Hierbei kann ggf. ein Virtualhost für unsere Domäne angelegt werden.

Dazu wird die lighttpd.conf wieder editiert.

$HTTP["host"] == "example.com" {
	server.document-root = "/var/www/example.com/htdocs/" 
    accesslog.filename = "/var/www/example.com/logs/example.com.access.log" 
    server.errorlog = "/var/www/example.com/logs/example.com.error.log"
}

Vorsicht! Hierbei muss die Ordnerstruktur so wie angegeben ist auch vorhanden sein!

Leave a Reply