Asegurar apache

En esta sección veremos las pautas más comunes para proteger un poco más nuestra instalación de apache+php+mysql

Ocultaremos la versión de apache y limitaremos la información que nuestro servidor ofrece acerca de los módulos de que dispone y el sistema operativo que lo aloja añadiendo las siguientes líneas en /etc/apache2/conf.d/seurity

Por otra parte, , con la siguiente línea en el mismo fichero de configuración


ServerSignature Off
ServerTokens Proud
TraceEnable Off
	

La última línea nos servirá para deshabilitar el método http trace

En /etc/php5/apache2/php.ini ajustaremos el valor de php_expose para que quede así:


expose_php = Off
	

Instalaremos El módulo libapache2-modsecurity y agregaremos lo siguiente en /etc/apache2/apache2.conf:


<IfModule mod_security.c>
    # Turn the filtering engine On or Off
    SecFilterEngine On

    # Make sure that URL encoding is valid
    SecFilterCheckURLEncoding On

    # Unicode encoding check
    SecFilterCheckUnicodeEncoding Off

    # Only allow bytes from this range
    SecFilterForceByteRange 0 255

    # Only log suspicious requests
    SecAuditEngine RelevantOnly

    # The name of the audit log file
    SecAuditLog /var/log/apache2/audit_log
    # Debug level set to a minimum
    SecFilterDebugLog /var/log/apache2/modsec_debug_log
    SecFilterDebugLevel 0

    # Should mod_security inspect POST payloads
    SecFilterScanPOST On

    # By default log and deny suspicious requests
    # with HTTP status 500
    SecFilterDefaultAction "deny,log,status:500"

</IfModule>
	

Para restringir el acceso a phpmyadmin, eliminamos el enlace simbólico /etc/apache2/conf.d/phpmyadmin y configuramos un virtualhost específico al que restringiremos el acceso por IP o rango de IP's


<VirtualHost *:80>
        ServerAdmin webmaster@lucas
      		DocumentRoot /var/www/
        ServerName 192.168.1.1
        <Directory "/var/www">
	        AllowOverride None
	        Order Deny,Allow
	        Deny from all
	        Allow from 192.168.1.51
		Allow from 172.16.0.0/255.255.0.0
        </Directory>
      		include /etc/phpmyadmin/apache.conf
</VirtualHost>
	

Como podemos ver, la directiva <directory> nos permite restringir el acceso por ip a un directorio concreto de nuestro servidor web

Adicionalmente modemos solicitar contraseña al acceder. Para ello:


<Directory /var/www/ejemplo.jesusvillaverde.com/private>
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/apache2/passwd
Require user usuario1 usuario2 usuario3
</Directory>
	

Como es lógico, debemos crear el fichero /etc/apache2/passwd de contraseñas. Esto lo hacemos con el programa htpasswd:


htpasswd -c /etc/apache2/passwd usuario1
	

Posteriormente añadiremos los usuarios:


htpasswd /etc/apache2/passwd usuario2
htpasswd /etc/apache2/passwd usuario3
	

Por último, para que apache no nos genere índices de los directorios evitando así que su contenido quede al descubierto, debemos añadir la siguiente opción en el virtualhost que corresponda:


Option   -indexes