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/"