FAQ – Produkty dla firmy (biznesowe) :
- Jak skonfigurować uwierzytelnianie dwuskładnikowe dla konsoli GravityZone w chmurze przy pomocy aplikacji Google Authenticator
- Jak usunąć przestarzałe punkty końcowe w konsoli GravityZone (konsola w chmurze)
- Jak cicho odinstalować chronionego hasłem agenta Endpoint Security dla MacOS
- Najczęściej zadawane pytania dotyczące migracji do Bitdefender Endpoint Security Tools w wersji 7
- Wsparcie Bitdefender Endpoint Security Tools dla urządzeń z procesorem Apple M1
- Jak zaktualizować TLS do wersji 1.2 oraz dlaczego jest to istotne dla funkcjonalności Bitdefender Endpoint Security Tools?
- Jak ręcznie zaktualizować Bitdefender Endpoint Security Tools (BEST)
- Telnet – Jak sprawdzić połączenie z serwerem licencyjnym
- Wsparcie Bitdefender dla przestarzałych rozszerzeń jądra w macOS
- Lista zmian dla aktualizacji z Marca 2020 – GravityZone (wersja Cloud)
Przegląd Integracji
CEF (Common Event Format (Wspólny Format Zdarzeń)) jest rozciągliwym, bazującym na tekście formatem używanym przez zarządzanie dziennikiem. Bitdefender GravityZone jest teraz w stanie dostarczać alerty używając standardu CEF poprzez integrację z Twoim ESM.
W tym przykładzie standardowej integracji z CEF, komunikacja pomiędzy GravityZone i ESM jest zrobiona przez Node.js Connector. Złącze to używa metody POST, aby odbierać uwierzytelnione żądania z GravityZone Event Push Service API. Żądania są analizowane, a następnie przekazywane dalej do lokalnego, zdalnego serwera Syslog.
Warunki wstępne
– Serwer Ubuntu 16.04
– Zainstalowany Node.js w wersji 8.1.x lub nowszy
Wiadomość HTTP
Event Push Service Request Header
Authorization: {authorization_string}
Event Push Service Payload
{
"cef": "0",
"events": [
"CEF:0|Bitdefender|GravityZone|6.4.0-8|70000|Registration"3"BitdefenderGZModule=registration
dvchost=TEST_ENDPOINTasdad BitdefenderGZComputerFQDN=testendpoint.dsd.ro dvc=10.10.18.227 ",
"CEF:0|Bitdefender|GravityZone|6.4.0-8|35|Product Modules
Status|5|BitdefenderGZModule=modules dvchost=TEST_ENDPOINTasdad
BitdefenderGZComputerFQDN-test-endpoint.dsd.ro dvc=10.10.18.227
",
"CEF:0|Bitdefender|GravityZone|6.4.0-8|35|Product Modules
Status|5|BitdefenderGZModule=modules dvchost=TEST_ENDPOINTasdad
BitdefenderGZComputerFQDN=test-endpoint.dsd.ro dvc=10.10.18.227 "
]
}
Tworzenie Złącza Node.js
Aby zbudować Złącze Node.js, podążaj za tymi krokami:
Krok 1: Utwórz folder dla złącza.
Utwórz katalog na swoim serwerze, na którym chciałbyś umieścić aplikację.
Krok 2: Utwórz plik package.json
Utwórz nowy plik nazwany package.json w następujący sposób:
{ "name": "app-name", "version": "1.0.0", "description": "client that will be able to receive authenticated POST request and write each row in the local or remote syslog", "main": "server.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "MIT", "dependencies": { } }
Krok 3: Sprowadź zależności
– Express framework
Express jest minimalną i elastyczną strukturą aplikacji WWW Node.js, która zapewnia solidny zestaw funkcji dla aplikacji internetowych, oraz mobilnych.
Użyj Express, aby utworzyć serwer http, a następnie wprowadź następujące polecenie, aby umieścić go w pliku package.json:
$ npm install express --save
– Analizator składniowy body
Postępuj zgodnie z instrukcjami oprogramowania pośredniego analizowania treści body Node.js, aby przeanalizować przychodzące żądania body w oprogramowaniu pośrednim przed procedurami obsługi dostępnymi pod właściwością req.body.
$ npm install body-parser --save
– Klient Syslog
Postępuj zgodnie z instrukcjami modułu klienta Syslog, aby wysyłać powiadomienia o zdarzeniach w sieciach.
$ npm install syslog-client --save
Krok 4: Utwórz plik config.json
Plik ten zawiera informacje konfiguracyjne używane podczas uruchamiania server.js. Użyj następującej ścieżki w celu konfiguracji pliku:
APP_ROUTE/api/config
Zmienne plików:
authentication_string : używane w server.js w celu sprawdzania poprawności wartości z req.headers.autgorization
target : adres IP Twojego klienta syslog.
transport : poprawne wartości dla transportu (TCP/UDP), używane również do konfigurowania klienta syslog.
syslog_port : port TCP, lub UDP do wysyłania wiadomości.
port 3200 : Start serwera na porcie 3200
Przykład:
{ "port": 3200, "syslog_port": 515, "transport": "Tcp", "target": "10.17.23.68", "authentication_string": "Basic dGVzdDp0ZXN0" }
Krok 5: Utwórz plik server.js
Wymagane zależności aplikacji:
server.js // Wymaga express'a i utworzenia jego instancji const express = require('express'); const app = express(); Require node File System module const fs = require('fs'); // Wymaga analizatora body i utworzenia instancji json analizatora tekstu const bodyParser = require('body-parser'); const textParser = bodyParser.json(); // Wymaga epsSyslogHelper -> ta część będzie wyjaśniona poniżej const epsSyslogHelper = require('./api/epsSyslogHelper');
1. Wczytaj plik konfiguracyjny. Ścieżka pliku konfiguracyjnego jest odbierana jako parametr na uruchomionym serwerze węzłowym.
node server.js {ścieżka dla pliku konfiguracji}
server.js if (!process.argv[2]) { throw "Missing input file parameter"; } let configPath = process.argv[2]; const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
2. Sprawdź req.header.authorization
Jeśli autoryzacyjny łańcuch znaków jest taki sam jak z twojego pliku konfiguracyjnego, kontynuuj. W przeciwnym razie wpisz not return, aby zatrzymać wykonywanie
3.
server.js // użyj podstawowej autoryzacji HTTP do zabezpieczenia interfejsu api app.use('/api', (req, res, next) => { console.log(req.headers.authorization); // sprawdź podstawowy nagłówek autoryzacji if (!req.headers.authorization) { return res.status(401).json({ message: 'Missing Authorization Header' }); } // zweryfikuj poświadczenia autoryzacji const authorizationString = req.headers.authorization; if (config.authentication_string !== authorizationString) { return res.status(401).json({ message: 'Invalid Authentication Credentials' }); } next(); });
4. Dodaj trasę, która odpowiada na żądanie przychodzące z inrfejsu Event Push Service API. Zaktualizuj body i zaloguj się za pomocą epsSyslogHelper.js
server.js // url: http://{server_url}:{port}/api/ app.post('/api', textParser, (request, response) => { const body = request.body; let syslogHelper = new epsSyslogHelper(config); syslogHelper.log(body); response.sendStatus(200); });
5. Ustaw serwer w tryb nasłuchiwania na porcie skonfigurowanym w pliku config.json:
app.listen(config.port, () => console.log(`Listening on port ${config.port}`));
Krok 6: Stwórz plik epsSyslogHelpers.js
Wymagane zależności aplikacji:
1. Włącz serwer Klienta bazujący na pliku konfiguracyjnym.
epsSyslogHelper.js /** * EventConverter class */ EpsSyslogHelper = function (config) { let hostName = os.hostname(); if (!hostName) { hostName = 'localhost'; } let dot = hostName.indexOf('.'); if (dot > 0) { hostName = hostName.substring(0, dot); } console.log('Logging using host name %s', hostName); this._client = syslog.createClient(config.target, { syslogHostname: hostName, port: config.syslog_port, transport: syslog.Transport[config.transport], }); this._client.on('error', function(err) { console.error('Error from syslog network: %s', err); }); };
2. Zaktualizuj wiadomość, oraz dziennik zdarzeń.
epsSyslogHelper.js EpsSyslogHelper.prototype.log = function _log(msg) { let options = { facility: syslog.Facility.Local0, severity: syslog.Severity.Informational }; let events; if(msg.hasOwnProperty('cef')){ //events = msg.params.events; events = msg.events; } if(events){ for(let eventKey in events) { let syslogMessage = events[eventKey]; if(typeof syslogMessage !== 'string') { syslogMessage = JSON.stringify(syslogMessage); } console.log("Event key = " + eventKey + " is = " + syslogMessage); this._client.log(syslogMessage, options, function (err) { if (err) { console.log(err); } else { console.log('Sent to syslog') } }); } } };
Krok 7: Włącz serwer węzłowy
Aby włączyć używając pliku konfiguracyjnego wpisz następujące polecenie:
node server.js {ścieżka_do_pilku_konfiguracyjnego} (w tym wypadku api/config/config.json)
Źródło: https://www.bitdefender.com/support/building-an-event-push-service-api-connector-for-cef-standard-2373.html