Links:
Download: Apache Server Anleitung
Dokumentation zum Apache HTTP Server Version 2.4
Dokumentation zum Apache HTTP Server Version 2.2
Liste der Error Codes
SSL TestPages:
SSLLabs - SSL Server Test
die Programmdatei für den Server heist unter Debian apache2, wenn man es aus den Quellen übersetzt ist es httpd und in anderen Distributionen kann der Server auch noch anders benannt sein.
Befehl | Erklärung |
---|---|
apache2 -v | zeigt Versionsangaben an |
apache2 -V | gibt Informationen, über die Parameter die beim Kompilieren genutzt wurden |
apache2 -l | im Server statisch integrierte Module (wie apache2ctl -l) |
apache2 -L | zeigt alle Optionen die Apache mit den derzeit eingebundenen Modulen versteht, wenn die passenden Optionen nicht dabei sind, muss man erst das Modul dafür laden. (wie apache2ctl -L) |
apache2ctl -t -D DUMP_VHOSTS | zeigt konfigurierte virtuelle Server an. |
apache2ctl -t -D DUMP_MODULES | zeigt geladene Module an |
apache2ctl -t | Syntaxprüfung der Konfigurationsdateien (wie apache2ctl configtest) |
apache2ctl -S | VirtualHost und Laufzeit Parameter anzeigen |
apache2ctl start | Apache Web Server starten |
apache2ctl stop | Apache Web Server stoppen |
apache2ctl status | Apache Web Server Status anzeigen |
apache2ctl graceful | macht einen Neustart des Servers, ähnlich der Option restart. Im Gegensatz zu restart werden bestehende Verbindungen nicht getrennt |
apache2ctl -h | Liste weiter möglichen Optionen |
service apache2 start | (Upstart) Apache2 Server starten |
service apache2 stop | (Upstart) Apache2 Server stoppen |
service apache2 restart | (Upstart) Apache2 Server neu starten/geänderte Konfiguration neu laden |
systemctl start apache2.service | (Systemd) Apache2 Server starten |
systemctl stop apache2.service | (Systemd) Apache2 Server stoppen |
systemctl restart apache2.service | (Systemd) Apache2 Server neustarten |
systemctl status apache2.service | (Systemd) Apache2 Server Status anzeigen |
journalctl -f -u apache2 | Log permanent überwachen und nach Meldungen von Apache2 filtern |
a2enmod include | Modul einbinden (im Beispiel das SSI Modul), danach den Server neu starten |
a2dismod autoindex | Modul deaktivieren, danach den Server neu starten |
a2ensite <Site> | Site aktivieren, danach den Server neu starten |
a2dissite <Site> | Site deaktivieren, danach den Server neu starten |
Apache2 ist Modular aufgebaut um die Fähigkeiten des Betriebssystems besser nutzen zu können. Multi-Processing Modules (MPM) Versionen
Prefork
Laufzeitverhalten des Apache 1.3, der Hauptprozess startet eine in der Konfigurationsdatei festgelegte Anzahl Kindprozesse die wiederum je Kindprozess einen einzigen Thread haben.
Perchild
ähnlich dem mpm_worker, ein Hauptprozess startet eine festgelegte Anzahl Kindprozesse, mit wiederum einer flexible Anzahl an Threads. Im Gegensatz zu mpm_worker können einzelne Kindprozesse unter verschiedenen Benutzernamen und Gruppenkennungen laufen
Worker
ein Hauptprozess startet eine Vielzahl von Kindprozessen die wiederum eine definierte Anzahl an Threads starten.
Verzeichnisse / Dateien | Beschreibung |
---|---|
/etc/apache2 | Konfigurationsverzeichnis |
/etc/apache2/conf.d | für Erweiterungen der StandardKonfiguration |
/etc/apache2/mods-available | verfügbare Module |
/etc/apache2/mods-enabled | eingebundene Module |
/etc/apache2/sites-available | verfügbare Sites |
/etc/apache2/sites-enabled | eingebundene Sites |
/etc/apache2/ssl | SSL Verschlüsselung |
/var/lock/apache2 | Sperrdateien z.B. für WebDav die DAVLock |
Basis-Modul | Beschreibung |
---|---|
mod_access, mod_auth | Rechner und Benutzerbasierte Zugriffskontrolle, allow-deny .htaccess Mechanismus |
mod_actions, mod_cgi / mod_cgid | Scripte als Handler oder CGI-Anwendung ausführen, mod_cgid wird automatisch bei MPM ausgewählt |
mod_alias, mod_dir, mod_userdir | URL-Abbildung und Verzeichnishandling, Ein- Ausblenden bestimmter Verzeichnise in das Document_Root |
mod_asis | Dateien mit eigenen Header senden |
mod_autoindex | automatische Indexerstellung für Verzeichnisse |
mod_env, mod_setenvif | Beeinflussung von Umgebungsvariablen |
mod_imap | serverseitige Image-Maps |
mod_include | Server Site Includes (SSI) |
mod_log_config | Protokollierung |
mod_mime, mod_negotiation | Auswahl und Zuordnung von MIME Type, Sprache und Kodierung |
mod_status | Serverüberwachung |
http | Unterstützung für das HTTP Protokoll |
weiter Module | |
mod_setenvif | |
mod_php5 | PHP Sprache |
mod_negotiation | für den Mehrsprachigen Betrieb einer Seite, wir auch für die Apache Standardseite benötigt |
vhost_alias | VirtualHost, NameVirtualHost |
proxy | Grundlage für die Proxy-Funktionen |
proxy_http | HTTP Proxy-Funktionen |
proxy_ftp | FTP Proxy-Funktionen |
proxy_connect | HTTPS Proxy Tunnel |
deflate | GZip Komprimierung aktivieren |
http2 | HTTP/2 Protokoll aktivieren |
Apache Module
Server:/ # rpm -qa | grep apache apache2-mod_php4-4.3.10-14.4 apache2-mod_perl-2.0.0-4 apache2-2.0.53-9 apache2-mod_python-3.1.3-42 apache2-example-pages-2.0.53-9 apache2-doc-2.0.53-9 apache2-prefork-2.0.53-9
PHP Module php5-exif-5.0.3-14.4 php5-imap-5.0.3-14 apache2-mod_php5-5.0.3-14.4 php5-5.0.3-14.4 php5-ctype-5.0.3-14 php-doc-5.0.3-3 php5-bz2-5.0.3-14 php5-zlib-5.0.3-14 php5-gettext-5.0.3-14 php5-mysql-5.0.3-14 php5-iconv-5.0.3-14 php5-mcrypt-5.0.3-14 php5-mbstring-5.0.3-14
Die wichtigsten Apache Module mod_access.so, mod_alias.so, mod_auth.so, mod_dir.so, mod_log_config.so, mod_mime.so, mod_setenvif.so, libphp5.so
Konfiguration unter Debian im Verz. /etc/apache2/apache2.conf, http.conf und weitere.
a2enmod http2 apachectl restart
<VirtualHost *:443> ... Protocols h2 http/1.1 ... </VirtualHost>
- Benutzer und Gruppe unter der der Server läuft, es darf niemals "root" sein, mit wenigen Rechten und ohne Login-Shell
groupadd www-data useradd -g www-data -d /dev/null -s /bin/false www-data
- Login-Shell ändern, wenn der Apache mithilfe eines Paketes installiert wurde.
chsh -s /bin/false www-data
Apache Grundkonfiguration
# FQDN des Servers möglich sind, der angegebene Port wird # durch den Parameter Listen überschrieben. # host.domain.tld | host.domain.tld:Port | IP | IP:Port ServerName host.domain.tld # E-Mailadresse des Administrators # wird bei Fehlermeldungen gezeigt ServerAdmin admin@domain.tld # Einstellungen über den Umfang der Informationen # die der Server ausgibt. # Minimal | ProductOnly | OS | Full ServerTokens ProductOnly # Art und Weise wie der Server seinen Namen # bestimmt # ON | OFF | DNS UseCanonicalName Off # persistente Verbindung aktiv | deaktiv # ON | OFF KeepAlive On # Wartezeit bis zur nächsten Verbindung # in Sekunden KeepAliveTimeout 15 # Ports und IP die an den Server gebunden werden # auch IPv6 möglich # IP:Port | Port | [IPv6]:Port | [IPv6] Listen 80 # Benutzername und Gruppe mit den der # Apache läuft User www-data Group www-data # Einstellung für den VirtualHost # NameVirtualHost * <VirtualHost *> ServerName www.domain.tld ServerAlias *.domain.tld ServerAdmin admin@domain.tld DocumentRoot /www/domain.tld CustomLog /log/domain.log combined ErrorLog /log/domain.err LogLevel notice </VirtualHost> # Sicherheitseinstellung # Zugriff auf RootEbene verhindern <Directory /> Options None AllowOverride None Order deny,allow Deny from all </Directory>
Ressourcenbeschränkung
Container-Direktiven Directory, Location, Files für die Zugriffskontrolle.
Directory | ein Verzeichnis im Dateisystem des Webservers. |
Location | eine URL (ist relativ zu DocumentRoot "Location / = DocumentRoot"). |
Files | Name einer Datei, die in verschiedenen Verzeichnissen liegen können. |
<Directory /> Options none AllowOverride none Order deny,allow Deny from all </Directory># Zugriff auf ein Verzeichnis erlauben, für localhost, ein Netzwerk und die Domain die auf ".local" endet.
<Directory /srv/www> Deny from all # Allow from .domain.tld Allow from 192.168.2.0/24 .local Allow from 127.0.0.1 </Directory>Bei der Angabe von Optionen, kann man mit vorangestellten Minus (-), Plus (+) oder ohne vorangestellten Zeichen arbeiten
All | Alle Optionen außer MultiViews. Dies ist die Voreinstellung. |
ExecCGI | Die Ausführung von CGI-Skripten, welche mod_cgi verwenden, ist erlaubt |
FollowSymLinks | Der Server folgt symbolischen Links in diesem Verzeichnis. |
SymLinksIfOwnerMatch | Der Server folgt nur symbolischen Links, bei denen die Zieldatei bzw. das Zielverzeichnis der gleichen Benutzerkennung gehört, wie der Link. |
Includes | Server Side Includes, die von mod_include bereitgestellt werden, sind erlaubt, auch #exec cgi. Vorsicht !!! |
IncludesNoExec | SSI erlaubt, #exec cmd und #exec cgi sind jedoch deaktiviert. Es ist aber noch möglich, CGI-Skripte aus ScriptAlias-Verzeichnissen mittels #include virtual einzubinden. |
Indexes | Wenn eine URL, die auf ein Verzeichnis zeigt, in dem sich keine durch "DirectoryIndex" definierte Indexdatei (z.B. index.html) befindet, dann liefert mod_autoindex eine formatierte Auflistung des Verzeichnisses zurück. sollte vermieden werden !!! |
MultiViews | "MultiViews" sind bei der Verwendung von mod_negotiation erlaubt. z.B. mehrere Sprachen. |
Nutzerverzeichnis
- wenn keine Nutzerverzeichnisse bereitgestellt werden müssen, sollten sie
ganz deaktiviert werden
UserDir disable
- Nutzerverzeichnis für einige Nutzer zulassen.
UserDir disable
UserDir enable username1, username2
- wenn alle Nutzer zugelassen sind, sollte "root" und andere Systemuser
deaktiviert werden
UserDir enable
UserDir disable root
Für ein paar Dateien Includes zulassen
<Location /ssi_dir> Options IncludesNoExec </Location>- wenn man HTML-Dateien von SSI-Dateien unterscheiden möchte, kann man dies durch einen speziellen Suffix .shtml oder stm erreichen und mit dem MIME-Typ für zu parsenden Inhalt verknüpfen
<Location /ssi_dir> Options +IncludesNoExec XBitHack full </Location>
- Webdav Module einbinden und Apache Server neu starten
a2enmod dav dav_fs service apache2 restart
- Beispiel vhost Datei, Location definiert ein Virtuelles Verzeichnis auf dem Server, das für den InternetBrowser existiert, gegenüber Directory ein physikalisches Verzeichnis angibt.
# # WebDAV # Alias /webdav /var/www/ <Location "/webdav/"> Dav On AuthType Basic AuthName "WebDAV Zugang" AuthUserFile /etc/apache2/dav.htpasswd <LimitExcept GET OPTIONS> Require valid-user </LimitExcept> Allow from dav.domain.tld # Options None Options +IncludesNoExec </Location> <VirtualHost *:80> ServerName dav.domain.tld # ServerAlias webdav.domain.tld DocumentRoot /var/www CustomLog /var/log/apache2/webdav.log vhost_combined ErrorLog /var/log/apache2/webdav.err.log LogLevel info </VirtualHost> <VirtualHost *:443> ServerName dav.domain.tld DocumentRoot /var/www SSLEngine on SSLCertificateFile /etc/apache2/ssl/dav.domain.tld.crt.pem SSLCertificateKeyFile /etc/apache2/ssl/dav.domain.tld.key SSLCACertificateFile /etc/apache2/ssl/ca.crt.pem </VirtualHost>
- Anlegen der User-Passwort Datei für den Zugriff
htpasswd2 -c /etc/apache2/dav.htpasswd user1
die Datei /etc/apache2/dev.htpasswd wird angelegt und Benutzer "user1" wird eingetragen, weitere User anlegen mit:
htpasswd2 /etc/apache2/dav.htpasswd user2"
- Gnome3
davs://dav.domain.tld/webdav
- KDE Zugriff über HTTP oder HTTPS
webdav://dav.domain.tld/webdav webdavs://dav.domain.tld/webdav
- per Kommandozeile
cadaver open http://localhost/ pwd ls cat <filename> get <filename> lock <filename> ... put <filename> unlock <filename> quit
- Windows
Netzwerkumgebung | Netzlaufwerk verbinden | Verbindung mit einer Website herstellen...
http://dav.domain.tld/webdav
Registry Änderungen für den Zugriff unter Windows (WinXP Server 2003) MS-Artikel
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters] "UseBasicAuth"=dword:00000001
Registry Änderungen für den Zugriff unter Windows 7
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters] "BasicAuthLevel"=dword:00000002
[error] [client xxx] The locks could not be queried for verification against a possible "If:" header. [500, #0] [error] [client xxx] Could not open the lock database. [500, #400] [error] [client xxx] (21)Is a directory: Could not open property database. [500, #1]
Die LockDatenbank-Datei DAVLock wird unter Debian/ubuntu im Ordner /var/lock/apache2/
durch den ApacheServer automatisch angelegt. Dies ist in der dav_fs.conf definiert.
# /etc/apache2/mods-enabled/dav_fs.conf DAVLockDB ${APACHE_LOCK_DIR}/DAVLock
Der WebDavServer muss Zugriff auf die Passwortdatei habe, sonst kann diese zur Authentifizierung nicht herangezogen werden und die Nutzer können nicht zugreifen.
chown root:www-data /etc/apache2/.htpasswd chmod 640 /etc/apache2/.htpasswd
Ein Verzeichnis auf dem Web Server anlegen, das geschützt werden soll und in diesem die Datei .htaccess erstellen. Nach möglichkeit die Passwort Datei nicht im Webspace liegen lassen, da diese sonst heruntergeladen werden kann.
- Passwortabfrage mit .htaccess
AuthType Basic AuthName "Webalizer Zugang" AuthUserFile /etc/apache2/.htpasswd Require valid-user
Erstellt die Passwortdatei /etc/apache2/.htpasswd Datei, für den Benutzer "user" mit verschlüsseltem Passwort, weitere Benutzer kann man ohne die Option -c hinzufügen.
htpasswd -c /etc/apache2/.htpasswd user
- über die .htaccess PHP5 aktivieren, die Datei dann im Verzeichnis des Webservers ablegen.
AddType x-mapp-php5 .php AddHandler x-mapp-php5 .php
In der default-server.conf von Suse den Parameter AuthConfig setzen, da sonst die .htaccess nicht beachtet wird.
# default-server.conf ... # AllowOverride None AllowOverride AuthConfig ...
SSI für .html Seiten mit Hilfe der .htaccess aktivieren, dazu muss die .htaccess Datei in der Wurzel (Root) des Webservers erstellt werden.
AddHandler server-parsed .html
Zertifikat mit OpenSSL erstellen
Mozilla SSL Configuration Generator
- CA Certifikat erstellen
mkdir /etc/apache2/ssl chmod 700 /etc/apache2/ssl openssl req -new -newkey rsa:2048 -days 7300 -x509 -nodes -sha1 -subj "/CN=MyCA" -keyout ca.key -out ca.crt.pem
- für mehrere Domains
openssl req -new -newkey rsa:2048 -nodes -subj "/CN=www.domain1.tld" -keyout domain1.key | openssl x509 \ -req -days 3650 -CA ca.crt.pem -CAkey ca.key -CAcreateserial -sha1 -out domain1.crt.pem openssl req -new -newkey rsa:2048 -nodes -subj "/CN=www.domain2.tld" -keyout domain2.key | openssl x509 \ -req -days 3650 -CA ca.crt.pem -CAkey ca.key -sha1 -out domain2.crt.pem
- Wildcard Zertifikat
openssl req -new -newkey rsa:2048 -nodes -subj "/CN=*.domain.tld" -keyout wildcard.domain.tld.key | openssl x509 \ -req -CA ca.crt.pem -CAkey ca.key -CAcreateserial -sha1 -out wildcard.domain.tld.crt.pem
- MultiDomain Zertifikat
Datei multidomain.cnf erstellen, der CN Name der im Zertifikat als erstes angegeben wird (-subj "/CN=www.domain.tld"), muss auch in der multidomain.cnf mit angegeben werden.
# multidomain.cnf subjectAltName=DNS:www.domain.tld,DNS:ftp.domain.tld,DNS:webdav.domain.tld,DNS:mail.domain1.tld
openssl req -new -newkey rsa:2048 -nodes -subj "/CN=www.domain.tld" -keyout multidomain.tld.key | openssl x509 \ -req -days 3650 -CA ca.crt.pem -CAkey ca.key -CAcreateserial -sha1 -extfile multidomain.cnf \ -out multidomain.tld.crt.pem
2. Variante MultiDomain Zertifikat, alle Domains sind als Common Name angegeben
openssl req -new -newkey rsa:2048 -nodes -subj "/CN=www.domain.tld""/CN=ftp.domain.tld""/CN=mail.domain1.zzz" \ "/CN=host.domain2.zzz" -keyout multidomain.key | openssl x509 -req -days 3650 -CA ca.crt.pem -CAkey ca.key \ -CAcreateserial -sha1 -out multidomain.crt.pem
- Konfiguration anpassen
# /etc/apache2/sites-enabled/vhost ... SSLEngine on # Signiertes Server Zertifikat SSLCertificateFile /etc/apache2/ssl/domain1.crt.pem # Privater Server Schlüssel SSLCertificateKeyFile /etc/apache2/ssl/domain1.key # CA Zertifikat SSLCACertificateFile /etc/apache2/ssl/ca.crt.pem ...
- Module VirtualHost und SSL aktivieren und Apache Server neu starten
a2enmod vhost_alias ssl service apache2 restart
- Apache mit SSL prüfen
apache2ctl -S
<VirtualHost *:80> ServerName www.domain1.tld DocumentRoot /var/www/domain1 ServerAlias domain3.tld domain4.tld CustomLog /var/log/apache2/vhost.log combined ErrorLog /var/log/apache2/vhost.err.log LogLevel notice </VirtualHost> <VirtualHost *:443> ServerName www.domain1.tld DocumentRoot /var/www/domain1 SSLEngine on SSLCertificateFile /etc/apache2/ssl/domain1.crt.pem SSLCertificateKeyFile /etc/apache2/ssl/domain1.key SSLCACertificateFile /etc/apache2/ssl/ca.crt.pem </VirtualHost> <VirtualHost *:443> ServerName www.domain2.tld DocumentRoot /var/www/domain2 SSLEngine on SSLCertificateFile /etc/apache2/ssl/domain2.crt.pem SSLCertificateKeyFile /etc/apache2/ssl/domain2.key SSLCACertificateFile /etc/apache2/ssl/ca.crt.pem </VirtualHost>
#/etc/apache2/mods-enabled/ssl.conf <IfModule mod_ssl.c> SSLRandomSeed startup builtin SSLRandomSeed startup file:/dev/urandom 512 SSLRandomSeed connect builtin SSLRandomSeed connect file:/dev/urandom 512 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog exec:/usr/share/apache2/ask-for-passphrase SSLSessionCache shmcb:${APACHE_RUN_DIR}/ssl_scache(512000) SSLSessionCacheTimeout 300 SSLMutex file:${APACHE_RUN_DIR}/ssl_mutex # enable only secure protocols: SSLv3 and TLSv1, but not SSLv2 SSLProtocol all -SSLv2 -SSLv3 # HSTS Header ink. SubDomain # Modul Headers laden !!! a2enmod headers !!! Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" # (Debian Default) SSLCipherSuite HIGH:MEDIUM:!ADH:!MD5 SSLCipherSuite 'EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA:EECDH:EDH+AESGCM:EDH:ECDH+AESGCM:\ ECDH+AES:ECDH:HIGH:MEDIUM:!RC4:!3DES:!CAMELLIA:!SEED:!aNULL:!MD5:!eNULL:!LOW:!EXP:!DSS:!PSK:!SRP' SSLHonorCipherOrder On SSLCompression Off </IfModule>
!!! für den Parameter Header always set Strict-Transport-Security ist das Modul Headers notwendig !!!
a2enmod headers
- alle Aufrufe des vHosts auf Port 80 auf SSL umleiten, nur noch die SSL Version der Seite ist aufrufbar.
<VirtualHost *:80> Redirect permanent / https://SERVER_NAME/ </VirtualHost>
Wiki - HTTP Strict Transport Security
# /etc/apache2/mods-enabled/ssl.conf ... # HSTS Header ink. SubDomain # Modul Headers laden !!! a2enmod headers !!! Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" ...
- Einstellung testen
# curl -I https://www.domain.tld HTTP/1.1 200 OK Date: Server: Apache Strict-Transport-Security: max-age=31536000; includeSubDomains Accept-Ranges: bytes Vary: Accept-Encoding Content-Type: text/html
Wiki - Perfect Forward Secrecy
Apache und OpenSSL für PFS konfigurieren
ECDHE und DHE sollten an den Anfang der SSLCipherSuite gesetzt werden, wenn man PFS unterstützen möchte.
# /etc/apache2/mods-enabled/ssl.conf ... SSLCipherSuite 'EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA:EECDH:EDH+AESGCM:EDH:ECDH+AESGCM:\ ECDH+AES:ECDH:HIGH:MEDIUM:!RC4:!3DES:!CAMELLIA:!SEED:!aNULL:!MD5:!eNULL:!LOW:!EXP:!DSS:!PSK:!SRP' ...
- PFS testen
openssl s_client -cipher 'ECDHE:DH' -connect www.domain.tld:443
Wiki - HTTP Public Key Pinning
Let’s Encrypt Praxis
Absichern des HTTPS-Protokolls gegen Man-in-the-Middle-Angriffe mit gefälschten, jedoch von einer anerkannten Zertifizierungsstelle (CA) signierten Zertifikaten.
openssl rsa -pubout -in /PFAD/ZUM/SCHLÜSSEL.KEY -outform der | openssl dgst -sha256 -binary | base64
Was die anstehende Version TLS 1.3 bringt
The Transport Layer Security (TLS) Protocol Version 1.3 (DRAFT)
ab Version 2.2.12 ist es mit SNI möglich mehrere virtuelle SSL Hosts auf einer IP laufen zu lassen.
- testen ob SNI verfügbar ist
grep -cU TLS_SNI /usr/lib/apache2/modules/mod_ssl.so
oder bei einem monolithischen apache2
grep -cU TLS_SNI /usr/sbin/apache2
als Ausgabe muß ein Wert größer 0 erscheinen, wenn SNI verfügbar sein soll.
- prüfen ob SSL die Vorraussetzungen erfüllt, das Ergebnis sollte wieder größer 0 sein.
grep -cU SSL_get_servername /usr/lib/libssl.so
openssl s_client -connect domain.tld:443 -tls1
einige openssl s_client Parameter
-ssl2 - just use SSLv2 -ssl3 - just use SSLv3 -tls1_2 - just use TLSv1.2 -tls1_1 - just use TLSv1.1 -tls1 - just use TLSv1 -dtls1 - just use DTLSv1 -fallback_scsv - send TLS_FALLBACK_SCSV -no_tls1_2/-no_tls1_1/-no_tls1/-no_ssl3/-no_ssl2 - turn off that protocol
IPv6 über ReverseProxy
mod_proxy Beschreibung
Module die aktiviert werden müssen
mod_proxy
mod_proxy_http
a2enmod proxy_http
Konfigurationsdatei
/etc/apache2/mods-enabled/proxy.conf
Virtualhost definieren
/etc/apache2/sites-enabled/
ohne Authentifizierung
<VirtualHost www.domain.tld> ServerName www.domain.tld ServerAlias host.domain.tld CustomLog /var/log/apache2/www.domain.tld.log combined ErrorLog /var/log/apache2/www.domain.tld.err.log <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass / http://host2.domain.tld/ ProxyPassReverse / http://host2.domain.tld/ ProxyRequests off </VirtualHost>
mit Authentifizierung
<VirtualHost www.domain.tld> ServerName www.domain.tld ServerAlias host.domain.tld CustomLog /var/log/apache2/www.domain.tld.log combined ErrorLog /var/log/apache2/www.domain.tld.err.log <Proxy *> Order deny,allow Allow from all AuthType Basic AuthName "ProxyPasswort" AuthUserFile /etc/apache2/htpasswd require valid-user </Proxy> ProxyPass / http://host2.domain.tld/ ProxyPassReverse / http://host2.domain.tld/ ProxyRequests off </VirtualHost>
- Installation
apt-get install webalizer geoip-database
wenn die GeoIP- Datenbank fehlt kommt folgende Fehlermeldung beim Aufruf von webalizer
Error Opening file /usr/share/GeoIP/GeoIP.dat
Konfigurationsdatei (default) /etc/webalizer.conf
- Verzeichnis für die Konfiguratinsdateien anlegen.
mkdir /etc/webalizer
Einstellungen in der .conf vornehmen, nach Vorlage der /etc/webalizer.conf sind folgende Parameter anzupassen. Der Parameter Quiet yes gibt an des nach dem ausführen von webalizer keine Mail über den Status gesendet wird, Standard ist Quiet no.
LogFile /path/zur/logdatei Hostname domain.tld OutputDir /path/des/Statisticverzeichnisses Quiet yes
alle .conf Dateien im angegebenen Verzeichnis werden mit folgenden Script abgearbeitet. Am einfachsten speichert man diesen Script unter "/etc/cron.daily" oder "/etc/cron.hourly" je nachdem wie oft die Statistic erneuert werden soll.
#!/bin/sh # Webalizer Script # PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH for a in /etc/webalizer/*.conf; do webalizer -c $a; done
/etc/php5/conf.d/suhosin.ini - Konfigurationsdatei (Debian)
/etc/php.d/suhosin.ini - Konfigurationsdatei (Fedora)
<VirtualHost *> <Directory /path/zum/verzeichnis> ... php_admin_value suhosin.memory_limit= 128M ... </Directory> </VirtualHost>
Suhosin Konfiguration vor dem Einsatz testen, es werden alle Eingriffe von Suhosin im LOG protokolliert.
suhosin.simulation = yes
suhosin.log.syslog.facility = LOG_LOCAL7
Syslog Konfiguration anpassen, das Suhosin LOG auch nach local7 geschrieben wird.
# /etc/rsyslog.conf ... local7.* /var/log/suhosin.log ...
- Loggen einrichten
UserAgent - ist die vom Client übergeben Angabe zum verwendeten Browser und des verwendeten Betriebssystemes
Opera/7.53 (X11; Linux i686; U) [de]
Referer - ist die HTLM Seite die vor der aktuellen Seite abgefragt wurde, also von der Seite von der der Nutzer kommt.
Apache loggt nur bei der Angabe von "NCSA combined" den User-Agent sowie den Referer, falls diese Werte vom Client übergeben werden.
# Common Log Format with Virtual Host LogFormat "%v %h %l %u %t \"%r\" %s %b" vcommon # # Common Log Format (CLF) LogFormat "%h %l %u %t \"%r\" %>s %b" common # # NCSA extended/combined log format LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined # # Referer log format LogFormat "%{Referer}i -> %U" referer # # Agent (Browser) log format LogFormat "%{User-agent}i" agent
CustomLog logs/access.log common CustomLog logs/access.log combined
Über LogFormat werden Aliasse erzeugt und mit CustomLog wird die Logdatei bestimmt und deren Format über den Alias gewählt.
%h: remote host
%l: remote username
%u: HTTP authenticated username
%t: time
%r: HTTP-Request
%s: HTTP-Status
%b: bytes
- in der Datei apache2.conf oder http.conf den Eintrag je nach wunsch ergänzen.
ServerTokens Prod
möglich ist z.B.
ServerTokens Prod Server sends (e.g.): Server: Apache ServerTokens Major Server sends (e.g.): Server: Apache/2 ServerTokens Minor Server sends (e.g.): Server: Apache/2.0 ServerTokens Min Server sends (e.g.): Server: Apache/2.0.41 ServerTokens OS Server sends (e.g.): Server: Apache/2.0.41 (Unix) ServerTokens Full (or not specified) Server sends (e.g.): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
- Konfigurations-Dateien die vorher in /etc/apache2/conf.d
wurden nach /etc/apache2/conf-available/
verschoben
/etc/apache2/conf-available/ /etc/apache2/conf-enabled/
a2enconf <ConfFile> a2disconf <ConfFile>
- Zugriffsrechte für den DocumentRoot der Site setzen
Fehlermeldung:
[authz_core:error] [pid xxx:tid xxx] [client 127.0.0.1:54075] AH01630: client denied by server configuration: /var/www/
<Directory /srv/www/site> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
<VirtualHost *> ... DocumentRoot /srv/www/site ... </VirtualHost>
- der Parameter NameVirtualHost wird nicht mehr genutzt
# ports.conf ... NameVirtualHost * ...
- Dateien unter /etc/apache2/sites-available
werden nur noch .conf Extension berücksichtigt.
# /etc/apache2/apache2.conf ... IncludeOptional sites-enabled/*.conf
a2ensite default a2dissite default
mit dem Paket "apache2-mpm-worker" gibt es Probleme auf einem vServer
Fehlermeldung: "Cannot allocate memory: apr_thread_create"
Lösung: Paket apache2-mpm-prefork installieren
apt-get install apache2-mpm-prefork
[error] [client xxx] (13)Permission denied: exec of '/var/www/cgi-bin/search.pl' failed [error] [client xxx] Premature end of script headers: search.pl
Zugriff für den Apache Server setzen und die Scripte ausführbar machen.
chown -R www-data:www-data /var/www/ chmod 750 /var/www/cgi-bin/*.pl
Zugriff über WebDAV auf ein Verzeichnis, das eine index.html enthält funtioniert nicht.
Fehlermeldung von cadaver
Could not access /dav/ (not WebDAV-enabled?): 405 Method Not Allowed
Fehlermeldung im Apache Log "PROPFIND /dav/ HTTP/1.1" 405
Abhilfe:
<Location "/dav/"> ... <Limit PROPFIND> DirectoryIndex never-encounterable-file-name.html </Limit> </Location>
service apache2 restart
AH02292: Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)
Server Name definieren, der bei einer Fehlermeldung angezeigt werden soll.
# /etc/apache2/conf-available/fqdn.conf
ServerName domain.tld
a2enconf fqdn service apache2 restart
!!! als ServerName nicht den Namen eines VirtualHost nehmen !!!
- beim starten des Apache Servers
AH02200: Loading certificate & private key of SSL-aware server 'www.domain.tld:443'
AH01914: Configuring server dav.su4me.de:443 for SSL protocol
- bei der Verbindung mit Browser oder cardaver (WebDAV Client)
AH01382: Request header read timeout
AH01991: SSL input filter read failed.
Lösung:
die Fehler sind nur LOG-rauschen, haben keine Auswirkungen. Um sie aus den LOGs zu bekommen kann man den LogLevel erhöhen von debug oder info auf notice.
<VirtualHost *:443> ... LogLevel notice </VirtualHost>
- Sperre über Apache .conf Datei einrichten
# /etc/apache2/sites-available/<website>.conf # Bot block Variablen definieren SetEnvIfNoCase User-Agent ^$ bad_bot # blocken, wenn kein User-Agent angegeben ist SetEnvIfNoCase User-Agent "^AhrefsBot" bad_bot SetEnvIfNoCase User-Agent "^MJ12bot" bad_bot SetEnvIfNoCase User-Agent "^Cliqzbot" bad_bot <Directory "/var/www/html"> ... <Limit GET POST HEAD> Order Allow,Deny Allow from all Deny from env=bad_bot </Limit> </Directory>
- Sperre über eine .htaccess Datei im WebOrdner einrichten
# .htaccess # Bot block Variablen definieren SetEnvIfNoCase User-Agent "^AhrefsBot" bad_bot SetEnvIfNoCase User-Agent "^MJ12bot" bad_bot SetEnvIfNoCase User-Agent "^Cliqzbot" bad_bot <Limit GET POST HEAD> Order Allow,Deny Allow from all Deny from env=bad_bot </Limit>
- Sperre über die robots.txt im root des WebServers
# Robots.txt User-agent: MJ12bot Disallow: /
- Modul Info laden und Apache neustarten
a2enmod info service apache2 restart
- unter den folgenden URLs sind jetzt die Apache Status-Seiten verfügbar, per Default ist der Zugriff nur von localhost aus gestattet.
http://servername/server-info http://servername/server-status
- alle aktuellen Apache Verbindungen auf Port 80
netstat -n |grep ESTAB|grep '\:80 '
Apache Proxy Server einrichten
- für Debian folgende Links einrichten
ln -s /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-enabled
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled
Module die geladen werden müssen:
proxy_module, proxy_connect, proxy_http
in der proxy.conf die Zugriffsrechte setzen unter "Allow from .your_domain.com"
<IfModule mod_proxy.c> ProxyRequests Off ProxyPass /server2/ http://192.168.2.10:80/ </IfModule>
- jetz kann man unter http://localhost/server2/ auf den Webservers der auf einen
anderen Rechner läuft zugreifen.
der Schrägstrich hinter /server2/ ist wichtig, bei der Adresse im Browser
genauso wie bei dem Namen in der Option "ProxyPass".
- "ProxyRequests On" wenn der Apache-Server als Proxy für ein Netz
dienen soll.
- Wenn die Einstellungen in der proxy.conf gemacht werden gilt das für alle
Webseiten die auf den Server laufen, man kann auch einen vhost definieren
<VirtualHost *> ServerName server2.domain.tld:80 Serveradmin postmaster@domain.tld ProxyRequests Off ProxyPass / http://192.168.2.10:80/ ProxyPassReverse / http://192.168.2.20:8080/ </VirtualHost>