Estadísticas de tráfico por puerto de red

15

Tengo dos máquinas con dos aplicaciones que se comunican entre sí en unos pocos puertos de red (TCP y UDP). Quiero contar el tráfico que envían y reciben. No solo necesito un conteo general sino estadísticas por máquina por puerto por día. Intenté darkstat , pero no proporciona estadísticas por día, sino solo contadores generales.

¿Hay alguna otra forma en que pueda contar ese tráfico (puedo poner algún proxy o puerta de enlace entre esas dos máquinas)?

pbm
fuente

Respuestas:

16

iptables puede proporcionarle estadísticas sobre cuántas reglas se activaron, por lo que puede agregar reglas LOG en los puertos de interés (digamos el puerto 20 y el puerto 80):

iptables -A INPUT -p tcp --dport 22
iptables -A INPUT -p tcp --dport 80

y entonces

iptables -n -L -v

le dará la cantidad de paquetes y bytes enviados a través de estos puertos. Por supuesto, tendrá que analizar desde la salida los puertos que le interesan.

Si necesita valores exactos, agregue un -x:

iptables -n -L -v -x
mzet
fuente
44
No es necesario poner LOGreglas (que inundarán sus archivos de registro), solo cuente la cantidad de veces que se activa una regla.
Gilles 'SO- deja de ser malvado'
44
En efecto. Una regla no necesita tener una acción. Una lección útil para aprender: las reglas sin -Json buenas para la contabilidad.
Alexios
2

Puede agregar reglas de contabilidad a su configuración de iptables. Esto debería ocurrir antes de aceptar el tráfico ESTABLECIDO y RELACIONADO o perderá el conteo del tráfico que pasa. Para contar el tráfico web intente una regla como:

iptables -A INPUT -p tcp --dport 80 

Si tiene un montón de ellos, es posible que desee crear una cadena de contabilidad para que pueda informar y poner cero contadores en forma aislada de otras cadenas.

El firewall de Shorewall le permite agregar fácilmente reglas de contabilidad a su conjunto de reglas.

BillThor
fuente
1

No olvide incluir estadísticas de tráfico de salida.

# Port 80 (HTTP).
iptables -A INPUT -p tcp --dport 80
iptables -A OUTPUT -p tcp --sport 80

# Port 443 (HTTPS).
iptables -A INPUT -p tcp --dport 443
iptables -A OUTPUT -p tcp --sport 443


iptables -n -L -v
iptables -n -L -v -x


iptables -n -L -v -x | grep -i "Chain\|:443\|:80"

Chain INPUT (policy DROP 357 packets, 22828 bytes)
 1286265 75076978 ACCEPT tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp dpt:80
 1305378 75018232 ACCEPT tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp dpt:443

Chain OUTPUT (policy ACCEPT 303516 packets, 94716311 bytes)
     442   255112        tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp spt:80
      46    10515        tcp  --  *      *    0.0.0.0/0  0.0.0.0/0  tcp spt:443
Busindre
fuente
0

Utiliza el tcpdump,

tcpdump -i any -nnn

Las salidas del comando anterior incluirían la marca de tiempo, las direcciones IP src / dest, el puerto y la longitud del paquete. Con esa información, puede lograr su objetivo fácilmente con un guión bien escrito.

Derui Si
fuente
0

No está claro si necesita uso por IP de destino, pero vnstat es una herramienta útil para registrar el uso del tráfico por interfaz. Instálelo y luego ejecute vnstat -u -i eth0para cada interfaz que desee monitorear. Para luego obtener el uso por día de uso vnstat -i eth0 -d.

mgorven
fuente
1
No creo que usando vnstatpueda obtener estadísticas por puerto ... ¿O me equivoco?
pbm
1
@pbm Ah, te refieres al puerto TCP / UDP. No, vnstat no hará eso.
mgorven