Apache2: Tips de seguridad

Incluir a nivel configuración servidor estas directivas:

<Directory />
  AllowOverride None
  Options None
  Order Deny,Allow
  Deny from all
 </Directory>

<ifmodule mod_usedir.c>
UserDir disabled root
</IfModule>

Después en los Host virtuales que queramos habilitar en las secciones Directory:

        <Directory /var/vhosts/joseblanco.pro/>
                Options -Indexes +FollowSymLinks +MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

En la declaración anterior por un lado hemos deshabilitado la navegación por los directorios que cuelgan de /var/vhosts/joseblanco.pro/ mediante la opción -Indexes.
Después hemos permitido ficheros .htaccess mediante AllowOverride All.
Por último hemos abierto lo que habíamos cerrado, de lo contrario los visitantes recibirán un “403 Forbidden Error”.
Es decir, siempre tened un esquema de 1º Prohibir todo, 2º Permitir lo necesario:

<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
</Directory>

<Directory /www>
Order Allow,Deny
Allow from all
</Directory>

Seguridad por oscuridad

Otras dos configuraciones de seguridad para Apache2 están actualmente en un fichero security.conf, estos son los dos parámetros y el valor a establecer:

ServerTokens ProductOnly
ServerSignature Off

Y como casi siempre tenemos funcionando PHP, conviene verificar que la directiva expose_php está inactiva:
Editar el fichero /etc/php5/apache2/php.ini y cambiar la siguiente directiva:
expose_php = off

Un artículo donde se explica como montar un servidor vps Debian desde cero os podría venir bien.

Desactivar el fichero wp-cron.php para evitar consumo en el VPS

wordpress

El archivo wp-cron.php cumple con características muy necesarias:

  • Verificación de actualizaciones
  • Pingbacks
  • Publicar artículos programados

Es una función muy útil y que necesitamos en nuestro WordPress, pero tiene su parte negativa:  este script php se ejecuta cada vez que la página recibe un impacto. Lo cual son peticiones a apache innecesarias, por lo que os sugiero una configuración alternativa para el caso de los VPS Linux, teniendo en mente que estas tareas se podrían hacer una sola vez al día, de madrugada por ejemplo.

Cómo desactivar wp-cron.php?

Debemos editar wp-config.php y añadir esta directiva:

define('DISABLE_WP_CRON', true);

Ahora convendría añadir un cron Linux real, para ello vía SSH en el VPS editamos el crontab de root:

crontab -e

Y añadimos en el minuto y hora deseados, o bien a una frecuencia, para que el script /var/www/vhosts/wordpress/wp-cron.php se ejecute 1 vez al día en mi caso a las 2:30am, en lugar de en cada visita:

30 02 * * * php -q /var/www/vhosts/wordpress/wp-cron.php

 

Aquí tienes un pequeño script que ejecutaría todos los cron de todos los WordPress que haya a partir de la carpeta /var/www/webs/:
nano /var/www/webs/cronWP.sh

for i in `find . -iname "wp-cron.php"`
do
	echo "$i"
	php -q $i
done

Y después podemos programar el crontab cada 30 minutos;
crontab -e

*/30 * * * * /var/www/webs/cronWP.sh

Aquí tienes un script que actualiza todas las configuraciones de todos los WordPress que haya por debajo de la carpeta /var/www/webs/ para desactivar crontab:

for i in `find . -iname "wp-cron.php"`
do
  ruta=`dirname $i`
  echo "
/* jblanco: cron */
define('DISABLE_WP_CRON', true);" >> $ruta/wp-config.php
done