En este post se trata de dar una idea de los que pueden ser los primeros pasos a dar tras la instalación de un servidor Apache con PHP.
/etc/php.ini
En primer lugar, podríamos mirar el archivo de configuración del php en busca de las líneas correspondientes a la gestión de la visualización de los mensajes de error. Se recomienda que ambos parámetros estén a Off si se quiere evitar que tras un error en el servidor, se le muestre al usuario el código relativo al error, o incluso el fragmento de código php que lo ha provocado:
display_errors = Off
display_startup_errors = Off
/etc/httpd/conf/httpd.conf – Configuración básica
En cuanto al fichero de configuración de Apache, se podrían comprobar las siguientes directivas:
KeepAlive Off
No permite sesiones de larga duración. En según qué entornos interesará permitirlas, pero en otros entornos con muchas peticiones, ésto incrementará el número de conexiones simultáneas impactándo en el rendimiento, ya que las conexiones permanecerán abiertas más tiempo.
Timeout 60
Esta directiva se encarga de definir el tiempo máximo que el servidor esperará, para que ocurran determinados eventos. Tras una instalación por defecto, esta directiva se habrá configurado para esperar 60 segundos, pero según el caso, podría interesar aumentar o reducir este valor.
Include conf.d/*.conf
Con esta línea, se está indicando que el fichero de configuración de Apache buscará cualquier otro archivo con extensión .conf dentro del directorio conf.d, ubicado en lo definido en la directiva ServerRoot.
ServerName 80.90.100.101:80
La directiva ServerName especifica el nombre del servidor y el puerto a usar. Si se están usando virtual hosts, cada virtual host especifica su propio nombre para el servidor, con lo que se puede dejar esta directiva con la ip pública de la máquina.
NameVirtualHost *:80
Si se quiere usar virtual hosts (lo habitual), se deberá habilitar esta directiva para permitir hosting virtual basado en nombres.
DirectoryIndex index.php index.html index.html.var
También suele ser habitual, querer servir páginas php con Apache. Con la directiva «DirectoryIndex» se pueden definir el nombre de los archivos que el servidor buscará para servir como índice cuando se le realice una petición (tipo index.html).
/etc/httpd/conf/httpd.conf – Consejos de seguridad
ServerRoot
La directiva ServerRoot define el directorio de instalación de Apache. Este directorio, al igual que sus ficheros y subdirectorios, deben pertenecer tanto como usuario como grupo a root. Además, el único usuario que debería tener permisos de escritura sobre cualquier fichero o directorio dentro de ServerRoot, debería ser el propio «root».
<Directory />
AllowOverride None
</Directory>
Con la directiva AllowOverride None, dentro del Directory raíz, se previene que un usuario pueda usar el fichero .htaccess (a parte de los casos explícitamente definidos), el cual podría configurar directivas de seguridad diferentes a las especificadas en el fichero de configuración de Apache.
<Directory />
Order Deny,Allow
Deny from all
</Directory>
Las anteriores instrucciones, denegarán el acceso a cualquier parte del sistema de ficheros. Al definir el comportamiento para el Directory raíz, se podría incluir dentro de este Directory, la anterior directiva AllowOverride None explicada anteriormente. Una vez definido, se podrán añadir Directorys para permitir el acceso a determinadas áreas:
<Directory /usr/local/httpd>
Order Deny,Allow
Allow from all
</Directory>
Otra acción recomendable podría ser revisar el DocumentRoot que viene por defecto en Apache, normalmente en forma de <Directory «/var/www/html»>, que por defecto, puede venir definida tal y como sigue:
<Directory «/var/www/html»>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
En este caso podríamos querer desactivar el listado de archivos (lo cual muestra los archivos y subdirectorios en caso de no encontrar ningún archivo del tipo DirectoryIndex como index.html):
Options -Indexes
Otra opción interesante, es asegurarse de desactivar la ejecución de CGIs, en caso de no querer utilizarlos con la opción:
Options -ExecCGI
Fuentes: http://httpd.apache.org/docs/2.0/mod/core.html
http://httpd.apache.org/docs/current/misc/security_tips.html
http://www.desarrolloweb.com/articulos/20-trucos-de-seguridad-para-apache.html
http://httpd.apache.org/docs/2.0/mod/core.html#options
Foto por US Mission Geneva
Hola me a gustado tu blog lo tomare como un buen ejemplo para en el futuro tener el mio. Saludos y gracias desde México 🙂
¡Gracias Juan José!
Cuando tengas tu blog avisa para pegarle un vistazo. Seguro que aprenderemos algo 😉
Adri