Hablando de Apache // By MurdeR (
http://www.thefreeks.com.ar) -texto sin acentos
Teniendo en cuenta que lo primero que hacemos al intentar ownear un server es utilizar errores en aplicaciones webs, es importante como administradores darle toda la seguridad al servidor.
El principal riesgo de seguridad es el permiso de escritura y la ejecucion de comandos. PHP juega mucho al respecto pero no todo.
Hay un modulo de apache muy curioso que se llama"mod_security" (
www.modsecurity.org) que permite establecer reglas de filtrado como si de un firewall se tratara.
Vamos a instalarlo y configurarlo:
tar -zxvf modsecurity-Apache-1.9.2.tar.gz
cd modse*
cd ApacheX
(1 para el 1.3 y 2 para el 2.0)
/usr/local/Apache/bin/apxs -cia mod_security.c
y editar el file httpd.conf añadiendo:
LoadModule security_module
libexec/mod_sceurity.so
AddModule mod_security.c
Con esto ya esta listo para ser configurado, vamos a ello?
En el mismo httpd.conf añadimos:
<IfModules mod_security.c>
SecFilterEngine On #con esto activamos el filtado
SecFilterCheckURLEncoding On #con esto el chequeo del POST method
SecUploadDir /tmp #impedimos que puedan subirse files en tmp
SecUploadLeepFiles Off
SecAuditEngine RelevantOnly
SecAuditLog logs/audit._log #con esto guardará en el log todos los intentos de hackeo
#es muy util para saber desde que dominio nos estan intentando ownear
SecFilterDebugLog logs/modesec_debug_log
SecFilterDebugLevel 0 #definimos los ficheros log a level 0
SecFilterScanPost On #con esto scaneamos todos los POST
SecFilterSacnPost On#es para cheaquear los POST, hay que activarlo
SecFilterDefaultAction Deny #esto bloquea el servicio en caso de que se viole alguna directiva
#de las que establecemos
SecFilterForceByteRange #para evitar overflows Giñar
#de nuestro flitrado
#y ahora vamos a usar una directris que nos permite elegir que filtrar exactamente
SecFilterSelective THE-REQUEST "curl"
SecFilterSelective THE-REQUEST "wget"
SecFilterSelective THE-REQUEST "lynx"
SecFilterSelective THE-REQUEST "telnet"
SecFilterSelective THE-REQUEST "nc"
SecFilterSelective THE-REQUEST "ssh"
SecFilterSelective THE-REQUEST "scp"
SecFilterSelective THE-REQUEST "rcp"
SecFilterSelective THE-REQUEST "cd *"
SecFilterSelective THE-REQUEST "cd /tmp"
SecFilterSelective THE-REQUEST "/../../"
SecFilterSelective POST_PAYLOAD "Subject\:" chain
SecFilterSelective ARG_Bcc ".\@"
<ifModule>
Con esto quedaria mas o menos bien aprovechado este modulo.. y bastante seguro el server. Pero a MurdeR (?) le gusta se obsesivo compulsivo con la seguridad de sus servers y tras analizarlo un poco... y los ataques ddos? Todo lo anterior serviria para evitar hackercillos molestos, pero aun asi cualquier lamo con un par de drones podria dejar fuera de servicio el server.
Para evitar ataques DDoS/DoS existe un modulo, vamos a ver como configurarlo mas o menos descentemente y un poco de teorÃa.
Como funciona un DDoS¿?
El "atacante" (en adelante se llamara lamo xD) realiza una cantidad desproporcionada de solicutides a un servicio (en nuestro caso apache), este servicio tiene que atender y responder a estas solicitudes, lo cual es un problema pq la cpu, el ancho de banda, etc. son limitados.
En el caso de apache, el lamo no solo conseguiria relentizar considerablemente el servicio sino que ademas, al apache tener que abrir miles (o millones) de procesos para atender a la falsa demanda, colapsaria el cpu y muy probablemente caerÃa el servicio.
Vamos con el modulo, que a nadie le gustan los lamos;
Este modulo se llama mod_evasive, pueden bajarlo de la sección de modulos en la web de apache o googleando, me la pela.
tar -xvf mod_*
cd mod_*
/usr/local/Apache/bin/apxs -cia mod_evasive.c
vim httpd.conf
#abrimos el editor de texto preferido y editamos el httpd...
Codigo:
<IfModule mod_evasive.c>
DOSHashTableSize 3097 #numero maximo de nodos que almacenara por proceso el apache
#cuanto mas alto mas rapida la ejecicion de procesos, pero mas consumo de recursos
DOSPageCount 10 #el maximo de solicitudes por intervalo en una misma pagina, en caso de #pasarse se lo añadira a la blacklist "MUAHAHA"
DOSSiteCount 50 #numero maximo de solicitudes para un proceso en un intervalo de tiempo
#por una ip, en caso de pasarse... banned
DOSPageInterval 3 #es el intervalo de tiempo que DOSPageCount usara
#(si en menos de 3 segundos el cliente hace mas de x solicitudes ban ban banned!)
DOSSiteInterval 1 #lo mismo que el anterior pero de DOSPageInterval
DOSBlockingPeriod 100 #es el tiempo que dejara al lamo en la blacklist
</IfModule>
[esc]wq
cerramos el editor de texto y seguimos en la consolita
LoadModule evasive_module
libexec/mod_evasive.so
AddModule mod_evasive.c
Cualquier incidencia o ataque quedara registrado en el syslog de la siguiente forma:
##
Active System Atack
fecha host mod_evasive[num]
Blacklisting addres ip
##
Bue, con esto termina el texto... quizas algun dia lo amplie :O
atte. MurdeR