Ma machine étant un serveur, je souhaite donc ignorer les connexions établies sur mon serveur (par exemple, lorsqu'une personne visite mon site Web). Je veux voir uniquement les connexions / demandes effectuées par mon serveur vers d'autres endroits.
Comment puis-je voir uniquement ces connexions sortantes?
EDIT: Je suis nouveau à ce genre de choses. Ce que j'essaie de faire, c'est simplement de voir si quelque chose de mon serveur est envoyé autre que des données pour mes applications Web. Par exemple, si quelqu'un visite mes sites Web, mon serveur enverra évidemment des données au navigateur du client. Mais supposons qu'il y ait aussi du code quelque part dans le cadre de mon application Web qui envoie des données statistiques à un autre endroit dont je ne suis pas au courant. J'aimerais voir les endroits sur lesquels mon serveur envoie des données, le cas échéant. Ce n'est probablement pas probable, mais supposons que vous décidiez d'utiliser un framework php ou nodejs que vous n'avez pas écrit: il y a une petite chance qu'il puisse envoyer un certain type de données quelque part. Si oui, c'est ce que j'aimerais voir.
netstat
en "mode continu"-c
ne fonctionne pas. Vous utilisez plutôt des chiffres, commenetstat -na 1 | find "[Scan_Host_IP_Addr]"
pour le mettre à jour chaque1
seconde (dans cet exemple). ( source ).strace
le processus, filtrer pour les recherches de serveurs de noms (pas de détails, ce n'est pas une réponse complète à cela). Vous pouvez également afficher le DNS inversé des IP répertoriées ennetstat
omettant l'n
option incluse dans ma réponse.Si vous souhaitez simplement vous connecter à chaque tentative de connexion, le plus simple est probablement la
iptables
LOG
cible sur Linux (ou la fonctionnalité de journalisation de pare-feu équivalente sur votre système).Si vous avez besoin de plus d’informations telles que la durée de la connexion et la quantité de données échangées dans les deux sens, alors
conntrackd
(sous Linux) est probablement la meilleure option.Notez cependant que ces deux derniers enregistrent uniquement le trafic passant par netfilter, qui correspond généralement à tout le trafic mais ne comptabilise pas le trafic généré avec des piles IP dans l’espace utilisateur (comme les machines virtuelles ou tout ce qui utilise des sockets bruts) ou le trafic ponté.
Pour des solutions plus générales, vous pouvez jeter un oeil à des choses comme
argus
,bro-ids
,sancp
ountop
qui consignent toutes sortes d'informations en fonction du trafic qu'ils reniflent sur une interface.la source
J'ai essayé un tas d'outils, y compris
iftop
,ntop
,iptraf
et bien sûr les très utiles intégrésnetstat -tupln
(options prises en charge dépendent OS), mais le plus pratique pour mon cas d'utilisation se sont avérées êtrenethogs
- il agrège les connexions par l'origine app , et est le moins bruyant de tous.Installable via:
Exécuter en tant que root:
Si votre objectif est uniquement de voir toutes les connexions TCP initiées par une application, vous pouvez utiliser:
la source
Ce que je pense que vous voulez faire est d’obtenir une liste de ports d’écoute, puis de les supprimer de toute autre connexion TCP, ce seront toutes les connexions sortantes. La commande ss (socket status) affiche les colonnes "Local Address: Port" et "Peer Address: Port", nous devons supprimer les ports d'écoute de la colonne "Local Address: Port" et non de la colonne "Peer Address: Port". sinon vous risquez de manquer certaines connexions sortantes. Donc, pour cela, j'utilise
\s{2}+
derrière la chaîne ": $ port" dans le grep afin de faire correspondre les espaces qui existent derrière la colonne "Adresse locale: Port"; cette colonne a deux ou plusieurs espaces blancs derrière elle, où "Peer Address: Port" a un espace, puis une nouvelle ligne (grrr ... doit simplement avoir une nouvelle ligne, IMO,\s+
\s{2}+
.) Normalement, je pourrais essayer d’utiliser la fonctionnalité de filtrage de ss, comme avecss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>
. Mais il semble qu'il y ait une limite à la longueur de cette chaîne, elle a bombardé un système sur lequel j'avais beaucoup de ports d'écoute. J'essaie donc de faire la même chose avec grep. Je crois que ce qui suit fonctionnera:Notez que cela dépend de la version de ss que vous utilisez. Les anciennes versions (comme: utilitaire ss, iproute2-ss111117) ont un format de sortie différent. Vous devrez peut-être utiliser $ 3 au lieu de $ 4 dans awk. Notez également
ss -tln
etss -tn state listening
vous donne différentes sorties, ce qui est un peu contre-intuitif pour moi. YMMV.J'ai trouvé une solution légèrement plus élégante qui ne nécessite pas de connaître l'adresse IP de l'hôte,
ss -tn state established dst :*
fonctionne bien, j'ai modifié les lignes de commande ci-dessus.la source
ss -tn state listening
sur un hôte qui exécute un serveur FTP, et naturellement la commande a montré que la machine écoutait sur le port 21. Cela ne signifie-t-il pas queegrep -v
tous les hôtes distants dont l'adresse IP comprend «21» (y compris «210») seront filtrés? "," 211 "," 212 ", ...)? Aussi, est-ceasort
vraiment nécessaire, ou juste une façade?ss --out
pour obtenir une liste des connexions sortantes.tcpdump
vous permet de voir tout le trafic IP circulant vers / depuis une interface spécifique avec la possibilité de filtrer en fonction de certains critères.tcpdump
est généralement installé par défaut sur la plupart des systèmes * nix, sinon il existe généralement un port quelque part pour le récupérer pour votre distribution spécifique.la source
netstat
est une bonne option.Utilisez les paramètres requis (voir ses pages de manuel). Par exempleIci, il peut surveiller tous les processus d'écoute (a) numériques (n) tcp (t) et udp (u) (p).
Vous pouvez également essayer la
ss
commande. Pour utilisation de référence:Informations sur le réseau et le socket TCP / UDP SS Linux
la source
Si vous utilisez Solaris ou un dérivé, jetez un œil à conntrack
la source