All pastes #543267 Raw Edit

Someone

public text v1 · immutable
·published 2007-06-06 01:24 UTC
rendered paste body

1.- Instalación de Apache (1.3.34-4.1)+PHP4



Debixer:/# apt-get update             Antes que todo, actualizar nuestros repositorios…

Descargados 58,2kB en 15s (3867B/s)
Leyendo lista de paquetes... Hecho
Debixer:/#

Debixer:/# apt-get dist-upgrade    Vemos si necesitamos alguna actualización…
                                                      Con esto actualizamos el sistema completo…

 Debixer:/# apt-get install –f          Ver si tenemos algún problema de dependencias Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
0 actualizados, 0 se instalarán, 0 para eliminar y 0 no actualizados.
Debixer:/#                  


apt-get install apache apache-doc php4 libapache-mod-php4 libapache-mod-ssl 

                                       Instalación de Apache+PHP5+mod_ssl
 
Luego de unos momentos, tendremos listo la instalación de Apache 1.3.34+PHP4 funcionando en nuestro Debian etch, ahora es el momento de configurar y securizar nuestro servidor web…

 La seguridad no es una panacea… día a día se ven más y más servidores “crackeados”, “desfaceados”, por distintos motivos, ya sea falta de actualización, mala configuración, programas “inseguros, faltas de políticas de seguridad, etc, no nos sirve de nada tener un servidor bien configurado, tuneado, etc, si nuestras políticas de seguridad ( ya sea firewall, información a mostrar, etc) son deficientes…

  

2.- Configuración: 

                            A continuación trataremos de configurar nuestro Apache, para que éste muestre la menor cantidad de información referente al mismo.


Ejemplo:

El siguiente ejemplo lo teste en mi maquina corriendo Debian etch con Apache 1.3.34-4.1+PHP5+mod_ssl, luego de una instalación por defecto…

Debixer:/# a2enmod php5
This module is already enabled!
Debixer:/# a2enmod ssl
This module is already enabled!

Debixer:/# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HEAD/1.0
HTTP/1.1 400 Bad Request
Date: Fri, 09 Feb 2007 12:18:06 GMT
Server: Apache/1.3.34 (Debian) PHP/5.2.0-8+etch4 mod_ssl/2.8.25 OpenSSL/0.9.8c
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY>
<H1>Bad Request</H1>
Your browser sent a request that this server could not understand.<P>
The request line contained invalid characters following the protocol string.<P>
<P>
<HR>
<ADDRESS>Apache/1.3.34 Server at localhost Port 80</ADDRESS>
</BODY></HTML>
Connection closed by foreign host.
Debixer:/#

&#61672; Server: Apache/1.3.34 (Debian) PHP/5.2.0-8+etch4 mod_ssl/2.8.25 OpenSSL/0.9.8c

 Demasiada información a mostrar, demasiada!

&#61672; Configurando httpd.conf para mostrar la menor información posible…


Ejemplo:

Debixer:/# apachectl start
/usr/sbin/apachectl start: httpd started
Debixer:/#

En un navegador escribimos nuestra dirección IP:

En mí caso Firefox:

http://192.168.0.08/asd

Not Found
The requested URL /asd was not found on this server.
________________________________________
Apache/1.3.34 Server at 192.168.0.08 Port 80

Debixer:/# nano /etc/apache/httpd.conf

La verdad es bastante común ver este tipo de información

Debixer:/# nano /etc/apache/httpd.conf

##
## httpd.conf -- Apache HTTP server configuration file
##

Buscamoes está línea:

ServerSignature On y la cambiamos a 
ServerSignature Off


Y quedaría así:

ServerTokens Prod


Explicación:

ServerTokens Prod[uctOnly]
El servidor envía (por ejemplo): Server: Apache
ServerTokens Major
El servidor envía (por ejemplo): Server: Apache/2
ServerTokens Minor
El servidor envía (por ejemplo): Server: Apache/2.0
ServerTokens Min[imal]
El servidor envía (por ejemplo): Server: Apache/2.0.41
ServerTokens OS
El servidor envía (por ejemplo): Server: Apache/2.0.41 (Unix)
ServerTokens Full (or not specified)
El servidor envía (por ejemplo): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

Probamos:

Guardamos los cambios y

Debixer:/# /etc/init.d/apache force-reload
Reloading apache 1.3 configuration....
Debixer:/#

Habrimos de nuevo el navegador y testeamos:

http://192.168.0.08/fds

Not Found
The requested URL /fds was not found on this server.




&#61672; Algunas opciones a tomar en cuenta:

MaxRequestsPerChild 100   &#61672; Cantidad de procesos hijos que se crearán, prevenir   
                                                    DDoS

MaxClients 300                     &#61672; Cantidad máxima de clientes soportados, aplicar un        
                                                número alto para que no se bloqueen las pagínas.

Timeout   50                         &#61672; Para que las conexiones “Reading” sean matadas antes 
                                                “Reading” sean “matadas” rápidamente, antes que pueda   
                                                llenarse el MaxClients a su tope





Algunas opciones:

 Muchas veces cuando accedemos a un directorio de nuestro Apache nos sale algo parecido a esto:

http://192.168.0.08/prueba/

Index of /prueba 
  Name                    Last modified       Size  Description
________________________________________

  Parent Directory        09-Feb-2007 10:56      -  
  prueba1                 09-Feb-2007 10:57     0k  
  prueba2                 09-Feb-2007 10:57     0k  
  prueba3                 09-Feb-2007 10:57     0k  
  pruebaetc               09-Feb-2007 10:57     0k  















Por lo menos para mí es bastante “molesto” así que lo vamos a desactivar

Debixer:/# nano /etc/apache/httpd.conf


#<Directory />
#   Options SymLinksIfOwnerMatch
#  AllowOverride None
#</Directory>

Dejarlo en:

<Directory />
    Options -Indexes -Includes -ExecCGI -FollowSymLinks
    AllowOverride None
</Directory>

Explicación:

Options –Indexes         &#61672; Desactiva la exploración de Directorios
Options –Includes         &#61672; Desactiva los Includes del Servidor
Options –ExecCGI        &#61672; Desactiva la ejecución de CGI
Options –FollowSymLink &#61672; Desactiva el seguimiento de enlaces simbólicos

Para el ejemplo anterior:

<Directory /var/www/>

Options -Indexes -Includes –FollowSymLinks -ExecCGI MultiViews
 AllowOverride None
    Order allow,deny
    Allow from all

</Directory>

http://192.168.0.08/prueba/

Forbidden
You don't have permission to access /prueba/ on this server






DirectoryIndex :

<IfModule mod_dir.c>
     DirectoryIndex index.html index.htm index.shtml index.cgi index.php
     php_value magic_quotes_gpc 0
</IfModule>


&#61672; php_value magic_quotes_gpc 0 : Hace que los caracteres  ', “, \ y NULL sean transformados a una barra invertida automáticamente, para prevenir ataques simples de “SQL Inyection”
 
Denegar la descarga de todos los archivos que comiencen con .ht*

AccessFileName .httpdoverride
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>


2.1.- Módulos:

Monitorización mediante “mod_status”:

Este módulo nos muestra información referente a nuestro servidor, en el momento en que tienes muchos dominios virtuales, se hace demasiado difícil manejar información de uno por uno, sobre todo al ver la cantidad generada de logs, con mod_status, nos ahorramos esas trabas , y obtenemos información en tiempo real…

Entre las características que podemos encontrar son:

&#61672; Número de procesos
&#61672; Cantidad de CPU
&#61672; Procesos “idle”
&#61672; Status de los procesos
&#61672; Cantidad de bytes servidos por los procesos
&#61672; Status del tiempo del Servidor Up, etc
&#61672; etc…

Activación del módulo:

Debixer:/# a2enmod status
This module is already enabled!
Debixer:/#

Debixer:/# nano /etc/apache/httpd.conf

Y Decomentamos estás líneas:
#<Location /server-status>
#   SetHandler server-status
#  Order deny,allow
#  Deny from all
#  Allow from X
#</Location>

Dejándola así:
 
<Location /server-status>
   SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from 192.168.0.190   &#61672; La cambian por su IP o dominio etc...
</Location>

Debixer:/# /etc/init.d/apache force-reload
Reloading apache 1.3 configuration....
Debixer:/# lynx localhost/server-status

Apache Server Status for 192.168.0.08
Server Version: Apache
Server Built: Mar 4 2007 01:34:14
________________________________________
Current Time: Friday, 09-Feb-2007 16:25:40 CLST
Restart Time: Friday, 09-Feb-2007 16:25:35 CLST
Parent Server Generation: 0 
Server uptime: 5 seconds
Total accesses: 1 - Total Traffic: 0 kB
CPU Usage: u0 s0 cu0 cs0
.2 requests/sec - 0 B/second - 0 B/request
1 requests currently being processed, 5 idle servers

_W____..........................................................
................................................................
................................................................
................................................................

Scoreboard Key: 
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"L" Logging, "G" Gracefully finishing, "." Open slot with no current process
Srv	PID	Acc	M	CPU 	SS	Req	Conn	Child	Slot	Client	VHost	Request
0-0	11047	0/1/1	_ 	0.00	3	1	0.0	0.000	0.000 	127.0.0.1	localhost	GET /server-status HTTP/1.0
1-0	11048	0/0/0	W 	0.00	5	1476931258	0.0	0.00	0.00 	192.168.0.190	localhost	GET /server-status HTTP/1.1
________________________________________
Srv	Child Server number - generation 
PID	OS process ID 
Acc	Number of accesses this connection / this child / this slot 
M	Mode of operation 
CPU	CPU usage, number of seconds 
SS	Seconds since beginning of most recent request 
Req	Milliseconds required to process most recent request 
Conn	Kilobytes transferred this connection 
Child	Megabytes transferred this child 
Slot	Total megabytes transferred this slot


Securizando nuestro servidor Web mediante “mod_evasive”

“mod_evasive” es un módulo de seguridad para Apache 1 y 2 que tratá de detener ataques de tipo DoS,  DDoS, brute force, baneando las IPs que han alcanzado un límite de conexiones

Instalación:

Debixer:/# apt-get install libapache-mod-dosevasive

Verificamos que este el módulo:

Debixer:/# less /etc/apache/modules.conf | grep evasive
LoadModule dosevasive_module /usr/lib/apache/1.3/mod_dosevasive.so
Debixer:/#

Añadimos las siguientes líneas a nuestro httpd.conf:

Debixer:/# nano etc/apache/httpd.conf

#mod_evasive

<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 100
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 600
</IfModule>

Explicación:

DOSHashTableSize: Tamaño de la tabla hash
DOSPageCount: Número de páginas solicitadas a partir de las cuales si se cumplen el resto de condiciones, el módulo se activa.

DOSSiteCount: Número de solicitudes máximas a partir del cual el filtro se activa.

DOSPageInterval: Segundos  entre las peticiones a las páginas

DOSSiteInterval: Segunods de tiempo entre las peticiones 

DOSBlockingPeriod: Tiempo que se bloqueará la web a esa IP