Sospechamos que posiblemente se esté enviando SPAM desde uno de nuestros servidores (tal vez desde un sitio Wordpress comprometido) y queremos monitorear y registrar (loguear en Spanglish) todo intento de conexión TCP saliente hacia puertos 25 (SMTP) y 587 (SMTPS). Para ello es posible recurrir a la capacidad de logueo de iptables (o UFW en Ubuntu y derivados), a través de reglas simples.



UFW

En sistemas Ubuntu, es posible loguear cualquier regla a través de la opción log. Por ejemplo, para permitir y loguear el tráfico saliente (out) hacia el puerto 25, utilizar la siguiente regla:

root@ubuntu:/home/sysadmin# ufw allow out log 25
Rule added
Rule added (v6)

Si se desea, repetir para el puerto 587 (SMTPS).

Al listar las reglas, se observa la palabra "log", entre paréntesis, a la derecha de las reglas que se loguean:

root@ubuntu:/home/sysadmin# ufw status
Status: active

To                         Action      From
--                         ------      ----
2244/tcp                   ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
2244/tcp (v6)              ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)

25                         ALLOW OUT   Anywhere (log)
25 (v6)                    ALLOW OUT   Anywhere (v6) (log)

Los registros del log del firewall UFW se envían al log del sistema, que en Ubuntu (al igual que Debian) es /var/log/syslog. Aunque también se escriben en el archivo /var/log/ufw.log.

Para probar el funcionamiento de la regla, enviar un correo hacia cualquier destinatario válido:

root@ubuntu:/home/sysadmin# echo "test" | mail -s prueba sysadmin@linuxito.com

Se observa que el tráfico saliente hacia el puerto 25 (de la dirección IP del servidor de correo del destinatario, en este ejemplo reemplazado por asteriscos para conservar la privacidad) queda registrado correctamente en el log:

root@ubuntu:/home/sysadmin# grep "DPT=25" /var/log/ufw.log | grep "OUT=eth0"
Apr  4 12:53:24 ubuntu kernel: [347241.160052] [UFW ALLOW] IN= OUT=eth0 SRC=***.***.***.*** DST=***.***.***.*** LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=1946 DF PROTO=TCP SPT=53098 DPT=25 WINDOW=29200 RES=0x00 SYN URGP=0 

iptables

En iptables es posible utilizar una única regla para varios puertos destino a través de la opción -m multiport.

Suponiendo que la política de la cadena OUTPUT es ACCEPT, agregar la siguiente regla en dicha cadena para loguear el tráfico SMTP/SMTPS saliente:

iptables -A OUTPUT -p tcp -m multiport --dports 25,587 -m state --state NEW -j LOG --log-uid --log-prefix  "SMTP SALIENTE "

La opción --log-uid permite registrar el PID del proceso que originó le paquete y --log-prefix permite definir un prefijo personalizado para la entrada en el log (en este caso "SMTP SALIENTE ").

Listar la cadena para comprobar la correctitud:

root@linuxito:~# iptables -nL OUTPUT
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
LOG        tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 25,587 state NEW LOG flags 8 level 4 prefix "SMTP SALIENTE "

Si la política para el tráfico de salida es DROP (la opción más recomendable y segura), y se desea permitir y loguear el tráfico SMTP/SMTPS, antes de esta regla será necesario agregar la siguiente:

iptables -A OUTPUT -p tcp -m multiport --dports 25,587 -j ACCEPT

Recordar que las reglas de iptables son evaluadas en orden.

Enviar un mail de prueba:

root@linuxito:~# echo "prueba" -s "prueba fw" sysadmin@linuxito.com

En el syslog se observa el mensaje:

root@linuxito:~# tail /var/log/syslog | grep SMTP
Apr  5 10:24:41 linuxito kernel: [7416562.948591] SMTP SALIENTE IN= OUT=venet0 SRC=***.***.***.*** DST=***.***.***.*** LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=31515 DF PROTO=TCP SPT=51119 DPT=25 WINDOW=14600 RES=0x00 SYN URGP=0 UID=103 GID=105 

Notar el prefijo (y por qué se deja un espacio en blanco cuando se define).

De esta forma es posible analizar cuántos paquetes y hacia qué destinos están saliendo a través del protocolo SMTP/SMTP (correo saliente), lo cual nos permitirá determinar si efectivamente se está enviando SPAM (o no) desde nuestro servidor.


Tal vez pueda interesarte


Compartí este artículo