Apache2
als Webserver verwenden wir Apache2 mit PHP4, mod_security, mod_auth_pam, mod_deflate und ZendOptimizer. Desweiteren lassen wir die Logfiles nach einem Tag rotieren. Rotiert wird nach UTC, d.h. wir müssen eine Stunde wieder abziehen (-60).
virt. Host
bsp site-conf /etc/apache2/sites-available/xxxtemplate:
Listen 62.146.xxx.xxx:80 <VirtualHost 62.146.xxx.xxx:80> ServerAdmin webmaster@xxx ServerName www.xxxx ServerAlias xxxx2 DocumentRoot /home/www/xxxx/htdocs <Directory /> Options FollowSymLinks AllowOverride None </Directory> ErrorLog "|/usr/sbin/rotatelogs /home/www/xxxx/logs/error.log.%Y.%m.%d 86400 -60" # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog "|/usr/sbin/rotatelogs /home/www/xxxx/logs/access.log.%Y.%m.%d 86400 -60" combined </VirtualHost>
Verzeichnisschutz/mod_auth_pam
Für den Verzeichnisschutz verwenden wir mod_auth_pam, d.h. wir können die gleichen Logindaten wie am System nutzen. Damit man eine Gruppe nutzen kann, wird libapache2-mod-auth-sys-group benötigt!
eine bsp. .htaccess:
AuthPAM_Enabled on AuthType Basic AuthName "secure area" require group staff
mod_security
/etc/apache2/mods-avaible/mod-security.conf:
<IfModule mod_security.c> # Turn the filtering engine On or Off SecFilterEngine On # Make sure that URL encoding is valid SecFilterCheckURLEncoding On # Only allow bytes from this range SecFilterForceByteRange 1 255 # The audit engine works independently and # can be turned On of Off on the per-server or # on the per-directory basis SecAuditEngine RelevantOnly # The name of the audit log file SecAuditLog /var/log/apache2/audit_log SecFilterDebugLog /var/log/apache2/modsec_debug_log SecFilterDebugLevel 0 # Should mod_security inspect POST payloads SecFilterScanPOST On # Action to take by default SecFilterDefaultAction "deny,log,status:406" # Prevent OS specific keywords SecFilter /etc/ password SecFilter /bin/ ls # Prevent path traversal (..) attacks SecFilter "\.\./" # Weaker XSS protection but allows common HTML tags SecFilter "<( |\n)*script" # Prevent XSS atacks (HTML/Javascript injection) #SecFilter "<(.|\n)+>" </IfModule>
mod_php
Aus Sicherheitsgründen vestecken wir die PHP-Version im HTTP-Header /etc/php4/apache2/php.ini
expose_php = off memory_limit = 50M ; Maximum amount of memory a script may consume (8MB) [Zend] zend_optimizer.optimization_level=15 zend_extension_manager.optimizer=/usr/lib/php4/Zend/lib/Optimizer-2.5.10 zend_extension_manager.optimizer_ts=/usr/lib/php4/Zend/lib/Optimizer_TS-2.5.10 zend_optimizer.version=2.5.10a #zend_extension=/usr/lib/php4/Zend/lib/ZendExtensionManager.so zend_extension=/usr/lib/php4/20020429/php_accelerator_1.3.3r2.so #zend_extension_ts=/usr/lib/php4/Zend/lib/ZendExtensionManager_TS.so phpa.ignore_files ="graph_image.php" phpa.shm_user = www-data phpa.shm_group = www-data
mod_dav
WEBDAV-Modul für Apache. Damit ist es möglich Dateien über https zu manipulieren (ändern,löschen, erstellen usw.).
DavLockDB /tmp/DavLock.myvhost <Location /share> Dav On AuthType Basic AuthName DAV AuthUserFile /opt/apache/etc/htpasswd.myvhost.DAV require valid-user php_flag engine off # oder ForceType text/plain </Location>
Webstatistiken
Wir verwenden webalizer. Pro Web gibt es ein conf-file, z.b. /home/www/_server/stats/xxx.conf. Als Vorlage wurde /etc/webalizer.conf (gelöscht) genommen. Anzupassen sind diese Parameter:
LogFile /home/www/xxx/logs/access.log.2005.11.01 OutputDir /home/www/xxx/htdocs/admin/webalizer Incremental yes HostName xxx Quiet yes HTMLExtension php HTMLPre <? include "../../inc/header.php" ?> HTMLEnd <? include "../../inc/footer.php" ?>
Da wir allerdings die Logs rotieren lassen, bzw. der Name das Datum enthält, kann webalizer nicht automatisch alle logs erfassen. Dazu ist eine kleine Schleife notwendig in /home/www/_server/bin/webalizer.sh (dank an http://www.webmaster-homepage.de/forum/ftopic799.html):
#!/bin/sh for i in $(ls /home/www/xxx/logs/access.log*); do /usr/bin/webalizer -c /home/www/_server/stats/xxx.conf $i done
für jedes Web gibt es einen eigenen for-Abschnitt. Nun kommt noch der cronjob und fertig sind die statistiken
30 05 * * * /home/www/_server/bin/webalizer.sh
Links
http://httpd.apache.org/docs/2.0/programs/rotatelogs.html
http://www.php-accelerator.co.uk/
PHPACA Web Front End
http://www.modsecurity.org/