Cómo utilizar LSOF para ver las conexiones de red en Linux

LiSt Open Files (LSOF) es una utilidad de Linux que te permite ver las conexiones de red actuales y los archivos asociados a ellas. LSOF proporciona información detallada y es útil para rastrear diversos tipos de información. Por ejemplo, te permite ver qué programa está operando en un puerto abierto, qué demonios han establecido conexiones y qué puertos están abiertos en tu servidor.

Índice de Contenido
  1. Obtención e instalación de LSOF
  2. Examinando las conexiones de red
  3. Resumen

Obtención e instalación de LSOF

En muchos sistemas Linux, LSOF se instalará por defecto. Prueba ejecutar lsof -v para ver si el programa existe en tu sistema. Si no lo tienes, necesitarás descargar uno de los muchos paquetes disponibles e instalarlo tú mismo. Se pueden encontrar versiones fuente y binarias aquí, mientras que los paquetes específicos para distribuciones están disponibles en ubicaciones como Rpmfind.net y se incluyen en las bases de datos para apt-get, up2date y urpmi.

Si estás instalando desde la fuente, descarga el archivo tar y realiza los siguientes comandos:
tar xpfz lsof_4.64.tar.gz
cd lsof_4.64
tar xpf lsof_4.64_src.tar
cd lsof_4.64_src
./Configure linux
make

Durante la configuración, tienes la opción de ejecutar un inventario para verificar si todos los archivos necesarios para la compilación están presentes. Se te preguntará si deseas personalizar la instalación. Esto no debería ser necesario en la mayoría de las plataformas Linux, por lo que responder no está bien. Si encuentras algún problema al ejecutar LSOF más adelante, es posible que debas volver y probar alguna personalización. También puede ser necesario realizar personalizaciones si actualizas o modificas tu kernel.

Después de ejecutar make, el ejecutable lsof debería aparecer en el directorio. No hay una regla de make install predeterminada, por lo que puedes crear la tuya propia o simplemente copiar lsof al directorio que elijas. Ten en cuenta que es posible que debas modificar sus permisos para que sean setuid-root si quieres que los usuarios regulares puedan ver todos los archivos abiertos. No es necesariamente recomendado, pero es bueno recordarlo, ya que la salida generada cuando se ejecuta LSOF como root será diferente de la salida generada cuando se ejecuta con una cuenta de usuario normal.

Examinando las conexiones de red

Como su nombre indica, LSOF se ocupa de los archivos abiertos en un sistema Linux. Un archivo abierto puede ser un archivo regular, un directorio, una biblioteca, un flujo o un socket de red. Puedes aprovechar varias opciones de LSOF, dependiendo de lo que estés buscando.

Cómo utilizar Isearch para buscar archivos de texto en Linux

Ejecutar lsof por sí mismo mostrará todos los archivos abiertos correspondientes a cada proceso activo en el box. Esto puede ser bastante largo, así que es mejor saber qué estás buscando de antemano. Puedes obtener un resumen rápido de las opciones con lsof -h, y la página del manual entra en mucho más detalle. Veamos algunos de los conmutadores comunes y qué nos mostrarán.

lsof -i
El comando lsof -i lista todos los archivos abiertos asociados con conexiones de Internet. Es similar en formato a netstat -a -p y se verá algo como Lista A.

Por defecto, LSOF muestra información detallada sobre cada conexión. En la Lista A, vemos el comando o programa involucrado, el ID del proceso (PID), el usuario que ejecuta el comando, el descriptor de archivo (FD), el tipo de conexión, el número de dispositivo, el protocolo de Internet y el nombre del archivo o dirección de Internet. La opción -i puede ser útil cuando intentas asegurar tu servidor Linux. Puedes determinar rápidamente qué puertos están abiertos y escuchando conexiones entrantes. LSOF también los asociará con un nombre de programa. De esta manera, puedes identificar rápidamente riesgos de seguridad innecesarios y cerrarlos.

Los puertos que están esperando conexiones tienen la palabra clave LISTEN adjunta a ellos. Estos son puertos que están abiertos y aceptando conexiones. Ten en cuenta que LSOF no distinguirá entre puertos que están completamente abiertos y aquellos que tienen filtros aplicados. La palabra clave ESTABLISHED indica que se ha establecido una conexión en el puerto dado. En la Lista A, hay una sesión SSH desde labrat.remote.net a test.com. Puedes ver varios procesos asociados al demonio sshd. El demonio principal, PID 597, maneja las solicitudes entrantes y se bifurca según sea necesario. PID 8545 fue generado por sshd y es responsable del proceso 8547. La única diferencia notable entre 8545 y 8547, además del PID, está en el campo de usuario. Observa que lhutz es el usuario que ha iniciado sesión de forma remota en este servidor. Esta es información útil que va más allá de simplemente presentar las conexiones de red.

Puedes reducir tu búsqueda especificando un puerto, servicio o nombre de host específico utilizando técnicas como:
lsof -i :587
lsof -i :smtp
lsof -i @labrat.remote.net

LSOF entonces mostrará todas las conexiones coincidentes. Los ejemplos anteriores listarán las conexiones que están escuchando o establecidas en el puerto 587, listarán las conexiones asociadas con el servicio SMTP conocido y listarán las conexiones que provienen o van hacia el host labrat.remote.net, respectivamente. Estas técnicas son útiles si sabes qué estás buscando de antemano. Puedes observar y ver si las conexiones entrantes de SMTP están tardando demasiado tiempo, lo que podría causar tiempos de espera. Puedes verificar que el servicio se esté ejecutando y en qué puerto está escuchando. Y puedes ver si alguien desde un dispositivo específico está conectado a tu sistema, ya sea a través de SSH, Telnet, FTP o cualquier otro medio posible.

Guía para entender y gestionar los permisos de archivos y directorios en Linux

lsof -p 409
LSOF también aceptará un PID y mostrará todos los archivos abiertos que está utilizando. En este caso particular, realizamos un lsof -I para determinar bajo qué número de PID se estaba ejecutando NameD (servicio DNS BIND). Una vez que descubrimos que era 409, emitimos el comando lsof -p 409. La salida se muestra en Lista B.

Notarás las diferentes FDs, o descriptores de archivo, de inmediato. La variable cwd representa el directorio de trabajo actual del proceso; txt define el texto del programa, que es el ejecutable en sí mismo; mem es un archivo retenido en memoria, en este caso una biblioteca; los números 4 y 21 representan archivos en uso por este proceso en particular; y el designador u los define como teniendo tanto acceso de lectura como escritura. Todo esto te ayuda a determinar si algo existe físicamente en el sistema, si está siendo utilizado por el proceso o si está retenido en memoria.

lsof +d
El comando lsof +d /var/log/apache/ es similar a fuser. Básicamente asocia archivos abiertos con sus procesos. En este caso, estamos viendo todos los archivos regulares en el directorio /var/log/apache/. La salida se vería algo como Lista C.

En este ejemplo, Apache mantiene un seguimiento de dos conjuntos de archivos de registro, uno de acceso y otro de error, para dos dominios. Como puedes ver, hay algunas diferencias entre los archivos regulares y las conexiones de Internet. Por un lado, el TIPO es ahora REG, lo que indica un archivo regular. Además, se presenta una variable SIZE, que indica el tamaño real en bits que ocupa el archivo. Observa también que la variable DEV indica que todos usan el mismo dispositivo, en este ejemplo, un solo disco duro. La bandera +d que se emitió con LSOF indica que el comando no debe salir del directorio de nivel superior, mientras que +D realizaría una verificación recursiva en todos los subdirectorios.

lsof -F <…>
El conmutador -F proporciona una excelente manera de formatear la salida de LSOF. Esta función incorporada te permite redirigir la información directamente a programas externos, como un script de Perl, un programa en C o incluso un programa de monitoreo como MRTG. Lo haces especificando qué campos te gustaría imprimir. Por ejemplo, lsof -F pcfn

  • imprimiría el ID del proceso, el nombre del comando, el descriptor de archivo y el nombre del archivo. Hay muchas opciones disponibles, y esto puede ahorrarte tiempo al trabajar con los datos en bruto tú mismo.
  • Cómo configurar un servidor Linux como puerta de enlace para una red local

    Te hemos mostrado solo algunas de las opciones que proporciona LSOF, pero la página del manual abarca todo el espectro de capacidades de LSOF. Algunos comandos de LSOF pueden ser intensivos en recursos debido a la gran cantidad de procesos en un sistema, así que sé lo más selectivo posible al ejecutar los comandos.

    Resumen

    LSOF es una excelente utilidad para gestionar y rastrear las conexiones de red en tu sistema Linux. Aunque hay varias utilidades que pueden realizar funciones similares, ninguna es tan robusta como LSOF. Con LSOF, puedes listar los puertos abiertos, identificar las conexiones que se están haciendo actualmente en tu sistema y determinar qué recursos está utilizando un proceso. Y no solo eso, también puedes determinar qué procesos tiene un usuario específico y encontrar información detallada sobre el uso de archivos y directorios.

    En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Código abierto, allí encontraras muchos artículos similares a Cómo utilizar LSOF para ver las conexiones de red en Linux , tenemos lo ultimo en tecnología 2023.

    Artículos Relacionados

    Subir

    Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.