Consigner les connexions au programme

9

En plus pour utiliser iptables pour enregistrer les connexions entrantes ..

Existe-t-il un moyen de consigner les connexions entrantes établies vers un service dont vous n'avez pas la source (supposons que le service n'enregistre pas des éléments comme celui-ci de lui-même)? Ce que je veux faire, c'est recueillir des informations en fonction de qui se connecte pour pouvoir dire des choses comme les heures de la journée où le service est le plus utilisé, où dans le monde se trouve la principale base d'utilisateurs, etc.

Je suis conscient que je peux utiliser netstatet simplement le connecter à un script cron, mais cela pourrait ne pas être précis, car le script ne peut s'exécuter que aussi souvent qu'une minute.

Voici ce que je pense en ce moment:

  • Écrivez un programme qui interroge constamment netstat, à la recherche de connexions établies qui n'apparaissaient pas dans le sondage précédent. Cette idée semble être une telle perte de temps CPU, car il peut ne pas y avoir de nouvelle connexion ..
  • Écrivez un programme wrapper qui accepte les connexions entrantes sur n'importe quel port sur lequel le service s'exécute, mais je ne saurais pas comment transmettre cette connexion au service réel.

Edit: Je viens de penser que cette question pourrait être meilleure pour stackoverflow, bien que je ne sois pas certain. Désolé si ce n'est pas le bon endroit.

Zac
la source
Pourquoi excluez-vous l'utilisation d'iptables? Sur quel port notre application écoute-t-elle?
user9517
Principalement parce que j'aimerais avoir plus de contrôle sur la journalisation. Idéalement, j'aimerais simplement pouvoir gérer la journalisation comme je le souhaite chaque fois qu'une nouvelle connexion est détectée. N'importe quel port. Il n'y a pas une seule application spécifique pour laquelle j'utiliserais cela, c'est pourquoi je ne demande pas comment enregistrer quoi que ce soit en profondeur comme un nom d'utilisateur ou quelque chose comme ça.
Zac
Vous ne pouvez utiliser iptables que pour enregistrer de nouvelles connexions entrantes, sur n'importe quel port. Je fais ça, sur quelques boîtes. Je répète donc l'excellente question d'Iain: pourquoi excluez-vous l'utilisation d'iptables?
MadHatter
Êtes-vous en mesure de placer un proxy avant l'application? Il suffit d'être très simple pour recevoir les demandes, les enregistrer et les transmettre. Vous pouvez transmettre le signal entrant au proxy, qui relaie ensuite l'application sur le port d'origine.
John Gardeniers du

Réponses:

4

Vous pouvez ainsi enregistrer de nouvelles connexions avec iptables

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

Cela ajoutera un message comme celui-ci pour une nouvelle connexion ssh

6 octobre 10:58:23 noyau centos: nouvelle connexion 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

ou comme ça pour une nouvelle connexion http

6 octobre 11:03:56 noyau centos: nouvelle connexion 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

et ainsi de suite pour chaque nouvelle connexion à votre système. Le sera enregistré là où votre syslog est configuré pour envoyer des messages kern.warning.

user9517
la source
Après avoir fait plus de recherche autour de moi, cette voie semble être mon meilleur pari. Je vais simplement combiner cela avec rsyslog pour me connecter à un fichier séparé. Merci beaucoup pour votre réponse informative Iain!
Zac
0

vous pouvez utiliser auditd et à la fin de la journée calculer des statistiques basées sur ces loglines. Ou vous pouvez également aller vers une solution snmp mais vous avez probablement écrit votre propre mib

Nikolaidis Fotis
la source
0

Que diriez-vous de tcpdump ou de wirehark?

Guntis
la source
Veuillez développer votre réponse un peu plus. Peut-être suggérant à l'utilisateur en quoi tcpdump et wirehark bénéficieraient des efforts de dépannage.
Magellan
tcpdump manuel avec lequel vous pouvez enregistrer des paquets complets. Vous pouvez également capturer des paquets avec tcpdump puis les analyser dans Wireshark. tcpdump -i <interface> -s 65535 -w <some-file>De plus, vous devrez terminer la capture avec ^ C lorsque vous pensez avoir capturé suffisamment de paquets.
Guntis