====== Apache 2.2 unter Debian 6.0 ====== Apache 2.2 unter Debian 6.0 einrichten: ===== Installation ===== * Pakete einspielen (''apache2-mpm-prefork'' wegen [[server::PHP]]): # apt-get install apache2 apache2-mpm-prefork * Apache anhalten: # /etc/init.d/apache2 stop ===== Konfiguration ===== * Module aktivieren: # a2enmod rewrite * Default-Einstellungen ändern: * Request-Timeout verringern (''Timeout''). * Security through obscurity (''ServerTokens'' und ''ServerSignature''). # vi /etc/apache2/apache2.conf Timeout 60 # war: 300 # vi /etc/apache2/conf.d/security ServerTokens Prod # war: Full ServerSignature Off # war: On * Zugriffsbeschränkungen erweitern: # vi /etc/apache2/conf.d/security-local # # Deny access to various files that should not be present on the server. # Order allow,deny Deny from all # # Deny access to sensitive files. # Order allow,deny Deny from all # # Deny access to complete filesystem. # Order deny,allow Deny from all Options none AllowOverride none # # Deny access to directories that should not be present on the server. # Order allow,deny Deny from all * Logging konfigurieren: # vi /etc/apache2/conf.d/other-vhosts-access-log # Define an access log for VirtualHosts that don't define their own logfile #CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined # Don't log if environment variable dontlog is set (see conf.d/dontlog.conf). CustomLog ${APACHE_LOG_DIR}/access.log vhost_combined env=!dontlog * Loggen des Zugriffs auf das [[server::Monit]]-Token verhindern: # vi /etc/apache2/conf.d/dontlog.conf # env=!dontlog zusaetzlich bei Log-Anweisung noetig: # CustomLog .../access.log vhost_combined env=!dontlog # Loggen des Zugriffs auf Monit-Token verhindern SetEnvIf Request_URI "^\/monit_xxx\/token$" dontlog * Falls gewünscht, nur auf einer bestimmten IP-Adresse horchen: # vi /etc/apache2/ports.conf [...] Listen 81.169.132.218:80 # war: Listen 80 [...] Listen 81.169.132.218:443 # war: Listen 443 * Apache starten und Lauffähigkeit überprüfen: # /etc/init.d/apache2 start # ps -Naf | grep apache2 root [...] /usr/sbin/apache2 -k start www-data [...] /usr/sbin/apache2 -k start [...] # less /var/log/apache2/error.log [notice] Apache/2.2.3 configured -- resuming normal operations * Quelle: [[http://www.apachesecurity.net/|Apache Security]] ===== Websites ===== * Websites werden als [[http://httpd.apache.org/docs/2.2/vhosts/name-based.html|Name-based Virtual Host]] realisiert. * Die Webseiten eines Virtual Host //// liegen unter ''/var/www/''. * Der "www"-Prefix kommt weg: //%%http://www..de//irgendwas%%// wird umgeschrieben nach //%%http://.de//irgendwas%%//. * Website "default" deaktivieren: # a2dissite default * Website "disorganized" konfigurieren: # mkdir /var/www/disorganized # vi /etc/apache2/sites-available/disorganized ServerAdmin webmaster@disorganized.de ServerName disorganized.de DocumentRoot /var/www/disorganized/ Order allow,deny Allow from all AllowOverride none ServerName www.disorganized.de Redirect permanent / http://disorganized.de/ * Site "disorganized" aktivieren: # a2ensite disorganized # /etc/init.d/apache2 force-reload * Redirect von //www// überprüfen (vorher ''/var/www/disorganized/index.html'' anlegen, sonst gibt es beim zweiten ''curl''-Aufruf den Fehlercode 403): $ curl -I http://www.disorganized.de/ HTTP/1.1 301 Moved Permanently Location: http://disorganized.de/ [...] $ curl -I http://disorganized.de/ HTTP/1.1 200 OK [...] ===== SSL ===== * SSL-Modul aktivieren: # a2enmod ssl * Verzeichnis für Zertifikat und privaten Schlüssel anlegen, Dateien kopieren, Berechtigungen setzen: # mkdir /etc/apache2/ssl # chmod 700 /etc/apache2/ssl # cp disorganized.de.cert disorganized.de.key /etc/apache2/ssl # chown root:root /etc/apache2/ssl/* # chmod 444 /etc/apache2/ssl/disorganized.de.cert # chmod 400 /etc/apache2/ssl/disorganized.de.key * DH-Parameter erzeugen. Bei älteren Apache-Servern (< 2.4.8) muss diese Datei ans Ende des Zertifikats angehangen werden. openssl dhparam -out dhparams.pem 2048 * Starke Verschlüsselung erzwingen: # vi /etc/apache2/conf.d/ssl.conf # https://weakdh.org/sysadmin.html SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA SSLHonorCipherOrder on * SSL für Website konfigurieren: # vi /etc/apache2/sites-available/disorganized [...] SSLEngine On SSLCertificateFile /etc/apache2/ssl/nilpferd.disorganized.de.cert SSLCertificateKeyFile /etc/apache2/ssl/nilpferd.disorganized.de.key ServerAdmin webmaster@disorganized.de ServerName disorganized.de DocumentRoot /var/www/disorganized/ Order allow,deny Allow from all AllowOverride none RewriteEngine on # https://www.disorganized.de/... -> https://disorganized.de/... RewriteCond %{HTTP_HOST} ^www.disorganized.de$ [NC] RewriteRule . https://disorganized.de%{REQUEST_URI} [R=301,L] * Apache neu starten, SSL-Initialisierung überprüfen: # /etc/init.d/apache2 force-reload # less /var/log/apache2/error.log [...] [info] Loading certificate & private key of SSL-aware server [...] [info] Configuring server for SSL protocol [info] Server: Apache/2.2.3, Interface: mod_ssl/2.2.3, Library: OpenSSL/0.9.8c [notice] Apache/2.2.3 configured -- resuming normal operations * CA-Root-Zertifikat im DER-Format zum Download bereitstellen (durch die Endung ''.crt'' wird gleich der richtige Content-Type verwendet, der einfachen Import per Browser erlaubt, sonst muss eine "AddType"-Zeile zur Apache-Konfiguration hinzugefügt werden): # openssl x509 -inform PEM -outform DER -in ca-cert.pem -out ca-cert.crt # cp ca-cert.crt /var/www/disorganized/downloads ===== Zertifikat von StartSSL ===== [[http://www.startssl.com|StartSSL]] bietet kostenlose Server-Zertifikate an, das Root-Zertifikat ist bei den meisten Browsern schon installiert. * Anleitung: http://www.heise.de/security/artikel/SSL-fuer-lau-880221.html * Noch eine Anleitung: http://jasoncodes.com/posts/startssl-free-ssl * Privaten Schlüssel generieren: # openssl genrsa -out disorganized.de.key 4096 * CSR (//certificate signing request//) erzeugen: # openssl req -new -key disorganized.de.key -out disorganized.de.csr Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Baden-Wuerttemberg Locality Name (eg, city) []:Karlsruhe Organization Name (eg, company) [Internet Widgits Pty Ltd]:Disorganized Web Services Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:disorganized.de Email Address []:hostmaster@disorganized.de * Über die "Express Lane" des Start-SSL-Control-Panels das Server-Zertifikat beantragen. * Keinen privaten Schlüssel erzeugen lassen, sondern CSR hochladen. * Im Schritt "Add Domains" muss eine Subdomain angegeben werden, ''www'' bietet sich da an. * Zertifikat über Control Panel/Toolbox/Retrieve Certifikate runterladen. * Im Verzeichnis ''/etc/apache2/ssl'' den bisherigen privaten Schlüssel und das Zertifikat gegen die StartSSL-Exemplare austauschen. * Intermediate-Zertifikat runterladen: # curl -o /etc/apache2/ssl/sub.class1.server.ca.pem http://www.startssl.com/certs/sub.class1.server.ca.pem * Zertifikat einrichten: # vi /etc/apache2/sites-available/disorganized [...] [...] SSLCertificateFile /etc/apache2/ssl/disorganized.de.cert SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem SSLCertificateKeyFile /etc/apache2/ssl/disorganized.de.key * [[Monit]] überprüft den MD5-Fingerprint des Zertifikats und muss deshalb angepasst werden: # openssl x509 -in /etc/apache2/ssl/disorganized.de.cert -fingerprint -md5 MD5 Fingerprint=38:71:0A:E6:62:C3:3E:41:40:A7:96:C8:63:71:20:7C [...] # vi /etc/monit/includes/apache2 [...] if failed host 81.169.132.218 port 443 type TCPSSL certmd5 38-71-0A-E6-62-C3-3E-41-40-A7-96-C8-63-71-20-7C [...]