Vorwort Linux verfügt über entsprechende Open-Source-Tools, um Netzwerkverbindungen, Prozesse und andere Informationen in Echtzeit zu erfassen. Die Netzwerkverbindung umfasst im Allgemeinen die grundlegendsten Fünf-Tupel-Informationen (Quelladresse, Zieladresse, Quellport, Zielport, Protokollnummer) sowie die Prozessinformationen (PID, EXE, Befehlszeile) usw. Die meisten dieser beiden Daten können direkt aus den Netzwerkstatus-Verbindungsdateien (/proc/net/tcp, /proc/net/udp) im Linux-Verzeichnis /proc und dem Prozessstatusverzeichnis (/proc/pid/xx) gelesen werden. In einigen Anwendungssicherheitsszenarien ist es erforderlich, Daten wie Prozessnetzwerkverbindungen, eingehenden und ausgehenden Datenverkehr zu kombinieren, um zu analysieren, ob im Intranet böswillige Übertragungen vertraulicher Daten stattfinden. Bei der Netzwerküberwachung wird festgestellt, dass eine große Menge an Serverbandbreite belegt ist, aber es ist nicht klar, welcher spezifische Prozess im System diese belegt. Hierzu ist es erforderlich, detailliertere Netzwerkverkehrsdaten auf Prozessebene zu erhalten, um eine umfassende Analyse zu ermöglichen. Netzwerkdaten auf Hostebene finden Sie im Linux-Proc-Verzeichnis. Beispielsweise bietet /proc/net/snmp detaillierte Daten zu den IP-, ICMP-, ICMPMsg-, TCP- und UDP-Ebenen des Hosts. Die Felder InBcastPkts, OutBcastPkts, InOctets und OutOctets in der Datei /proc/net/netstat geben die Anzahl der gesendeten und empfangenen Pakete sowie die Byte-Daten der empfangenen Pakete an. Leider sind keine Daten zum ein- und ausgehenden Netzwerkverkehr auf Prozessebene vorhanden. Zu diesem Zweck verwenden wir das Nethog-Prinzip, um eine Methode zur Zählung des Netzwerkverkehrs auf Prozessebene zu implementieren. Basisdaten Die folgenden Verzeichnisse oder Dateien sind betroffen: Netzwerkstatusdateien /proc/net/tcp, /proc/net/udp und Prozessdateideskriptorverzeichnis /proc/pid/fd. Netzwerkstatusdatei /proc/net/tcp Wir konzentrieren uns auf das 5-Tupel + Status + Inode-Nummer in der 2., 3., 4. und 11. Spalte. Die 23. Spalte ist die Host-Byte-Reihenfolge IP:Port, zum Beispiel "0500000A:0016" -> "10.0.0.5", 22 Die 4. Spalte enthält die Statusinformationen. Die Bedeutung des Statusfeldes ist wie folgt:
Die 11. Spalte ist die Inode-Nummer eines Dateisystemobjekts im Linux-Systemdateisystem, einschließlich Metadaten von Dateien, Verzeichnissen, Gerätedateien, Sockets, Pipes usw. Prozessdateideskriptoren Das Verzeichnis /proc/pid/fd listet die vom aktuellen Prozess geöffneten Dateiinformationen auf, wobei 0, 1 und 2 für Standardeingabe, -ausgabe und -fehler stehen. Die Netzwerkverbindung ist ein Dateideskriptor, der mit „socket:“ beginnt, wobei die Inode-Nummer in Klammern [] steht, die der Inode-Nummer in der Netzwerkstatusdatei /proc/net/tcp entspricht. Am Beispiel des Prozesses pid:25133 lauten die Dateideskriptoren 10 und 12 und die entsprechenden Inode-Nummern sind 512505532 bzw. 512473483. Gleichzeitig finden Sie in der folgenden Abbildung detaillierte Informationen zu den entsprechenden Verbindungen in /proc/net/tcp. Basierend auf den obigen Dateiinformationen kann eine Zuordnung der Netzwerkverbindung Quintupel -> Inode von /proc/net/tcp aus hergestellt werden, während eine Zuordnung der Verbindung Inode -> Prozess von /proc/pid/fd aus hergestellt werden kann. Auf diese Weise wird die Inode-Nummer als Brücke verwendet, um die Prozesse im System mit den Netzwerkverbindungsinformationen zu verknüpfen. Implementierungsprozess Um den Netzwerkverbindungsverkehr in Echtzeit abzurufen, wird auf dem Linux-Host die Open-Source-Bibliothek libpcap zum Erfassen von Netzwerkpaketen verwendet. Nachfolgend sehen Sie das vollständige Implementierungsflussdiagramm, das die folgenden fünf Schlüsselschritte umfasst. Paketerfassung Verwenden Sie die Libpcap-Bibliothek, um die Netzwerkpaketstruktur zu erhalten. Analysieren der Nachricht Analysieren Sie die Fünf-Tupel-Informationen (Quelladresse, Zieladresse, Quellport, Zielport, Protokollnummer) des Pakets und die Verkehrsgröße des aktuellen Pakets. Cache-Aktualisierungen Suchen Sie nach der Inode-Nummer, die dem Schlüssel entspricht, der aus dem Fünfer-Tupel in ConnInodeHash besteht. Wenn sie nicht existiert, lesen Sie /proc/net/tcp und udp erneut, aktualisieren Sie den ConnInodeHash-Cache, stellen Sie die Zuordnung zwischen der Verbindung und dem Inode her und lesen Sie das Verzeichnis /proc/pid/fd erneut, um alle Dateideskriptoren zu durchlaufen und die Verbindungen herauszufiltern, die mit socket: beginnen. Aktualisieren Sie den InodeProcessHash-Cache und stellen Sie die Zuordnung zwischen dem Inode und dem Prozess erneut her. Hash-Suche Suchen Sie anhand der gefundenen Inode-Nummer die entsprechende Prozess-PID in InodeProcessHash. Verkehrsstatistiken Anhand der Nachrichtenadresse wird die Netzwerkverbindungsrichtung bestimmt und die Zufluss- und Abflussdaten des Prozesses akkumuliert. Zusammenfassen Erfassen Sie Pakete auf Linux-Hosts und implementieren Sie eine feinkörnige Methode zur Erfassung des Netzwerkverkehrs auf Prozessebene, indem Sie Netzwerkstatusdateien und Prozessdateideskriptoren kombinieren. Durch die Verwendung der Linux-Datei-Inode-Nummer als Brücke kann die Beziehung zwischen dem Prozess und der Netzwerkverbindung verknüpft werden. Der Gesamtbetrag/Durchschnittswert des empfangenen/gesendeten Prozesses und andere Dimensionsdaten können gezählt werden, und die Verkehrsdaten jeder Netzwerkverbindung des Prozesses können ebenfalls analysiert werden. Diese können als wichtige Grundlage für die Analyse der Host-Verkehrssicherheit, die Netzwerküberwachung und Fehlerbehebung und andere Szenarien dienen. Es sollte jedoch auch beachtet werden, dass das kontinuierliche Erfassen von Paketen durch libpcap sich nachteilig auf die Hostleistung auswirkt. Oben ist der vom Herausgeber vorgestellte Implementierungsprozess der Netzwerkverkehrsstatistik für Linux-Prozesse. Ich hoffe, er ist für alle hilfreich. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! |
<<: Ubuntu 15.04 öffnet den MySQL-Remote-Port 3306
Eine mit HTML und CSS implementierte Registrierun...
<br />Originalquelle: http://www.a-xuan.cn/?...
Vue+Openlayer verwendet „modify“, um Elemente zu ...
Lösung, wenn MySQL nicht geschlossen wird: Klicke...
Inhaltsverzeichnis 1. Schalter 2. While-Schleife ...
Zu den Indextypen von MySQL gehören Normalindex, ...
In diesem Artikelbeispiel wird der spezifische Co...
Zwei Implementierungen der Vue-Dropdown-Liste Die...
Inhaltsverzeichnis Vorwort 1. NJS-Modul installie...
In diesem Artikelbeispiel wird der spezifische Co...
Die Kenntnis der IP-Adresse eines Geräts ist wich...
Inhaltsverzeichnis 1 Versprechen Unterbrechen Sie...
Inhaltsverzeichnis Anforderung: Abfrage laufender...
Befehle zur Linux-Onlineinstallation: yum install...
In diesem Artikelbeispiel wird der spezifische Co...