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
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:/#
 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
#<Directory />
# Options SymLinksIfOwnerMatch
# AllowOverride None
#</Directory>
Dejarlo en:
<Directory />
Options -Indexes -Includes -ExecCGI -FollowSymLinks
AllowOverride None
</Directory>
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:
<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>
 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 comienzen con .ht*
AccessFileName .httpdoverride
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>