A Filebeat és a Logstash két alapvető eszköz, amelyek lehetővé teszik a naplók és adatfolyamok hatékony begyűjtését, feldolgozását és továbbítását különböző rendszerekbe. Az alábbiakban bemutatjuk, hogyan konfigurálhatjuk őket az adatok feldolgozására, beleértve az input forrástól kezdve a kimeneti formátumokig. A folyamat bemutatja a helyi naplók, mint a syslog, valamint az egyéb formátumok, mint az NDJSON feldolgozását.

Először is, mentsük el a jelenlegi filebeat.yml konfigurációs fájlt egy biztonsági mentésre a következő parancs használatával:

bash
$ cp filebeat.yml filebeat.yml.backup

Ezután indítsunk el egy új terminált, amelyben a Logstash fogja figyelni a Filebeat által küldött adatokat. Ehhez futtassuk a következő parancsot a Logstash konfigurációval, amit a második fejezetben hoztunk létre:

bash
$ bin/logstash -f conf.d/beats-mtls.conf --config.reload.automatic

Ezáltal a Logstash folyamatosan megjeleníti a képernyőn a bejövő adatokat. Bár ez ideális tesztelési célokra, a valós környezetben valószínűleg nem lesz praktikus, ha nem tudjuk ilyen gyorsan olvasni az adatokat. Most nézzük meg, hogyan működnek az input és output típusok a Filebeat és Logstash használatával.

A Filebeat többféle input forrást is képes kezelni, amelyek lehetnek helyi fájlok, hálózati adatforrások, vagy külső rendszerek, mint a Redis vagy Kafka. Ezeket az inputokat a filebeat.yml fájlban konfigurálhatjuk, mint ahogy az a korábbi szakaszban is látható volt.

Helyi fájlok olvasása

A Filebeat a konfigurált filestream inputok segítségével gyűjti be a helyi naplófájlokat, és továbbítja azokat a Logstash-nak vagy más kimeneti helyekre. Ha például Rsyslog vagy Syslog-ng használatáról váltunk Filebeat-ra, a folyamat nagyjából hasonló lesz: a Filebeat beolvassa a naplókat, és ha lehetséges, JSON vagy ECS formátumba alakítja őket.

A Filebeat figyelemmel kíséri a fájlok állapotát, és egy regisztrációt (offset registry) tárol arról, hogy hol hagyta abba az olvasást, így nem kell újra feldolgoznia azokat a sorokat, amelyeket már korábban olvasott. A tesztelés érdekében írhatunk egy egyszerű bash szkriptet, amely törli ezt a regisztrációt, így újra beolvashatjuk ugyanazokat a naplókat több alkalommal:

bash
#!/bin/bash
rm -rf data/ ./filebeat -e

A szkript törli a regisztrációt és újraindítja a Filebeat-et. A szkriptet futtathatjuk az alábbi módon:

bash
$ chmod +x clean-and-reload-filebeat.sh

A -e opció segítségével a Filebeat minden kimenetet a hibákhoz (stderr) irányít.

Parserek alkalmazása és új mezők hozzáadása

A parserek a bemeneti adatokat más formátumba alakítják, általában JSON formátumban. Ha például NDJSON adatokat dolgozunk fel, akkor a Logstash terminálján az adat egy nagy blobként jelenik meg a message mezőben. A helyes formázás érdekében érdemes egy parse-ert beilleszteni a filebeat.yml fájlba.

Például:

yaml
filebeat.inputs: - type: filestream id: recon-logs enabled: true paths: - /home/j/example-logs/subfinder*.json - /home/j/example-logs/httpx*.json parsers: - ndjson: target: "processed" add_error_key: true fields_under_root: true fields: threat.tactic.name: "Reconnaissance" threat.tactic.id: "TA0043" threat.technique.name: "Gather Victim Network Information" threat.technique.id: "T1590"

Ebben az esetben a parszer az NDJSON adatokat egy processed mezőbe rendezi, és egyéni mezőket ad hozzá a MITRE ATT&CK keretrendszer alapján. Ez lehetővé teszi, hogy a naplókat a későbbi elemzésekhez vagy szűrésekhez kategorizáljuk.

A Filebeat most már képes az NDJSON adatokat helyesen beolvasni, és más eszközök számára elérhetővé tenni. Az adatok ellenőrzéséhez futtassuk újra a Filebeat törlő szkriptet, majd nézhetjük meg az adatokat a Logstash termináljában.

Új bemeneti források hozzáadása

Most, hogy sikeresen beállítottuk az NDJSON fájlok feldolgozását, próbáljunk meg egy új bemeneti forrást hozzáadni, például helyi syslog fájlokat a /var/log könyvtárból. Ehhez az alábbi beállítást használhatjuk:

yaml
- type: filestream
id: local-syslog-files enabled: true paths: - /var/log/*.log exclude_lines: ['.*UFW.*'] parsers: - syslog: format: auto add_error_key: true

Ebben a konfigurációban egy új bemenetet adunk hozzá, amely a syslog fájlokat olvassa. Az exclude_lines mező segítségével kizárhatjuk a UFW kifejezést tartalmazó sorokat, amelyek az Ubuntu tűzfalát jelentik. A syslog parser automatikusan felismeri a naplók formátumát.

Fontos megjegyzések

A Filebeat és a Logstash használata során figyelembe kell venni, hogy bár a konfiguráció alapvető, az adatok kezelésének és feldolgozásának finomhangolása elengedhetetlen a hatékony munkafolyamatok biztosításához. A rendszer folyamatosan monitorozza és rögzíti az adatokat, miközben segít a hibaüzenetek és az anomáliák gyors észlelésében. A különböző formátumok, mint az NDJSON és a syslog, eltérő kezelésére van szükség, így fontos az eszközök megfelelő konfigurálása a kívánt eredmények eléréséhez.

Hogyan használjuk a tanúsítványokat és a tűzfal beállításokat Elasticsearch és Kibana konfigurációhoz

A tanúsítványok és titkos kulcsok kezelése kulcsfontosságú szerepet játszik minden biztonságos adatforgalmat használó rendszerben. A következőkben bemutatjuk, hogyan állíthatunk be saját aláírt tanúsítványokat és konfigurálhatunk tűzfal szabályokat, amelyek lehetővé teszik, hogy az Elasticsearch és Kibana biztonságos környezetben működjenek.

Először is, el kell végezni a tanúsítvány aláírását az intermedier tanúsítvány kibocsátó segítségével, az alábbi parancs futtatásával:

shell
$ openssl ca -batch -notext -config tls/configs/openssl-intermediateca.cnf -passin pass:abcd1234 -policy signing_policy -extensions flex_cert -out tls/certs/wildcard.local.flex.cert.pem -infiles tls/csr/wildcard.local.flex.csr

Ezt követően ellenőrizhetjük, hogy az OpenSSL helyesen másolta-e át a kiterjesztéseket a tanúsítványba, például az alábbi paranccsal:

shell
$ openssl x509 -in tls/certs/wildcard.local.flex.cert.pem -text -noout

Ellenőriznünk kell, hogy a tanúsítvány kiterjesztései, mint a wildcard és az alternatív nevei (SAN), megfelelően jelennek meg:

ruby
X509v3 Extended Key Usage: TLS Web Client Authentication, TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:*.local, DNS:elasticsearch.local, DNS:elasticsearch

Ezután ellenőrizhetjük a tanúsítványt a hitelesítő lánccal szemben, hogy biztosak legyünk abban, hogy helyesen van aláírva:

bash
$ openssl verify -CAfile tls/certs/ca-chain.cert.pem tls/certs/wildcard.local.flex.cert.pem
certs/wildcard.local.flex.cert.pem: OK

Miután elkészült a tanúsítvány, készíthetünk egy titkosítatlan privát kulcsot, mivel egyes eszközök nem támogatják a titkosított kulcsokat. Ehhez futtassuk az alábbi parancsot:

pgsql
$ openssl rsa -in wildcard.local.flex.key.pem -out wildcard.local.flex.key.nopass.pem

Ezután az Elasticsearch egy kombinált tárolófájlt használhat, amely tartalmazza a tanúsítványt és a hozzá tartozó privát kulcsot. Az alábbi paranccsal létrehozhatjuk a PKCS#12 fájlt:

shell
$ openssl pkcs12 -export -inkey tls/keys/wildcard.local.flex.key.pem -in tls/certs/wildcard.local.flex.cert.pem -passin pass:abcd1234 -out tls/certs/wildcard.local.flex.pkcs12 -passout pass:abcd1234

A PKCS#12 fájl most már készen áll az Elasticsearch számára. Ne felejtsük el elmenteni az OpenSSL konfigurációt és bármilyen jegyzetet a Git tárolóban.

Miután a tanúsítványok és kulcsok elkészültek, szükség van a tűzfal szabályok konfigurálására is, hogy biztosítsuk az eszközök közötti kommunikációt. Az Uncomplicated Firewall (UFW) használata esetén az alábbi parancsokkal adhatunk hozzá engedélyezett portokat:

shell
$ sudo ufw allow 22,9200,5044,5601,8220,8221/tcp

A Firewalld használata esetén egyetlen parancsot futtathatunk minden port hozzáadásához:

shell
$ sudo firewall-cmd --permanent --add-port={22,9200,5044,5601,8220,8221}/tcp

Az említett portok között a 5044 a Logstash portja, a 9200 az Elasticsearch kapcsolataihoz, a 5601 a Kibana webes felületéhez, és a 8220, 8221 pedig az Elastic Agent kommunikációjához szükséges.

A következő lépés a DNS konfigurálása. Az operációs rendszerek hosts fájljának módosításával biztosíthatjuk, hogy a különböző eszközök könnyen elérhetők legyenek a megfelelő IP-címeken. Az alábbi példa bemutatja, hogyan kell ezt megtenni:

lua
192.168.8.130 elasticsearch01 192.168.8.130 elasticsearch01.local 192.168.8.130 kibana 192.168.8.130 kibana.local 192.168.8.130 elasticagent 192.168.8.130 elasticagent.local 192.168.8.131 fleet 192.168.8.131 fleet.local 192.168.8.131 logstash 192.168.8.131 logstash.local

Miután az IP-címek helyesen vannak beállítva, a további lépés a szükséges eszközök telepítése. Javasolt legalább két Ubuntu virtuális gép használata, amelyek közül az egyik Elasticsearch, Kibana és Elastic Agent példányt futtat, míg a másik Logstash-t és az Elastic Agent Fleet szervert. Ha erőforrások korlátozottak, akkor a telepítéseket egyetlen gépen is végezhetjük, de fontos, hogy legalább két különböző virtuális gépen futtassunk Elastic Agent példányokat, mivel két Elastic Agent nem futhat ugyanazon a gazdagépen.

Ez a konfiguráció segít a valós környezetekben való munkához szükséges eszközök és szolgáltatások elosztásának megértésében. Ha mindezt különböző gépeken végezzük el, gyakorlatilag kipróbálhatjuk, hogyan működnek ezek a szolgáltatások egy éles környezetben, ahol az eszközök különböző szervereken futnak, és az adatok biztonságos kapcsolatokat igényelnek.

Az Elasticsearch telepítése az alábbi parancsokkal kezdődik:

shell
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg $ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/x.y/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-x.y.list

Ezután frissíthetjük a csomaglistát, és telepíthetjük az Elasticsearch-t és Kibana-t:

ruby
$ sudo apt update
$ sudo apt install elasticsearch kibana

Miután ezek az eszközök telepítésre kerültek, elérhetjük őket a megfelelő címek és portok használatával.