
Eelmisel me kohtusime ELK steki, millest see koosneb. Esimene ĂŒlesanne, millega insener ELK steki kasutamisel silmitsi seisab, on logide saatmine nende salvestamiseks elasticsearch'i hilisemaks analĂŒĂŒsiks. Kuid see on vaid sĂ”nades lihtne, elasticsearch salvestab logid dokumentide kujul, millel on kindlad vĂ€ljad ja vÀÀrtused, seega peab insener kasutama erinevaid tööriistu, et analĂŒĂŒsida sĂ”numit, mis saadetakse lĂ”pp sĂŒsteemidest. Seda saab teha mitmel viisil â kirjutama oma programmi, mis API kaudu lisab dokumendid andmebaasi, vĂ”i kasutama juba olemasolevaid lahendusi. KĂ€esolevas kursuses vaatleme lahendust Logstash, mis on osa ELK stekist. Vaadake, kuidas logisid lĂ”pp sĂŒsteemidest Logstash'i saata, ja seejĂ€rel seadistame konfigureerimisfaili parsimiseks ja andmebaasi Elasticsearch edastamiseks. Selleks vĂ”tame sisend sĂŒsteemina Check Point'i tulemĂŒĂŒri logid.
Kursuse raames ei kÀsitleta ELK steki paigaldamist, kuna sellel teemal on palju artikleid, keskendume konfiguratsiooni aspektile.
Koostame tegevusplaani Logstash'i konfigureerimiseks:
- Kontrollime, et elasticsearch vÔtaks logisid vastu (kontrollime porti töökindlust ja avatud olekut).
- Arutame, kuidas saame sĂŒndmusi Logstash'i edastada, valime viisi ja rakendame selle.
- Seadistame Logstash'i konfigureerimisfailis sisendi.
- Seadistame Logstash'i konfigureerimisfailis vĂ€ljundi debug-reĆŸiimis, et mĂ”ista, milline vĂ€lja nĂ€eb logisĂ”num.
- Seadistame filtri.
- Seadistame korrektse vÀljundi ElasticSearch'is.
- KĂ€ivitame Logstash'i.
- Kontrollime logisid Kibanas.
Vaatleme iga punkti lÀhemalt:
Kontrollime, et elasticsearch vÔtaks logisid vastu
Selle jaoks saab kontrollida curl'i kĂ€suga juurdepÀÀsu Elasticsearch'ile sĂŒsteemist, kuhu Logstash on paigaldatud. Kui teil on seadistatud autentimine, edastame ka curl'i kaudu kasutajanime/parooli, mĂ€rkides pordi 9200, kui te ei ole seda muutnud. Kui vastus on sarnane alltoodud nĂ€itele, siis on kĂ”ik korras.
[elastic@elasticsearch ~]$ curl -u <> : <> -sS -XGET "<>:9200"
{
"name" : "elastic-1",
"cluster_name" : "project",
"cluster_uuid" : "sQzjTTuCR8q4ZO6DrEis0A",
"version" : {
"number" : "7.4.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "fc0eeb6e2c25915d63d871d344e3d0b45ea0ea1e",
"build_date" : "2019-10-22T17:16:35.176724Z",
"build_snapshot" : false,
"lucene_version" : "8.2.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
[elastic@elasticsearch ~]$
Kui vastust ei tulnud, vĂ”ivad pĂ”hjused olla mitmed: elasticsearchi protsess ei pruugi töötada, port on vale vĂ”i port on tulemĂŒĂŒriga blokeeritud serveris, kus elasticsearch on paigaldatud.
Vaatame, kuidas logisid Logstashi saata Check Point tulemĂŒĂŒrist.
Check Pointi haldusserverist saate logisid Logstashi saata syslogi kaudu, kasutades log_exporter utiliiti, mille kohta saate rohkem teavet jÀrgmistest. , siin jÀtame ainult kÀsu, mis loob voolu:
cp_log_export add name check_point_syslog target-server <> target-port 5555 protocol tcp format generic read-mode semi-unified
<> â serveri aadress, kus Logstash töötab, target-port 5555 â port, kuhu logisid saadame, logide saatmine tcp kaudu vĂ”ib serverit koormata, seetĂ”ttu on mĂ”nes olukorras Ă”igem kasutada udp-d.
Seame Logstashi konfiguratsioonifailis INPUT-i ĂŒles.

Vaikimisi asub konfiguratsioonifail kataloogis /etc/logstash/conf.d/. Konfiguratsioonifail koosneb kolmest mĂ”testatud osast: INPUT, FILTER, OUTPUT. INPUT mÀÀra, kust sĂŒsteem logisid saab, FILTER parsi logi â seadista, kuidas jagada sĂ”numid vĂ€ljadeks ja vÀÀrtusteks, OUTPUT seadista vĂ€ljundivoog â kuhu parsilogid saadetakse.
Esmalt seadistame INPUT-i, vaatame mĂ”ningaid tĂŒĂŒpe, mis vĂ”ivad olla â file, tcp ja exe.
Tcp:
input {
tcp {
port => 5555
host => "10.10.1.205"
type => "checkpoint"
mode => "server"
}
}
mode => «server»
TĂ€hendab, et Logstash aktsepteerib ĂŒhendusi.
port => 5555
host => "10.10.1.205"
VĂ”tame ĂŒhendusi IP-aadressilt 10.10.1.205 (Logstash), port 5555 â port peab olema tulemĂŒĂŒri poliitika poolt lubatud.
type => «checkpoint»
MĂ€rgistame dokumendi, mis on vĂ€ga mugav, kui teil on mitu sissetulevat ĂŒhendust. Edasi vĂ”ib iga ĂŒhenduse jaoks kirjutada oma filtri loogilise konstruktsiooniga if.
File:
input {
file {
path => "/var/log/openvas_report/*"
type => "openvas"
start_position => "beginning"
}
}
Seadete kirjeldus:
path => «/var/log/openvas_report/*»
MÀÀrake kataloog, mille failid tuleb lugeda.
type => "openvas"
SĂŒndmuse tĂŒĂŒp.
start_position => "beginning"
Faili muutmisel loetakse fail tĂ€ielikult, kui seadistada "end", siis ootab sĂŒsteem, et uued kirjed ilmuksid faili lĂ”ppu.
Exec:
input {
exec {
command => "ls -alh"
interval => 30
}
}
Selle sisendi tĂ”ttu kĂ€ivitatakse (ainult!) shell kĂ€sk ja selle vĂ€ljund ĂŒmbritsetakse logi sĂ”numiga.
command => "ls -alh"
KÀsk, mille vÀljund meid huvitab.
interval => 30
KÀsu vÀljakutsumise intervall sekundites.
Logid tulemĂŒĂŒrist vastuvĂ”tmiseks mÀÀrame filtri tcp vĂ”i udp, sĂ”ltuvalt sellest, kuidas logi edastatakse Logstashi.
Seame Logstashi konfigureerimisfailis vĂ€ljundi debugeerimise reĆŸiimis, et mĂ”ista, kuidas logi sĂ”num vĂ€lja nĂ€eb.
Kui oleme INPUTi konfigureerinud, peame aru saama, kuidas logi sÔnum vÀlja nÀeb, milliseid meetodeid on vaja logide filtri (parsi) seadistamiseks kasutada.
Selleks kasutame filtrit, mis annab tulemuse stdout-is, et nÀha algsÔnumit, kogu konfigureerimisfail nÀeb hetkel vÀlja jÀrgmine:
input
{
tcp
{
port => 5555
type => "checkpoint"
mode => "server"
host => "10.10.1.205"
}
}
output
{
if [type] == "checkpoint"
{
stdout { codec => json }
}
}
KÀivitame kontrollimise kÀsu:
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/checkpoint.conf
NĂ€eme tulemust, pilt on klikkitav:
Kui kopeerite, nÀeb see vÀlja nii:
action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,0x5,0xfe0a0a0a,0xc0000000}" origin="10.10.10.254" originsicname="CN=ts-spb-cpgw-01,O=cp-spb-mgmt-01.tssolution.local.kncafb" sequencenum="8" time="1576766483" version="5" context_num="1" dst="10.10.10.10" dst_machine_name="ts-spb-dc-01@tssolution.local" layer_name="TSS-Standard Security" layer_name="TSS-Standard Application" layer_uuid="dae7f01c-4c98-4c3a-a643-bfbb8fcf40f0" layer_uuid="dbee3718-cf2f-4de0-8681-529cb75be9a6" match_id="8" match_id="33554431" parent_rule="0" parent_rule="0" rule_action="Accept" rule_action="Accept" rule_name="Implicit Cleanup" rule_uid="6dc2396f-9644-4546-8f32-95d98a3344e6" product="VPN-1 & FireWall-1" proto="17" s_port="37317" service="53" service_id="domain-udp" src="10.10.1.180" ","type":"qqqqq","host":"10.10.10.250","@version":"1","port":50620}{"@timestamp":"2019-12-19T14:50:12.153Z","message":"time="1576766483" action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,
Vaadates neid sĂ”numeid, mĂ”istame, et logid on kujul: vĂ€li = vÀÀrtus vĂ”i key = value, seega sobib filter, mida nimetatakse kv. Selleks, et Ă”igesti valida filter iga konkreetse juhtumi jaoks, oleks hea nendega tutvuda tehnilises dokumentatsioonis vĂ”i kĂŒsida sĂ”bralt.
Seame Filter'i
Eelmisel sammul valisime kv, nĂŒĂŒd on esitatud selle filtri konfiguratsioon:
filter {
if [type] == "checkpoint"{
kv {
value_split => "="
allow_duplicate_values => false
}
}
}
Valime sĂŒmboli, mille pĂ”hjal jagame vĂ€li ja vÀÀrtus â â=â. Kui meil on logis sama sisuga kirjeid, salvestame andmebaasi vaid ĂŒhe eksemplari, vastasel juhul tekib teil massiiv sama vÀÀrtuse kĂŒljes, seega kui meil on sĂ”num âfoo = some foo=someâ, salvestame ainult foo = some.
Seame korrektse vÀljundi ElasticSearch'i
PĂ€rast seda, kui filter on seadistatud, saab logisid andmebaasi laadida elasticsearch:
output
{
if [type] == "checkpoint"
{
elasticsearch
{
hosts => ["10.10.1.200:9200"]
index => "checkpoint-%{+YYYY.MM.dd}"
user => "tssolution"
password => "cool"
}
}
}
Kui dokument on mĂ€rgitud tĂŒĂŒbi checkpoint, salvestame sĂŒndmuse andmebaasi elasticsearch, mis aktsepteerib ĂŒhendusi 10.10.1.200 aadressil port 9200 vaikesĂ€tetena. Iga dokument salvestatakse kindlasse indeksisse, antud juhul salvestame indeksi «checkpoint-» + praegune kuupĂ€ev. Iga indeks vĂ”ib omada kindlat atribuutide kogumit vĂ”i luuakse automaatselt, kui sĂ”numis ilmneb uus vĂ€li; vĂ€lja seadistusi ja nende tĂŒĂŒpe saab vaadata mappings.
Kui teil on seadistatud autentimine (arutame hiljem), peavad kindlasti olema mÀÀratud kredentsid kirjutamiseks konkreetse indeksisse, antud nÀites on see «tssolution» koos parooliga «cool». VÔib piirata kasutajate Ôigusi logide kirjutamiseks ainult kindlasse indeksisse ja mitte kuhugi mujale.
KĂ€ivitame Logstash'i.
Logstash'i konfiguratsioonifail:
input
{
tcp
{
port => 5555
type => "checkpoint"
mode => "server"
host => â10.10.1.205â
}
}
filter {
if [type] == "checkpoint"{
kv {
value_split => "="
allow_duplicate_values => false
}
}
}
output
{
if [type] == "checkpoint"
{
elasticsearch
{
hosts => ["10.10.1.200:9200"]
index => "checkpoint-%{+YYYY.MM.dd}"
user => "tssolution"
password => "cool"
}
}
}
Kontrollime konfiguratsioonifaili Ôigsust:
/usr/share/logstash/bin//logstash -f checkpoint.conf

KĂ€ivitame Logstash'i protsessi:
sudo systemctl start logstash
Kontrollime, kas protsess on kÀivitatud:
sudo systemctl status logstash

Kontrollime, kas sokkel on ĂŒles tĂ”usnud:
netstat -nat |grep 5555
![]()
Kontrollime logisid Kibanas.
Kui kÔik on kÀivitatud, siseneme Kibana - Discover, veendudes, et kÔik on Ôigesti seadistatud, pilt on klikitav!
KÔik logid on kohal ja me nÀeme kÔiki vÀlju ja nende vÀÀrtusi!
KokkuvÔte
Me arutasime, kuidas kirjutada Logstashi konfiguratsioonifaili, mille tulemusel saime parseri kĂ”igi vĂ€ljade ja vÀÀrtuste jaoks. NĂŒĂŒd saame töötada otsingu ja graafikute koostamisega teatud vĂ€ljade pĂ”hjal. Kursuse jĂ€rgmistes osades kĂ€sitleme visualiseerimist Kibanas ja loome lihtsa armatuurlaual. Tuleb mainida, et Logstashi konfiguratsioonifaili tuleb teatud olukordades pidevalt uuendada, nĂ€iteks kui soovime asendada vĂ€ljavÀÀrtuse numbrist sĂ”naga. JĂ€rgmistes artiklites teeme seda pidevalt.
Seega jÀlgige uuendusi (, , , ), .
Allikas: habr.com
