En computación, netstat
( net 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. netstat
devuelve 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. netstat
es 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 netstat
solo muestra esa información.
Los usuarios también pueden usar el man netstat
comando para obtener netstat
ayuda detallada y un manual donde hay muchas opciones configurables y marcas para obtener listas y resultados significativos.
Tabla de contenidos
El Santo Grial de netstat – Mi camino
Mis requerimientos son simples:
- Quiero ver a todos los usuarios conectados a mi servidor
- Solo quiero ver usuarios en el puerto 80 (http)
- Quiero ver el número total de conexiones por IP
- No quiero ver la IP de mi propio servidor en la salida
- 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 loopback
dirección. Estoy más interesado en ver IPs extranjeras conectadas a mi sitio web. Así que solo usaré grep -v
para 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. awk
Es 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. awk
Tiene 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
y 202.28.177.61:59818
se cuenta como un campo, ya que no tienen espacios.
Por lo tanto, intentemos enumerar el 5th
campo 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 cut
para eso. cut
me 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 cut
que 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 uniq
comando para que nos quedemos con una IP extranjera única de manera ordenada. También quiero que el uniq
comando 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 -c
contó 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 -v
para 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 netstat
comando.
¿Creo que mi forma de usar netstat
es 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 netstat
comando 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.