En un servidor compartido siempre se dan problemas comunes, al haber muchos sitios web compartidendo la misma IP, las malas practicas o una infección en un sitio web pueden ocasionar problemas para el resto de sitios web.

Por ejemplo imaginemos este escenario; En un servidor compartido uno de los sitios web ha quedado vulnerable y ha sido infectado, el «hack» consiste en unos ficheros que utilizan la función «mail()» de PHP para enviar miles de correos no deseados a remitentes de todo el mundo; las distintas plataformas anti-spam y Yahoo!, Hotmail, Gmail, google, etc detectan esta circustancia y bloquean los correos provenientes de esta IP, estamos jodidos.

Resultado: Aunque un solo sitio web ha sido infectado y utilizado para «bombardear» con SPAM, todos los sitios web, tiendas, etc se verán afectados, pues la IP es la misma y quedarán bloqueados no pudiendo comunicarse ni enviar notificaciones a sus clientes, esto es un gran problema en tiendas online o en plataformas con notificaciones periódicas, mailings, etc.

Si vemos la cola de envío de nuestro servidor mostraría algo así:

Captura

En este caso son mensajes de los sevidores de «yahoo» diciendo que todo lo proveniente desde nuestra IP será bloqueado y sus usuarios nunca lo sabrán.

En primer lugar tendremos que limpiar la infección y solicitar la desinclusión de nuestra IP en cuantas más mejor plataformas de anti-spam y esperar pacientemente.

Este problema nos deja bloqueada nuestra IP, lo peor es que será por días incluso durante semanas y no es fácil de explicar a los clientes, por eso vamos a desactivar por defecto esta función dejando la opción de hacer ciertas «excepciones» por sitios web concretos y siempre contorlado por el administrador del sistema y que se pueda activar a nivel de sitio web.

Una vez instalado, configurado el programa de correo podemos probarlo con este sencillo código php:

	if (mail ("[email protected]_PROVEEDOR.COM", "Prueba", "hello")){
			echo "Me han enviado correctamente.";		
		}else{
			echo "No se ha podido enviar.";
			}

prueba

Una vez probado el programa de correo encargado de enviar, accedemos al servidor por SSH y nos movemos a la carpeta:

/etc/php5/apache2/

y editamos el fichero php.ini

nano php.ini

Buscamos la linea donde veremos este valor:

sendmail_path = /usr/sbin/sendmail -t

y lo cambiamos por este:

sendmail_path = /dev/null

Todo será enviado al «agujero negro» de Linux.
En este momento tenemos el servidor con el sistema de envío de correo instalado pero desactivado por defecto para todos los sitios web.
Si lanzamos de nuevo la prueba, vemos que no se puede enviar:

prueba2

Para activarlo en un sitio web como «excepción» podemos hacerlo en el fichero de «site» de apache sencillamente restaurando el valor de la variable «send_mail» de este modo en el bloque <VirtualHost>:

php_admin_value sendmail_path "/usr/sbin/sendmail -t"

y lanzamos la recarga de apache

service apache2 reload

La función mail volverá a funcionar SOLO en ese sitio web, si queremos más excepciones tendremos que añadir esta línea en tantos sitios web como creamos conveniente.