Ip bloqueada por spam – Taller Linux

Ip catalogada como spammerUno de los problemas más comunes actualmente en el uso del correo electrónico es la posibilidad de que los emails que mandamos no lleguen a los destinatarios o entren en su carpeta de correo no deseado o “spam”. Esto normalmente es debido a que nuestro sistema de correo tiene su ip bloqueada por spam en las numerosas listas negras DNS o DNSBL que hay por Internet.

De este problema normalmente nos enteramos porque algunos correos vienen devueltos con un mensaje que hace referencia a una lista negra y nuestra Ip.

En los hosting compartidos, cuando nosotros no tenemos control sobre el servidor de correo no queda otra que avisar a los administradores para que lo revisen, pero si el problema está en nuestro servidor será necesario que nosotros nos hagamos cargo o bien busquemos ayuda especializada para resolverlo.

En esta entrada vamos a explicar cuales son los pasos que se deben seguir para trazar y resolver las incidencia de este tipo, aunque como siempre nos ceñiremos a los casos más comunes.

1. ¿La Ip está listada o tiene baja reputación?

En la red existen gran cantidad de páginas dedicadas a mostrar cuando una ip está listada por alguna DNSBL o que son útiles para determinar si tiene baja reputación de envío. Por poner ejemplos podemos citar:

www.dnsbl.info

– Te permite revisar una ip contra un listado extenso de las más importantes DNSBL.

multirbl.valli.org

– Igual que la anterior pero tiene casi todas las listas que existen.

www.senderscore.org

– Te ofrece una puntuación a la IP en base a los correos enviados en los últimos 30 días, es muy utilizada.

www.zy0.de

– Permite revisar las listas mas importantes y ademas ofrece ejemplos de correos ilegítimos enviados desde la ip a su red de SPAMTRAPS.

2. ¿Nuestro servidor está enviando SPAM?

Una vez que ya tenemos claro el punto anterior podemos pasar al siguiente, que es clave ya que como dice el proverbio “cuando el rio suena es que agua lleva” y si suena en nuestro caso probablemente es porque se ha estado enviando spam y del malo.

Para ello lo primero que debemos hacer es revisar la cola de salida de nuestro MTA (servicio de correo), ya que los spammers que abusan de los sistemas ajenos suelen enviar enormes cantidades de correos rwtgvnu find out here. En estos envíos masivos los destinatarios muchas veces no existen o directamente son rechazados por filtros antispam bien configurados, y por tanto seguirán en la cola de salida siendo retrasados, a veces incluso bloqueando el correo legitimo. Estos correos nos permitirán determinar de una forma rápida e inequívoca si el correo es ilegitimo e incluso identificar al emisor.

Al revisar la cola uno de los primeros indicadores que debemos ver es la cantidad de correo saliente. En un servidor saludable no muy grande no debería haber más que unos pocos correos a la espera de ser entregados, si vemos un numero elevado ya podemos empezar a sospechar. Debemos también mirar con lupa el origen de los mensajes y si es posible el asunto que tienen. Si vemos cuentas de origen que no existen en nuestro servidor, o asuntos inequívocamente falsos deberemos revisar su contenido y así ya tendremos el primer punto completado. En un futuro ofreceremos una entrada con los detalles para efectuar este proceso en los servidores de correo más utilizados.

Si en la cola no hay evidencias claras también podemos revisar el log de correo de nuestro servidor, que tiene un registro de todo lo que ocurre aunque no contiene detalles como el asunto o la posibilidad de ver el mensaje, por esto hemos mirado primero la cola. Allí podremos utilizar comandos como cat, grep, wc, sort, uniq, etc .. para tratar de sacar listados que nos muestren un comportamiento anómalo y así poder identificar al emisor.

En el peor de los casos es posible que los spammers utilicen un programa que incluya internamente su propio servicio de correo, con lo que no aparecerán los mensajes en nuestra cola de correo o en el log. Estos casos los detectaremos porque nuestra IP estará constantemente listada, e incluso en algunas paginas podremos ver los correos enviados a los SPAMTRAPS, pero no habrá nada en la cola y el log.

Para finalizar este punto, con la anterior revisión ya nos tendría que quedar claro si nuestro servidor está siendo utilizado ilícitamente o por el contrario el problema viene de envíos publicitarios demasiado agresivos. Si se debe a esto último podemos pasar directamente a la sección de limpieza de IP y de paso revisar nuestro articulo sobre buenas practicas enviando correo. En caso contrario podéis seguir leyendo porque os vamos a explicar como detectar la cuenta pirateada o script de envío y resolver el entuerto.

3. Detener el envío de SPAM

Siguiendo los puntos anteriores, una vez tenemos claro que se está abusando del servidor, lo principal es detener la salida de correo externa hasta que hayamos neutralizado la fuente de los problemas,  borrando los mensajes ilícitos en cola que pudieran quedar.

Dependiendo de que servidor de correo se esté utilizando (Postfix, Qmail, Sendmail, etc..) hay varias maneras de hacer esto, pero una muy sencilla y efectiva, sea lo que sea tengamos instalado, es cortar la salida al puerto 25 en nuestro firewall. Esto es bueno por varios motivos, uno porque es igual para todos y muy sencillo, dos porque se siguen pudiendo recibir y entregar correos de forma local, y tres nos aseguramos que los correos legítimos que se quieran salir a fuera no se perderán o rebotarán, ya que se quedarán en la cola intentando salir hasta que expire el tiempo asignado para los reintentos, que pueden ser varios días.

En el caso que no tengamos una interfaz gráfica para ello siempre podemos llamar a iptables directamente con está linea:

/sbin/iptables -A OUTPUT -p tcp --dport 25 -j DROP

Para asegurarnos de que no hay conexión con el exterior, podemos hacer un telnet a un servidor de correo remoto. Primero buscamos cual es el servidor Mail eXchange de por ejemplo gmail con una consulta “dig”:

[root@server ~]# dig mx gmail.com +short
30 alt3.gmail-smtp-in.l.google.com.
40 alt4.gmail-smtp-in.l.google.com.
5 gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
20 alt2.gmail-smtp-in.l.google.com.

Cogemos la entrada mx con mayor prioridad (número menor) y lanzamos el telnet al puerto 25:

[root@server ~]# telnet gmail-smtp-in.l.google.com. 25
Trying 173.194.66.26...

Si no pasa de ahí es que ha funcionado, ya tenemos el envío de correo saliente bloqueado temporalmente.

4. Determinar y neutralizar la fuente del abuso.

En este punto deberemos revisar los logs de correo, la cola de envío, buscar ficheros modificados recientemente, etc.. cualquier cosa que nos indique si el envío proviene de una cuenta smtp cuya seguridad ha sido comprometida o de un script malicioso de alguna web, o mucho peor, del propio sistema con permisos de administrador.

En la revisión de logs, como hemos comentado antes es importante utilizar herramientas que nos permitan contabilizar el numero de entradas por ip, por cuenta de origen, por id del usuario, etc.. para poder visualizar el comportamiento anómalo. En la cola de envío si se da la suerte que tenemos acceso al cuerpo de un mensaje ilícito podremos buscar pistas que nos lleven a algún host infectado alojado en nuestro servidor, o incluso si configuramos correctamente php nos puede mostrar el nombre del script utilizado.

Cuando ni en el log ni en la cola hay evidencias claras, nos tocará buscar ficheros infectados, siendo entonces útil la herramienta “find”, buscando por el tiempo de modificación y por tipos de fichero ejecutables, como .php .js .html, etc.. La sintaxis exacta para las webs alojadas en “/var/www” y con 10 días de antiguedad sería:

find /var/www/ -type f -mtime -10

Pasar un antivirus libre como clamav por todos los ficheros también ayuda. Si el problema viene de una cuenta de correo smtp deberéis cambiar la contraseña y avisar a su usuario para que limpie su equipo y utilice una contraseña mas robusta. Si por un fichero web habrá que determinar si ha sido subido por una vulnerabilidad en el código o mediante una cuenta ftp pirateada, para la cual habría que tomar las mismas medidas que con la cuenta smtp.

Las posibilidades son muy amplias para abarcarlas en un post, os dejamos a vosotros la tarea de detectar la forma de inyección del correo malicioso y neutralizarla, o si no siempre podéis buscar ayuda profesional. 

5. Limpiar la cola de correo.

Una vez la amenaza este neutralizada tocará reparar los daños. Primero antes de permitir el envío de nuevo se deberá limpiar la cola de correo por si quedasen emails. Para esto cada servidor de correo dispone de unas herramientas especificas, permitiendo buscar por un nombre en las cabeceras de cada mensaje y eliminarlos de forma selectiva, para no afectar al correo legitimo.

 

6. Limpiar la Ip y reactivar el envío.

Por último, una vez la amenaza este neutralizada y el sistema limpio ya podremos reactivar la salida. En caso de que la IP haya sido catalogada como spammer tocará acceder a cada una de las  DNSBL que la tengan y seguir los pasos necesarios para solicitar su exclusión. Normalmente este proceso es gratuito aunque hay algunas listas que piden un importe para agilizar el tramite, nosotros no recomendamos pagar ya que existen formas de permitir enviar sin verse afectado por el bloqueo, y ademas no vemos ético que intenten lucrarse de esta forma.

Por ejemplo es posible redirigir el trafico de correo saliente desde nuestro servidor hacia otro servidor relay, que pondrá su IP para que nosotros podamos entregar el correo, o también es posible añadir una IP extra a nuestro servidor e indicarle a nuestro servicio de correo que envíe con ella.

Para solicitar la exclusión de la IP en una lista DNSBL lo primero que hay que comprobar es si dicha IP tiene la resolución inversa configurada, si no normalmente nos será denegada la petición. Esto es que su reverso sea un nombre identificable y no el genérico facilitado por el proveedor o que no tenga. Para esto primero debemos acceder al panel del proveedor de la ip (normalmente el del servidor),  y en su configuración  encontraremos seguro esta opción. Lo ideal es utilizar un nombre con un subdominio que siempre debe estar ya apuntando a dicha ip.

Por ejemplo una ip que sea “123.123.123.123” y aloje los servicios del dominio “ejemplo.com” le podríamos llamar “servidor.ejemplo.com” y a su vez, esta entrada DNS tipo A debería apuntar a 123.123.123.123, completando el circulo.

Con esto damos por finalizada esta entrada, esperamos que os haya sido de utilidad, cualquier duda o consulta como siempre no dudéis en transmitírnoslo añadiendo un comentario, email o rellenando nuestro formulario de contacto.

Un saludo!

 

Reparar problemas en el servicio web – Taller Linux

<img class="size-square wp-image-3670 alignleft" title="Servicio web" alt="Servicio web" src="http://www accutane capsules online.rdadmin.com/wp-content/uploads/2014/03/servidorweb-180×180.png” width=”180″ height=”180″ srcset=”https://www.rdadmin.com/wp-content/uploads/2014/03/servidorweb-180×180.png 180w, https://www.rdadmin.com/wp-content/uploads/2014/03/servidorweb-80×80.png 80w, https://www.rdadmin.com/wp-content/uploads/2014/03/servidorweb-36×36.png 36w, https://www.rdadmin.com/wp-content/uploads/2014/03/servidorweb-120×120.png 120w, https://www.rdadmin.com/wp-content/uploads/2014/03/servidorweb.png 256w” sizes=”(max-width: 180px) 100vw, 180px” />Uno de los usos más comunes de los servidores online es el de alojar sitios web. Esto es posible gracias a software que sirve contenido http entre otras cosas. En está entrada os explicaremos algunos trucos para poder detectar y reparar problemas en el servicio web que estén en sistemas GNU/Linux. Para simplificar nos centraremos en apache que es de los más usados.

Normalmente la primera noticia que tenemos cuando hay problemas en el servidor web es que los navegadores no son capaces visualizar los contenidos. Antes de entrar al servidor deberíamos revisar si el problema es de DNS y porque el nombre del dominio no resuelve a la Ip de nuestro servidor web. Esto se puede ver fácilmente usando  aplicaciones como ping,  host, nslookup dig, etc.. dependiendo de la que tengamos más a mano.

Si ya estamos seguros de que la DNS funciona y el dominio apunta a la ip del servicio web, deberemos acceder a este como administradores y tratar de averiguar y resolver cualquiera que sea el problema.

Antes de entrar al trapo, como primera información diremos que el protocolo http trabaja en el puerto 80 de nuestro servidor. Este es un dato importante ya que sabiéndolo podremos obtener fácilmente datos sobre los procesos que se estén ejecutando en el.

Una vez dentro, lo primero que podemos hacer es utilizar el comando “netstat” que muestra un listado de puertos y conexiones establecidas en nuestro servidor:

[root@server ~]# netstat -taupeln |grep LISTEN |grep :80
tcp    0     0 :::80     :::*     LISTEN   0     28682  7409/httpd

Como se aprecia, usando el comando junto con “grep”, para filtrar por “LISTEN” y “:80” nos muestra si hay algún proceso a la escucha en el puerto 80, y que utiliza el servicio “httpd”. Si quitásemos el “|grep LISTEN” del comando nos mostraría además las conexiones que siguen activas en ese puerto, entre ellas podemos encontrar conexiones establecidas, en espera o pendientes de cerrarse.

Además, disponemos también de un comando llamado “lsof” que nos puede mostrar aun más información referente a usuarios y a número de procesos corriendo. Este comando muestra información sobre los ficheros abiertos en el sistema Linux, dado que en Linux todo funciona a través de ficheros pues nos es muy útil. En este caso necesitamos indicarle que busque ficheros abiertos relacionados con el puerto 80 y esto lo haremos especificando  “-i :80”, dentro del sistema estando como usuarios administradores:

[root@server ~]# lsof -i :80
 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
 httpd 2158 root 4u IPv4 331359131 0t0 TCP *:http (LISTEN)
 httpd 20311 apache 4u IPv4 331359131 0t0 TCP *:http (LISTEN)
 httpd 22408 apache 4u IPv4 331359131 0t0 TCP *:http (LISTEN)
 httpd 24987 apache 4u IPv4 331359131 0t0 TCP *:http (LISTEN)
 httpd 25426 apache 4u IPv4 331359131 0t0 TCP *:http (LISTEN)
 httpd 25539 apache 4u IPv4 331359131 0t0 TCP *:http (LISTEN)
 httpd 31734 apache 4u IPv4 331359131 0t0 TCP *:http (LISTEN)
[root@server ~]#

Esto de arriba es una salida normal de un servidor donde nadie está mirando las páginas alojadas. En ella podemos ver como el usuario que ejecuta los procesos es “apache”, que hay un proceso padre y 6 procesos hijos esperando a que entren peticiones para servirles el contenido. Si alguien mirase alguna página aparecería más información donde ahora aparece “LISTEN”, indicando el origen de la conexión entre otras cosas.

Si en nuestro servidor vemos que no hay procesos corriendo en el puerto 80 con cualquiera de los comandos anteriores, es indicativo de que el servicio web no está funcionando como debe y por tanto tendremos que intentar arrancarlo de nuevo. Esto dependiendo de que distribución de Linux utilicemos se hará utilizando un nombre o otro, en las distribuciones basadas en Redhat como Centos se hace con “httpd” y en las basadas en Debian  como Ubuntu, con “apache2”:

[root@server ~]# service httpd start
Starting httpd:                                            [  OK  ]
[root@server ~]#

En nuestro caso usamos httpd porque es un Centos, y como se ve el servidor web ha arrancado correctamente, con lo que solo nos quedaría comprobar que ahora si hay procesos corriendo y tratar de visualizar las webs de nuevo en el navegador.

En el caso que no arrancase es posible que nos muestre un mensaje de error que habría que analizarlo en detalle para determinar exactamente que ocurre, ya que hay muchas posibilidades. También deberíamos mirar en el log de errores para ver si ha salido algún mensaje indicativo. Esto lo podemos hacer con el comando cat o tail o con cualquier editor de textos de consola, como vim o nano, o emacs.

Una aplicación muy útil de las anteriormente mencionadas es “tail” ya que con el parámetro “-f” detrás nos permite ver los logs a tiempo real, por ejemplo:

tail -f /var/log/httpd/error_log

Si esto lo dejamos corriendo en una consola y con la otra tratamos de arrancar el servicio, o accedemos al navegador podremos ver los errores a tiempo real, lo cual será muy útil.

En ocasiones el servidor web parece estar arrancado y funcionando normalmente con sus procesos a la escucha, pero aun así las webs no funcionan correctamente y no muestran ningún contenido en el navegador.

En estos casos para ver que sucede lo prioritario como hemos indicado antes es mirar el log de errores, que normalmente mostrará información detallada de los problemas que impiden el funcionamiento. Una vez mostrado el error, si no sabemos de que se trata, lo normal es utilizar un buscador como Google para obtener información sobre este error y alguna forma de solucionarlo. Si aun así no aparece ningun mensaje lo que habría que hacer es parar todas las instancias del servidor web y lanzarlo en modo debug:

httpd -e DEBUG

Con esto si que deberíamos poder ver cualquier error interno para ayudarnos en su resolución. En cualquier caso si después de haber seguido todos estos pasos no consigues hacer funcionar tu servidor web te recomendamos que te pongas en manos de profesionales que puedan resolver la incidencia de forma rápida y eficiente.

Para finalizar vamos a poner un listado de los errores más comunes que nos podemos encontrar a la hora de levantar un servicio web caído y algunas ideas de como solucionarlos. Los errores que pueden salir en el log cuando el problema es de la configuración web o el código los dejamos para otra entrada posterior.

1. “make_sock: could not bind to address 0.0.0.0:80 no listening sockets available”

Si al arrancar el servicio web aparece este error probablemente es que ya se encuentre funcionando ya que hay algo a la escucha en el puerto  80. Si tenemos problemas podemos probar de detenerlo primero con un “service httpd/apache2 stop”, pero si aun así sigue saliendo el mismo error deberíamos matar el proceso que está ocupando el puerto 80, sacando primero el número pid con el comando lsof o netstat arriba descritos y usando el comando “kill -s 9 “pid” para forzarlo a pararse.

2. “No such file or directory: apache2: could not open error log file /var/log/apache2/error.log”

Con este error el servidor web nos indica que al arrancar no ha podido escribir en el log que tiene asignado en su configuración, bien porque la carpeta no existe, porque no puede crear el fichero o porque el fichero existe pero los permisos/usuarios no son los correctos. Para resolverlo hay que analizar todos estos factores y permitir que el usuario del servidor web pueda escribir en ese fichero y volver a lanzar el proceso.

3. “Starting httpd: Syntax error on line xxx of /etc/httpd/conf/httpd.conf:  DocumentRoot must be a directory”

A veces el error nos redirige a un punto exacto de la configuración del servicio web. En ese caso deberemos revisar el fichero de configuración en cuestión, y analizar que puede fallar exactamente en la linea indicada. En este caso  el “DocumentRoot” que es la raíz del servidor web no era accesible por este, siendo la solución similar a la del punto 2.

——————————————————————————————————

Y hasta aquí hemos llegado en esta entrada, si nos surgen más errores comunes los añadiremos junto con su explicación. Desde Rdadmin os instamos a que nos consultéis cualquier problema o duda que tengáis escribiendo en el blog o a nuestro email de contacto. Os ofreceremos asesoramiento sin ningún compromiso.