Está en la página 1de 4

seguridad

Protección de servidor

Protección del
servidor Apache
Jose Ignacio Ruiz de Alegría
Cuando hablamos de Internet debemos hablar del servidor Apache, ya que es gracias a este
servidor web por el que podemos publicar en Internet, así como podemos recibir la opinión
de los internautas que han visitado nuestro sitio web, podemos colgar gráficos, fotos, banners
con efectos flash, música, video, etc.

E
l servidor Apache, tanto la versión 1.3.x como chado decir que el servidor está caído y que por ese mo-
linux@software.com.pl

la versión 2, se ha convertido en un servidor tivo sus paginas web no son accesibles a través de Inter-
web de referencia para todo diseñador de net.
páginas web, webmaster, etc. Aunque es uno Para evitar o mitigar en lo más posible esta clase de
de los más estables que hay actualmente en el mercado, ataques, existen en el mercado dos módulos, ambos gra-
debemos de recordar también que dicho servidor se en- tuitos, que permiten solucionar este tipo de problemas.
cuentra constantemente sometido a ataques a través de Sus nombres son: mod_security y mod_evasive. Debido
Internet o de la web, los dos más comunes son el ataque a que el 70 por ciento de los ataques son llevados a través
a través de la instrucción POST. Dicha instrucción es de las aplicaciones web, debemos considerar aplicar un
ampliamente utilizada en Internet porque va unida al cortafuegos, firewall o filtro, que bloquee las solicitudes
envio de información a través de Internet, por el cual que proceden de los clientes hacia el servidor. Esa es
un cracker intenta enviar información maliciosa a tra- la función principal del mod_security. Lo primero que
vés de la red con la intención de perjudicar al servidor tenemos que hacer es descargarnos el mod_security: des-
o provocar una negación de servicios. Como veremos cargamos el mod_security desde http://www.modsecurity.
más adelante hay una forma de evitar o de filtrar la in- org/.
formación que se envía vía POST entre el servidor web Descomprimimos el fichero:
y el cliente. Otro de los ataques más comunes que se
producen a través del servidor Apache son los llamados tar –xzf modsecurity-Apache-1.9.2.tar.gz
Ddos Attack o Negación de servicios y como el mismo
nombre lo indica, la finalidad de estos ataques es hacer Accedemos al directorio:
que el servidor Apache se bloquee, lo que traerá como
consecuencia la pérdida de servicio. Quién no ha escu- cd modsecurity*

40 Linux+ 1/2007
seguridad
Protección de servidor

Aquí necesitamos saber para qué versión de


Apache lo vamos a instalar, pudiendo ser la
versión 2.* o la 1.3.*. Si utilizamos la versión
de Apache 1.3.* debemos de hacer:

cd Apache1

Antes de instalar el módulo es conveniente


hacer una copia de seguridad del archivo de
configuración del servidor, por lo tanto hare-
mos lo siguiente:

cp /usr/local/Apache/conf/httpd.conf
/usr/local/Apache/conf/httpd.conf.back

Instalamos el mod_security:

/usr/local/Apache/bin/apxs –cia
mod_security.c

Aquí debemos editar el fichero de configura-


ción del Apache (httpd.conf), en dicho fichero
debemos poder ver las siguientes instruccio-
nes, indicadas abajo:

LoadModule security_module
libexec/mod_security.so
AddModule mod_security.c
Figura 1. mod_security

Señal inequívoca que el módulo se ha instala- Activamos el filtro: Rango de Bytes:


do correctamente, es ahora cuando podemos
empezar a añadir las directivas de nuestro SecFilterEngine On SecFilterForceByteRange 0 255
filtro o firewall.
Para empezar a escribir las directivas den- Activamos el chequeo del url, Post: No permitir guardar un fichero en el direc-
tro del fichero de configuración del Apache de- torio /tmp:
bemos hacer lo siguiente: editamos el httpd. SecFilterCheckURLEncoding On
conf, podemos elegir el editor que más nos SecUploadDir /tmp
guste en nuestro caso nano –f httpd.conf Para evitar que interfiera con las aplicaciones SecUploadLeepFiles Off
la definición de la directiva del modse- web:
curity será, la siguiente <IfModules mod_se- Sólo audita los intentos de violación del ser-
curity.c>. SecFilterCheckUnicodeEncoding Off vidor, con dicha opción activada, nos dejará
en el fichero audit._log, del directorio /usr/
Listado 1. Comienzo de las reglas de filtrado local/Apache/logs. Dicho fichero es muy
útil para buscar desde qué dominio nos han
SecFilterSelective THE-REQUEST “wget” intentado atacar:
SecFilterSelective THE-REQUEST “lynx”
SecFilterSelective THE-REQUEST “telnet” SecAuditEngine RelevantOnly
SecFilterSelective THE-REQUEST “ssh” SecAuditLog logs/audit._log
SecFilterSelective THE_REQUEST "scp "
SecFilterSelective THE_REQUEST "rcp " Definición de los ficheros LOGS, el nivel cero
SecFilterSelective THE_REQUEST "curl " (Level 0) es entorno de producción:
SecFilterSelective THE-REQUEST “cd /tmp”
SecFilterSelective THE-REQUEST “cd /var/tmp” SecFilterDebugLog logs/modesec_
SecFilterSelective THE-REQUEST “cd /dev/shm” debug_log
SecFilterSelective THE_REQUEST "/../../ " SecFilterDebugLevel 0
SecFilterSelective POST_PAYLOAD “Subject\:” chain
SecFilterSelective ARG_Bcc ”.\@” Escaneo de las solicitudes POST:
</ifModule>
SecFilterSacnPost On

www.lpmagazine.org 41
seguridad
Protección de servidor

Listado 2. Juego completo de instrucciones por un tiempo prudencial de unos 10 segun-


dos, dicha cantidad es configurable, y compa-
REMOTE_ADDR, REMOTE_HOST, REMOTE_USER, REMOTE_IDENT, REQUEST_METHOD, rar si dichas IPs se encuentran en la lista negra
SCRIPT_FILENAME, PATH_INFO, QUERY_STRING, AUTH_TYPE, DOCUMENT_ROOT, o blacklist con las IPs de acceso. Si una vez
SERVER_ADMIN, SERVER_NAME, SERVER_ADDR, SERVER_PORT, SERVER_PROTOCOL, comparadas las IPs resulta que ya se encuentra
SERVER_SOFTWARE, TIME_YEAR, TIME_MON, TIME_DAY, TIME_HOUR, TIME_MIN, en su Blacklist le deberá de negar el acceso al
TIME_SEC, TIME_WDAY, TIME, API_VERSION, THE_REQUEST, REQUEST_URI, REQUEST_ servidor Apache o si alguien intenta abrir in-
FILENAME, REQUEST_BASENAME, IS_SUBREQ numerables procesos haciendo muchas soli-
citudes a la vez en un tiempo, pongamos de
Acción por defecto en caso de filtrado, niega, Le permitirá elegir exactamente dónde 1 segundo, el sistema lo debería de incluir en
escribe en el log, muestra status:403: se utilizará o aplicará el filtro, aquí nosotros su blacklist y negarle el acceso también. Debe-
podremos elegir entre todas las variables de mos mencionar otra forma de ser incluido en
SecFilterDefaultAction “deny, log, los CGI, como se puede ver en nuestro caso la blacklist, que es hacer más de 50 peticio-
status:403” cualquier petición que contenga las palabras nes en el mismo proceso por segundo.
wget, lynx, telnet, etc será automáticamente Pues bien esta herramienta ya existe, el
Comienzo de las reglas de filtrado (ver Lis- filtrada. Ver abajo el juego completo de ins- módulo que lo hace posible es mod_evasive.
tado 1). trucciones. Esta herramienta es muy útil y frena los in-
Cabe especial mención a la instrucción de tentos de ataque al servidor mediante el Ddos
SecFilterEngine POST_PAYLOAD. attack. Los pasos son los siguientes:
Esta directiva nos da la posibilidad de activar El significado es la de aplicar el filtro en Descargamos el mod_evasive desde http://
y desactivar el filtro on/off. la localización del cuerpo de los peticiones www.zdziarski.com/projects/mod_evasive/ y des-
POST. con respecto a la instrucción Chain. comprimimos el fichero:
SecFilterSacnPost On El significado es el de encadenar dos ins-
Con esta directiva podemos chequear las soli- trucciones, véase el ejemplo de arriba. tar –xzf mod_evasive
citudes POST, viene desactivado por defecto,
por consiguiente la activamos. Reiniciamos el Apache Antes de instalar el módulo es conveniente
Una vez que hemos reiniciado el Apache ya hacer una copia de seguridad del archivo de
SecFilterDefaultAction tenemos en funcionamiento nuestro filtro, configuración del servidor, por consiguiente
Esta directiva sirve para definir qué acción dicho filtro nos protegerá de ciertos ataques haremos lo siguiente:
queremos que se ejecute una vez que el filtro y nos permitirá saber a través de cual usua-
que hemos definido detecta que ha llegado rio se está cometiendo el ataque. Pero como cp /usr/local/Apache/conf/httpd.conf
una solicitud que lo cumple. hemos dicho al principio, otro de los ataque .../usr/local/Apache/conf/
Deny : Interrumpe todos los procesos, de más comunes que afectan al servidor Apa- httpd.conf.back
las solicitudes que cumple con nuestro filtro. che es el Ddos attack o negación de servi-
Log : Suma una entrada en el error_log. cios, quien no ha oído hablar de que el servi- Accedemos al directorio:
Status:403 : Muestra la pagina 403. dor Apache está caído y que esa es la causa
de que no se vean las páginas web. El Ddos cd mod_evasive*
SecFilterForceByteRange attack se produce de la siguiente manera:
Esta directriz consiste en limitar el rango de cuando alguien introduce el nombre de su Instalamos el mod_evasive:
Bytes de las solicitudes que se hacen a través sitio web en Mozilla Firefox o en Internet
del servidor Apache. La intención de esta limi- Explorer y comienza a ver su página web, /usr/local/Apache/bin/apxs –cia
tación consiste en limitar los ataques overflow el servidor Apache debe abrir un proceso mod_evasive.c
attacks, por defecto todo los rangos de bytes para atender a esa demanda, dicho proceso
son permitidos. lleva por consiguiente un uso de la CPU y Aquí debemos de editar el fichero de confi-
de memoria del sistema. El ataque consiste guración del Apache (httpd.conf), en dicho
SecAuditEngine RelevantOnly en hacer muchas peticiones sobre la misma fichero debemos de poder ver las siguientes
La directiva SecAuditEngine junto con relevant- página durante un tiempo muy corto, lo que instrucciones, ver abajo:
Only significa que incluye sólo las solicitudes obligará al servidor Apache a abrir innume-
que cumplen con las condiciones de nuestro rables procesos con la intención de atender
filtro. a la demanda de peticiones que ha recibido
dicho proceso lo que conllevará un mayor
SecAuditLog consumo de CPU y de memoria del sistema,
Suma una entrada en el fichero logs/ audit._ llegando a colapsar el servidor, una vez lle-
log cuando se cumpla una de las condiciones gado a este punto, la finalidad de este ataque
del filtro, dicha acción es muy útil para poder se ha completado, ya que se ha producido
analizar a través de quien nos ha venido el una carencia del servicio.
ataque. La manera de defenderse de esa clase
Con la directiva SecFilterSelective Location de ataques sería la de crear una lista negra
Keywords [Action]. (“blacklist”) o tabla en la cual se guardará Figura 2. mod_evasive

42 Linux+ 1/2007
seguridad
Protección de servidor

LoadModule evasive_module re la misma página, por defecto ponemos 1 procesos sobrantes, los valores que vienen por
libexec/mod_evasive.so segundo. defecto son válidos y no conviene alterarlos.
AddModule mod_evasive.c
DOSSiteInterval KeepAliveTimeOut 15
Señal inequívoca de que el módulo se ha Con este valor definimos el intervalo de tiem- Este es el tiempo por el cual el servidor Apa-
instalado correctamente, es ahora cuando po por el cual el DOSPageInterval debe de che esperará en atender la recepción de la si-
podemos empezar a añadir las directivas contar el máximo de solicitud hechas sobre guiente petición, una vez pasado este tiempo
de configuración del módulo dos_evasive el mismo proceso, por defecto ponemos 1 se- el proceso desaparece, si el servidor Apache
Para empezar a escribir las directivas gundo. recibe muchas peticiones es aconsejable redu-
dentro del fichero de configuración del Apa- cir dicha cantidad.
che debemos de hacer lo siguiente: edita- DOSBlockingPeriod
mos el httpd.conf, podemos elegir el editorComo ya hemos mencionado anteriormente AllowOverride None
que más nos guste en nuestro caso nano –f una vez que la IP de cualquiera de nuestros No permitiremos que un usuario del sistema
httpd.conf clientes cumple con las condiciones arriba in- pueda cambiar o sobrescribir mediante los
La definición de la directiva del mod_ dicadas, dicha IP se suma a nuestra Blacklist, ficheros .htaccess con el propósito de alterar
evasive será la siguiente: trayendo como resultado una página de error el funcionamiento del Apache.
y se le niega el acceso al servidor Apache, esa Una vez llegado al final del articulo,
<IfModule mod_evasive.c> situación de permanencia en nuestra Blacklist hemos visto las formas de ataques que se
DOSHashTableSize 3097 no es definitiva y nosotros podemos definir producen a través de la red, o mejor dicho,
DOSPageCount 10 durante cuanto tiempo dicha IP estará en a través de Internet, que van explícitamente
DOSSiteCount 50 nuestra Blacklist, en nuestro caso dicha situa- a intentar atacar al servidor mediante solici-
DOSPageInterval 1 ción de negación de acceso será durante 10 tudes POST, para el cual hemos dispuesto la
DOSSiteInterval 1 segundos, una vez cumplido dicho período instalación del modulo mod_security con la
DOSBlockingPeriod 10 de tiempo la IP dejará de estar en nuestra intención de poner un filtro a dichas solicitu-
</IfModule> Blacklist des y evitar en lo posible ataques a través de
Debemos recordar que el mod_evasise, es- aplicaciones web que pueden producir un fa-
DOSHashTableSize cribe en el syslog cualquier incidencia o Ddos llo de seguridad en el sistema, también dicho
Esta tabla define el máximo número de nodos attack que ha tenido, en dicho fichero apare- módulo nos da una idea de cual puede ser el
a almacenar por proceso. Si incrementamos el cerá de la siguiente forma, ver abajo: usuario del sistema utilizado para producir
número aumentará la velocidad de ejecución el ataque. Junto con el módulo dos evasive
del proceso ya que reducirá el número de Active System Attack Alerts que nos protege de los ataques de negación
Iteraciones por registro, pero traerá como Oct 24 11:07:35 host mod_evasive[15587]: de servicio, también conocido como Ddos
consecuencia un incremento de los recursos Blacklisting address xx.xx.xx.xx: possible atacks, evitando que mediante un montón
del servidor, lo que implica que consumirá attack. de solicitudes reiterativas sobre el servidor
más memoria del sistema. En el supuesto que Apache atacado provoque la caída de éste.
tengamos un servidor Apache que tenga que Reiniciamos el Apache También hemos comentado la manera de
atender mucho trafico es aconsejable incre- Por último debemos hacer una mención del mejorar los parámetros de configuración del
mentar dicha cantidad. fichero de configuración del Apache, he aquí Apache accediendo al fichero de configura-
unos consejos que servirán para poder me- ción del mismo.
DOSPageCount jorar el funcionamiento del servidor Apache Después de este curso podríamos caer
Este valor es el número de solicitudes sobre y lo reforzarán contra ataques maliciosos en la tentación de empezar a instalar cual-
la misma página o URI por intervalo, si di- a través de Internet. quier módulo para el servidor Apache que
chas solicitudes exceden al valor previamente pueda hacer el mismo trabajo de protección,
definido, que para nuestro caso es de 10, la HostNameLookups off pero debemos de advertir que cuantos más
IP del cliente será sumada en nuestra Black- No activaremos la directriz, de esa forma el módulos sean instalados, menor será el redi-
list. Apache registrará la IP de acceso de cada miendo del servidor, también puede abrir un
cliente que acceda al servidor, si la activa- fallo en la seguridad de su servidor dejando
DOSSiteCount mos traerá como consecuencia un menor un hueco de seguridad el cual un cracker
Este valor es el número máximo de solicitu- rendimiento del servidor. puede aprovechar y tener acceso al sistema.
des hechas sobre el mismo proceso por el Lo que es más importante, y como de open
mismo cliente, si dicho valor excede el valor MinSpareServers/MaxSpareSarvers source estamos hablando, es importante que
previamente definido, que para nuestro caso Ambas directrices sirven para regular la can- dicho módulo tenga una comunidad que
es de 50, la IP del cliente será sumada en tidad de procesos, es decir tratan de mantener lo mantenga de tal forma que se actualice
nuestra Blacklist. el suficiente número de procesos de carga, pa- rápidamente en caso que aparezca un fallo
ra ello comprueban la cantidad de veces que de seguridad. Si dicha comunidad no existe
DOSPageInterval un proceso se queda esperando una petición, no conviene pensar en instalarlo en nuestro
Con este valor definimos el intervalo de tiem- si son menos que el valor especificado por la servidor, porque podría resultar un peligro
po por el cual el DOSPageCount debe de con- instrucción MinSpareServer crea una reserva, para nuestro sistema, sobre todo en un en-
tar el número máximo de solicitudes sob- si es superior a MaxSpareServer eliminará los torno de producción.

www.lpmagazine.org 43

También podría gustarte