info@goblinsoft.org 54-11-51992787
Apache Security
October 21, 2015
0

El servidor HTTP Apache es empleado en el 70% de los sitios web en el mundo debido a su versatilidad en plataformas Unix (BSD, GNU/Linux, etc.), Microsoft Windows, Macintosh y otras.

En este post veremos la seguridad general del servidor, en caso de implementar mas módulos (php, MySQL, MongoDB, etc) se deben aplicar mas configuraciones correspondientes a los mismos.

Directorio root:

/var/www (Debian/Ubuntu)
/var/www/html (RHEL/CentOS/Fedora)
Archivo de configuración:

/etc/apache/apache2.conf (Debian/Ubuntu)
/etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
Archivos de error y acceso:

Debian/Ubuntu:

/var/log/apache2/error_log
/var/log/apache2/access_log
RHEL/CentOS/Fedora:

/var/log/httpd/error_log
/var/log/httpd/access_log
Comprobar la versión de apache y mantenerlo actualizado:

# Apachectl –v (Debian/Ubuntu)
# apt-get install apache2

# httpd –v (RHEL/CentOS/Fedora)
# yum update httpd

Ocultar la versión de apache y OS:
# vi /etc/apache2/conf.d/security (Debian/Ubuntu)
# vi /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)

ServerTokens Prod #Solo muestra el nombre “Apache”
ServerSignature Off #Oculta la firma del servicio
TraceEnable Off #previene ataques de cross-site scripting

Agregar pagina de error:

# vi /etc/apache2/sites-enables/website.com
# vi /etc/httpd/sites-enables/website.com

 

ServerName website.com

ErrorDocument 404 /var/www/website.com/error.html

DocumentRoot /var/www/website.com

# Other directives here
Deshabilitar el listado de directorio donde no se encuentra el archivo index:
Agregar en la configuración del sitio:
Options -Indexes

Deshabilitar los módulos innecesarios:

Deshabilitamos los módulos status (monitoreo web del servidor) y autoindex (entrega un listados de todos los archivos en los directorio que no contienen index)

# a2dismod status
# a2dismod autoindex

Deshabilitar la ejecución de CGI:
Agregar en la configuración del sitio:
Options –Indexes -ExecCGI

Limitar el tamaño de la request:
Por default no tiene límite, lo que puede permitir realizar un ataque DDOS, el valor se puede ajustar acorde a la necesidad del sitio, en este ejemplo el límite es de 500K
LimitRequestBody 512000

Activar SSL y forzar el tráfico por el puerto 443:

Activar SSL:

a2enmod ssl (Activa el modulo SSL)
a2ensite website (Activa el sitio website)

SSL por default por el módulo rewrite:

a2enmod rewrite

Modificar el archivo:

# vi /etc/apache2/sites-enables/website-ssl
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all

Tiene que quedar así:
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Protección ante ataques DDOS:
# vi /etc/apache/apache2.conf (Debian/Ubuntu)
# vi /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)

TimeOut: Limita el timeout de las sesiones creadas, por default el valor es 300 segundos, dependiendo del tipo de request el servidor maneje es conveniente mantener el valor bajo en los sitios susceptibles a ataques.
MaxClients: Limita la cantidad de conexiones simultaneas que el servidor va a manejar, el valor default es 256.
KeepAliveTimeout: Es el tiempo límite que el servidor va a esperar la próxima request antes de cerrar la conexión, el valor default es 5.
LimitRequestFieldSize: Limita el tamaño del header de HTTP Request.
LimitRequestFields: Limita el número de campos del header HTTP Request que va a aceptar del cliente. El valor default es 100, es conveniente mantener el valor bajo debido a los ataques DDos mediante http request headers.

Habilitar mod_evasive:

Instalación:

# apt-get install libapache2-mod-evasive (Debian/Ubuntu)
# yum update && yum install mod_evasive (RHEL/CentOS/Fedora)

Activar modulo:

# a2enmod mod-evasive (Debian/Ubuntu)
# LoadModule evasive20_module modules/mod_evasive20.so (RHEL/CentOS/Fedora)

Modificar valores de modulo:

# vi /etc/apache2/mods-available/mod-evasive.load (Debian/Ubuntu)
# vi /etc/httpd/conf.d/mod_evasive.conf (RHEL/CentOS/Fedora)

DOSHashTableSize: Define el tamaño de la tabla de Hash, es útil aumentar su tamaño si nuestro servidor recibe una gran cantidad de peticiones, pero así mismo la memoria del servidor deberá ser también mayor.

DOSPageCount: Número de peticiones de una misma página (url) que se pueden realizar dentro del intervalo definido en DOSPageInterval. Si excede este valor, el cliente queda en la lista de bloqueo.

DOSSiteInterval: Periodo en segundos en segundos, para el umbral de petición de cualquier tipo.

DOSSiteCount: Número de peticiones que un cliente puede hacer dentro del intervalo definido en DOSSiteInterval. Si excede este valor, el cliente queda en la lista de bloqueo.

DOSPageInterval: Periodo en segundos para el umbral de petición de páginas.

DOSBlockingPeriod: Periodo en segundos en el que una ip recibe el bloqueo.

DOSLogDir: Directorio donde se encuentra el log de la actividad del módulo.

DOSWhitelist: La dirección ip o rango indicado no va a ser tenida en cuenta por el modulo, Para cada dirección IP a excluir ha de añadirse una nueva línea con el parámetro:

DOSWhitelist aaa.bbb.ccc.ddd
DOSWhitelist aaa.bbb.ccc.*
Limitar solo al usuario de apache a tener uso del directorio web:

(Debian/Ubuntu)
# chown –R www-data:www-data /var/www
# chmod 775 /var/www

(RHEL/CentOS/Fedora)
# chown –R apache:apache /var/www/html
# chmod 775 /var/www

Después de cada cambio es necesario reiniciar el servicio:

# service apache2 restart (Debian/Ubuntu)
# service httpd restart (RHEL/CentOS/Fedora)