2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

Pagātnē raksts mēs satikāmies ELK kaudze, no kādiem programmatÅ«ras produktiem tas sastāv. Un pirmais uzdevums, ar ko inženieris saskaras, strādājot ar ELK steku, ir žurnālu nosÅ«tÄ«Å”ana uzglabāŔanai elasticsearch turpmākai analÄ«zei. Tomēr tas ir tikai vārdi, jo elasticsearch saglabā žurnālus dokumentu veidā ar noteiktiem laukiem un vērtÄ«bām, kas nozÄ«mē, ka inženierim ir jāizmanto dažādi rÄ«ki, lai parsētu ziņojumu, kas tiek nosÅ«tÄ«ts no gala sistēmām. To var izdarÄ«t vairākos veidos ā€“ pats uzraksti programmu, kas pievienos dokumentus datubāzei, izmantojot API, vai arÄ« izmanto gatavus risinājumus. Å ajā kursā mēs apsvērsim risinājumu Logstash, kas ir daļa no ELK kaudzes. Mēs apskatÄ«sim, kā mēs varam nosÅ«tÄ«t žurnālus no galapunktu sistēmām uz Logstash, un pēc tam mēs iestatÄ«sim konfigurācijas failu, lai parsētu un novirzÄ«tu uz Elasticsearch datu bāzi. Lai to izdarÄ«tu, kā ienākoÅ”o sistēmu mēs ņemam žurnālus no Check Point ugunsmÅ«ra.

Kurss neaptver ELK steka uzstādÄ«Å”anu, jo par Å”o tēmu ir daudz rakstu; mēs apsvērsim konfigurācijas komponentu.

Izstrādāsim rīcības plānu Logstash konfigurācijai:

  1. Pārbaude, vai elasticsearch pieņems žurnālus (porta funkcionalitātes un atvērtības pārbaude).
  2. Mēs apsveram, kā mēs varam nosūtīt notikumus uz Logstash, izvēlēties metodi un ieviest to.
  3. Mēs konfigurējam ievadi Logstash konfigurācijas failā.
  4. Mēs konfigurējam izvadi Logstash konfigurācijas failā atkļūdoÅ”anas režīmā, lai saprastu, kā izskatās žurnāla ziņojums.
  5. Filtra iestatīŔana.
  6. Pareizas izvades iestatīŔana pakalpojumā ElasticSearch.
  7. Logstash tiek palaists.
  8. Baļķu pārbaude Kibanā.

Apskatīsim katru punktu sīkāk:

Pārbauda, ā€‹ā€‹vai elasticsearch pieņems žurnālus

Lai to izdarītu, varat izmantot komandu curl, lai pārbaudītu piekļuvi Elasticsearch no sistēmas, kurā ir izvietots Logstash. Ja jums ir konfigurēta autentifikācija, mēs arī pārsūtām lietotāju/paroli caur curl, norādot portu 9200, ja neesat to mainījis. Ja saņemat līdzīgu atbildi kā zemāk, tad viss ir kārtībā.

[elastic@elasticsearch ~]$ curl -u <<user_name>> : <<password>> -sS -XGET "<<ip_address_elasticsearch>>: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 ~]$

Ja atbilde netiek saņemta, var būt vairāku veidu kļūdas: elasticsearch process nedarbojas, ir norādīts nepareizs ports vai portu bloķē ugunsmūris serverī, kurā ir instalēta elasticsearch.

Apskatīsim, kā no kontrolpunkta ugunsmūra varat nosūtīt žurnālus uz Logstash

No Check Point pārvaldÄ«bas servera varat nosÅ«tÄ«t žurnālus uz Logstash, izmantojot syslog, izmantojot utilÄ«tu log_exporter, vairāk par to varat lasÄ«t Å”eit raksts, Å”eit mēs atstāsim tikai komandu, kas izveido straumi:

cp_log_export pievienoÅ”anas nosaukums check_point_syslog mērÄ·a-serveris < > mērÄ·a porta 5555 protokols tcp formāta vispārÄ«gs lasÄ«Å”anas režīms daļēji unificēts

< > - servera adrese, uz kura darbojas Logstash, target-port 5555 - ports uz kuru mēs sÅ«tÄ«sim žurnālus, žurnālu nosÅ«tÄ«Å”ana caur tcp var noslogot serveri, tāpēc dažos gadÄ«jumos pareizāk ir izmantot udp.

INPUT iestatīŔana Logstash konfigurācijas failā

2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

Pēc noklusējuma konfigurācijas fails atrodas direktorijā /etc/logstash/conf.d/. Konfigurācijas fails sastāv no 3 jēgpilnām daļām: INPUT, FILTER, OUTPUT. IN INPUT mēs norādām, no kurienes sistēma ņems žurnālus FILTER parsēt žurnālu ā€” iestatiet, kā ziņojumu sadalÄ«t laukos un vērtÄ«bās REZULTĀTS mēs konfigurējam izvades straumi - kur tiks nosÅ«tÄ«ti parsētie žurnāli.

Vispirms konfigurēsim INPUT, apsveriet dažus veidus, kas var būt - fails, tcp un exe.

TCP:

input {
tcp {
    port => 5555
    host => ā€œ10.10.1.205ā€
    type => "checkpoint"
    mode => "server"
}
}

režīms => "serveris"
Norāda, ka Logstash pieņem savienojumus.

ports => 5555
saimniekdators => ā€œ10.10.1.205ā€
Mēs pieņemam savienojumus, izmantojot IP adresi 10.10.1.205 (Logstash), portu 5555 - portam ir jāatļauj ugunsmūra politika.

ierakstiet => "kontrolpunkts"
Mēs atzÄ«mējam dokumentu, ļoti ērti, ja jums ir vairāki ienākoÅ”ie savienojumi. Pēc tam katram savienojumam varat uzrakstÄ«t savu filtru, izmantojot loÄ£isko if konstrukciju.

Fails:

input {
  file {
    path => "/var/log/openvas_report/*"
    type => "openvas"
    start_position => "beginning"
    }
}

Iestatījumu apraksts:
ceļŔ => "/var/log/openvas_report/*"
Mēs norādām direktoriju, kurā faili ir jālasa.

tips => "openvas"
Pasākuma veids.

start_position => "sākums"
Mainot failu, tas nolasa visu failu; ja iestatāt ā€œbeigasā€, sistēma gaida, lÄ«dz faila beigās parādÄ«sies jauni ieraksti.

Izpildītāja:

input {
  exec {
    command => "ls -alh"
    interval => 30
  }
}

Izmantojot Å”o ievadi, tiek palaista (tikai!) čaulas komanda un tās izvade tiek pārvērsta žurnāla ziņojumā.

komanda => "ls -alh"
Komanda, kuras izvade mūs interesē.

intervāls => 30
Komandu izsaukÅ”anas intervāls sekundēs.

Lai saņemtu žurnālus no ugunsmūra, mēs reģistrējam filtru tcp vai udp, atkarībā no tā, kā žurnāli tiek nosūtīti uz Logstash.

Mēs konfigurējam izvadi Logstash konfigurācijas failā atkļūdoÅ”anas režīmā, lai saprastu, kā izskatās žurnāla ziņojums

Kad esam konfigurējuÅ”i INPUT, mums ir jāsaprot, kā izskatÄ«sies žurnāla ziņojums un kādas metodes ir jāizmanto žurnāla filtra (parsētāja) konfigurÄ“Å”anai.

Lai to izdarÄ«tu, mēs izmantosim filtru, kas izvada rezultātu uz stdout, lai skatÄ«tu sākotnējo ziņojumu; pilns konfigurācijas fails Å”obrÄ«d izskatÄ«sies Ŕādi:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => ā€œ10.10.1.205ā€
   	 }
}

output 
{
	if [type] == "checkpoint" 
       {
		stdout { codec=> json }
	}
}

Palaidiet komandu, lai pārbaudītu:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Mēs redzam rezultātu, attēls ir noklikŔķināms:

2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

Ja to nokopēsit, tas izskatÄ«sies Ŕādi:

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="[email protected]" 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,

AplÅ«kojot Å”os ziņojumus, mēs saprotam, ka žurnāli izskatās Ŕādi: lauks = vērtÄ«ba vai atslēga = vērtÄ«ba, kas nozÄ«mē, ka filtrs ar nosaukumu kv ir piemērots. Lai izvēlētos pareizo filtru katram konkrētajam gadÄ«jumam, bÅ«tu ieteicams ar tiem iepazÄ«ties tehniskajā dokumentācijā vai pajautāt draugam.

Filtra iestatīŔana

Pēdējā posmā mēs izvēlējāmies kv, Ŕī filtra konfigurācija ir parādÄ«ta zemāk:

filter {
if [type] == "checkpoint"{
	kv {
		value_split => "="
		allow_duplicate_values => false
	}
}
}

Mēs izvēlamies simbolu, ar kuru sadalÄ«sim lauku un vērtÄ«bu - ā€œ=ā€. Ja mums ir identiski ieraksti žurnālā, mēs datu bāzē saglabājam tikai vienu gadÄ«jumu, pretējā gadÄ«jumā jÅ«s iegÅ«sit identisku vērtÄ«bu masÄ«vu, tas ir, ja mums ir ziņojums ā€œfoo = daži foo=someā€, mēs rakstām tikai foo = daži.

Pareizas izvades iestatīŔana pakalpojumā ElasticSearch

Kad filtrs ir konfigurēts, varat augÅ”upielādēt žurnālus datu bāzē elastÄ«gā meklÄ“Å”ana:

output 
{
if [type] == "checkpoint"
{
 	elasticsearch 
        {
		hosts => ["10.10.1.200:9200"]
		index => "checkpoint-%{+YYYY.MM.dd}"
    		user => "tssolution"
    		password => "cool"
  	}
}
}

Ja dokuments ir parakstÄ«ts ar kontrolpunkta tipu, mēs saglabājam notikumu elasticsearch datu bāzē, kas pēc noklusējuma pieņem savienojumus 10.10.1.200 portā 9200. Katrs dokuments tiek saglabāts noteiktā rādÄ«tājā, Å”ajā gadÄ«jumā mēs saglabājam indeksā ā€œcheckpoint-ā€ + paÅ”reizējā laika datums. Katram indeksam var bÅ«t noteikta lauku kopa vai tas tiek izveidots automātiski, kad ziņojumā parādās jauns lauks; lauka iestatÄ«jumus un to veidu var skatÄ«t kartējumos.

Ja jums ir konfigurēta autentifikācija (mēs to apskatÄ«sim vēlāk), ir jānorāda akreditācijas dati rakstÄ«Å”anai uz noteiktu indeksu, Å”ajā piemērā tas ir ā€œtssolutionā€ ar paroli ā€œcoolā€. Varat atŔķirt lietotāju tiesÄ«bas rakstÄ«t žurnālus tikai noteiktam indeksam un ne vairāk.

Palaidiet programmu Logstash.

Logstash konfigurācijas fails:

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"
  	}
}
}

Mēs pārbaudām konfigurācijas faila pareizību:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

Sāciet Logstash procesu:
sudo systemctl sākt logstash

Mēs pārbaudām, vai process ir sācies:
sudo systemctl statuss logstash

2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

Pārbaudīsim, vai kontaktligzda ir augŔā:
netstat -nat |grep 5555

2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

Baļķu pārbaude Kibanā.

Kad viss darbojas, dodieties uz Kibana - Discover, pārliecinieties, ka viss ir pareizi konfigurēts, bilde ir klikŔķināma!

2. Elastīgā kaudze: droŔības žurnālu analīze. Logstash

Visi žurnāli ir savās vietās un mēs varam redzēt visus laukus un to vērtības!

Secinājums

Mēs apskatÄ«jām, kā uzrakstÄ«t Logstash konfigurācijas failu, un rezultātā mēs ieguvām visu lauku un vērtÄ«bu parsētāju. Tagad mēs varam strādāt ar konkrētu lauku meklÄ“Å”anu un uzzÄ«mÄ“Å”anu. Tālāk kursā apskatÄ«sim vizualizāciju Kibanā un izveidosim vienkārÅ”u informācijas paneli. Ir vērts pieminēt, ka Logstash konfigurācijas fails ir pastāvÄ«gi jāatjaunina noteiktās situācijās, piemēram, ja mēs vēlamies aizstāt lauka vērtÄ«bu no skaitļa uz vārdu. Nākamajos rakstos mēs to darÄ«sim pastāvÄ«gi.

Tāpēc sekojiet līdzi informācijai (Telegram, Facebook, VK, TS risinājumu emuārs), Yandex Zen.

Avots: www.habr.com

Pievieno komentāru