Surveiller le trafic TCP sur un port spécifique


49

J'ai beaucoup cherché, mais je n'arrive pas à trouver un exemple concret.

Mon objectif est de surveiller le trafic TCP sur un port spécifique pour voir les connexions entrantes et les écrire dans un fichier texte. Le problème est que j'ai également besoin d'un horodatage sur chaque ligne pour indiquer le moment exact où le client s'est connecté à la seconde.

J'ai déjà épuisé netstat, nmap et tcptrack, mais aucun ne prend en charge l'horodatage.

Je pensais qu'un script shell linux pourrait fonctionner si je surveillais un port local spécifique et écrivais du texte dans un fichier lorsqu'une connexion était établie, puis concaténait simplement la date sur chaque ligne.

Je jouais avec ça:

netstat -ano|grep 443|grep ESTABLISHED

ainsi que cette:

tcptrack -i eth0 port 443

mais ni l'un ni l'autre ne convient à mes besoins, car j'ai besoin du moment où la connexion entre en

Si vous avez des suggestions ou pouvez me diriger dans la bonne direction, ce serait grandement apprécié.

Merci. :)

linux  bash 

Haha a migré de stackoverflow mais doit migrer vers unix / linux
Kolob Canyon

Réponses:


71

edit : Je reçois toujours des votes positifs pour cette année plus tard. S'il vous plaît ne va pas pour cette réponse, la réponse à l'aideiptables ici est de loin supérieure à mon avis.


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

ou seulement tcp-syn, ou seulement tcp-ack(je pense que ce serait celui-là), selon vos besoins.


Au lieu d’indiquer le nom d’hôte de chaque connexion, existe-t-il un moyen de le remplacer par l’IP?

Oui, ajoutez -naprès tcpdump (man tcpdump: -n Ne convertissez pas les adresses (c'est-à-dire les adresses d'hôte, les numéros de port, etc.) en noms. )
Wrikken

5
Je dirais que spammer le journal du noyau n'est pas vraiment supérieur. ;)
Daniel B

1
Ah, mais je le ferais, à condition que l'on configure correctement où les journaux doivent aller bien sûr: P Mais hé, cette réponse est toujours là si c'est un briseur d'affaire :)
Wrikken

2
@Wrikken le problème avec l'utilisation du journal du noyau est que, en utilisant votre solution lorsque vous ctrl + c sortez de tcpdump, tout reste comme avant. La solution iptables signifie laisser une "surprise" derrière si vous ne supprimez pas la règle manuellement. Cette surprise peut se traduire par un disque racine complet en un rien de temps. Désolé, je suis en faveur de cela (:
John Blackberry

31

Vous pouvez utiliser le support iptables dans le noyau Linux pour cela. L'avantage est qu'il ne nécessite aucun logiciel supplémentaire pour être modérément utile. L'inconvénient est que cela nécessite des privilèges root pour être configuré (mais étant donné que vous parlez du port 443, qui est un port privilégié, vous avez probablement besoin de privilèges root avec la plupart des solutions).

Ajoutez une règle iptables avec quelque chose comme:

sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

(Ajustez la -I INPUTpièce à votre goût.)

Lorsque la règle est déclenchée, une entrée syslog sera émise par le noyau. Par exemple, avec une règle de saisie, l’entrée de journal peut ressembler à ceci:

5 déc 09:10:56 noyau hôte: [1023963.185332] HTTPS SYN: IN = ifX SORTIE = MAC = 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 80: 08: 00 SRC = ABCD DST = WXYZ LEN = 52 TOS = 0x00 PREC = 0x20 TTL = 119 ID = 11901 DF PROTO = TCP SPT = 37287 DPT = 443 FENÊTRE = 8192 RES = 0x00 SYN URGP = 0

Vous pouvez ensuite utiliser n'importe quel outil de surveillance des journaux "run-of-the-mill" pour effectuer quelque chose d'utile avec ces informations. Si votre implémentation syslog le prend en charge, vous pouvez même les transférer dans un fichier journal séparé, ce qui vous permet d'écrire les données de connexion dans un fichier horodaté à la seconde, sans logiciel supplémentaire.

Notez que la LOGcible est une cible non terminante, ce qui signifie que les règles qui la suivront seront toujours évaluées et que le paquet ne sera ni rejeté ni accepté par la règle LOG elle-même. Cela rend la LOGcible utile également pour le débogage des règles de pare-feu.

Pour éviter d’inonder votre journal, envisagez d’utiliser le limitmodule conjointement avec cela. Consultez la page de manuel iptables (8) pour plus de détails.


est-il possible d'exécuter un script python déclenchant cela?
Karl Zillner

N'oubliez pas de supprimer ces règles de tables IP une fois que vous avez terminé, sinon elles pollueront les journaux assez fortement en fonction de la règle. digitalocean.com/community/tutorials/…
Mo Beigi

26

Micro-seconde résolution

Par défaut, l' utilitaire tcpdump indiquera l'heure avec une résolution de l'ordre de la micro-seconde. Par exemple:

$ sudo tcpdump -i any port 443

affichera une sortie similaire à celle-ci:

12: 08: 14.028945 IP localhost.33255> localhost.https: drapeaux [S], seq 1828376761, gagner 43690, options [mss 65495, sackOK, TS val 108010971 ecr 0, non, échelle 7], longueur 0
12:08: 14.028959 IP localhost.https> localhost.33255: drapeaux [R.], seq 0, ack 1828376762, victoire 0, longueur 0

Voir tcpdump (8) pour une liste complète des options de tcpdump, et pcap-filter (7) pour la syntaxe complète des filtres que vous pouvez utiliser.


5

443 est un trafic crypté - si difficile de toute façon de faire la queue ou la queue de trafic sur ce port:

tu peux faire

miam installer ngrep ou apt-get installer ngrep

puis courir

ngrep -W byline -d any port 443 -q

2

Vous aurez peut-être également besoin de cela pour surveiller les paquets entrants et sortants d’autres machines.

tcpflow -i eth0 -c port 7891

(option -ipour mentionner le réseau, option -cpour imprimer les paquets dans la console)


C'est vraiment un commentaire et non une réponse à la question initiale. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire en dessous de son message - vous pouvez toujours commenter vos propres messages, et une fois que vous avez suffisamment de réputation, vous pourrez commenter n'importe quel message . Veuillez lire pourquoi j'ai besoin de 50 réputation pour commenter? Que puis-je faire à la place?
DavidPostill


0

Si vous avez besoin d’une solution permanente qui surveillera toujours le trafic sur les ports d’intérêt, je vous suggère d’utiliser QoS (la commande tc sous Linux). tc est un peu cryptique et non documenté, donc j’utilise FireQoS pour configurer QoS et Netdata pour le surveiller en temps réel.

Vérifiez ceci pour plus d'informations: https://github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers


Je dirais que c'est un peu trop compliqué simplement pour la journalisation des connexions, où iPTables + --log fonctionnera.
djsmiley2k - CoW

Vous avez raison, il est excessif si vous devez vous connecter les connexions. J'utilise cette solution non pas pour surveiller les clients connectés, mais combien de bande passante le service utilise.
Costa Tsaousis
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.