Redes en gnuLinex  Sniffers y cortafuegos Antonio Durán
Sniffers y análisis de protocolos ¿Que es un snnifer? Es un programa que permite obtener el tráfico que circula por un interfaz de red. Visión orientada a concentradores. Es un programa que permite obtener el tráfico que circula por la red. Visión orientada a conmutadores. Es un programa que permite obtener el tráfico que circula por las redes. Vision orientada a wifi.
Sniffers y análisis de protocolos ¿Que es necesario saber para usar un snnifer? Lo primero es saber que estamos buscando: si vamos a usar un sniffer normalmente será para ayudarnos en la solución de algún problema. Conocer, al menos en parte, el funcionamiento del protocolo de red con el que estemos trabajando: HTTP, LDAP, DHCP, etc.
Sniffers y análisis de protocolos Modo promiscuo El interfaz recoge todos los paquetes que pasan por él, incluyendo aquellos que no van dirigidos a su dirección MAC ni a la de difusión. Útil en redes en bus: hubs. Desde un ordenador podemos ver todo el tráfico del segmento compartido de la red. En los I.E.S, red conmutada: switches. A una máquina sólo llegan los paquetes que van destinados a ella. No podemos ver el tráfico completo de la red. Posibles soluciones:  ARP poisoning (dsniff): muy ruidoso.
Sniffers y análisis de protocolos Modo promiscuo En los I.E.S, red conmutada: switches. A una máquina sólo llegan los paquetes que van destinados a ella. No podemos ver el tráfico completo de la red. Posibles soluciones: Observar el tráfico en un punto central: todos los clientes salen a Internet por el servidor, miramos alli el tráfico. Problemas:  no detecta si alguien configura su ruta de salida por el router. Solución: Conectar un hub entre el router y la red y poner en él el ordenador con el sniffer. no detecta tráfico interno a la red local.
tcpdump tcpdump: snnifer cásico en GNU/Linux, disponible en todas las distribuciones. Uso en modo texto por consola. Rápido y facil de usar en remoto. En general, útil para saber si los paquetes llegan o no llegan, pero menos para mirar dentro de los paquetes.
tcpdump Muestra algunos o todos los paquetes que pasan por un interfaz de red. El rango de paquetes capturados puede especificarse usando una combinación de operadores lógicos y parámetros como el origen o destino IP, el tipo de protocolo o el número de puerto. Los paquetes capturados pueden guardarse en formato binario a un fichero, o pueden mostrarse por pantalla. Los ficheros escritos deben ser leídos con tcpdump (u otros programas que soporten el estándar pcap)
tcpdump Mostrar todos los paquetes que pasan por el interfaz eth0: #tcpdump -i eth0 Mostrar solo los paquetes del puerto 80: #tcpdump port 80 Mostrar sólo los paquetes con origen o destino en una dirección o nombre de máquina determinados: #tcpdump host 172.21.232.2 Mostrar sólo los paquetes con origen en una dirección o nombre de máquina determinado: #tcpdump source 172.21.232.2
tcpdump Mostrar sólo los paquetes con un puerto destino determinado: #tcpdump dst port 21 Mostrar sólo paquetes TCP: #tcpdump tcp Mostrar todos los paquetes menos algunos: #tcpdump not port 22 No hacer resolución de nombres: #tcpdump -n
tcpdump Combinación de condiciones: tcpdump dst port 80 and source 192.168.1.1 Forzar salida inmediata por pantalla: #tcpdump -l No mostrar timestamps: #tcpdump -t Formato recomendado: #tcpdump -nlt [filtro]
tcpdump Formato de salida Para datagramas UDP: 15:22:41.400299 orac.erg.abdn.ac.uk.1052 > 224.2.156.220.57392: udp 110 Timestamp: 15:22:41.400299 Dirección origen: orac.erg.abdn.ac.uk Puerto origen: 1052 Dirección destino: 224.2.156.220 Puerto destino: 57392 Protocolo: udp Tamaño: 110
tcpdump Formato de salida Para datagramas TCP: 16:23:01.079553 churchward.erg.abdn.ac.uk.33635 > gordon.erg.abdn.ac.uk.32772: P 12765:12925(160) ack 19829 win 24820 (DF) Timestamp: 16:23:01.079553 Dirección origen: churchward.erg.abdn.ac.uk Puerto origen: 33635 Dirección destino: gordon.erg.abdn.ac.uk Puerto destino: 32772 Indica que la PUSH flag está puesta (P)
tcpdump Formato de salida Para datagramas TCP: 16:23:01.079553 churchward.erg.abdn.ac.uk.33635 > gordon.erg.abdn.ac.uk.32772: P 12765:12925(160) ack 19829 win 24820 (DF) Número de secuencia: 12765 Contiene bytes de datos desde el número de secuencia hasta 12925, sin incluirlo. Número de bytes de datos en el datagrama (160) Detalles de asentimientos, tamaño de ventana y flags de la cabcera: ack 19829 win 24820 (DF)
tcpdump Formato de salida Se puede hacer que tcpdump ofrezca más información: tcpdump -v <expresion> tcpdump -vv <expresion> tcpdump -vvv <expresion> También se puede aumentar el  snaplen , que representa el tamaño máximo del paquete que decodifica tcpdump. Esto puede hacer que en la captura veamos paquetes que terminan con [|rip] o [|domain]. Para aumentar el tamaño por defecto: tcpdump -s tamaño_en_bytes
tcpdump Vemos algunos ejemplos de uso: Comprobar si un cliente conecta con el servidor DNS que debe, y ver el resultado de las consultas. Ver como se cierra una conexión TCP por el uso de los TCP Wrappers. Ver el tráfico ICMP generado por traceroute
ethereal ethereal es un sniffer con un interfaz gráfico más adecuado para visualización del contenido de los paquetes. Como desventaja, necesita de un entorno gráfico para funcionar. No es grave, ya que se puede usar un entorno remoto. Dispone de una cantidad enorme de definiciones de protocolos, facilitando el análisis de los datos.
ethereal Al igual que tcpdump, ethereal puede trabajar capturando paquetes de un interfaz, o abriendo un fichero de datos existente. Para realizar una nueva captura, pinchamos en el menú Capture->Start, y aparece un diálogo para configurar las opciones de la captura.
ethereal Opciones importantes de la captura: interfaz: selecciona el interfaz de donde queremos capturar paquetes. Capturar paquetes en modo promiscuo: poco útil en redes conmutadas. Filtro: filtro igual al usado en tcpdump. Actualizar vista de paquetes mientras dura la captura. Activar resolución de nombres: desaconsejado por el tráfico adicional generado.
ethereal Vista de captura. Se divide en tres partes: Lista de paquetes capturados. Pueden ordenarse por varios  campos. Detalle decodificado del datagrama seleccionado. Muestra, para cada capa de protocolos presente en el paquete, el contenido de todas sus opciones. Esta es la parte interesante al analizar protocolos. Detalle en hexadecimal y ASCII del datagrama seleccionado.
ethereal Detalle decodificado del datagrama seleccionado.  Primero aparce información del datagrama en general, como su tamaño o cuando se capturó. A continuación van aparenciendo los distintos protocolos: Ethernet IP TCP LDAP
ethereal Ejemplo: observar el tráfico LDAP para resolver algún problema. Ponemos ethereal capturando paquetes con puerto destino 389 TCP. Comprobamos paso a paso el diálogo LDAP: Operación BIND Comprobando el resultado Operación SEARCH Comprobando el resultado y los campos devueltos de la entrada solicitada
ethereal Ethereal también puede recomponer conexiones de algunos protocolos para mostrar los datos de manera más accesible. Por ejemplo: boton derecho->Follow TCP Stream sobre un paqute de una conexión HTTP, nos mostrará una ventana con la conversación HTTP entre cliente y servidor en modo texto, juntando todos los paquetes de la conexión.
iptables Filtrado de paquetes Toda la info se transmite en paquetes Paquete Cabecera (header). Origen, destino, tipo de paquete... Cuerpo (body). Datos reales transmitidos. Protocolos con conexión, como TCP Usan el concepto de conexión Paquetes de setup de la conexión antes del envío de datos reales.
iptables iptables es el software de cortafuegos de GNU/Linux. Aparte de filtrar paquetes hace más cosas: NAT Redirección de puertos Modificación de paquetes Integración con otras herramientas: con iptables+iproute2 podemos tener reservas de ancho de banda por aplicaciones.
iptables Actualmente, en los IES se usa sobre todo para hacer redirección de puertos y NAT en el servidor: Hacer que los clientes pasen por Squid Hacer que los clientes sólo puedan usar los servidores POP y SMTP de la Junta. También para filtrar en los clientes: ControlAula incluye una regla para solo permitir acceso  VNC al profesor.
iptables Al poder hacer muchas cosas, iptables es bastante complejo. Vemos una introducción que nos permita: Entender los scripts usados Crear nuevas reglas para proteger servicios o redirigir tráfico. Establecer una política más segura que la usada actualmente
iptables iptables es lo que conoce como  statefull firewall . Esto significa que realiza un seguimiento de las conexiones, sabiendo que paquetes pertenecen a cada conexión (más seguro y más rapido) Sólo se comprueba contra las reglas el primer paquete de la conexión Una vez permitido este paquete, y establecida la conexión, los siguientes paquetes de la misma se permiten por pertenecer a la misma conexión.
iptables iptables se divide en dos partes: parte de kernel: módulos o compilado en el propio kernel. iptable_filter.ko, ipt_conntrack.ko, ipt_REDIRECT.ko, ... parte de usuario: utilidades para añadir, eliminar, modificar o listar reglas. Comando iptables
iptables Todos los paquetes pasan por una serie de tablas (colas) para ser procesados. Cada tabla se dedica a un cometido distinto: mangle: transformaciones de los paquetes filter: filtrado de paquetes. Tiene 3 cadenas predeterminadas: FORWARD, INPUT, OUTPUT nat: traducción de direcciones. 2 cadenas: PREROUTING, POSTROUTING
iptables Al especificar las reglas, es necesario indicar  la tabla y la cadena donde colocarla. Excepción: si no se indica tabla, se usa por defecto la tabla filter Ejemplo de como se examinan las reglas cuando llege un paquete: http://www.siliconvalleyccie.com/linux-hn/iptables-intro.htm
iptables Cómo atraviesan los filtros los paquetes El kernel empieza con tres listas de reglas en la tabla filter, llamadas cadenas (chains): INPUT, OUTPUT, FORWARD
iptables Cómo atraviesan los filtros los paquetes Cuando un paquete alcanza uno de los círculos del dibujo, se examina esa cadena para decidir el destino del paquete Si la cadena dice que se tire (DROP) el paquete, éste muere aquí, pero si se acepta (ACCEPT), sigue atravesando el diagrama Cada tipo de tráfico seguirá un camino distinto a través del diagrama.
iptables Cómo atraviesan los filtros los paquetes Una cadena es una lista de reglas Cada regla dice: si la cabecera del paquete es así, hacer esto con el paquete. Si la regla no coincide con el paquete, se examina la siguiente regla de la cadena Finalmente, si no quedan más reglas que consultar, el kernel mira a la política (POLICY) de la cadena para decidir que hacer con el paquete. En un sistema seguro, la política suele decir al kernel que tire el paquete
iptables Cómo atraviesan los filtros los paquetes Cuando llega un paquete, primero el kernel mira su destino: esto se llama enrutamiento (routing) Si está destinado a esta máquina, el paquete baja a la cadena INPUT. Si la pasa, el paquete llegará al proceso que lo está esperando Si no, si el forwarding no está activado, o el kernel no sabe como reenviar el paquete, el paquete se tira
iptables Cómo atraviesan los filtros los paquetes Si el forwarding está activado, y hay que reenviar el paquete, éste pasa a la cadena FORWARD. Si se acepta, el paquete se reenvía. Un programa que se ejecuta en la máquina local puede enviar paquetes. Éstos pasan inmediatamente por la cadena OUTPUT. Si se acepta, el paquete continua su camino hacia el interfaz al que fuera destinado.
iptables Comando tipo: #iptables -Accion Cadena [opciones] -j Target Acción: añadir, borrar, insertar ... Cadena: cadena donde realizar la acción Target: destino para los paquetes que coincidan con la regla: ACCEPT y DROP: Aceptar y tirar SNAT, DNAT, MASQUERADE: Traduccción de direcciones REJECT: Rechazar LOG: registrar
iptables Operaciones sobre las cadenas Crear una nueva cadena (-N) Borrar una cadena vacía (-X) Cambiar la política de una cadena (-P) Listar las reglas en una cadena (-L) Eliminar las reglas de una cadena (-F) Borrar los contadores de todas las reglas de una cadena (-Z)
iptables Operaciones sobre las reglas de una cadena Añadir una nueva regla a la cadena (-A) Insertar una regla en una posición determinada de la cadena (-I) Reemplazar una regla en alguna posición de la cadena (-R) Borrar una regla en alguna posición de la cadena (-D) Borrar la primera regla que coincida en una cadena (-D)
iptables Operaciones sobre las reglas de una cadena Añadir reglas iptables -A ... La regla se añade al final de la lista, y se mirará, si se mira, la última. Borrar reglas iptables -D ... Se borra la primera regla de la cadena que coincida con la definición dada.
iptables Añadir reglas de filtrado. Ejemplo básico Denegar ping desde localhost iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP -s indica dirección de origen -p icmp indica protocolo ICMP -j DROP hace que se tire el paquete Nota: no se usa REJECT en ICMP para evitar tormentas ICMP: Paquete ICMP malo Paquete ICMP de respuesta malo para el otro lado El otro lado vuelve a enviar un paquete ICMP malo ....
iptables Especificaciones de filtrado. Opciones que se usan para especificar las características de los paquetes Direcciones origen y destino -s, --source, --src: dirección origen del paquete -d, --destination, --dst: dirección destino del paquete Pueden especifcarse: nombre DNS (linex.org) dirección IP (127.0.0.1) Grupos de direcciones, usando máscaras (172.19.232.0/22, 172.19.232.0/255.255.252.0)
iptables Especificaciones de filtrado. Opciones que se usan para especificar las características de los paquetes Especificando inversión Muchas opciones, incluyendo origen y destino, pueden tener los argumentos precedidos de ! (negación) para flitrar direcciones distintas de las proporcionadas -s ! localhost Protocolo - p indica el protocolo de los paquetes. Puede usarse un número (si se conocen los valores numéricos de los protocolos IP), o TCP, UDP o ICMP. Acepta !.
iptables Especificaciones de filtrado. Opciones que se usan para especificar las características de los paquetes Interface -i o –in-interface: interfaz de entrada -o –out-interface: interfaz de salida Los paquetes que atraviesan INPUT no tienen interfaz de salida. Los de OUTPUT no lo tienen de entrada. Sólo los de FORWARD tienen los dos. Se pueden usar interfaces no existentes en las reglas (se activarán al levantar el interfaz)
iptables Extensiones de las especificaciones de filtrado. -m multiport –sport <port, port...> -m multiport –dport <port, port...> -m multiport –ports <port, port...> -m state –state <estado> Established New Related Invalid
iptables Extensiones nuevos targets nuevos tests despues de la opción -p Extensiones TCP --tcp-flags [!] campos_examinar campos presentes # iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DENY --sport, --source-port puerto/rango de puertos
iptables Extensiones TCP --dport, --destination-port puerto/rango puertos Denegando el establecimiento de conexiones desde una máquina que hace de servidor y no debería iniciar conexiones: # iptables -A INPUT --protocol tcp -s 192.168.1.1 –syn -j DENY
iptables Extensiones UDP --sport, --source-port, --dport, --destination-port puerto/rango puertos Extensiones ICMP --icmp-type tipo ICMP [númerio o por nombre (-p icmp --help)]
iptables Targets de las reglas: que hacer con el paquete cuando coincida con la regla Lás mas simples: DROP y ACCEPT Cadenas definidas por el usuario: se puede hacer que el paquete pase a otra cadena de reglas definida por el usuario si cumple una condición Extensiones con nuevos targets
iptables Extensiones con nuevos targets LOG: logging en kernel de los paquetes que coincidan. --log-level --log-prefix REJECT Como DROP, pero se envía un mensaje ICMP de port unreachable, en UDP, o un RESET, en TCP.
iptables Añadir reglas de filtrado iptables -A INPUT -p tcp --dport 21 -j DROP Deniega conexiones FTP a esta máquina: AL no haber opción -t, se usa la tabla por defecto, filter. INPUT indica que la regla debe aplicarse al tráfico cuyo destino es local.  -p tcp indica que la regla debe aplicarse a paquetes TCP. --dport 21 indica que la regla debe aplicar a paquetes con puerto destino 21. -j DROP indica la acción a realizar con el paquete, en este caso tirarlo. Las opciones son: ACCEPT, DROP, REJECT,  REDIRECT y MASQUERADE (sólo para la tabla nat)
iptables Añadir reglas de redirección de puertos iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 -t nat usar la tabla de nat PREROUTING, el cambio de puerto hay que hacerlo antes de enrutar. REDIRECT,  hace que el paquete sea redirigido a otro puerto en la misma máquina. --to-port 3128 hace que el paquete sea redirigido al puerto 3128.
iptables Borrar reglas iptables -D INPUT -p tcp --dport 21 -j DROP Se especifica la misma regla, cambiando -A por -D. iptables -D INPUT 1 Borra la primera regla de la cadena
iptables Eliminación de todas las reglas: iptables -F elimina las reglas de filtrado, ya que por defecto se usa la tabla filter. iptables -X  elimina las cadenas definidas por el usuario iptables -Z resetea los contadores iptables -t nat -F elimina las reglas de NAT.
iptables Establecer la política por defecto: iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP Estas reglas se aplican a los paquetes que no coinciden con ninguna regla.
iptables Mostrar reglas iptables -L Mostrar reglas de NAT: iptables -t nat -L
iptables Probando las reglas con netcat netcat es una pequeña utilidad que lee y escribe datos a través de conexiones de red, usando los protocolos tcp y udp.  Muy útil a la hora de solucionar problemas relacionados con la accesibilidad o para comprobar si las reglas de filtrado funcionan como esperamos. Crear una conexión para comprobar si el servidor ssh es accesible: $nc 172.21.232.2 22 Todo lo que escribas se manda al servidor remoto, y todo lo que el servidor envíe se muestra por pantalla.
iptables Probando las reglas con netcat Ponemos una regla para denegar el acceso a VNC de un alumno a otro: #iptables -A INPUT -i eth0 -s ! $PROFESOR -p tcp --destination-port 5900 -j DROP Comprobamos que realmente hace lo que debe: Poner netcat escuchando en el puerto 5900 (VNC) en un alumno. $netcat -l -p 5900 Comprobar que desde otro alumno no podemos acceder al servicio: $netcat aula-o01 5900
iptables Logging iptables puede hacer logging de paquetes a /var/log/messages Las reglas de log no pueden tirar paquetes, por lo que es común ver dos reglas iguales seguidas, asi: # iptables -A INPUT -j LOG # iptables -A INPUT -j DROP Fallo: no indicado interfaz, se aplicará a localhost también
iptables Logging mucha información de log, debido a los broadcasts Mejor loguear sólo lo que viene a la máquina: # iptables -A INPUT -i eth0 -d 172.19.232.10  -j LOG
iptables Configuración iptables en los clientes Restringir el acceso a los servicios de uso específico Sólo permitir GH desde el profesor Permitir acceso al resto de los servicios sólo desde la LAN Loguear todos los intentos de apertura de conexiones, para tener informacion en caso de problemas
iptables Configuración iptables en los clientes #iptables -A INPUT -i eth0 -s ! ab201-pro  -p tcp --destination-port 5900 -j LOG #iptables -A INPUT -i eth0 -s ab201-pro  -p tcp --destination-port 5900 -j ACCEPT # iptables -A INPUT -i eth0 -s ! 172.19.232.0/22 -m state --state NEW -j LOG # iptables -A INPUT -i eth0 -s  172.19.232.0/22 -m state -j ACCEPT # iptables -P INPUT DROP # iptables -P OUTPUT ACCEPT
iptbales Configuración iptables en el servidor Restringir el acceso a todos los servicios locales a la red local, permitiendo sólo el acceso desde el exterior via HTTP Asegurar, como ya se vió, los directorios privados de /var/www Loguear todos los inicios de conexión que se hagan hacia el servidor
iptbales Configuración iptables en el servidor # iptables -A INPUT -i eth0 -s  172.19.232.0/22 -m state --state NEW -j ACCEPT # iptables -A INPUT -i eth0  -m state --state NEW -p tcp  --destination-port 80 -j ACCEPT #iptables -A INPUT -i eth0 -p tcp --destination-port ! 80 -j LOG #iptables -P INPUT DROP #iptables -P OUTPUT ACCEPT #iptables -P FORWARD ACCEPT

Curso Redes Linex 5

  • 1.
    Redes en gnuLinex Sniffers y cortafuegos Antonio Durán
  • 2.
    Sniffers y análisisde protocolos ¿Que es un snnifer? Es un programa que permite obtener el tráfico que circula por un interfaz de red. Visión orientada a concentradores. Es un programa que permite obtener el tráfico que circula por la red. Visión orientada a conmutadores. Es un programa que permite obtener el tráfico que circula por las redes. Vision orientada a wifi.
  • 3.
    Sniffers y análisisde protocolos ¿Que es necesario saber para usar un snnifer? Lo primero es saber que estamos buscando: si vamos a usar un sniffer normalmente será para ayudarnos en la solución de algún problema. Conocer, al menos en parte, el funcionamiento del protocolo de red con el que estemos trabajando: HTTP, LDAP, DHCP, etc.
  • 4.
    Sniffers y análisisde protocolos Modo promiscuo El interfaz recoge todos los paquetes que pasan por él, incluyendo aquellos que no van dirigidos a su dirección MAC ni a la de difusión. Útil en redes en bus: hubs. Desde un ordenador podemos ver todo el tráfico del segmento compartido de la red. En los I.E.S, red conmutada: switches. A una máquina sólo llegan los paquetes que van destinados a ella. No podemos ver el tráfico completo de la red. Posibles soluciones: ARP poisoning (dsniff): muy ruidoso.
  • 5.
    Sniffers y análisisde protocolos Modo promiscuo En los I.E.S, red conmutada: switches. A una máquina sólo llegan los paquetes que van destinados a ella. No podemos ver el tráfico completo de la red. Posibles soluciones: Observar el tráfico en un punto central: todos los clientes salen a Internet por el servidor, miramos alli el tráfico. Problemas: no detecta si alguien configura su ruta de salida por el router. Solución: Conectar un hub entre el router y la red y poner en él el ordenador con el sniffer. no detecta tráfico interno a la red local.
  • 6.
    tcpdump tcpdump: snnifercásico en GNU/Linux, disponible en todas las distribuciones. Uso en modo texto por consola. Rápido y facil de usar en remoto. En general, útil para saber si los paquetes llegan o no llegan, pero menos para mirar dentro de los paquetes.
  • 7.
    tcpdump Muestra algunoso todos los paquetes que pasan por un interfaz de red. El rango de paquetes capturados puede especificarse usando una combinación de operadores lógicos y parámetros como el origen o destino IP, el tipo de protocolo o el número de puerto. Los paquetes capturados pueden guardarse en formato binario a un fichero, o pueden mostrarse por pantalla. Los ficheros escritos deben ser leídos con tcpdump (u otros programas que soporten el estándar pcap)
  • 8.
    tcpdump Mostrar todoslos paquetes que pasan por el interfaz eth0: #tcpdump -i eth0 Mostrar solo los paquetes del puerto 80: #tcpdump port 80 Mostrar sólo los paquetes con origen o destino en una dirección o nombre de máquina determinados: #tcpdump host 172.21.232.2 Mostrar sólo los paquetes con origen en una dirección o nombre de máquina determinado: #tcpdump source 172.21.232.2
  • 9.
    tcpdump Mostrar sólolos paquetes con un puerto destino determinado: #tcpdump dst port 21 Mostrar sólo paquetes TCP: #tcpdump tcp Mostrar todos los paquetes menos algunos: #tcpdump not port 22 No hacer resolución de nombres: #tcpdump -n
  • 10.
    tcpdump Combinación decondiciones: tcpdump dst port 80 and source 192.168.1.1 Forzar salida inmediata por pantalla: #tcpdump -l No mostrar timestamps: #tcpdump -t Formato recomendado: #tcpdump -nlt [filtro]
  • 11.
    tcpdump Formato desalida Para datagramas UDP: 15:22:41.400299 orac.erg.abdn.ac.uk.1052 > 224.2.156.220.57392: udp 110 Timestamp: 15:22:41.400299 Dirección origen: orac.erg.abdn.ac.uk Puerto origen: 1052 Dirección destino: 224.2.156.220 Puerto destino: 57392 Protocolo: udp Tamaño: 110
  • 12.
    tcpdump Formato desalida Para datagramas TCP: 16:23:01.079553 churchward.erg.abdn.ac.uk.33635 > gordon.erg.abdn.ac.uk.32772: P 12765:12925(160) ack 19829 win 24820 (DF) Timestamp: 16:23:01.079553 Dirección origen: churchward.erg.abdn.ac.uk Puerto origen: 33635 Dirección destino: gordon.erg.abdn.ac.uk Puerto destino: 32772 Indica que la PUSH flag está puesta (P)
  • 13.
    tcpdump Formato desalida Para datagramas TCP: 16:23:01.079553 churchward.erg.abdn.ac.uk.33635 > gordon.erg.abdn.ac.uk.32772: P 12765:12925(160) ack 19829 win 24820 (DF) Número de secuencia: 12765 Contiene bytes de datos desde el número de secuencia hasta 12925, sin incluirlo. Número de bytes de datos en el datagrama (160) Detalles de asentimientos, tamaño de ventana y flags de la cabcera: ack 19829 win 24820 (DF)
  • 14.
    tcpdump Formato desalida Se puede hacer que tcpdump ofrezca más información: tcpdump -v <expresion> tcpdump -vv <expresion> tcpdump -vvv <expresion> También se puede aumentar el snaplen , que representa el tamaño máximo del paquete que decodifica tcpdump. Esto puede hacer que en la captura veamos paquetes que terminan con [|rip] o [|domain]. Para aumentar el tamaño por defecto: tcpdump -s tamaño_en_bytes
  • 15.
    tcpdump Vemos algunosejemplos de uso: Comprobar si un cliente conecta con el servidor DNS que debe, y ver el resultado de las consultas. Ver como se cierra una conexión TCP por el uso de los TCP Wrappers. Ver el tráfico ICMP generado por traceroute
  • 16.
    ethereal ethereal esun sniffer con un interfaz gráfico más adecuado para visualización del contenido de los paquetes. Como desventaja, necesita de un entorno gráfico para funcionar. No es grave, ya que se puede usar un entorno remoto. Dispone de una cantidad enorme de definiciones de protocolos, facilitando el análisis de los datos.
  • 17.
    ethereal Al igualque tcpdump, ethereal puede trabajar capturando paquetes de un interfaz, o abriendo un fichero de datos existente. Para realizar una nueva captura, pinchamos en el menú Capture->Start, y aparece un diálogo para configurar las opciones de la captura.
  • 18.
    ethereal Opciones importantesde la captura: interfaz: selecciona el interfaz de donde queremos capturar paquetes. Capturar paquetes en modo promiscuo: poco útil en redes conmutadas. Filtro: filtro igual al usado en tcpdump. Actualizar vista de paquetes mientras dura la captura. Activar resolución de nombres: desaconsejado por el tráfico adicional generado.
  • 19.
    ethereal Vista decaptura. Se divide en tres partes: Lista de paquetes capturados. Pueden ordenarse por varios campos. Detalle decodificado del datagrama seleccionado. Muestra, para cada capa de protocolos presente en el paquete, el contenido de todas sus opciones. Esta es la parte interesante al analizar protocolos. Detalle en hexadecimal y ASCII del datagrama seleccionado.
  • 20.
    ethereal Detalle decodificadodel datagrama seleccionado. Primero aparce información del datagrama en general, como su tamaño o cuando se capturó. A continuación van aparenciendo los distintos protocolos: Ethernet IP TCP LDAP
  • 21.
    ethereal Ejemplo: observarel tráfico LDAP para resolver algún problema. Ponemos ethereal capturando paquetes con puerto destino 389 TCP. Comprobamos paso a paso el diálogo LDAP: Operación BIND Comprobando el resultado Operación SEARCH Comprobando el resultado y los campos devueltos de la entrada solicitada
  • 22.
    ethereal Ethereal tambiénpuede recomponer conexiones de algunos protocolos para mostrar los datos de manera más accesible. Por ejemplo: boton derecho->Follow TCP Stream sobre un paqute de una conexión HTTP, nos mostrará una ventana con la conversación HTTP entre cliente y servidor en modo texto, juntando todos los paquetes de la conexión.
  • 23.
    iptables Filtrado depaquetes Toda la info se transmite en paquetes Paquete Cabecera (header). Origen, destino, tipo de paquete... Cuerpo (body). Datos reales transmitidos. Protocolos con conexión, como TCP Usan el concepto de conexión Paquetes de setup de la conexión antes del envío de datos reales.
  • 24.
    iptables iptables esel software de cortafuegos de GNU/Linux. Aparte de filtrar paquetes hace más cosas: NAT Redirección de puertos Modificación de paquetes Integración con otras herramientas: con iptables+iproute2 podemos tener reservas de ancho de banda por aplicaciones.
  • 25.
    iptables Actualmente, enlos IES se usa sobre todo para hacer redirección de puertos y NAT en el servidor: Hacer que los clientes pasen por Squid Hacer que los clientes sólo puedan usar los servidores POP y SMTP de la Junta. También para filtrar en los clientes: ControlAula incluye una regla para solo permitir acceso VNC al profesor.
  • 26.
    iptables Al poderhacer muchas cosas, iptables es bastante complejo. Vemos una introducción que nos permita: Entender los scripts usados Crear nuevas reglas para proteger servicios o redirigir tráfico. Establecer una política más segura que la usada actualmente
  • 27.
    iptables iptables eslo que conoce como statefull firewall . Esto significa que realiza un seguimiento de las conexiones, sabiendo que paquetes pertenecen a cada conexión (más seguro y más rapido) Sólo se comprueba contra las reglas el primer paquete de la conexión Una vez permitido este paquete, y establecida la conexión, los siguientes paquetes de la misma se permiten por pertenecer a la misma conexión.
  • 28.
    iptables iptables sedivide en dos partes: parte de kernel: módulos o compilado en el propio kernel. iptable_filter.ko, ipt_conntrack.ko, ipt_REDIRECT.ko, ... parte de usuario: utilidades para añadir, eliminar, modificar o listar reglas. Comando iptables
  • 29.
    iptables Todos lospaquetes pasan por una serie de tablas (colas) para ser procesados. Cada tabla se dedica a un cometido distinto: mangle: transformaciones de los paquetes filter: filtrado de paquetes. Tiene 3 cadenas predeterminadas: FORWARD, INPUT, OUTPUT nat: traducción de direcciones. 2 cadenas: PREROUTING, POSTROUTING
  • 30.
    iptables Al especificarlas reglas, es necesario indicar la tabla y la cadena donde colocarla. Excepción: si no se indica tabla, se usa por defecto la tabla filter Ejemplo de como se examinan las reglas cuando llege un paquete: http://www.siliconvalleyccie.com/linux-hn/iptables-intro.htm
  • 31.
    iptables Cómo atraviesanlos filtros los paquetes El kernel empieza con tres listas de reglas en la tabla filter, llamadas cadenas (chains): INPUT, OUTPUT, FORWARD
  • 32.
    iptables Cómo atraviesanlos filtros los paquetes Cuando un paquete alcanza uno de los círculos del dibujo, se examina esa cadena para decidir el destino del paquete Si la cadena dice que se tire (DROP) el paquete, éste muere aquí, pero si se acepta (ACCEPT), sigue atravesando el diagrama Cada tipo de tráfico seguirá un camino distinto a través del diagrama.
  • 33.
    iptables Cómo atraviesanlos filtros los paquetes Una cadena es una lista de reglas Cada regla dice: si la cabecera del paquete es así, hacer esto con el paquete. Si la regla no coincide con el paquete, se examina la siguiente regla de la cadena Finalmente, si no quedan más reglas que consultar, el kernel mira a la política (POLICY) de la cadena para decidir que hacer con el paquete. En un sistema seguro, la política suele decir al kernel que tire el paquete
  • 34.
    iptables Cómo atraviesanlos filtros los paquetes Cuando llega un paquete, primero el kernel mira su destino: esto se llama enrutamiento (routing) Si está destinado a esta máquina, el paquete baja a la cadena INPUT. Si la pasa, el paquete llegará al proceso que lo está esperando Si no, si el forwarding no está activado, o el kernel no sabe como reenviar el paquete, el paquete se tira
  • 35.
    iptables Cómo atraviesanlos filtros los paquetes Si el forwarding está activado, y hay que reenviar el paquete, éste pasa a la cadena FORWARD. Si se acepta, el paquete se reenvía. Un programa que se ejecuta en la máquina local puede enviar paquetes. Éstos pasan inmediatamente por la cadena OUTPUT. Si se acepta, el paquete continua su camino hacia el interfaz al que fuera destinado.
  • 36.
    iptables Comando tipo:#iptables -Accion Cadena [opciones] -j Target Acción: añadir, borrar, insertar ... Cadena: cadena donde realizar la acción Target: destino para los paquetes que coincidan con la regla: ACCEPT y DROP: Aceptar y tirar SNAT, DNAT, MASQUERADE: Traduccción de direcciones REJECT: Rechazar LOG: registrar
  • 37.
    iptables Operaciones sobrelas cadenas Crear una nueva cadena (-N) Borrar una cadena vacía (-X) Cambiar la política de una cadena (-P) Listar las reglas en una cadena (-L) Eliminar las reglas de una cadena (-F) Borrar los contadores de todas las reglas de una cadena (-Z)
  • 38.
    iptables Operaciones sobrelas reglas de una cadena Añadir una nueva regla a la cadena (-A) Insertar una regla en una posición determinada de la cadena (-I) Reemplazar una regla en alguna posición de la cadena (-R) Borrar una regla en alguna posición de la cadena (-D) Borrar la primera regla que coincida en una cadena (-D)
  • 39.
    iptables Operaciones sobrelas reglas de una cadena Añadir reglas iptables -A ... La regla se añade al final de la lista, y se mirará, si se mira, la última. Borrar reglas iptables -D ... Se borra la primera regla de la cadena que coincida con la definición dada.
  • 40.
    iptables Añadir reglasde filtrado. Ejemplo básico Denegar ping desde localhost iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP -s indica dirección de origen -p icmp indica protocolo ICMP -j DROP hace que se tire el paquete Nota: no se usa REJECT en ICMP para evitar tormentas ICMP: Paquete ICMP malo Paquete ICMP de respuesta malo para el otro lado El otro lado vuelve a enviar un paquete ICMP malo ....
  • 41.
    iptables Especificaciones defiltrado. Opciones que se usan para especificar las características de los paquetes Direcciones origen y destino -s, --source, --src: dirección origen del paquete -d, --destination, --dst: dirección destino del paquete Pueden especifcarse: nombre DNS (linex.org) dirección IP (127.0.0.1) Grupos de direcciones, usando máscaras (172.19.232.0/22, 172.19.232.0/255.255.252.0)
  • 42.
    iptables Especificaciones defiltrado. Opciones que se usan para especificar las características de los paquetes Especificando inversión Muchas opciones, incluyendo origen y destino, pueden tener los argumentos precedidos de ! (negación) para flitrar direcciones distintas de las proporcionadas -s ! localhost Protocolo - p indica el protocolo de los paquetes. Puede usarse un número (si se conocen los valores numéricos de los protocolos IP), o TCP, UDP o ICMP. Acepta !.
  • 43.
    iptables Especificaciones defiltrado. Opciones que se usan para especificar las características de los paquetes Interface -i o –in-interface: interfaz de entrada -o –out-interface: interfaz de salida Los paquetes que atraviesan INPUT no tienen interfaz de salida. Los de OUTPUT no lo tienen de entrada. Sólo los de FORWARD tienen los dos. Se pueden usar interfaces no existentes en las reglas (se activarán al levantar el interfaz)
  • 44.
    iptables Extensiones delas especificaciones de filtrado. -m multiport –sport <port, port...> -m multiport –dport <port, port...> -m multiport –ports <port, port...> -m state –state <estado> Established New Related Invalid
  • 45.
    iptables Extensiones nuevostargets nuevos tests despues de la opción -p Extensiones TCP --tcp-flags [!] campos_examinar campos presentes # iptables -A INPUT --protocol tcp --tcp-flags ALL SYN,ACK -j DENY --sport, --source-port puerto/rango de puertos
  • 46.
    iptables Extensiones TCP--dport, --destination-port puerto/rango puertos Denegando el establecimiento de conexiones desde una máquina que hace de servidor y no debería iniciar conexiones: # iptables -A INPUT --protocol tcp -s 192.168.1.1 –syn -j DENY
  • 47.
    iptables Extensiones UDP--sport, --source-port, --dport, --destination-port puerto/rango puertos Extensiones ICMP --icmp-type tipo ICMP [númerio o por nombre (-p icmp --help)]
  • 48.
    iptables Targets delas reglas: que hacer con el paquete cuando coincida con la regla Lás mas simples: DROP y ACCEPT Cadenas definidas por el usuario: se puede hacer que el paquete pase a otra cadena de reglas definida por el usuario si cumple una condición Extensiones con nuevos targets
  • 49.
    iptables Extensiones connuevos targets LOG: logging en kernel de los paquetes que coincidan. --log-level --log-prefix REJECT Como DROP, pero se envía un mensaje ICMP de port unreachable, en UDP, o un RESET, en TCP.
  • 50.
    iptables Añadir reglasde filtrado iptables -A INPUT -p tcp --dport 21 -j DROP Deniega conexiones FTP a esta máquina: AL no haber opción -t, se usa la tabla por defecto, filter. INPUT indica que la regla debe aplicarse al tráfico cuyo destino es local. -p tcp indica que la regla debe aplicarse a paquetes TCP. --dport 21 indica que la regla debe aplicar a paquetes con puerto destino 21. -j DROP indica la acción a realizar con el paquete, en este caso tirarlo. Las opciones son: ACCEPT, DROP, REJECT, REDIRECT y MASQUERADE (sólo para la tabla nat)
  • 51.
    iptables Añadir reglasde redirección de puertos iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 -t nat usar la tabla de nat PREROUTING, el cambio de puerto hay que hacerlo antes de enrutar. REDIRECT, hace que el paquete sea redirigido a otro puerto en la misma máquina. --to-port 3128 hace que el paquete sea redirigido al puerto 3128.
  • 52.
    iptables Borrar reglasiptables -D INPUT -p tcp --dport 21 -j DROP Se especifica la misma regla, cambiando -A por -D. iptables -D INPUT 1 Borra la primera regla de la cadena
  • 53.
    iptables Eliminación detodas las reglas: iptables -F elimina las reglas de filtrado, ya que por defecto se usa la tabla filter. iptables -X elimina las cadenas definidas por el usuario iptables -Z resetea los contadores iptables -t nat -F elimina las reglas de NAT.
  • 54.
    iptables Establecer lapolítica por defecto: iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP Estas reglas se aplican a los paquetes que no coinciden con ninguna regla.
  • 55.
    iptables Mostrar reglasiptables -L Mostrar reglas de NAT: iptables -t nat -L
  • 56.
    iptables Probando lasreglas con netcat netcat es una pequeña utilidad que lee y escribe datos a través de conexiones de red, usando los protocolos tcp y udp. Muy útil a la hora de solucionar problemas relacionados con la accesibilidad o para comprobar si las reglas de filtrado funcionan como esperamos. Crear una conexión para comprobar si el servidor ssh es accesible: $nc 172.21.232.2 22 Todo lo que escribas se manda al servidor remoto, y todo lo que el servidor envíe se muestra por pantalla.
  • 57.
    iptables Probando lasreglas con netcat Ponemos una regla para denegar el acceso a VNC de un alumno a otro: #iptables -A INPUT -i eth0 -s ! $PROFESOR -p tcp --destination-port 5900 -j DROP Comprobamos que realmente hace lo que debe: Poner netcat escuchando en el puerto 5900 (VNC) en un alumno. $netcat -l -p 5900 Comprobar que desde otro alumno no podemos acceder al servicio: $netcat aula-o01 5900
  • 58.
    iptables Logging iptablespuede hacer logging de paquetes a /var/log/messages Las reglas de log no pueden tirar paquetes, por lo que es común ver dos reglas iguales seguidas, asi: # iptables -A INPUT -j LOG # iptables -A INPUT -j DROP Fallo: no indicado interfaz, se aplicará a localhost también
  • 59.
    iptables Logging muchainformación de log, debido a los broadcasts Mejor loguear sólo lo que viene a la máquina: # iptables -A INPUT -i eth0 -d 172.19.232.10 -j LOG
  • 60.
    iptables Configuración iptablesen los clientes Restringir el acceso a los servicios de uso específico Sólo permitir GH desde el profesor Permitir acceso al resto de los servicios sólo desde la LAN Loguear todos los intentos de apertura de conexiones, para tener informacion en caso de problemas
  • 61.
    iptables Configuración iptablesen los clientes #iptables -A INPUT -i eth0 -s ! ab201-pro -p tcp --destination-port 5900 -j LOG #iptables -A INPUT -i eth0 -s ab201-pro -p tcp --destination-port 5900 -j ACCEPT # iptables -A INPUT -i eth0 -s ! 172.19.232.0/22 -m state --state NEW -j LOG # iptables -A INPUT -i eth0 -s 172.19.232.0/22 -m state -j ACCEPT # iptables -P INPUT DROP # iptables -P OUTPUT ACCEPT
  • 62.
    iptbales Configuración iptablesen el servidor Restringir el acceso a todos los servicios locales a la red local, permitiendo sólo el acceso desde el exterior via HTTP Asegurar, como ya se vió, los directorios privados de /var/www Loguear todos los inicios de conexión que se hagan hacia el servidor
  • 63.
    iptbales Configuración iptablesen el servidor # iptables -A INPUT -i eth0 -s 172.19.232.0/22 -m state --state NEW -j ACCEPT # iptables -A INPUT -i eth0 -m state --state NEW -p tcp --destination-port 80 -j ACCEPT #iptables -A INPUT -i eth0 -p tcp --destination-port ! 80 -j LOG #iptables -P INPUT DROP #iptables -P OUTPUT ACCEPT #iptables -P FORWARD ACCEPT