Medidas para asegurar el servidor web Apache (Parte-4)

Creación de directorios ServerRoot

Esta directiva indica el directorio en el cual vive su instalación de Apache. Por defecto, se encuentra ubicada en etc/apache2 o etc/httpd. En condiciones normales, Apache es iniciado por el usuario root y cambia al usuario definido en la directiva User. Si usted ha de cambiar la ubicación del ServerRoot, entonces tendrá que cambiar los permisos correspondientes a este directorio para que solo root pueda hacer cambios.

  1. Digamos que decide ubicar su directorio ServerRoot en /usr/local/apache, este directorio contendrá los subdirectorios binconf y logs.
  2. Se recomienda que cree dichos directorios como root usando comandos similares a los siguientes:mkdir /usr/local/apache cd /usr/local/apache mkdir bin conf logs chown 0 . bin conf logs chgrp 0 . bin conf logs chmod 755 . bin conf logs
  3. Se asume que //usr y /usr/local son modificables únicamente por el usuario root. Cuando usted instala el ejecutable httpd, debe asegurarse de que también esté protegido:cp httpd /usr/local/apache/bin chown 0 /usr/local/apache/bin/httpd chgrp 0 /usr/local/apache/bin/httpd chmod 511 /usr/local/apache/bin/httpd

Asegurar tu servidor Web Apache con ModSecurity

1 Instalación

1.1 Debian

mod_security está disponible como un paquete Debian en los repositorios Debian por defecto, por lo tanto la instalación es tan simple como esto:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.2 Ubuntu

La instalación es exactamente la misma que en Debian Sarge:

apt-get install libapache2-mod-security
a2enmod mod-security
/etc/init.d/apache2 force-reload

1.3 Fedora

En Fedora, puede instalar y activar mod_security de la siguiente manera:

yum install mod_security
/etc/init.d/httpd restart

Ahora debe encontrar el archivo /etc/httpd/conf.d/mod_security.conf que ya contiene una configuración básica de mod_security:

vi /etc/httpd/conf.d/mod_security.conf



# Example configuration file for the mod_security Apache module

LoadModule security_module modules/mod_security.so
 
<IfModule mod_security.c>
 
    # Turn the filtering engine On or Off
    SecFilterEngine On
 
    # The audit engine works independently and
    # can be turned On of Off on the per-server or
    # on the per-directory basis
    SecAuditEngine RelevantOnly
 
    # Make sure that URL encoding is valid
    SecFilterCheckURLEncoding On
 
    # Unicode encoding check
    SecFilterCheckUnicodeEncoding On
 
    # Only allow bytes from this range
    SecFilterForceByteRange 1 255
 
    # Cookie format checks.
    SecFilterCheckCookieFormat On
 
    # The name of the audit log file
    SecAuditLog logs/audit_log
 
    # Should mod_security inspect POST payloads
    SecFilterScanPOST On
 
    # Default action set
    SecFilterDefaultAction «deny,log,status:406»
 
    # Simple example filter
    # SecFilter 111
 
    # Prevent path traversal (..) attacks
    # SecFilter «\.\./»
 
    # Weaker XSS protection but allows common HTML tags
    # SecFilter «<( |\n)*script»
 
    # Prevent XSS atacks (HTML/Javascript injection)
    # SecFilter «<(.|\n)+>»
 
    # Very crude filters to prevent SQL injection attacks
    # SecFilter «delete[[:space:]]+from»
    # SecFilter «insert[[:space:]]+into»
    # SecFilter «select.+from»
 
    # Require HTTP_USER_AGENT and HTTP_HOST headers
    SecFilterSelective «HTTP_USER_AGENT|HTTP_HOST» «^$»
 
    # Only accept request encodings we know how to handle
    # we exclude GET requests from this because some (automated)
    # clients supply «text/html» as Content-Type
    SecFilterSelective REQUEST_METHOD «!^GET$» chain
    SecFilterSelective HTTP_Content-Type «!(^$|^application/x-www-form-urlencoded$|^multipart/form-data)»
 
    # Require Content-Length to be provided with
    # every POST request
    SecFilterSelective REQUEST_METHOD «^POST$» chain
    SecFilterSelective HTTP_Content-Length «^$»
 
    # Don’t accept transfer encodings we know we don’t handle
    # (and you don’t need it anyway)
    SecFilterSelective HTTP_Transfer-Encoding «!^$»
 
    # Some common application-related rules from
    # http://modsecrules.monkeydev.org/rules.php?safety=safe
 
    #Nuke Bookmarks XSS
    SecFilterSelective THE_REQUEST «/modules\.php\?name=Bookmarks\&file=(del_cat\&catname|del_mark\&markname|edit_cat\&catname|edit_cat\&catcomment|marks\&catname|uploadbookmarks\&category)=(<[[:space:]]*script|(http|https|ftp)\:/)»
 
    #Nuke Bookmarks Marks.php SQL Injection Vulnerability
    SecFilterSelective THE_REQUEST «modules\.php\?name=Bookmarks\&file=marks\&catname=.*\&category=.*/\*\*/(union|select|delete|insert)»
 
    #PHPNuke general XSS attempt
    #/modules.php?name=News&file=article&sid=1&optionbox=
    SecFilterSelective THE_REQUEST «/modules\.php\?*name=<[[:space:]]*script»
 
    # PHPNuke SQL injection attempt
    SecFilterSelective THE_REQUEST «/modules\.php\?*name=Search*instory=»
 
    #phpnuke sql insertion
    SecFilterSelective THE_REQUEST «/modules\.php*name=Forums.*file=viewtopic*/forum=.*\’/»
 
    # WEB-PHP phpbb quick-reply.php arbitrary command attempt
 
    SecFilterSelective THE_REQUEST «/quick-reply\.php» chain
    SecFilter «phpbb_root_path=»
 
    #Topic Calendar Mod for phpBB Cross-Site Scripting Attack
    SecFilterSelective THE_REQUEST «/calendar_scheduler\.php\?start=(<[[:space:]]*script|(http|https|ftp)\:/)»
 
    # phpMyAdmin: Safe
 
    #phpMyAdmin Export.PHP File Disclosure Vulnerability
    SecFilterSelective SCRIPT_FILENAME «export\.php$» chain
    SecFilterSelective ARG_what «\.\.»
 
    #phpMyAdmin path vln
    SecFilterSelective REQUEST_URI «/css/phpmyadmin\.css\.php\?GLOBALS\[cfg\]\[ThemePath\]=/etc»
 
</IfModule>
 

Des pues reiniciar el servidor apache