En mi día a día, compagino la administración de servidores Linux con Firewalls dedicados de la familia Juniper SSG y Fortinet Fortigate.
En algunas situaciones te encuentras con problemas que no logras ver a simple vista con la interfaz del Firewall.. Un túnel VPN que no sabes porque no negocia, un tráfico que no está cayendo en la policy correspondiente.. etc.
Por ello, en esta entrada os voy a indicar cómo capturar trazas de tráfico en un Firewall Juniper, algo muy útil a la hora de hacer un debugging a bajo nivel de un problema.
Lo primero de todo es entrar al Firewall por ssh con nuestro usuario admin. Una vez dentro, vamos a proceder a activar el llamado «dbuffer», lo cual no es más que un buffer en memoria en el cual se almacenarán los paquetes que vamos a capturar.
set console dbuf
Una vez esté activo, vamos a comprobar su estado, tamaño y ocupación, puesto que muy probablemente nos interese aumentarlo:
get dbuf info
El comando nos devuelve el resultado:
count: 0, last index: 0, cur index: 0, size: 1048576
start: 0, pause: 0
Como vemos, el valor size nos indica el tamaño del dbuf, es muy pequeño, por lo que vamos a aumentarlo a 4 Mb para poder guardar más paquetes
set db size 4096
Tras esto, ya estamos listos para añadir filtros a nuestra captura de trazas. Para añadir los mismos, usaremos el comando set ffilter seguido del tipo de filtro, y su valor.
Los tipos de filtros disponibles son:
~$: set ffilter ?
dst-ip flow filter dst ip
dst-port flow filter dst port
ip-proto flow filter ip proto
src-ip flow filter src ip
src-port flow filter src port
Es decir, podemos filtrar por IP y puerto origen o destino y por protocolo.
Indicar que los filtros, si se añaden uno a uno, son filtros de tipo «or» es decir, la traza será capturada si cumple UNO de los filtros añadidos, recuerdo, uno a uno.
Si sin embargo se concatenan los filtros, el filtro será de tipo «AND».
Ejemplos: Quiero filtrar el tráfico de la IP origen 192.168.10.50
set ffilter src-ip 192.168.10.50
Ejemplo 2: Quiero filtrar el tráfico de la IP origen 192.168.10.50 y con destino 10.10.10.50
set ffilter src-ip 192.168.10.50 dst-ip 10.10.10.50
Si por error añadimos un filtro que no queremos, se puede borrar. Para ello:
get ffilter
Lo cual te devolverá un listado de los filtros activos:
id:0 dst ip 10.55.255.1
id:1 src ip 10.102.25.50 dst ip 10.55.255.1
id:2 src ip 10.55.255.1 dst ip 10.102.25.50
id:3 src ip 10.102.25.50 dst ip 10.55.255.1
Con esto, basta con lanzar un unset ffilter y el ID del filtro, y se deshabilitará:
unset ffilter 0
Bueno, una vez tenemos nuestros filtros activos, es hora de activar el debug y comenzar a ver trazas.
Par activar el debug usaremos el comando debug flow seguido del tipo de debug, que puede ser basic, all o drop, yo recomiendo basic pues es el más acorde a la mayoría de escenarios:
debug flow basic
Tras esto, comenzamos a capturar trazas, pudiendo ver las mismas con el comando:
det dbuf stream
** 77681977.0: packet received [44]***
ipid = 7607(1db7), @05ee3254
packet passed sanity check.
flow_decap_vector IPv4 process
.
.
.
.
Y, una vez tengamos todas nuestras trazas, paramos el debug
undebug all
Y, por limpieza, vaciamos la db de dbuf:
clear db
¡Espero que os sirva!
0 comentarios