Apache2: Unterschied zwischen den Versionen

Aus crazylinux.de
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 105: Zeile 105:
[http://mambo.edes.at/index.php?option=com_docman&Itemid=30&task=view_category&catid=81&order=dmdate_published&ascdesc=DESC,''PHPACA Web Front End'']
[http://mambo.edes.at/index.php?option=com_docman&Itemid=30&task=view_category&catid=81&order=dmdate_published&ascdesc=DESC,''PHPACA Web Front End'']
http://www.modsecurity.org/
http://www.modsecurity.org/
[[Category: WWW]]
[[Category: Apache]]

Version vom 10. November 2005, 19:58 Uhr

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

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/