Registrar conexiones al programa

9

Además de usar iptables para registrar conexiones entrantes.

¿Hay alguna manera de registrar conexiones entrantes establecidas a un servicio para el que no tiene la fuente (supongamos que el servicio no registra cosas como esta por sí solo)? Lo que quiero hacer es recopilar información basada en quién se conecta para poder decir cosas como a qué horas del día se usa más el servicio, en qué parte del mundo se encuentra la base de usuarios principal, etc.

Soy consciente de que puedo usarlo netstaty conectarlo a un script cron, pero eso podría no ser exacto, ya que el script solo puede ejecutarse con la frecuencia de un minuto.

Esto es lo que estoy pensando en este momento:

  • Escriba un programa que realice encuestas constantemente netstat, buscando conexiones establecidas que no aparecieron en la encuesta anterior. Sin embargo, esta idea parece una pérdida de tiempo de CPU, ya que puede que no haya una nueva conexión.
  • Escriba un programa contenedor que acepte conexiones entrantes en cualquier puerto en el que se ejecute el servicio, pero entonces no sabría cómo pasar esa conexión al servicio real.

Editar: Se me ocurrió que esta pregunta podría ser mejor para stackoverflow, aunque no estoy seguro. Lo siento si este es el lugar equivocado.

Zac
fuente
¿Por qué excluye el uso de iptables? ¿En qué puerto está escuchando nuestra aplicación?
user9517
Principalmente porque me gustaría tener más control sobre el registro. Idealmente, me gustaría poder manejar el registro como quiera cada vez que se detecte una nueva conexión. Cualquier puerto No hay una única aplicación específica para la que usaría esto, por lo que no estoy preguntando cómo registrar algo en profundidad como un nombre de usuario o algo así.
Zac
Puede usar iptables solo para registrar nuevas conexiones entrantes en cualquier puerto. Lo hago, en un par de cajas. Entonces repito la excelente pregunta de Iain: ¿por qué excluye el uso de iptables?
MadHatter
¿Puede colocar un proxy antes de la aplicación? Solo necesita ser uno muy simple que reciba las solicitudes, las registre y las pase. Puede reenviar la señal entrante al proxy, que luego se transmite a la aplicación en el puerto original.
John Gardeniers

Respuestas:

4

Puede registrar nuevas conexiones con iptables así

iptables -I INPUT -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "

Esto agregará un mensaje como este para una nueva conexión ssh

6 de octubre 10:58:23 núcleo de centos: Nueva conexión IN = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: 2d: 94: a0: 08: 00 SRC = 192.168. 1.72 DST = 192.168.254.187 LEN = 52 TOS = 0x00 PREC = 0x00 TTL = 126 ID = 15498 DF PROTO = TCP SPT = 59221 DPT = 22 WINDOW = 8192 RES = 0x00 SYN URGP = 0

o como este para una nueva conexión http

6 de octubre 11:03:56 núcleo de centos: Nueva conexión IN = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: d2: 2c: 38: 08: 00 SRC = 192.168. 254.188 DST = 192.168.254.187 LEN = 60 TOS = 0x10 PREC = 0x00 TTL = 64 ID = 10345 DF PROTO = TCP SPT = 52488 DPT = 80 WINDOW = 14600 RES = 0x00 SYN URGP = 0

y así sucesivamente para cada nueva conexión a su sistema. Se registrará en cualquier lugar donde su syslog esté configurado para enviar mensajes kern.warning.

usuario9517
fuente
Después de mirar más a mi alrededor, esta es mi mejor opción. Simplemente combinaré esto con rsyslog para iniciar sesión en un archivo separado. Muchas gracias por tu respuesta informativa Iain!
Zac
0

puede usar auditado y, al final del día, calcular algunas estadísticas basadas en esos loglines. O también puede ir a una solución snmp, pero probablemente haya escrito su propia mib

Nikolaidis Fotis
fuente
0

¿Qué tal tcpdump o wireshark?

Guntis
fuente
Expande tu respuesta un poco más. Quizás sugiriendo al usuario cómo tcpdump y wireshark beneficiarían los esfuerzos de resolución de problemas.
Magellan el
tcpdump manual con el que puede registrar paquetes completos. También puede capturar paquetes con tcpdump y luego analizarlos en wireshark. tcpdump -i <interface> -s 65535 -w <some-file>Además, tendrá que terminar la captura con ^ C cuando crea que ha capturado suficientes paquetes.
Guntis