Header Ads

Iptables Ulog

Una de las grandes molestias que genera el hecho de "crear" un Firewall manual basado en Iptables a secas (y no usar un Front-end Iptables) es saber si las reglas que establecimos surtieron el efecto deseado.
Syslog es en ocasiones una pesadilla, ya que maneja registros de orígenes diversos dentro de un mismo archivo, por lo que tratar de encontrar un evento específico o analizar un comportamiento, sería como buscar una aguja en un pajar; aparte de las implicaciones que trae llenar de logs el kernel de Linux.
Pero afortunadamente, los chicos de Netfilter (creadores de Iptables) se dieron a la tarea hace algunos años de crear ulogd  (The Netfilter Userspace Logging Daemon).
La diferencia más notable de ulogd frente a sus semejantes es que guarda los logs en un archivo fuera del Kernel, en la ubicación que el usuario quiera y se integra perfectamente con Iptables.
Muchos tal vez se preguntarán: Interesante, pero puedo elegir lo que realmente me interesa?... Por supuesto.
El iptables genera un sinfín de registros que a muy pocos les importan, pero lo que sí nos interesa como administradores IT son los registros no autorizados, conexiones ilegales, solicitudes denegadas, etc.
Un administrador IT es como un médico. Llega el paciente al consultorio y todo comienza por  "me duele...", o sea, la evaluación se origina siempre a partir de un mal (casi nadie acude a un hospital a no ser que esté enfermo). Luego el médico desencadena un protocolo, que consiste en hacer una serie de preguntas y pruebas de diagnóstico para verificar el funcionamiento "del sistema", y así evaluar las alternativas para "contrarrestar el mal", valiéndose de herramientas y métodos a su alcance. Lo mismo sucede con el administrador IT. Necesita ejecutar un protocolo de seguridad para evaluar su red y determinar los problemas para darle una pronta solución, con las herramientas que disponga.
Ulogd facilita esto, ya que nos permite hacer de todo, pero también podemos ejecutar reglas específicas en el iptables para determinar solamente lo que nos interesa. Lo ideal es usar detrás de cada regla de Iptables --ulog-prefix, pero si no quiere ir al extremo, puede hacerlo con la regla que considere más importante y con un par de líneas podemos averiguar qué conexiones están haciendo lo que no deberían.
Su configuración es sencilla. Instalamos ulogd
apt-get install ulogd
Activamos el módulo en el script de Iptables
modprobe ipt_ULOG
Colocamos las siguientes reglas en el script de Iptables (válidas para las versiones 1x y 2x).
Nota: $iptables=/sbin/iptables
Consulte los módulos de iptables con lsmod
# ULOGD (Linux kernel 2.3, 2.4, 2.5 and 2.6.)
$iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j ULOG
NFLOG (ULOG2) Kernel superior a 2.6
modprove xt_NFLOG y --nflog-prefix (tenga en cuenta que NFLOG no es estable)
$iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j NFLOG
Luego podemos analizar el archivo de log con un simple cat en el terminal
cat /var/log/ulog/syslogemu.log
O podemos hacerlo desde el Webmin en el módulo Sistema, icono Históricos (logs) del Sistema y pulsa Añadir un nuevo diario de sistema. Luego agregamos la ruta del archivo /var/log/ulog/syslogemu.log (o donde lo hayamos puesto). En Facilidades elegimos Todos (o lo queramos) y salvamos los cambios. Ahora solo basta abrir el log para visualizar los problemas. (ver imagen del encabezado)
Ejemplo de un log de ulog
Jul  8 16:52:55 user IN=eth1 OUT= MAC=00:9c:02:a2:01:00:c8:3a:35:00:00:00:08:00  SRC=192.168.1.109 DST=192.168.1.10 LEN=52 TOS=00 PREC=0x00 TTL=128 ID=32138 DF PROTO=TCP SPT=51031 DPT=8080 SEQ=4094452304 ACK=0 WINDOW=8192 SYN URGP=0
Nomenclatura más relevante
Fecha y hora: Jul 8 16:52:55
Usuario de Linux: user
Interfaz: IN=eth1
IP de origen (usuario): SRC=192.168.1.109
IP de destino (servidor): DST=192.168.1.10
Protocolo: PROTO=TCP
Puerto: DPT=8080 (Destination port) STP=51031 (Source Port)
Nota: El servidor proxy-web recibe peticiones (que en dependencia del navegador del usuario puede venir por cualquier puerto superior a 1024) y el servidor las responde por su puerto definido en la configuración (en este ejemplo 8080)
Dirección MAC: OUT= MAC=00:9c:02:a2:01:00:c8:3a:35:00:00:00:08:00
La dirección MAC se traduce así:
MAC de destino (servidor): 00:9c:02:a2:01:00 (si es ff:ff:ff:ff:ff:ff es la dirección broadcast 255.255.255.255)
MAC de origen (usuario): c8:3a:35:00:00:00
Tipo de trafico (Última porción del header): 08:00 (TCP) (Si es 08:06 corresponde a tráfico ARP)
Puede consultar otros parámetros de ulogd  AQUI o en portal  oficial.
Con ulog + iptables podemos establecer una vigilancia de los puertos más sensibles. Active los módulos:
$modprobe ipt_recent
$modprobe ipt_ULOG nlbufsiz=65535 flushtimeout=100
$modprobe xt_NFLOG
Ej: Vigilando los puertos SSH y Telnet en Iptables. Más de 4 conexiones x minuto a estos puertos se bloquea la ip. (Puede modificar estas reglas según las necesidades de su organización)
# Seguridad SSH, TELNET
# Bloquear ip atacante si supera 4 conexiones x min
# ejecute cat /proc/net/ipt_recent/*
$iptables -A INPUT -p tcp -m multiport --dports 22,23 -m state --state NEW -m recent --set --name attack
$iptables -A INPUT -m recent --name attack --update --seconds 60 --hitcount 4 -m limit --limit 4/minute -j ULOG --ulog-prefix 'ATAQUE'
$iptables -A INPUT -m recent --name attack --update --seconds 60 --hitcount 4 -j DROP
Ahora acceda al archivo de ulog en el Webmin o por terminal y busque ATAQUE (o eligen el nombre que quieran en ulog-prefix para identificar el ataque)
Nota: Se recomienda usar  Port Knocking  para reforzar la vigilancia de puertos sensibles ( HowTO)
Cambiar ruta de ulog
Si queremos cambiar la ubicación del archivo log por defecto
nano /etc/ulogd.conf
Y cambiamos la ruta por default
[LOGEMU]
file="/var/log/ulog/syslogemu.log"
Por la ubicación que queramos. Si usa kernel superior a 2.6 active loglevel=1
Luego reiniciamos el demonio
/etc/init.d/ulogd restart
También puede consultar los logs que se relacionan en el Kernel con el comando dmest .
dmesq
# Ej: Buscar logs relacionados con 443 port
dmesg | grep -i SPT=443
# Ej: consultar los últimos mensajes
dmesg | tail
Para los mensajes en el log del kernel tipo "martian source", lea  RFC 1812 en Novell
Vea Plugins (extensiones) Iptables
Con la tecnología de Blogger.