Mein Computer ist ein Server, daher möchte ich Verbindungen zu meinem Server ignorieren (z. B. wenn jemand meine Website besucht). Ich möchte nur Verbindungen / Anfragen von meinem Server zu anderen Orten sehen.
Wie sehe ich nur diese ausgehenden Verbindungen?
EDIT: Ich bin neu in diese Art von Dingen. Ich versuche nur festzustellen, ob von meinem Server etwas anderes als Daten für meine Web-Apps gesendet werden. Wenn zum Beispiel jemand meine Websites besucht, sendet mein Server offensichtlich Daten an den Browser des Kunden. Angenommen, irgendwo im Framework meiner Webanwendung befindet sich auch Code, der statistische Daten an einen anderen Ort sendet, den ich nicht kenne. Ich möchte die Orte sehen, an die mein Server Daten sendet, falls vorhanden. Es ist wahrscheinlich unwahrscheinlich, aber nehmen wir an, Sie verwenden ein PHP- oder NodeJS-Framework, das Sie nicht geschrieben haben: Es besteht eine geringe Wahrscheinlichkeit, dass es irgendwo Daten sendet. Wenn ja, würde ich das gerne sehen.
quelle
netstat
im "Continuous Mode" zu arbeiten,-c
funktioniert nicht. Sie verwenden stattdessen Zahlen,netstat -na 1 | find "[Scan_Host_IP_Addr]"
damit diese jede1
Sekunde aktualisiert werden (in diesem Beispiel). ( Quelle ).strace
nach Nameserver-Lookups filtert (keine Details, dies ist keine vollständige Antwort darauf). Alternativ können Sie die umgekehrte DNS der in aufgeführten IP-Adressen anzeigen,netstat
indem Sie dien
in meiner Antwort enthaltene Option weglassen .Wenn Sie nur jeden Verbindungsversuch protokollieren möchten, ist das einfachste
iptables
LOG
Ziel wahrscheinlich Linux (oder die entsprechende Firewall-Protokollierungsfunktion auf Ihrem System).Wenn Sie weitere Informationen benötigen, wie die Dauer der Verbindung und die Menge der in beide Richtungen ausgetauschten Daten, ist
conntrackd
(unter Linux) wahrscheinlich die beste Option.Beachten Sie jedoch, dass die beiden oben genannten nur den Datenverkehr protokollieren, der durch Netfilter geleitet wird, bei dem es sich im Allgemeinen um den gesamten Datenverkehr handelt, jedoch nicht um Datenverkehr, der mit IP-Stacks im Benutzerbereich generiert wurde (z. B. virtuelle Maschinen oder alles, was Raw-Sockets verwendet), oder um überbrückten Datenverkehr.
Weitere allgemeine Lösungen können Sie einen Blick auf Dinge wie haben
argus
,bro-ids
,sancp
oderntop
dass melden Sie sich alle Arten von Informationen basierend auf den Verkehr sie auf einer Schnittstelle schnuppern.quelle
Ich habe eine Reihe von Werkzeugen versucht, einschließlich
iftop
,ntop
,iptraf
, und natürlich die sehr nützlich eingebauten innetstat -tupln
(unterstützten Optionen sind OS-abhängig), aber die meist praktisch für meinen Anwendungsfall entpupptennethogs
- es aggregiert Verbindungen durch den Ursprung App , und ist die leiseste von allen.Installierbar über:
Als root ausführen:
Wenn Sie nur alle von einer App initiierten TCP-Verbindungen anzeigen möchten, können Sie Folgendes verwenden:
quelle
Ich denke, Sie möchten eine Liste der empfangsbereiten Ports abrufen und diese dann von allen anderen TCP-Verbindungen entfernen. Das sind dann alle ausgehenden Verbindungen. Der Befehl ss (Socket-Status) gibt die Spalten "Local Address: Port" und "Peer Address: Port" aus. Wir müssen die empfangsbereiten Ports aus der Spalte "Local Address: Port" und nicht aus der Spalte "Peer Address: Port" entfernen. Andernfalls verpassen Sie möglicherweise einige ausgehende Verbindungen. Um dies zu erreichen, verwende ich
\s{2}+
im grep die Zeichenfolge ": $ port", um die Leerzeichen zuzuordnen, die hinter der Spalte "Lokale Adresse: Port" vorhanden sind. Diese Spalte hat zwei oder mehr Leerzeichen dahinter, wobei die "Peer-Adresse: Port" ein Leerzeichen und dann eine neue Zeile (grrr ... sollte nur eine neue Zeile haben, IMO,\s+
\s{2}+
Normalerweise könnte ich versuchen, die Filterfunktionalität von ss zu verwenden, wie mitss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>
. Aber es scheint eine Grenze für die Länge dieser Zeichenfolge zu geben, sie ist auf einem System ausgebombt, auf dem ich viele Abhörports hatte. Also versuche ich dasselbe mit grep zu machen. Ich glaube das folgende wird funktionieren:Beachten Sie, dass dies von der Version von ss abhängt, die Sie verwenden. Ältere Versionen (wie z. B .: ss utility, iproute2-ss111117) haben ein anderes Ausgabeformat. Daher müssen Sie in awk möglicherweise $ 3 anstelle von $ 4 verwenden. Beachten Sie auch
ss -tln
undss -tn state listening
gibt Ihnen andere Ausgabe, die für mich ein wenig kontraintuitiv ist. YMMV.Ich habe eine etwas elegantere Lösung gefunden, die keine Kenntnis der Host-IP erfordert. Sie
ss -tn state established dst :*
funktioniert gut. Ich habe die obigen Befehlszeilen geändert.quelle
ss -tn state listening
auf einem Host, auf dem ein FTP-Server ausgeführt wird, und natürlich zeigte der Befehl, dass der Computer Port 21egrep -v
überwacht "," 211 "," 212 ", ...)? Auch ist dasasort
wirklich notwendig, oder nur die Schaufensterdekoration?ss --out
, um eine Liste der ausgehenden Verbindungen abzurufen.tcpdump
Ermöglicht es Ihnen, den gesamten IP-Datenverkehr zu / von einer bestimmten Schnittstelle zu sehen und nach bestimmten Kriterien zu filtern.tcpdump
wird in der Regel standardmäßig auf den meisten * nix-Systemen installiert, andernfalls gibt es normalerweise irgendwo einen Port, um ihn für Ihre spezifische Distribution abzurufen.quelle
netstat
ist eine gute Option. Verwenden Sie die erforderlichen Parameter (siehe Manpages). Zum BeispielHier kann es alle (a) hörenden numerischen (n) tcp (t) und udp (u) Prozesse (p) überwachen.
Sie können auch den
ss
Befehl versuchen . Als referenz verwenden:SS Linux TCP / UDP Netzwerk- und Socket-Informationen
quelle
Wenn Sie Solaris oder ein Derivat ausführen, schauen Sie sich conntrack an
quelle