Apache2: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 77: | Zeile 77: | ||
</VirtualHost> | </VirtualHost> | ||
==mod_auth_pam | ==Module== | ||
===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 | 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! | libapache2-mod-auth-sys-group benötigt! | ||
Zeile 87: | Zeile 89: | ||
require group staff | require group staff | ||
==mod_security== | ====mod_auth_mysql==== | ||
alternativ kann man die User für den Schutz auch in eine MySQL-DB ablegen, anstatt z.b. aus passwd (PAM) | |||
*MySQL-DB und Tabelle anlegen | |||
<pre> | |||
CREATE TABLE `clients` ( | |||
`username` varchar(25) NOT NULL default '', | |||
`passwd` varchar(25) NOT NULL default '', | |||
`groups` varchar(25) NOT NULL default '', | |||
PRIMARY KEY (`username`), | |||
KEY `groups` (`groups`) | |||
) ENGINE=MyISAM DEFAULT CHARSET=latin1; | |||
INSERT INTO `clients` VALUES ('<username>', password('<password>'), '<group>'); | |||
</pre> | |||
*Modul in der Site (VirtualHost) aktivieren | |||
<pre> | |||
#/etc/apache2/sites-available/domain.com | |||
Auth_MySQL_Info localhost mysqluser mysqlpasswd | |||
</pre> | |||
und Schutz aktivieren (.htaccess) | |||
<pre> | |||
AuthMYSQL on | |||
AuthMySQL_Authoritative on | |||
AuthMySQL_DB mysqldb | |||
AuthMySQL_Password_Table clients | |||
AuthMySQL_Group_Table clients | |||
AuthMySQL_Empty_Passwords off | |||
AuthMySQL_Encryption_Types MySQL | |||
AuthName Adminarea | |||
AuthType Basic | |||
<Limit GET POST> | |||
require group www | |||
</Limit> | |||
</pre> | |||
===mod_security=== | |||
/etc/apache2/mods-avaible/mod-security.conf: | /etc/apache2/mods-avaible/mod-security.conf: | ||
Zeile 132: | Zeile 175: | ||
[http://www.heise.de/security/artikel/69070/0 Die Apache-Firewall: Web-Server mit mod_security absichern] | [http://www.heise.de/security/artikel/69070/0 Die Apache-Firewall: Web-Server mit mod_security absichern] | ||
==mod_php== | ===mod_php=== | ||
Aus Sicherheitsgründen vestecken wir die PHP-Version im HTTP-Header /etc/php4/apache2/php.ini | Aus Sicherheitsgründen vestecken wir die PHP-Version im HTTP-Header /etc/php4/apache2/php.ini | ||
expose_php = off | expose_php = off | ||
Zeile 144: | Zeile 187: | ||
zend_extension=/usr/lib/php4/20020429/php_accelerator_1.3.3r2.so | zend_extension=/usr/lib/php4/20020429/php_accelerator_1.3.3r2.so | ||
#zend_extension_ts=/usr/lib/php4/Zend/lib/ZendExtensionManager_TS.so | #zend_extension_ts=/usr/lib/php4/Zend/lib/ZendExtensionManager_TS.so | ||
PHP kann man auch mit Hilfe von fastcgi als cgi installieren. Desweiteren ist es dann möglich, die einzelnen | PHP kann man auch mit Hilfe von fastcgi als cgi installieren. Desweiteren ist es dann möglich, die einzelnen PHP-prozesse unter verschiedenen Usern laufen zu lassen. Die Anleitung gibts hier: http://www.debianhowto.de/doku.php/de:howtos:sarge:apache2_php-fcgi | ||
==mod_dav== | ===mod_dav=== | ||
[http://httpd.apache.org/docs/2.0/mod/mod_dav.html WEBDAV-Modul] für Apache. Damit ist es möglich Dateien über https zu manipulieren (ändern, löschen, erstellen usw.). | [http://httpd.apache.org/docs/2.0/mod/mod_dav.html WEBDAV-Modul] für Apache. Damit ist es möglich Dateien über https zu manipulieren (ändern, löschen, erstellen usw.). | ||
Zeile 166: | Zeile 206: | ||
==mod_evasive== | ===mod_evasive=== | ||
mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack. It is also designed to be a detection and network management tool, and can be easily configured to talk to ipchains, firewalls, routers, and etcetera. mod_evasive presently reports abuses via email and syslog facilities. | mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack. It is also designed to be a detection and network management tool, and can be easily configured to talk to ipchains, firewalls, routers, and etcetera. mod_evasive presently reports abuses via email and syslog facilities. | ||
Zeile 178: | Zeile 218: | ||
http://httpd.apache.org/docs/2.0/programs/rotatelogs.html<br> | http://httpd.apache.org/docs/2.0/programs/rotatelogs.html<br> | ||
http://www.php-accelerator.co.uk/<br> | http://www.php-accelerator.co.uk/<br> | ||
[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'']<br> | ||
http://www.modsecurity.org/ | http://www.modsecurity.org/<br> | ||
http://www.nuclearelephant.com/projects/mod_evasive/ | http://www.nuclearelephant.com/projects/mod_evasive/ | ||
[[Category: WWW]] | [[Category: WWW]] |
Version vom 25. Juni 2006, 22:10 Uhr
als Webserver verwenden wir Apache2 mit PHP4, mod_security, mod_auth_pam, mod_deflate. Desweiteren lassen wir die Logfiles nach einem Tag rotieren. Rotiert wird nach UTC, d.h. wir müssen eine Stunde wieder abziehen (-60).
Multihome-Umgebung
In einer Multihome-Umgebung laufen z.b. mehrere verschiedene Domains/Apache-Prozesse auf einem Server. Diese Domains haben aber überhaupt nichts miteinander zu tun. D. h. wiederrum, daß die Domains bzw. der User, die dahinter stehen, natürlich auch kein Zugriff auf die jeweiligen Dateien der andere Domains haben. Gleiches gilt natürlich für den Apache-Prozess! Desweiteren sollten die Apache-Prozesse aus Sicherheitsgründen in einem Chroot laufen. Diese Funktionalität bringt mod-security mit. Alternativen zu Chroot wären noch z.b. BSD-Jails, Xen, uml (user mode linux), virtuozzo(openvz), bochs, Sun-Zones, qemu bzw. vmware, da chroot auch nicht immer das beste ist, siehe hier. Der Vorteil beim chroot von mod-security ist, das man selbst kein eigenes Chroot bauen muß, da mod-security den chroot-call erst am Ende der Konfiguration macht. Der Apache-Prozess ist also in seinem Document-Root gefangen.
Für die technische Umsetzung bedeutet das folgendes:
- Jede Domain hat eine eigenen User/Gruppe (der User ist nicht in seiner eigene Gruppe!, der User bekommt nur r-Rechte, die Gruppe rw-Rechte. In dieser Gruppe muß auch der User sein, der die Seiten der Website pflegt.)
- Chroot ins Document-Root
- Jede Domain hat eigene apache2_xxx.conf
- init-script "multidomain"-fähig machen
- Der Sitename darf keine Zahlen am anfang haben, sonst gehen die Scripts nicht.
apache2.conf
Bisher war die globale Config in der Datei apache2.conf. Das wollen wir jetzt ändern, aber so, daß die orginal-apache-scripts noch funktionieren. Deshalb kopieren wir apache2.conf nach apache2_common.conf und entfernen die letzte Zeile. Nun eine neue apache2.conf:
# include global-apache2.conf include /etc/apache2/apache2_common.conf # Include the virtual host configurations: Include /etc/apache2/sites-enabled/[^.#]
apache2_website.conf
Nun kommt die eigentliche Website-Config /etc/apache2/chroot/xxx.conf
# include global-apache2.conf include /etc/apache2/apache2_common.conf LockFile /data/www/meine.de/www/var/lock/apache2/accept.lock User wwwxxx Group wwwxxx ServerRoot "/data/www/meine.de/www" SecChrootLock /data/www/meine.de/www/log/modsec_chroot.lock SecChrootDir /data/www/meine.de/www # PidFile: The file in which the server should record its process # identification number when it starts. PidFile /data/www/meine.de/www/var/run/apache2.pid Listen 10.0.0.2:82 <VirtualHost 10.0.0.2:82> ServerName www.meine.de ServerAdmin webmaster@website.tld DocumentRoot htdocs/ <Directory /> Options FollowSymLinks AllowOverride all </Directory> ErrorLog log/error.log php_admin_value open_basedir /var/www/user1/user1-1.tld/ php_admin_value upload_tmp_dir /var/www/user1/user1-1.tld/temp php_admin_value session.save_path /var/www/user1/user1-1.tld/temp/ php_admin_value safe_mode on CustomLog "|/usr/sbin/rotatelogs log/access.log.%Y-%m-%d 86400 -60" combined </VirtualHost>
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>
Module
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_auth_mysql
alternativ kann man die User für den Schutz auch in eine MySQL-DB ablegen, anstatt z.b. aus passwd (PAM)
- MySQL-DB und Tabelle anlegen
CREATE TABLE `clients` ( `username` varchar(25) NOT NULL default '', `passwd` varchar(25) NOT NULL default '', `groups` varchar(25) NOT NULL default '', PRIMARY KEY (`username`), KEY `groups` (`groups`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `clients` VALUES ('<username>', password('<password>'), '<group>');
- Modul in der Site (VirtualHost) aktivieren
#/etc/apache2/sites-available/domain.com Auth_MySQL_Info localhost mysqluser mysqlpasswd
und Schutz aktivieren (.htaccess)
AuthMYSQL on AuthMySQL_Authoritative on AuthMySQL_DB mysqldb AuthMySQL_Password_Table clients AuthMySQL_Group_Table clients AuthMySQL_Empty_Passwords off AuthMySQL_Encryption_Types MySQL AuthName Adminarea AuthType Basic <Limit GET POST> require group www </Limit>
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>
Für bestimmte Verzeichnisse kann man den Filter auch ausstellen:
<Location /upload.php> # Do not inherit filters from the parent folder SecFilterInheritance Off </Location>
http://www.gotroot.com/mod_security+rules
Die Apache-Firewall: Web-Server mit mod_security absichern
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
PHP kann man auch mit Hilfe von fastcgi als cgi installieren. Desweiteren ist es dann möglich, die einzelnen PHP-prozesse unter verschiedenen Usern laufen zu lassen. Die Anleitung gibts hier: http://www.debianhowto.de/doku.php/de:howtos:sarge:apache2_php-fcgi
mod_dav
WEBDAV-Modul für Apache. Damit ist es möglich Dateien über https zu manipulieren (ändern, löschen, erstellen usw.).
Alias /phparea /home/gstein/php_files Alias /php-source /home/gstein/php_files DavLockDB /tmp/DavLock.myvhost <Location /php-source> Dav On AuthType Basic AuthName DAV AuthPAM_Enabled on require group staff php_flag engine off # oder ForceType text/plain </Location>
mod_evasive
mod_evasive is an evasive maneuvers module for Apache to provide evasive action in the event of an HTTP DoS or DDoS attack or brute force attack. It is also designed to be a detection and network management tool, and can be easily configured to talk to ipchains, firewalls, routers, and etcetera. mod_evasive presently reports abuses via email and syslog facilities.
Detection is performed by creating an internal dynamic hash table of IP Addresses and URIs, and denying any single IP address from any of the following:
- Requesting the same page more than a few times per second
- Making more than 50 concurrent requests on the same child per second
- Making any requests while temporarily blacklisted (on a blocking list)
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/
http://www.nuclearelephant.com/projects/mod_evasive/