Asegurando Apache y PHP en Ubuntu

Muchos en este mundillo sabemos que Linux es un sistema operativo muy seguro y que Ubuntu es cada vez más la opción elegida por muchísimos administradores de sistemas, sin embargo, como todo, una instalación básica no es siempre perfecta y hay que tocar “cosillas” para que sea lo más perfecta posible.

El problema que tiene Ubuntu, especialmente la versión 12.04, es que una instalación básica de Apache 2 y PHP deja bastante rastro de lo que estamos utilizando y lo ideal sería ocultar dicha información para evitar lo máximo que podamos un posible ataque externo. Como ejemplo de ello ejecutad el siguiente comando sobre cualquier servidor que hayáis montado:

curl -X https://direcciondelservidor

y seguramente obtendréis algo similar a esto:

Date: Fri, 19 Sep 2014 13:09:20 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.3.10-1ubuntu3.11

Evidentemente estamos dando “demasiada” información a cualquier posible atacante así que lo suyo es eliminarla, para ello hay que realizar lo siguiente:

Editar el archivo /etc/php5/apache2/php.ini y añadir o editar las siguientes lineas:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
display_errors = Off
track_errors = Off
html_errors = Off
magic_quotes_gpc = Off

A continuación editad el fichero /etc/php5/apache2/conf.d/security y realizad la misma operación pero con las siguientes líneas:

ServerTokens Prod
ServerSignature Off
TraceEnable Off
Header unset ETag
FileETag None

Finalmente hay que editar el archivo donde hayáis configurado vuestra página de apache. Si no habéis cambiado el archivo en cuestión debería de ser /etc/apache2/sites-available/default y añadir las siguientes líneas dentro del bloque

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(GET|POST|HEAD)
RewriteRule .* – [R=405,L]

Estas lineas requieren del módulo mod_rewrite de Apache, así que hay que asegurarse que esté activado con el comando

sudo a2enmod rewrite

Y finalmente…

sudo service apache2 restart

Si todo ha ido bien y ejecutamos de nuevo el comando Curl sobre nuestro servidor veremos algo parecido a lo siguiente:

Date: Fri, 19 Sep 2014 13:17:29 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN

Mucho mejor ahora, ¿verdad?