User Tools

Site Tools


listar_todas_las_conexiones_ip_a_un_servidor

Averiguar qué IPs están generando tráfico en un determinado momento

En muchas ocasiones es de utilidad averiguar qué IPs están realizando solicitudes a un determinado servidor. Puede darse el caso de que se necesite identificar qué servidores conectan (y como) a las 4 de la mañana y generan algún tipo pico de carga o problema. En estos casos se puede hacer uso de aplicaciones de monitoreo de red y cron para programar en qué momento registrar la información. No todas las herramientas ofrecen la misma información ni las mismas métricas, por lo tanto depende de la información que se necesite obtener habrá que usar una u otra. Se mostrarán unos ejemplos con iptables, iftop, iptraf y Tshark.

IPtables: Permite establecer una regla que simplemente registra el tipo de información deseado. Como es lógico se puede filtrar por puerto, protocolo, IP, etc. Se muestran a continuación algunos ejemplos.Es muy útil para poder identificar el tráfico UDP, que en herramientas como netstat / ss es casi imposible localizarlas ya que las conexiones UDP suelen permanecen activas únicamente fracciones de segundo.

## Activar los logs (Protocolos de iptables: tcp,  udp,  udplite,  icmp,  icmpv6,esp, ah, sctp, mh, all).
 
iptables -A INPUT -p udp -j LOG --log-prefix "udp connection: "
iptables -A INPUT -p tcp -j LOG --log-prefix "tcp connection: "
 
## Filtrar registros por protocolo (TCP / UDP) y hacer sumatorio de conexiones.
 
# UDP
journalctl -k -f --until +10  | grep -i "PROTO=UDP" | grep -oE "SRC.*DST=\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"  |  sort | uniq -c | sort -n # UDP
journalctl -k -f --until +10  | grep -i "PROTO=TCP " | grep -oE "SRC.*DST=\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"  |  sort | uniq -c | sort -n # TCP
 
## Filtrar por puerto origen / destino.
 
journalctl -k -f --until +10  | grep SPT=52922  | grep -oE "SRC.*DST=\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"  |  sort | uniq -c | sort -n # Puerto origen
journalctl -k -f --until +10  | grep DPT=52922  | grep -oE "SRC.*DST=\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"  |  sort | uniq -c | sort -n # Puerto destino
 
...
   1006 SRC=37.135.83.207 DST=192.168.178.50
   1008 SRC=83.165.72.39 DST=192.168.178.50
   2131 SRC=37.15.32.58 DST=192.168.178.50
   2556 SRC=85.84.102.132 DST=192.168.178.50
   7538 SRC=87.222.152.233 DST=192.168.178.50
   9402 SRC=84.123.170.127 DST=192.168.178.50
  12958 SRC=95.19.83.28 DST=192.168.178.50
# Logs de iptables visualizados mediante journalctl.
journalctl -k -f --until +10
 
abr 13 22:19:14 archlinux kernel: tcp connection: IN=enp2s0 OUT= MAC=14:8a:5b:24:c0:29:24:65:11:bc:e1:1e:08:00 SRC=213.236.20.93 DST=192.168.178.50 LEN=40 TOS=0x00 PREC=0x00 TTL=113 ID=11298 DF PROTO=TCP SPT=52677 DPT=51413 WINDOW=65520 RES=0x00 ACK URGP=0 
abr 13 22:19:14 archlinux kernel: tcp connection: IN=enp2s0 OUT= MAC=14:8a:5b:24:c0:29:24:65:11:bc:e1:1e:08:00 SRC=79.154.171.123 DST=192.168.178.50 LEN=40 TOS=0x00 PREC=0x00 TTL=112 ID=29895 DF PROTO=TCP SPT=60433 DPT=51413 WINDOW=260 RES=0x00 ACK URGP=0 
abr 13 22:19:14 archlinux kernel: tcp connection: IN=enp2s0 OUT= MAC=14:8a:5b:24:c0:29:24:65:11:bc:e1:1e:08:00 SRC=190.186.65.12 DST=192.168.178.50 LEN=40 TOS=0x00 PREC=0x00 TTL=46 ID=5769 DF PROTO=TCP SPT=4693 DPT=51413 WINDOW=2518 RES=0x00 ACK URGP=0 
...

Los comandos anteriores registraban todo envío / recepción de paquetes, si solo se quiere contabilizar las conexiones nuevas (si un socket se mantiene abierto y manda 500Gb se contabiliza como una conexión), es decir cuando nuevos cokets son abiertos, se debe agregar “-m state --state NEW”.

iptables -A INPUT -p tcp -m state --state NEW -j LOG --log-prefix "tcp connection: "

De esta manera se puede visualizar rápidamente si un cliente / servidor realiza muchas conexiones nuevas o no (leer).

iftop: Este monitor de red por linea de comandos tiene un parámetro para registrar en un fichero sus métricas y permite programar el tiempo que estará registrando las conexiones.

# 10 segundos a partir de que se ejecute. lamentablemente iftop no soporta el uso de múltiples interfaces al mismo tiempo.
iftop -i eth1 -n -t -s 10 > log.txt
 
Listening on eth1
   # Host name (port/service if enabled)            last 2s   last 10s   last 40s cumulative
--------------------------------------------------------------------------------------------
   1 192.168.178.24                           =>         0b     16.2Kb     13.5Kb     20.2KB
     192.168.178.50                           <=         0b     9.54Kb     7.95Kb     11.9KB
   2 192.168.178.255                          =>         0b         0b         0b         0B
     192.168.178.50                           <=       660b       132b       110b       165B
--------------------------------------------------------------------------------------------
Total send rate:                                         0b     16.2Kb     13.5Kb
Total receive rate:                                    660b     9.67Kb     8.06Kb
Total send and receive rate:                           660b     25.8Kb     21.5Kb
--------------------------------------------------------------------------------------------
Peak rate (sent/received/total):                     29.5Kb     18.7Kb     41.3Kb
Cumulative (sent/received/total):                    20.2KB     12.1KB     32.3KB
============================================================================================

iptraf-ng: Permite escuchar en todas las interfaces y tiene una salida más detallada que iftop. Si eliminamos el parámetro “-B” se permite utilizar de manera interactiva sin dejar de registrar en el fichero indicado. Por supuesto para cronjobs la opción -B es la idónea.

# Duración de 1 minuto.
iptraf-ng -i all -t1 -B -L fichero.log
 
Sat Apr 13 22:35:42 2019; ******** IP traffic monitor started ********
Sat Apr 13 22:35:49 2019; TCP; eth1; 60 bytes; from 192.168.178.50:60586 to 192.168.178.24:8000; first packet (SYN)
Sat Apr 13 22:35:49 2019; TCP; eth1; 60 bytes; from 192.168.178.24:8000 to 192.168.178.50:60586; first packet (SYN)
Sat Apr 13 22:35:49 2019; TCP; eth1; 52 bytes; from 192.168.178.24:8000 to 192.168.178.50:60586; FIN sent; 5 packets, 1048 bytes, avg flow rate      8.38 kbps
Sat Apr 13 22:35:49 2019; TCP; eth1; 52 bytes; from 192.168.178.50:60586 to 192.168.178.24:8000; FIN acknowleged
Sat Apr 13 22:35:49 2019; TCP; eth1; 52 bytes; from 192.168.178.50:60586 to 192.168.178.24:8000; FIN sent; 6 packets, 403 bytes, avg flow rate      3.22 kbps
Sat Apr 13 22:35:49 2019; TCP; eth0; 68 bytes; from 10.0.2.15:22 to 10.0.2.2:34324; first packet
Sat Apr 13 22:35:49 2019; TCP; eth0; 40 bytes; from 10.0.2.2:34324 to 10.0.2.15:22; first packet
...

tshark : El modo texto de wireshark puede indicarnos qué IPs fueron conectadas, se podría incluso filtrar por puerto,protocolo, etc. (Leer)

tshark -qz endpoints,ip -a duration:10
# tshark -r test.pcap -qz endpoints,ip # Obtener las IPs de una captura pcap.
 
================================================================================
IPv4 Endpoints
Filter:<No Filter>
                       |  Packets  | |  Bytes  | | Tx Packets | | Tx Bytes | | Rx Packets | | Rx Bytes |
224.0.0.252                   20          1464          0               0          20            1464   
10.0.204.94                   19          2028         19            2028           0               0   
224.0.0.251                   17          1873          0               0          17            1873   
239.255.255.250               16          3154          0               0          16            3154   
10.6.124.255                  11          1056          0               0          11            1056   
...
listar_todas_las_conexiones_ip_a_un_servidor.txt · Last modified: 2020/12/25 22:57 by 127.0.0.1