18. TCP en Linux

Contenidos

ss

iftop

nload y bmon

nmap

netcat

Material

ss

La orden ss permite ver que puertos están escuchando y que conexiones TCP hay

Veamos las opciones que tiene

Opción	Explicación
-t	Solo mostrar información de TCP
-u	Solo mostrar información de UDP
-n	Mostrar los números de puerto en vez de sus nombres, por ejemplo mostrará 22 en vez de ssh
-l	Solo mostrar información de puertos que está escuchando (servidores). La l viene de la palabra "listening" que significa escuchando.
-a	Solo mostrar información de puertos que conectados a otros Hosts
-p	Muestra el proceso que se ha conectado a ese puerto.Es necesario lanzar la orden ss con sudo para ver los procesos de otros usuarios
-4	Solo mostrar información de IPv4
-6	Solo mostrar información de IPv6

Las opciones mas importantes son "-l" y "-a". Con la opción "-l" veremos los puertos que estás escuchando, es decir los puertos en los que estamos esperando recibir conexiones de otros Hosts. Mientras que con la opción "-a" veremos todas las conexiones que hay

Mas infornmación en:

ss: Display Linux TCP / UDP Network and Socket Information

Linux ss command

Las opciones "-tl4n" indican que solo mostrar puertos TCP, solo mostrar lo que están escuchando , solo mostrar de la versión IPv4 y por último que los puertos se muestren en formato numérico. Lo mas interesante es la columna de "Local Address:Port". Que muestra para cada puerto, la IP en la que está escuchando. Recordar que un ordenador puede tener varias IPs. Vamos que se muestran al menos 2 IPs:

127.0.0.1: En este caso el proceso servidor solo podra ser conectado por procesos de nuestra propia máquina ,ya que 127.0.0.1 solo es accesible desde nuestra propia máquima.

0.0.0.0: Significa que el proceso servidor está escuchando en cualquier IP que tenga la máquina.

La primera columna ahora siempre muestra "LISTEN" ya que al poner la opción "-l" somo muestra los puertos que están escuchando.

Así que tenemos a un proceso escuchando en el puerto 17500 que puede ser conectado por cualquier Host. Como ya dijimos no es muy adecuado que tengamos eso. Por ello vamos a ver ahora que proceso lo ha abierto , para ello añadimos la opción "-p"

Y podemos ver que es algo de dropbox, y si hacemos una búsqueda de ese puerto en internet nos sale que es "used for LAN discovery and file Sync between Dropbox Clients.". Así que no debemos preocuparnos.

Ahora vamos a ver todos los puertos que tienen una conexión establecida, para ello usaremos la opción "-a" pero también un grep para filtrar aquellos cuyo "State" es "ESTAB"

Ahora vemos que hay una columna mas que antes, como son conexiones establecida con otro ordenador, la primera "IP:Puerto" es el origen de la conexión y la segunda "IP:Puerto" es destino de la conexión. Podemos ver que dropbox tiene establecidas dos conexiones contra las IPs 162.125.19.131 y 162.125.68.13 ambas al puerto 443. Notar que el puerto origen de las conexiones se establecía de forma "aleatoria" por el sistema operativo.

Así que acabamos de ver realmente las conexiones que tenemos en nuestro ordenador recordando que de forma teórica decíamos que era de la siguiente manera:

TCP
(IP Origen,Puerto Origen) ----------> (IP Destino,Puerto Destino)

Y vemos por ejemplo con dropbox

TCP
(192.168.1.110,36664) ----------> (162.125.19.131,443)

iftop

La orden iftop sirve para ver cuanto ancho de banda consume cada conexiones que tenemos establecida.

Mas información:

iftop

The Sysadmin's Toolbox: iftop

Lo primero es instalar el pequete iftop

Y luego no hay mas que ejecutarla: La primera columna es la IP de nuestro ordenador, la segunda es la IP del otro Host. Y las 3 últimas el lo enviado o recibido en lo últimos 2, 10 y 40 segundos. Vemos que para cada conexión hay dos líneas ya que la primera línea es lo enviado y la segunda linea es lo recibido.

En la parte de abajo tenemos los totales desde que se inició la aplicación. Con el total acumulado enviado y recibido (donde pone cum), el máximo de velocidad (donde pone peak) y luego el total de los últimos 2, 10 y 40 segundos.

Aunque el objetivo de iftop es saber el ancho de banda que se está usando, hay otra cosa mas interesante. Con la orden ss veiamos las conexiones que había en ese momento , peor hay muchas conexiones que duran muy poco tiempo, porque es establecerla, enviar un dato y cerrarla, así que con ss tendríamos que cazarla en el momento. Así que la ventaja de iftop es que las vemos "en directo".

Con iftop se puede añadir también la opción "-n" para que las direcciones IP salga numéricamente en vez de los "nombres DNS"

nload

La orden nload es similar a iftop solo que muestra una gráfica en modo texto del uso del ancho de banda y siempre es del total no de cada conexión por separado.

Mas información:

Nload, un programa para la terminal con el que controlar el tráfico de red

Se muestran dos gráficas. La superior con los datos que entran y la inferior con los que salen. En el eje X se muestra el tiempo y en el eje Y se muestra el ancho de banda.

Si hay mas de una tarjeta de red, se puede pasar de una tarjeta a otra con las teclas de cursor de izquierda y derecha.

Una orden similar a "nload" es "bmon" que muestra información similar pero de una manera mas clara. Ademas que para cambiar de tarjeta de red se usan las teclas de "arriba" y "abajo" en vez de "izquierda" y "derecha" Mas información en: How to Use bmon to Monitor Network Bandwidth on Linux

nmap

La orden nmap permite saber que Hosts tenemos en nuestra red y que puertos están escuchando.

Mas información:

Top 30 Nmap Command Examples For Sys/Network Admins

Primero hay que instalarla

La orden nos ha dicho que en la red "192.168.3.0/24" hay dos Hosts con puerto escuchando. Las IPs son "192.168.3.1" y "192.168.3.106". Por ejemplo , los puertos que están escuchando en "192.168.3.1" son el 80 , el 443, etc.

En "nmap" cuando un puerto está escuchando no dice que está "LISTEN", como decía en la orden "ss" . En "nmap" se indica como "open". Es decir que las siguientes palabras referidas a un puerto son sinómimas: open abierto listen escuchando ¿Y que pasa con la palabra "servidor"?. Se dice que el puerto está abierto o escuchando pero que el proceso hace de servidor.

netcat

La orden netcat es una orden para conectarse a puertos y escuchar en ellos. Es una forma sencilla desde Bash de crear servidores. Nosotros la vamos a usar para ver como hemos abierto un puerto

Mas información

Usando Netcat: algunos comandos prácticos

Netcat: Herramienta avanzada de red en GNU Linux

Lo primero es instalarla

Decimos que netcat se ponga a escuchar en el puerto 55555 de la IP 127.0.0.1. Una vez lanzado, los bytes que lleguen se mostrarán como texto por la pantalla

Decimos que netcat envíe al host 56.78.123.5 y al puerto 3456 el texto "hola mundo".

Con "netcat" haremos luego ejercicios de ejemplos de procesos de redes que envían y reciben datos.

Ejercicios

Ejercicio 1

Actualiza Ubuntu, para ello lanza las órdenes:

Ejercicio 2

Muestra que números de puerto están abiertos para TCP con IPv6

Muestra que números de puerto están abiertos para UDP con IPv4

Muestra los procesos que están conectados a los puertos abiertos para TCP

Ejercicio 3

Muestra únicamente las conexiones que hay establecidas por TCP

Desde tu ordenador real, conectate a Linux por SSH

Muestra únicamente las conexiones que hay establecidas por TCP y comprueba que ahora está la conexión por SSH

Según el resultado de la orden anterior, indica el números de puerto origen , el números de puerto destino de la conexión y el proceso que está conectado al puerto de SSH

Ejercicio 4

Usanfo "iftop", muestra las conexiones que se están produciendo en tu ordenador

Explica a que Host se están conectado e intenta averiguar porqué se están conectando ahí.

Usando la orden "wget" que permite descargar una página web. Descarga varias paginas web de sitios distintos

Comprueba como a la vez , van a apareciendo en iftop cada vez que te conectas a las páginas

Ejercicio 5

Instala los monitores de red "nload" y "bmon". Y di cual prefieres usar.

Haz una captura de pantalla en las que se vea alguna gráfica del uso de la red

Usando la orden "wget" , descarga alguna pagina web que tenga muchas imágenes.

Usando "bmon" comprueba como ha cambiando la gráfica al usar wget

Usar varias veces seguidas wget y comprueba como cada vez que la usas, se ve en la gráfica de "bmon" el uso de la red

Ejercicio 6

Averigua que Hosts hay en la red de tu casa y los puertos que tiene abierto cada Host.

Intenta conectarte a alguno de los puertos que haya abiertos.

Para saber que un puerto está abierto, ¿Cual es la diferencia entre usar "ss" y "nmap"?

Ejercicio 7

usando netcat haz que se ponga a escuchar en el puerto "12345"

Comprueba ahora que el puerto está abierto.

Envía datos por http desde el navegador de tu ordenador real al puerto "12345" de tu máquina Linux. Para indicar el puerto en la URL, debes añadir a la URL ":" y el número de puerto.

¿Que datos he enviado el navegador y que han llegado hasta el servidor que está escuchando en el puerto "12345"? Los datos que han llegado son el protocolo HTTP que verás el año que viene.

Ejercicio 8

En este ejercicio vamos a crea un servidor Web desde Java.

Desde tu ordenador real , compila el siguiente código Java para el JDK 11 y crear un fichero "jar" llamado "server.jar".

Ahora en tu máquina linux, instala el JDK 11.

Copiar el fichero "server.jar" desde windows a Linux , usando el prgrama "WindSCP".

Dale permisos de ejecución y lectura a "server.jar"

Ejecuta en Linux el servidor java con:

Comprueba que el puerto está abierto.

Conéctate desde tu ordenador real con el navegador al servidor Web de Linux.

Comprueba el puerto origen de la conexión

Conéctate desde tu ordenador real con otro navegador navegador al servidor Web de Linux.

Comprueba el puerto origen de la conexión es distinto que el de antes

Modifica el programa para que en vez de usar el puerto 8080 , use el puerto 80.

Vuelve a ejecutar el servidor Java, no te dejará.

Vuelve a ejecutar el servidor Java pero ahora con "sudo" y ya no te dejará. Eso es porque Linux solo deja abrir puertos por debajo del 1024 al usuario root.