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 400 Bad Request

Bad Request

Your browser sent a request that this server could not understand.

The request line contained invalid characters following the protocol string.


Apache/1.3.34 Server at localhost Port 80
Connection closed by foreign host. Debixer:/#  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!  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.  Algunas opciones a tomar en cuenta: MaxRequestsPerChild 100  Cantidad de procesos hijos que se crearán, prevenir DDoS MaxClients 300  Cantidad máxima de clientes soportados, aplicar un número alto para que no se bloqueen las pagínas. Timeout 50  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 # # Options SymLinksIfOwnerMatch # AllowOverride None # Dejarlo en: Options -Indexes -Includes -ExecCGI -FollowSymLinks AllowOverride None Explicación: Options –Indexes  Desactiva la exploración de Directorios Options –Includes  Desactiva los Includes del Servidor Options –ExecCGI  Desactiva la ejecución de CGI Options –FollowSymLink  Desactiva el seguimiento de enlaces simbólicos Para el ejemplo anterior: Options -Indexes -Includes –FollowSymLinks -ExecCGI MultiViews AllowOverride None Order allow,deny Allow from all http://192.168.0.08/prueba/ Forbidden You don't have permission to access /prueba/ on this server DirectoryIndex : DirectoryIndex index.html index.htm index.shtml index.cgi index.php php_value magic_quotes_gpc 0  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 Order allow,deny Deny from all Satisfy All 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:  Número de procesos  Cantidad de CPU  Procesos “idle”  Status de los procesos  Cantidad de bytes servidos por los procesos  Status del tiempo del Servidor Up, etc  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: # # SetHandler server-status # Order deny,allow # Deny from all # Allow from X # Dejándola así: SetHandler server-status Order deny,allow Deny from all Allow from 192.168.0.190  La cambian por su IP o dominio etc... 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 DOSHashTableSize 3097 DOSPageCount 5 DOSSiteCount 100 DOSPageInterval 2 DOSSiteInterval 2 DOSBlockingPeriod 600 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