Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Seguridad
Options=
Características del directorio FollowSymLinks
[Opción1,Opción2,OpciónN]
<Directory /var/www/example.com>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Módulo mod_access_compat
Las directivas facilitadas por mod_access_compat se usan en las secciones <Directory> ,
<Files> , y <Location> así como en los ficheros .htaccess para controlar el acceso a partes
específicas del servidor. El acceso se puede controlar en base al nombre de host del cliente,
dirección IP u otras características de la petición del cliente, tal y como se capturan en las
variables de entorno. La directivas Allow y Deny se usan para especificar qué clientes tienen
acceso y cuales no al servidor, mientras que la directiva Order configura el estado del acceso por
defecto, y configura cómo las directivas Allow y Deny interactuan la una con la otra.
Límite Directiva
...
<Directory /var/www/html/private>
...
Order Deny,Allow
Deny from all
Allow from 192.168.0.187
Allow from .example.com
...
</Directory>
...
Order Deny, Allow significa que primero se van a procesar todas las directivas Deny y luego
todas las directivas Allow. Si ninguna regla coincide se permite el acceso. El valor
predeterminado es Deny Allow.
A diferencia de las reglas de muchos firewalls, el orden en que se presentan las directivas no
importa. Se procesan todas las directivas sin importar si una coincide antes.
En este caso se estaría negando el acceso a todos, salvo a las direcciones IP 10.0.0.1
(asociada example.com) y 192.168.1.1.
IMPORTANTE: Las directivas facilitadas por mod_access_compat han quedado obsoletas en favor
de mod_authz_host. Mezclar directivas antiguas como Order, Allow o Deny con las nuevas
directivas como Require es técnicamente posible pero no recomendable. Éste módulo se creó
para dar soporte a configuraciones que solo contienen directivas antiguas para facilitar una
actualización a la versión 2.4. Por favor compruebe la guía Actualizando para más información.
Usando mod_authz_host
Los proveedores de autorización implementados por mod_authz_host están registrados
utilizando la directiva Require . La directiva se puede hacer referencia a secciones <Directory> ,
<Files> o <Location> , así como los archivos .htaccess para controlar el acceso a
determinadas partes del servidor. El acceso se puede controlar en función del nombre de host del
cliente o la dirección IP.
En general, las directivas de restricción de acceso se aplican a todos los métodos de acceso ( GET ,
PUT , POST , etc.). Este es el comportamiento deseado en la mayoría de los casos. Sin embargo, es
posible restringir algunos métodos, dejando otros métodos sin restricciones, encerrando las
directivas en una sección <Limit> .
Acceso por IP
...
<Directory /var/www/html/private>
...
Require ip 192.168.0.187
Require hostname .example.com
...
</Directory>
...
...
<Directory /var/www/html/private>
...
Require ip 192.168.0.0/255.255.255.0
...
</Directory>
...
Recordemos que:
Por supuesto, con eso no basta, tenemos que crear los usuarios y sus contraseñas, por ejemplo:
El comando htpasswd sirve para manejar los usuarios de autenticación básica, la opción -B usa
bcrypt para cifrar la password del usuario usuario y -c crea el archivo
/etc/httpd/http.passwd . Estos usuarios no tiene relación alguna con los del archivo
/etc/passwd. Los subsiguientes usuarios se deben crear sin la opción -c.
Permisos
Es importante que los archivos de configuración y los logs sean propiedad de root y que todos los
archivos del servidor web sean propiedad de root (o www-data). Es decir:
En cambio los archivos web deben ser del usuario que corre el servicio, típicamente esto se
consigue con:
# chown www-data:www-data /var/www/example.com/
Algunas definiciones
XSS: Es un tipo de inyección, en el cual se inyectan scripts malicioso en un sitio web de confianza.
La víctima inadvertidamente puede estar ejecutando código que realiza un ataque de denegación
de servicio.
HTTP(S) GET/POST Flood: Este tipo de ataque sucede cuando se envía un enorme volumen de
solicitudes HTTP GET y/o POST y seproduce en capa de aplicación.
Slow Loris: En este caso el atacante envía una enorme cantidad de peticiones una tras otra, pero
con baja ancho de banda. Esto resulta en tipo de maniobra que requiere pocos recursos, pero
que resulta muy perjudicial para la víctima, ya que puede llevar al agotamiento en la cantidad de
sockets.
LAND: El envío de segmentos TCP SYN falsificados a una máquina con el mismo par IP/puerto
tanto para el origen como para el destino. El equipo víctima puede entrar un bucle infinito y el
consiguiente cuelgue del sistema.
XDOS: Se realiza con mensajes en XML con muchísimas firmas digitales que consume los ciclos
del CPU del sistema atacado provancdo la caída del sitio web.
El módulo mod_evasive sirve para mitigar este tipo de ataques, bloqueando direcciones IP que:
Soliciten la misma página más de una determinada cantidad de veces por segundo.
Hagan más de 50 peticiones por segundo al mismo proceso hijo.
Hagan solicitudes mientras está temporalmente bloqueada.
El módulo mod_evasive
<IfModule mod_evasive24.c>
DOSHashTableSize 3097
DOSPageCount 4
DOSSiteCount 400
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSWhitelist 192.168.40.*
</IfModule>
Directiva Descripción
Está herramienta es conveniente combinarla con algún otro tipo de firewall. En el caso de
bloqueo aparecerá una línea como la siguiente en el log:
El módulo mod_qos
Para prevenir el ataque Slow Loris se usa el módulo mod_qos, el cual tiene los siguientes niveles
de protección:
<IfModule mod_qos.c>
MaxClients 1792
TimeOut 10
KeepAlive on
KeepAliveTimeout 5
MaxKeepAliveRequests 30
QS_SrvMaxConnClose 80%
QS_ClientEntries 100000
QS_SrvMinDataRate 150 1200 500
</IfModule>
Directiva Descripción
Tiene 3 parámetros:
El módulo mod_reqtimeout
Este módulo ya viene de manera predeterminada con Apache e impone un tiempo y un cantidad
mínima de datos por cada solicitud que recibe. El valor predeterminado es:
<IfModule reqtimeout_module>
RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
</IfModule>
De acuerdo a eta configuración el servidor esperará 20 segundos a que el cliente envíe la solicitud
y los encabezados. Si el cliente envía datos, por cada 500 bytes se incrementará en 1 segundo el
tiempo de espera, pero nunca sobrepasará los 40 segundos. Para el cuerpo del http esperará
hasta 20 segundos. La tasa mínima de transferencia debe ser según este ejemplo de 500 bytes
por segundo.
El módulo mod_suexec
Otra medida de protección es la utilización del modulo mod_suexec. Este módulo permite tener
varios servidores virtuales y que cada uno se ejecute como un usuario distinto al del servicio
apache.
<VirtualHost *80>
ServerName juan.example.com
DocumentRoot /var/www/juan
SuexecUserGroup juan juan
</VirtualHost>
<VirtualHost>
ServerName maria.example.com
DocumentRoot /var/www/maria
SuexecUserGroup maria maria
</VirtualHost>
El módulo mod_security
Lo ponemos en un apartado especial ya que se trata de un cortafuegos de aplicaciones web (
WAF) y se lo puede usar como módulo de apache. Este módulo tiene la capacidad de analizar los
cuerpos de las solicitudes HTTP, actuar como un detector de intrusos web tomando algún tipo de
acción.
Puede comportarse de manera “positiva” o “negativa”. En el primer caso deniega todo lo que no
está permitido, en el segundo todo lo que signifique anomalías, comportamientos inusuales,
ataques comunes de aplicaciones. Además, puede realizar un parcheo virtual.
El funcionamiento es:
Análisis de datos
Buffering: Retiene los datos en memoria
Logging: Registra lo analizado
Motor de reglas: Toma alguna acción
#
# Disable access to the entire file system except for the directories that
# are explicitly allowed later.
#
# This currently breaks the configurations that come with some web application
# Debian packages.
#
#<Directory />
# AllowOverride None
# Require all denied
#</Directory>
# Changing the following options will not really affect the security of the
# server, but might make attacks slightly more difficult in some cases.
#
# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of: Full | OS | Minimal | Minor | Major | Prod
# where Full conveys the most information, and Prod the least.
#ServerTokens Minimal
ServerTokens OS
#ServerTokens Full
#
# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of: On | Off | EMail
#ServerSignature Off
ServerSignature On
#
# Allow TRACE method
#
# Set to "extended" to also reflect the request body (only for testing and
# diagnostic purposes).
#
# Set to one of: On | Off | extended
TraceEnable Off
#TraceEnable On
#
# Forbid access to version control directories
#
# If you use version control systems in your document root, you should
# probably deny access to their directories. For example, for subversion:
#
#<DirectoryMatch "/\.svn">
# Require all denied
#</DirectoryMatch>
#
# Setting this header will prevent MSIE from interpreting files as something
# else than declared by the content type in the HTTP headers.
# Requires mod_headers to be enabled.
#
#Header set X-Content-Type-Options: "nosniff"
#
# Setting this header will prevent other sites from embedding pages from this
# site as frames. This defends against clickjacking attacks.
# Requires mod_headers to be enabled.
#
#Header set X-Frame-Options: "sameorigin"
Las reglas tienen este aspecto:
Las variables es dónde va a mirar, operador es cómo y las acciones es qué va a hacer.