83 votes

Surveiller le trafic TCP sur un port spécifique

J'ai effectué de nombreuses recherches à ce sujet, mais je n'ai pas réussi à trouver un exemple fonctionnel.

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 montrer exactement quand le client s'est connecté à la seconde près.

J'ai déjà épuisé netstat, nmap, et tcptrack, mais aucun ne supporte le timestamp.

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

Je jouais avec ça :

netstat -ano|grep 443|grep ESTABLISHED

ainsi que ceci :

tcptrack -i eth0 port 443

mais aucun ne convient à mes besoins car j'ai besoin de l'heure à laquelle la connexion arrive.

Si vous avez des suggestions ou si vous pouvez m'orienter dans la bonne direction, je vous en serais reconnaissant.

Merci. :)

105voto

Ivan Carrasco Points 21

modifier : Je reçois encore des upvotes pour ça des années après. S'il vous plaît, ne choisissez pas cette réponse, la répondre en utilisant iptables 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 (à mon avis, c'est celui-là), en fonction de vos besoins.

55voto

user Points 28521

Pour cela, vous pouvez utiliser le support iptables du noyau Linux. L'avantage est qu'il ne nécessite aucun logiciel supplémentaire pour être modérément utile. L'inconvénient est qu'elle nécessite des privilèges root pour être configurée (mais étant donné que vous parlez du port 443, qui est un port privilégié, vous avez probablement besoin des 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: "

(Ajuster le -I INPUT partie en fonction de vos goûts).

Lorsque la règle est déclenchée, une entrée syslog est émise par le noyau. Par exemple, avec une règle d'entrée, l'entrée du journal peut ressembler à quelque chose comme :

Dec 5 09:10:56 hostname kernel : [1023963.185332] HTTPS SYN : IN=ifX OUT= MAC=80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC=A.B.C.D DST=W.X.Y.Z LEN=52 TOS=0x00 PREC=0x20 TTL=119 ID=11901 DF PROTO=TCP SPT=37287 DPT=443 WINDOW=8192 RES=0x00 SYN URGP=0

Vous pouvez ensuite utiliser n'importe quel outil de surveillance des journaux pour faire quelque chose d'utile avec ces informations. Si votre implémentation syslog le prend en charge, vous pouvez même les diriger vers un fichier journal distinct, répondant ainsi efficacement à votre exigence d'écrire les données de connexion dans un fichier horodaté à la seconde près, sans aucun logiciel supplémentaire.

Notez que le LOG est une cible non terminale, ce qui signifie que toutes les règles qui la suivent 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 règle LOG cible utile également pour le débogage des règles de pare-feu.

Pour éviter d'inonder votre journal, envisagez d'utiliser la fonction limit en conjonction avec ce module. Consultez la page de manuel iptables(8) pour plus de détails.

35voto

CodeGnome Points 1961

Résolution en microsecondes

Par défaut, le tcpdump Le service public indiquera l'heure avec une résolution de l'ordre de la microseconde. Par exemple :

$ sudo tcpdump -i any port 443

affichera une sortie similaire à celle qui suit :

12:08:14.028945 IP localhost.33255 > localhost.https : Flags [S], seq 1828376761, win 43690, options [mss 65495,sackOK,TS val 108010971 ecr 0,nop,wscale 7], length 0
12:08:14.028959 IP localhost.https > localhost.33255 : Flags [R.], seq 0, ack 1828376762, win 0, length 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.

5voto

Isaac Morris Points 101

443 est un trafic crypté - il est donc difficile de comprendre le trafic sur ce port de toute façon :

vous pouvez faire

yum install ngrep ou apt-get install ngrep

puis exécutez

ngrep -W byline -d any port 443 -q

3voto

reegan vijay Points 21

Vous pouvez également en avoir besoin pour surveiller les paquets entrants et sortants d'autres machines.

tcpflow -i eth0 -c port 7891

(option -i pour la mention du réseau, option -c pour imprimer les paquets dans la console)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X