it-swarm.com.de

Wie kann ich alle ausgehenden Anforderungen / Verbindungen von meinem Computer überwachen?

Mein Computer ist ein Server, daher möchte ich Verbindungen zu meinem Server ignorieren (z. B. wenn jemand meine Website besucht). Ich möchte sehen, dass nur Verbindungen/Anfragen von meinem Server zu anderen Orten hergestellt werden.

Wie sehe ich nur diese ausgehenden Verbindungen?

EDIT: Ich bin neu in dieser Art von Dingen. Ich versuche nur zu sehen, ob etwas von meinem Server gesendet wird, außer Daten für meine Web-Apps. Wenn zum Beispiel jemand meine Websites besucht, sendet mein Server offensichtlich Daten an den Browser des Clients. Angenommen, irgendwo im Framework meiner Web-App befindet sich auch Code, der statistische Daten an einen anderen Ort sendet, den ich nicht kenne. Ich würde gerne sehen, an welche Orte mein Server Daten sendet, falls vorhanden. Es ist wahrscheinlich nicht wahrscheinlich, aber nehmen wir an, Sie entscheiden sich für ein PHP- oder NodeJS-Framework, das Sie nicht geschrieben haben: Es besteht eine geringe Wahrscheinlichkeit, dass es irgendwo irgendeine Art von Daten sendet. Wenn ja, würde ich das gerne sehen.

80
trusktr

Verwenden Sie netstat. Zum Beispiel

$ netstat -nputw
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
[...]
tcp        0      0 192.168.25.222:22       192.168.0.134:42903     ESTABLISHED 32663/sshd: gert [p

listet alle ausgehenden UDP- (u), TCP (t) und RAW- (w) Verbindungen auf (ohne l oder a) in numerischer Form (n, verhindert mögliche lang laufende DNS-Abfragen) und enthält das damit verbundene Programm (p).

Erwägen Sie, die Option c hinzuzufügen, damit die Ausgabe kontinuierlich aktualisiert wird.

83
gertvdijk

Wenn Sie nur jeden Verbindungsversuch protokollieren möchten, ist das einfachste Ziel wahrscheinlich iptablesLOG unter Linux (oder die entsprechende Firewall-Protokollierungsfunktion auf Ihrem System).

Wenn Sie weitere Informationen wie die Dauer der Verbindung und die in beide Richtungen ausgetauschte Datenmenge benötigen, ist conntrackd (unter Linux) wahrscheinlich die beste Option.

Beachten Sie jedoch, dass diese beiden oben genannten Daten nur den Datenverkehr protokollieren, der durch netfilter geleitet wird. Dies ist im Allgemeinen der gesamte Datenverkehr, berücksichtigt jedoch nicht den Datenverkehr, der mit IP-Stacks im Benutzerbereich (wie virtuelle Maschinen oder alles, was Raw-Sockets verwendet) oder überbrückten Datenverkehr generiert wird.

Für allgemeinere Lösungen können Sie sich Dinge wie argus, bro-ids, sancp oder ntop ansehen, die alle Arten von Informationen basierend auf dem Datenverkehr protokollieren an einer Schnittstelle schnüffeln.

12

Ich habe eine Reihe von Tools ausprobiert, darunter iftop, ntop, iptraf und natürlich das sehr nützliche integrierte netstat -tupln (unterstützte Optionen sind vom Betriebssystem abhängig), aber der praktischste für meinen Anwendungsfall stellte sich als nethogs heraus - es aggregiert Verbindungen von der ursprünglichen App und ist am wenigsten verrauscht von allen.

Installierbar über:

Sudo apt-get install nethogs

Als root ausführen:

Sudo nethogs

Wenn Sie nur alle TCP - Verbindungen sehen möchten, die von einer App initiiert wurden, können Sie Folgendes verwenden:

Sudo tcpdump -i lo -A | grep Host:
11
ccpizza

Ich denke, Sie möchten eine Liste der Überwachungsports abrufen und diese dann von allen anderen TCP -Verbindungen) entfernen. Dies sind dann alle ausgehenden Verbindungen. Der Befehl ss (Socket-Status) Wenn Sie die Spalten "Lokale Adresse: Port" und "Peer-Adresse: Port" ausgeben, müssen Sie die Überwachungsports aus der Spalte "Lokale Adresse: Port" und nicht aus der Spalte "Peer-Adresse: Port" entfernen, da Sie sonst möglicherweise einige ausgehende Verbindungen verpassen Um dies zu erreichen, verwende ich \s{2}+ Hinter der Zeichenfolge ": $ port" im grep, um mit den Leerzeichen übereinzustimmen, die hinter der Spalte "Local Address: Port" vorhanden sind. Diese Spalte enthält zwei oder mehr weiße Zeichen Leerzeichen dahinter, wobei die "Peer-Adresse: Port" ein Leerzeichen und dann eine neue Zeile enthält (grrr ... sollte nur eine neue Zeile haben, IMO, dann hätte ich \s+ anstelle von \s{2}+.) Normalerweise könnte ich versuchen, die Filterfunktion von ss zu verwenden, wie bei ss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>. Aber es scheint, dass es eine Grenze für die Länge dieser Zeichenfolge gibt. Sie wurde auf einem System bombardiert, auf dem ich eine hatte viel lis Tening Ports. Also versuche ich das gleiche mit grep zu machen. Ich glaube, dass Folgendes funktionieren wird:

FILTER=$(ss -tn state listening | gawk 'NR > 1 {n=split($3,A,":"); B[NR-1]=A[n]} END {for (i=1; i<length(B); i++) printf ":%s\\s{2}+|", B[i]; printf ":%s\\s{2}+", B[i]}')

ss -tn state established dst :* | grep -P -v "$FILTER"

Beachten Sie, dass dies von der Version von ss abhängt, die Sie verwenden. Ältere Versionen (wie das Dienstprogramm ss, iproute2-ss111117) haben ein anderes Ausgabeformat, sodass Sie in awk möglicherweise 3 USD anstelle von 4 USD verwenden müssen. Beachten Sie auch, dass ss -tln Und ss -tn state listening Ihnen unterschiedliche Ausgaben liefern, was für mich etwas kontraintuitiv ist. YMMV.

Ich habe eine etwas elegantere Lösung gefunden, bei der die IP des Hosts nicht bekannt sein muss. ss -tn state established dst :* Funktioniert gut. Ich habe die obigen Befehlszeilen geändert.

7
Dale

Mit tcpdump können Sie den gesamten IP-Verkehr sehen, der zu/von einer bestimmten Schnittstelle fließt, und nach bestimmten Kriterien filtern. tcpdump wird normalerweise standardmäßig auf den meisten * nix-Systemen installiert. Wenn nicht, gibt es normalerweise irgendwo einen Port, an dem Sie ihn für Ihre spezifische Distribution abrufen können.

4
txtechhelp

netstat ist eine gute Option. Verwenden Sie die Parameter nach Bedarf (siehe Manpages). Zum Beispiel

netstat -antup

Hier kann es alle (a) hörenden numerischen (n) tcp (t) und udp (u) Prozesse (p) überwachen.

Sie können auch den Befehl ss ausprobieren. Als Referenz verwenden:

SS Linux TCP/UDP-Netzwerk- und Socket-Informationen

2
Kratos

Wenn Sie Solaris oder ein Derivat ausführen, schauen Sie sich conntrack an

1
jlliagre