Skip to main content

Apache Grundinstallation und Absicherung mit SSL und mod_php

Diese Anleitung wurde für Debian Jessie geschrieben.

In diesem Artikel geht es darum Apache mit PHP (mod_php) zu installieren und grundlegend sicher zu konfigurieren.

Folgendes soll erreicht werden (Stand 11.12.2015):

  • Keine Ausgabe von Versionsinformationen bei Apache und PHP
  • Verwendung sicherer Ciphers und Hashingalgorithmen bei SSL
  • Versteckte Dateien sollen nicht abrufbar sein (z.B. .git- oder .svn-Verzeichnisse)
  • DocumentRoots sicher machen

Nach Änderungen an den Konfigurationsdateien die Apache-Syntax testen und neu laden:

# apache2ctl configtest
Syntax OK
# systemctl restart apache2.service

Installation von apache2.4 mit PHP und SSL

aptitude install apache2 libapache2-mod-php5 php5

Apache 2.4 absichern

Ausgabe von Versionsinformationen bei Apache deaktivieren

/etc/apache2/conf-available/security.conf

ServerTokens Prod
ServerSignature Off

ggf. zusätzliche Header mitsenden (mod_headers aktivieren: „a2enmod headers“)

/etc/apache2/conf-available/security.conf

# prevent MSIE from interpreting files as something else than declared by HTTP headers
Header set X-Content-Type-Options: "nosniff"
# disable loading pages from this site as frames
Header set X-Frame-Options: "sameorigin"

Zugriff auf Verzeichnisse von Versionskontrollsystemen wie Git und SVN unterbinden. Aktivieren mit „a2enconf cvs-deny“

/etc/apache2/conf-available/cvs-deny.conf

RedirectMatch 403 (?i)\.git
RedirectMatch 403 (?i)\.svn

ggf. Zugriff auf alle versteckten Verzeichnisse unterbinden (kann auch Probleme machen). Aktivieren mit „a2enconf hidden-deny“

/etc/apache2/conf-available/hidden-deny.conf

RedirectMatch 404 (?i)/\..+

SSL soll möglichst sicher konfiguriert (soweit die alten SSL-Libs bei Debian es erlauben) werden. Wie man SSL mit modernen Ciphers sicher konfiguriert steht in diesem Artikel.

Ggf. mod_security installieren, ein Filter und IDS gegen verschiedene Angriffe auf den Webserver (XSS, SQL injection):

# aptitude install libapache2-mod-security2
# cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

ein sicherer Apache default-Vhost (auch als Vorlage für weitere Vhosts verwendbar)

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    ServerName www.FQDN
    ServerAlias FQDN
    ServerAdmin webmaster@FQDN
    DocumentRoot /var/www/FQDN
    
    LogLevel info
    ErrorLog ${APACHE_LOG_DIR}/FQDN-error.log
    CustomLog ${APACHE_LOG_DIR}/FQDN-access.log combined
</VirtualHost>

<VirtualHost _default_:443>
    ServerName www.FQDN
    ServerAlias FQDN
    ServerAdmin webmaster@FQDN
    DocumentRoot /var/www/FQDN
    
    LogLevel info ssl:warn
    ErrorLog ${APACHE_LOG_DIR}/FQDN-error.log
    CustomLog ${APACHE_LOG_DIR}/FQDN-access.log combined
    
    SSLEngine on
    SSLCertificateFile	/etc/apache2/ssl/FQDN.pem    # contains the domain certificate and intermediate certificates
    SSLCertificateKeyFile /etc/apache2/ssl/FQDN.key
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

PHP absichern

Ausgabe von Versionsinformationen bei PHP deaktivieren

/etc/php5/apache2/php.ini

expose_php=Off

bei Bedarf können weitere Sicherungsmaßnahmen getroffen werden

/etc/php5/apache2/php.ini

# ggf. Dateiuploads deaktivieren
file_uploads=Off

# Ausführung von entferntem Code unterbinden
allow_url_fopen=Off
allow_url_include=Off

# Zugriff auf das Dateisystem einschränken
open_basedir="/var/www/html/"