LEMP Stack unter Debian Wheezy

In dieser Anleitung wird die Installation von LEMP unter Debian Wheezy (Linux, Nginx, Mysql und PHP) Schritt für Schritt erklärt. Nginx wird auch mal poetisch als der „unsinkbare Webserver“ bezeichnet. Dank des Threadpools kann er viele TCP-Verbindungen (auch sehr langsame wie die von Smartphones) bei geringer Systembelastung gleichzeitig bedienen.

MySQL ist ein leistungsstarkes RDBMS (Relational Database Management System) und steht kostenlos zur Verfügung. Es ist die Basis prominenter Webapplikationen wie z.B. von WordPress oder Joomla.
Bei der Erstellung dieses Artikels wurden die einzelnen Schritte auf einem Rackhansa VPS (Virtual Private Server) getestet. Diese Anleitung funktioniert auf jeder Standardinstallation von Debian Wheezy.

OS Update

Zuerst bringen Sie Ihr Betriebssystem auf den aktuellsten Stand, damit alle Sicherheitsupdates installiert werden können:

 apt-get update && apt-get upgrade 

Installation MySQL Server

Die Installation von MySQL ist ganz simpel mit:

 apt-get install mysql-server 

Während der Installation werden Sie, wie im folgendem Bild zu sehen ist, aufgefordert das root-Passwort Ihres MySQL-Servers zu vergeben.

Und noch eine Kleinigkeit:

 # Systemtabellen initialisieren
mysql_install_db

# Machen Sie Ihre MySQL-Instanz sicher
/usr/bin/mysql_secure_installation 

Installation NGINX

Nur ein Befehl:

 apt-get install nginx 

Bei jeder Änderung von nginx-Konfigurationsdateien können Sie mit dem folgenden Befehl den nginx-Webserver neustarten. Weil nginx nach der Installation nicht automatisch gestartet wird, starten Sie ihn jetzt neu.

 service nginx restart 

Test: Mit ifconfig können Sie die Adresse Ihres vServer anzeigen lassen. Mit einem Browser rufen Sie http://meine-ip-adressse/ auf (oder Sie stellen sicher, dass Ihre DNS-Einstellungen korrekt sind und verwenden http://www.meine-domain.de/ anstelle der IP-Adresse) und werden mit folgender Nachricht begrüßt:

 Welcome to nginx! 

nginx für die Zusammenarbeit mit php5-fpm konfigurieren:
Editieren Sie die Datei /etc/nginx/sites-enabled/default, danach muss nginx neu gestartet werden.

 # finden Sie die Zeile 
server_name localhost;

# und ändern Sie in:
server_name www.meine-domain.tld;

# finden Sie die Zeile 
index index.html index.htm;

# und ändern Sie in (index.php wird jetzt auch als index akzeptiert)
index index.html index.htm index.php;

# Editieren Sie den Block für php-Verarbeitung wie folgt:
        location ~ .php$ {
                fastcgi_split_path_info ^(.+.php)(/.+)$;
        #       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        #
        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        } 

Nginx muss neu gestartet werden:

 service nginx restart 

PHP

Für php5-fpm müssen nur wenige Pakete angegeben werden, der Rest wird über Abhängigkeiten geregelt:

 apt-get install php5-fpm php5-mysql 

Konfiguration: cgi.fix_pathinfo ist standardmäßig auf 1 gesetzt. Dies kann unter Umständen zu einer Sicherheitslücke führen. Entsprechende Hinweise finden Sie als Kommentar in der Konfigurationsdatei php.ini. Editieren Sie die Datei mit „nano /etc/php5/fpm/php.ini und suchen Sie die Zeile mit cgi.fix_pathinfo heraus und ändern Sie diese wie folgt:

 cgi.fix_pathinfo=0 

Unter Debian wird php5-fpm bereits mit dem schnellen Unix Socket /var/run/php5-fpm.sock vorkonfiguriert. Nur nochphp5-fpm muss gestartet werden:

 service php5-fpm restart 

PHP-Info Page
Editieren Sie eine neue Datei: nano /usr/share/nginx/www/info.php mit folgendem Inhalt:

 <?php phpinfo(); ?> 

Test: Mit einem Browser rufen Sie http://meine-ip-adressse/info.php. Die Ausgabe von info.php sollte wie folgt aussehen:

PHPMyAdmin

Es ist angenehmer mit einer graphischen Oberfläche Ihren Datenbankserver verwalten zu können. Im Folgenden wird PHPMyAdmin so installiert, dass Sie nur auf localhost darauf zugreifen können und Ihre Datenbank somit vor Angriffen aus dem Internet geschützt ist. Für einen gelegentlichen Zugriff auf Ihre Datenbank ist der Aufbau eines SSH-Tunnels viel komfortabler als das Hantieren mit SQL-Befehlen.
Der Hauptvorteil PHPMyAdmin gegen einen SSH-Protokoll auszutauschen ist, dass SSH weniger Angriffsfläche als jede Webapplikation für Hacker bietet und mit weniger Aufwand abgesichert werden kann (sicherere Passwörter).
Zuerst führen wir die Installation mit einer Standard-Konfiguration für apache2 durch, damit PHPMyAdmin für sich selbst die notwendigen MySQL-Tabellen anlegen kann.

 apt-get install phpmyadmin

# Akzeptieren Sie die automatische Konfiguration für Apache2

# Configure database for phpmyadmin with dbconfig-common?
# Bitte antworten Sie mit Yes.

# Dann werden Sie aufgefordert, das root Password ihrer MySQL-installation einzugeben
# und das Passwort für phpmyadmin zu vergeben. 

Nun legen wir eine nginx-Konfigurationdatei für phpmyadmin an, editieren Sie die neue Web-Serverkonfiguration mit nano /etc/nginx/sites-available/phpmyadmin und füllen Sie diese mit folgendem Inhalt:

 server {
        listen       localhost:8000;
        server_name  localhost;

        root         /usr/share/phpmyadmin;
        index        index.php;

        location ~ .php$ {
                fastcgi_split_path_info ^(.+.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
        } 
} 

Dabei bedeutet die Zeile listen localhost:8000, dass diese Website vom Internet aus nicht erreichbar ist. Aktivieren Sie diese neue Konfiguration mit folgenden Befehlen:

 cd /etc/nginx/sites-enabled/
ln -s ../sites-available/phpmyadmin .
service nginx restart 

SSH-Tunnel mit folgenden Befehlen:

 # Einen neuen Benutzer anlegen (als root auf Ihrem Server)
useradd -m test
passwd test

# Falls Sie unter Windows arbeiten, können Sie z.B. putty für den Tunnelaufbau verwenden.

# Als normaler Benutzer auf Ihrem Rechner in Ihrem Büro
# SSH-Tunnel (ersetzen Sie www.meine-domain.tld mit dem richtigen Hostname oder IP-Adresse)
ssh -fCN test@www.meine-domain.tld  -L 8000:localhost:8000

# Die Option des obigen Befehls:
# -f :  ssh wird als Hintergrundprozess gestartet
# -N : kein remote command wird ausgeführt 
# -C : Datenkompression wird eingeschaltet
# 8000:localhost:8000 : der entfernte TCP-Port 8000 wird mit localhost:8000 verbunden. 

URL Ihrer PHPMyAdmin: http://localhost:8000/
Ihr Server ist jetzt für echte Applikationen bereit.

WAF (Web Application Firewall)

WAF bietet einen erweiterten Schutz für Web-Applikationen. Dieses Thema wird in einem separaten Artikel behandelt.