| Servidor web | ||
|---|---|---|
| Anterior | ||
En esta sección veremos las pautas más comunes para proteger un poco más nuestra instalación de apache+php+mysql
Ocultar todos los datos posibles acerca de las versiones que utilizamos de apache y php, lo cual evitará dar pistas a un posible atacante.
Deshabilitar el método http trace, que puede ser fuente de problemas si se junta con alguna vulnerabilidad en el navegador.
El módulo libapache2-modsecurity provee protección contra diversos ataques hacia aplicaciones Web y permite monitorizar el tráfico web.
Restringir el acceso a phpmyadmin, que por defecto está accesible desde cualquier virtualhost
Proteger un directorio concreto de nuestro servidor web restringiendo el acceso al mismo
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 |