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 |