Posts etiquetados ‘tcpdump’

Si tenéis que hacer troubleshooting de un tráfico rechazado en un Fortigate, podéis sufrir una pequeña pesadilla para saber que está ocurriendo. Resulta que el logado de tráfico en este firewall es un tanto peculiar y puede dar más de un quebradero de cabeza. Funciona así:

Si la regla es de tráfico permitido, sólo quedarán registrado en los ficheros de logs aquellos paquetes permitidos en la regla y que atraviesen correctamente el firewall. Si el paquete es rechazado por cualquier motivo (porque no esté permitido en la regla o se rechace por otro motivo que no se encuentre entre las funcionalidades UTM con log propio) no queda registrado este Reject en ninguna parte y no podemos saber si la regla está mal, si el paquete original no está llegando o si el firewall se lo esta comiendo porque tiene hambre.

Para saber que porras pasa con nuestro paquete, Fortigate dispone de dos comandos que nos facilitarán la vida enormemente: Diagnose Sniffer Packet y Diagnose Debug Flow.

Diagnose Sniffer Packet

Es el equivalente al tcpdump en el universo Fortinet y nos permite visualizar los paquetes registrados a nivel de kernel por cualquiera de las interfaces del firewall o por todas a un tiempo. Se ejecuta desde el CLI con el siguiente formato:

diagnose sniffer packet {interface | all}  ‘net z.z.z.z/p and/or host x.x.x.x and/or port yyy’  [options]

Para realizar una búsqueda más precisa y no ver un montón de lineas a lo Matrix tenemos las opciones:

  • net/prefix : Muestra todo lo existente para una red
  • host : Muestra sólo lo relativo a un host.
  • port: Muestra sólo lo relativo a un puerto concreto
  • and/or: Permite combinar varios de los filtros anteriores.

Las opciones son:

  • 1: Imprime la cabecera de los paquetes
  • 2: Imprime la cabecera y la informacion de capa IP de los paquetes
  • 3: Imprime la cabecera y la informacion desde capa TCP/Ethernet de los paquetes (si está disponible)
  • 4: Imprime la cabecera de los paquetes con el nombre de la interfaz
  • 5: Imprime la cabecera y la informacion de capa IP de los paquetes con el nombre de la interfaz
  • 6: Imprime la cabecera y la informacion desde capa TCP/Ethernet de los paquetes (si está disponible)con el nombre de la interfaz

Ejemplos:

diagnose sniffer packet any ‘net 10.0.0.0/8 and host 172.16.16.14 and port 3389′

diagnose sniffer packet any ‘host 10.4.131.97 and host 172.16.16.14 and port 3389′ 4

Diagnose Debug Flow

Es una herramienta que nos permite ver el camino que sigue un paquete dentro de el Fortigate, las reglas que aplica al mismo, las rutas …

Se ejecuta a través de CLI y os adjunto algunos ejemplos que os permitirá su uso según queráis filtrar las reglas aplicadas a una IP.

# diagnose debug enable
# diagnose debug flow show console enable
show trace messages on console
# diagnose debug flow filter add 10.10.20.30
# diagnose debug flow trace start 100

El resultado es:

id=36871 trace_id=1132 msg=”vd-root received a packet(proto=17, 10.10.20.30:1029->192.168.110.11:161) from internal.”
id=36871 trace_id=1132 msg=”allocate a new session-00012042″
id=36871 trace_id=1132 msg=”find a route: gw-172.20.120.2 via wan1″
id=36871 trace_id=1132 msg=”find SNAT: IP-172.20.120.230, port-54409″
id=36871 trace_id=1132 msg=”Allowed by Policy-5: SNAT”
id=36871 trace_id=1132 msg=”SNAT 10.10.20.30->172.20.120.230:54409″

Creo que la salida es lo suficientemente intuitiva para que la comprendáis fácilmente.

Espero que os sirva!

Saludillos.