Golang Docs modules modules/subsystems
Um ein klares Konzept und Code Struktur zu erhalten, sind die Portmaster Core Services in viele Module augeteilt. Alles das einem bestimmten Zweck dient ist normalerweise ein seperates Modul. Das hält den Code sauber und macht es leichter eine hohe Qualität der Software zu erhalten und zu bauen.
Das Modul Management ist verantwortlich für das Verbereiten, Starten und Stoppen aller Module in der korrekten Reihenfolge und stellt auch Dienstprogramme zur verfügung um den Modulbetrieb sicherzustellen. Diese erlauben einem Modul schnell einen sicheren Arbeiter oder eine sich wiederholende Aufgabe zu starten. Der Modul Manager
Zur Vereinfachung werden mehrere kleine Module in größere zusammengefasst - wie "Privacy Filter", "Secure DNS", etc. In dem Code werden diese "großen Module" Subsystems
gennant, während sie im Marketing und anderen Kontexten einfach "Module" heißen.
Golang Docs log
Protokolle zu schreiben ist wichtig um zu verstehen was passiert und sind von großer Unterstüzung wenn man herausfinden will was falscht läuft.
Es nutzt ein geleveltes Protokoll System, um die Menge an Information die gespeichert wird zu regulieren. Auf dem trace
Level, können Protokolle zu einem Kontext angefügt werden, welche dann in einen Stapel geschrieben werden um Protokolle von einer Operation zusammenzufügen. Das ist nützlich, da der Portmaster Core Service vieles gleichzeitig macht, daher kann es schwierig werden Protokollzeilen zu einer bestimmten Operation zuzuordnen.
Du kannst das Protokoll Level in den Einstellungen konfigurieren oder es in der cmdLine setzen mit dem --log
Argument.
Du kannst gespeicherte Protokolldateien in dem logs
Verzeichnis in der data root anschauen.
So könnten Protokolle aussehen.
210112 12:58:38.691 er/storage:096 ▶ DEBU 013 updates: loaded index stable.json
210112 12:58:38.700 api/router:065 ▶ INFO 050 api: starting to listen on 127.0.0.1:817
210112 12:59:19.785 connection:539 ▶ INFO 723 filter: connection user:/usr/lib/firefox/firefox:2854 to www.orf.at. ([REDACTED]) accepted: default permit Σ=7.728613ms
6.114µs terception:092 ▶ TRAC filter: handling packet: OUT TCP [REDACTED]
4.344452ms ocess/find:022 ▶ TRAC process: getting pid from system network state
6.696µs ss/process:095 ▶ TRAC process: getting process for PID 2854
21.753µs ss/profile:025 ▶ TRAC process: profile already loaded
39.661µs terception:102 ▶ TRAC filter: created new connection [REDACTED]
5.436µs terception:234 ▶ TRAC filter: handing over to connection-based handler
9.038µs terception:271 ▶ TRAC filter: starting decision process
169.189µs tel/entity:300 ▶ TRAC intel: CNAME filtering enabled, checking [] too
4.986µs tel/entity:317 ▶ TRAC intel: loading domain list for www.orf.at.
2.982395ms tel/entity:317 ▶ TRAC intel: loading domain list for orf.at.
10.52µs tel/entity:371 ▶ TRAC intel: loading ASN list for 5403
4.124µs tel/entity:429 ▶ TRAC intel: loading IP list for [REDACTED]
22.082µs tel/entity:396 ▶ TRAC intel: loading country list for AT
102.167µs all/master:355 ▶ TRAC filter: LMS score of eTLD+1 orf.at is 100.00
Golang Docs dataroot
Source Code utils/structure.go
Die Portmaster Applikation behält alles was sie braucht in einem einzigen Verzeichnis. Auf Windows ist es %PROGRAMDATA%\Safing\Portmaster
und auf Linux /opt/safing/portmaster
.
Das dataroot
ist kein Modul, sondern ein kleines Dienstprogramm das einfachen Zugriff darauf berreitstellt. Es nutzt das DirStructure
Dienstprogramm um zu versichern das alle Verzeichnisse immer die korrekten Datei System Erlaubnisse hat.
Merke: Alles in einem einzigen Verzeichnis strukturiert zu haben, hat viele Vorteile.
Allerdings wissen wir das manche Betriebssysteme es nicht mögen wenn live Daten (Datenbanken
) mit exekutiven Daten (updates
) gemixt werden. Wir plannen das in Zukunft zu verbessern.
Golang Docs api
Das API stellt Schnittstellen für alle anderen Software Komponenten zur Verfügung, wie die Portmaster UI mit dem Portmaster Core Service interagiert. Die Portmaster UI und der Notifier (System Tray Aplett) nutzen das API um Einstellungen zu ändern und abonnieren zu Daten Änderungen via dem Datenbank API.
Golang Docs Datenbank
Die Datenbank bietet eine Persistenzeschicht. Dieses Schlüssen/Werk Lager bietet eine einheitliche Schnittstelle um Daten zu speichern, zu lesen und zu updaten. Es Unterstützt begrenzte Datenspeicher sowie virtuelles Datenbank-Backends. Das Modul inkludiert außerdem eine einfache Erlaubnisschicht um wichtige Vermögenswerte zu schützen.
Es gibt inkludierte Daten interaktions Helfer für Abfragen, Massenoperationen, abonnieren zu Datenbankänderungen und Haken. Das Lesen und Schreiben von Zwischenspeichern verbessert die Leistung von langsamen Geräten.
Der Portmaster Core Service nützt folgende Datenbanken:
core
: Hauptspeicher für Appeinstellungen.cache
: Für alle zwischengespeicherten Daten, kann automatisch wiederhergesellt werden, falls sie verloren werden.runtime
: Virtuelle Datenbank die die interne Laufzeit Daten verfügbar macht um von den Datenbank Schichten zu profitieren.config
: Virtuelle Datenbank die dir leichten Zugriff auf die Konfiguration und die damit verbunden Metadaten gibt.network
: Virtuelle Datenbank die die ganze Netzwerkaktivität für das überwachen in der App verfügbar macht.Wenn du den Entwicklermodus Aktiviert hast, kannst du auf die ganzen Daten dieser Datenbanken zugreifen, direkt via der Dev Konsole, welche auf http://127.0.0.1:817/ui/modules/console/ verfügbar ist.
Golang Docs rng
Dieses Modul setzt das Fortuna PRNG von Ferguson und Schneier ein.
Es erzeugt die Zufallälligkeit von der Standard Betriebssystem Schnittstelle und den Portmaster Core Service Module, Welche leicht und sicher Zufällige Daten in den RNG aufnehmen können. Das versichert starke Verschlüsselung in dem Fall einer Schwachstelle des Betriebssystems PRNG. Am prominentesten, das SPN wird geheime zufällige Daten (z.B. nonces oder padding) erhalten und von SPN nodes einfügen.
Die erstellte Zufälligkeit wird dann von aneren Modulen genutzt, wo auch immer Zufälligkeit benötigt wird. Beispiele sind das wählen von zufälligen ports für DNS Anfragen oder das generieren von sichernen cookies/zugriffs Tokens.
Golang Docs Benachrichtigungen
Das Benachrichtigungs Modul behandelt Benachrichtigungen: Diese reichen von informations Nachrichten bis hin zu wichtigen, umgesetzen Gegenständen.
Dieses Model behandelt außerdem Verbindungs Aufforderungen, obwohl diese seperat in der Portmaster UI. angezeigt werden.
Auf Windows ist der Benachrichtiger (System Tray Applet) mit dem Windows Benachrichtigungscenter verunden um Benachrichtigungen via den nativen Schnittstellen anzuzeigen. Wir benuzten SnoreToast als ein Helfer um Benachrichtigungen zu senden.
Auf Linux sendet der Benachrichtiger (System Tray Applet) Benachrichtigungen zu dem Benachrichtigungs Server via D-BUS, was normalerweise von deiner Distribution bereitgestellt wird.
Merke: Desktop Nachrichtigungen können in den Einstellungen deaktiviert werden.
Das Update System versichert das alle benötigten Resourcen zugänglich und am neusten Stand sind. Resourcen beinhalten: executables, UI assests, Filter Listen.
Das Update System behält die zugänglichen versionen im Auge und läd automatisch neue Resourcen Versionen herunter. Mehrere Versionen werden Lokal behalten, falls ein upgrade kaputtgeht und es ein Zurückgehen benötigt.
Die Kommunikation mit dem Update Server ist immer verschlüsselt und Authetifiziert
Merke: In der Zukunft, werden alle Resourcen die via einem Update Rahmen berreitgestellt wurden auch cryptographisch signiert, als eine zusätzliche Schutz Schicht.
Derzeit wird jede Stunde nach Updates geprüft. Diese Frequenc wurde gewählt um am neusten Stand zu bleiben mit den sich ständig änderdend Landschaften von maleware/traker/phishing domains verwaltet von den verschiedenen Filter Listen. Kudos zu jedem der exzellente Arbeit in diesem Feld leistet!
Merke: Du kannst immer die derzeitigen aktiven und verfügbaren Versionen in dem Portmaster UI sehen.
Golang Docs ui
Die UI Server Modul dient UI Resourcen und verfügt lokal auf port 817
.
Das ist wo das Portmaster UI seine Resourcen erhält - sie werden direkt von dem Portmaster Core Service geladen. Allerdings kannst du mit dem Entwickler Modus aktiviert, das Portmaster UI in deinem Browser öffnen via http://127.0.0.1:817/.
Bitte beachte das manche (nicht wichtigen) Funktione wie Appkikations Icons auf Windows nicht im browser funktionieren, da sie auf dem Portmaster UI beruhen.
Golang Docs Dienstprogramme Dienstprogramme/Betriebssystem Details Dienstprogramme/debug
Obwohl es kein Modul ist, ist es Wert zu erklären wo wir unsere internen Dienstprograme sammeln welche über die Module verwendet werden. Diese inkludieren Hilfe Funktionen, Betriebssystem Spezifische Schnittstellen und ein kleines Dienstprogramm um informationen zu sammel und Debugging Information zu formatieren.