Linux en español
Ayuda

Netstat: Obtener IPs únicas y conexiones activas en servidor web

netstat
9 minutos de lectura

En computación, netstatnet work stat istics) es una herramienta de línea de comandos que muestra las conexiones de red (tanto entrantes como salientes), tablas de enrutamiento y varias interfaces de red (controlador de interfaz de red o interfaz de red definida por software) y estadísticas de protocolo de red. . Está disponible en sistemas operativos similares a Unix que incluyen OS X, Linux, Solaris y BSD, y está disponible en sistemas operativos basados ​​en Windows NT que incluyen Windows XP, Windows Vista, Windows 7 y Windows 8.

Se utiliza para encontrar problemas en la red y para determinar la cantidad de tráfico en la red como una medida de rendimiento.

más frecuente utilizada para monitorear las conexiones de red en servidores Linux. netstatdevuelve una variedad de información sobre conexiones activas, como su estado actual, qué hosts están involucrados y qué programas están involucrados. También puede ver información sobre la tabla de enrutamiento e incluso obtener estadísticas sobre sus interfaces de red. netstates una buena utilidad versátil y es una herramienta esencial para los administradores de Linux.

Si solo escribe netstat, mostraría una larga lista de información que generalmente es más de la que desea revisar en un momento dado. El truco es que la forma de mantener la información útil y lo que está buscando y cómo contar netstatsolo muestra esa información.

Los usuarios también pueden usar el man netstatcomando para obtener netstatayuda detallada y un manual donde hay muchas opciones configurables y marcas para obtener listas y resultados significativos.

El Santo Grial de netstat – Mi camino

Mis requerimientos son simples:

  1. Quiero ver a todos los usuarios conectados a mi servidor
  2. Solo quiero ver usuarios en el puerto 80 (http)
  3. Quiero ver el número total de conexiones por IP
  4. No quiero ver la IP de mi propio servidor en la salida
  5. Quiero ordenarlos de Max a Min.

Los siguientes comandos harán justamente eso. Estoy usando las cosas habituales de netstatty. Voy a romper cada comando a medida que avanzo:

Mostrar conexiones activas – TCP y UDP Internet (sin servidores)

En primer lugar, solo verificamos las conexiones TCP y UDP activas.

 netstat -ntu

-ntu = Conexiones TCP y UDP en orden numérico (sin servidores).

Mostrar todas las conexiones activas – (/ w servidores y establecidos)

Bueno, eso es bueno. Pero, ¿cómo sé qué puertos estoy escuchando? Necesito esa causa. Quiero verificar que mi servidor no esté escuchando ningún puerto funky. Si lo hace, entonces tengo servicios mal configurados o mi servidor está comprometido.

Así que solo añadiré ‘ -a ‘ flag en este comando.

 netstat -antu

-antu = Todas las conexiones TCP y UDP en orden numérico (con servidores y establecidos)

He visto demasiadas guías donde la gente usa un plan «indicador». -a «Ya incluye todo» -l , no es obligatorio.

Mostrar todas las conexiones activas al servidor web

Ahora que tengo un rendimiento decente, puedo empezar a trabajar en ello. En esta salida en particular, obtuve todas las clases de conexiones de Internet activas TCP y UDP en cada puerto abierto. Quiero restringirlo solo al puerto 80 (puerto HTTP). Usaré grep para reducir eso.

netstat -antu | grep :80

Bien, ahora veo conexiones de Internet TCP y UDP activas solo en el puerto 80. (De hecho, será todo TCP, ya que HTTP es un servicio TCP). Puede utilizar netstat -anu para enumerar las conexiones UDP.

Mostrar todas las conexiones activas al servidor web excluyendo las IP propias

Hasta ahora he logrado enumerar todas las conexiones TCP y UDP activas y filtrar mis resultados para el puerto 80. Pero puedo ver algunas entradas como las siguientes:

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN       tcp        0      0 :::80                       :::*                        LISTEN 

No quiero excluir eso ya que es solo una loopbackdirección. Estoy más interesado en ver IPs extranjeras conectadas a mi sitio web. Así que solo usaré grep -vpara excluir estas conexiones.

netstat -antu | grep :80 | grep -v LISTEN 

>> Salida de muestra

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN  tcp        0      0 127.0.0.1:80             202.28.177.61:59818         SYN_RECV     tcp        0      0 127.0.0.1:80             202.28.177.61:40560         SYN_RECV     tcp        0      0 127.0.0.1:80             202.28.177.61:50523         SYN_RECV     tcp        0      0 127.0.0.1:80             202.28.177.61:55520         SYN_RECV     tcp        0      0 127.0.0.1:80             68.204.187.5:50420          TIME_WAIT    tcp        0      0 127.0.0.1:80             202.28.177.61:41423         TIME_WAIT    tcp        0      0 127.0.0.1:80             24.232.175.224:45254        TIME_WAIT    tcp        0      0 127.0.0.1:80             68.204.187.5:50465          TIME_WAIT    tcp        0      0 127.0.0.1:80             202.28.177.61:43653         TIME_WAIT    tcp        0      0 127.0.0.1:80             202.28.177.61:33851         TIME_WAIT 

Mostrar todas las conexiones activas al servidor web – IP: solo puerto

Ahora quiero hacer más. Quiero excluir todo y solo listar direcciones IP extranjeras. Necesito algún tipo de filtro. awkEs exactamente la herramienta que necesito usar aquí. ¿Pero cómo sé qué campo filtrar?

Veamos una salida de muestra del comando anterior.

tcp        0      0 127.0.0.1:80             202.28.177.61:59818         SYN_RECV 

En la línea anterior, solo me interesa la IP extranjera 202.28.177.61. awkTiene la capacidad de hacer extracción de datos. Contemos los campos.

(1)tcp    (2)0    (3)0  (4)127.0.0.1:80   (5)202.28.177.61:59818         (6)SYN_RECV 

Tenga en cuenta que, 127.0.0.1:80 202.28.177.61:59818 se cuenta como un campo, ya que no tienen espacios.

Por lo tanto, intentemos enumerar el 5thcampo que contiene todas las direcciones IP extranjeras.

netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}'

>> Salida de muestra

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}'  113.173.16.70:26985 50.106.33.249:49292 113.173.16.70:26982 66.87.131.102:4370 113.173.16.70:26996 175.143.49.222:19709 66.87.131.102:4386 87.76.5.167:18296 23.24.156.251:57306 222.66.184.182:56000 

Mostrar todas las conexiones activas al servidor web – solo IP

La última salida me queda bien. Me las arreglé para enumerar sólo las direcciones extranjeras. Pero si observa detenidamente, verá que la misma IP extranjera aparece más de una vez en diferentes puertos. Es esencialmente el mismo usuario (o grupos de usuarios detrás del mismo proxy).

Vayamos un paso más allá, ahora quiero ver IPs extranjeras solo sin sus puertos de origen. Estaré usando cutpara eso. cutme permitirá cortar cada línea en el primer carácter de espacio y tomar la primera pieza.

netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 

Estoy usando -d: para avisar cutque estoy usando el (:)carácter de dos puntos como delimitador de campo.

Al usar -f1 Estoy diciendo corte para darme el primer campo (que es la dirección IP antes del carácter de dos puntos).

>> Salida de muestra

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1   99.104.23.221
99.104.23.221
2.50.116.13 
5.239.12.118 
99.104.23.221 
99.104.23.221 
66.249.81.52 
99.104.23.221 
218.80.192.208 
99.104.23.221 

Mostrar todas las conexiones activas al servidor web – ordenadas y únicas

Ahora la salida contiene solo direcciones IP extranjeras. Ahora los necesitamos sort, y luego lo canalizamos al uniqcomando para que nos quedemos con una IP extranjera única de manera ordenada. También quiero que el uniqcomando cuente el número de conexiones por IP.

netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c 

uniq -c contará el número total de conexiones por IP.

>> Salida de muestra

root@kali [~]# netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c      
14 112.204.9.125       
1 113.173.16.70       
4 124.176.50.119       
1 125.163.235.42       
1 175.136.237.182       
1 178.26.19.53       
1 180.76.6.44      
12 202.28.177.61 

Mostrar todas las conexiones activas al servidor web – recuento de conexiones

Pero espera, uniq -ccontó y clasificó según las direcciones IP. Vamos a reorganizar esta lista para mostrar el número máximo a mínimo de conexiones por IP única (solo IPs extranjeras).

 netstat -antu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn 

>> Salida de muestra

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn       
44 92.45.59.194      
37 121.52.153.215      
35 212.14.31.37      
28 76.177.223.119      
28 37.228.105.222      
27 182.186.25.222       
8 13.1.89.53       
6 127.0.0.1 

Mostrar todas las conexiones activas al servidor web – excluir las IP propias

Está todo bien hasta ahora. Pero puedo ver la IP de mi propio servidor en esa lista. (ie 127.0.0.1). Si solo puedo excluir eso, solo me quedarán las IPs extranjeras. Voy a utilizar grep -vpara excluir esa línea.

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1 

>> Salida de muestra

 
root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1      
45 108.168.173.83      
36 174.45.176.119      
35 70.39.187.230      
34 175.144.92.225      
24 139.195.97.102      
19 69.142.186.97      
18 150.101.190.51      
12 50.150.246.167 

Recuento final de todas las IP activas al servidor web

Esto ahora está funcionando como yo quería. Hagamos un recuento final del número total de IP únicas conectadas a mi servidor.

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1 | wc -l 

>> Salida de muestra

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | grep -v 127.0.0.1 | wc -l 768 

wc -l ¿una línea cuenta?

Significa que tengo 768 IP únicas conectadas ahora mismo.

Recuento final de todas las conexiones activas al servidor web

Por último, pero no menos importante, quiero un recuento total de conexiones al puerto 80 de todas las direcciones IP extranjeras.

netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | grep -v 127.0.0.1 | wc -l 

>> Salida de muestra

root@kali [~]# netstat -ntu | grep :80 | grep -v LISTEN | awk '{print $5}' | cut -d: -f1 | grep -v 127.0.0.1 | wc -l 1847 

Eso significa que tengo 1847 conexiones abiertas ahora desde todas las IP externas al puerto 80 en mi servidor.

Conclusión

netstat es la herramienta más útil para detectar y determinar si un servidor está bajo DoS o DDoS attack (Distributed Denial of Service). Cada vez que un cliente se conecta a un servidor a través de la red, se establece y abre una conexión en el sistema. En un servidor ocupado de alta carga, la cantidad de conexiones conectadas al servidor se puede ejecutar en una gran cantidad hasta cientos, si no miles. Descubrir y obtener una lista de conexiones en el servidor por cada nodo, cliente o dirección IP es útil para la planificación del escalado del sistema y, en la mayoría de los casos, detectar y determinar si un servidor web está bajo ataque DoS o DDoS (Denegación de Servicio Distribuida) , donde una IP envía gran cantidad de conexiones al servidor. Para verificar los números de conexión en el servidor, los administradores y los webmasters pueden hacer uso del netstatcomando.

¿Creo que mi forma de usar netstates la mejor? ¡Absolutamente! ¿Por qué? Porque siempre me funcionó.

No sé si su servidor se está ejecutando en el puerto 80 o si está obteniendo DDoS en un puerto diferente (es decir, el puerto 25 o 443), pero el comando anterior cumple mi propósito en todo momento. Hay 10 formas diferentes de despellejar a un gato y a mi me gusta. He desglosado mi forma de usar el netstatcomando hasta el último trago y una vez que lo sigues de arriba abajo, te acostumbrarás y con el tiempo encontrarás tu propio comando perfecto.

Puntuación media / 5. Recuento de votos:

¡Síguenos en redes sociales!

Entradas relaccionadas

Los 15 mejores temas de GNOME SHELL

Diego García Cuesta

Cambiar fecha y hora en Ubuntu

Diego García Cuesta

err_spdy_inadequate_transport_security: Solución para Nginx

Diego García Cuesta

Pingüino Tux: ¿Por qué es la mascota oficial de Linux?

Diego García Cuesta

Números de puertos de red

Linux en Español

Los mejores buscadores de internet para el 2019

Linux en Español