2. Elastyske stack: analyze fan feiligens logs. Logstash

2. Elastyske stack: analyze fan feiligens logs. Logstash

Yn de lêste artikel Wy ha inoar moete ELK stapel, hokker software produkten it bestiet út. En de earste taak dy't in yngenieur foarkomt by it wurkjen mei de ELK-stapel is it ferstjoeren fan logs foar opslach yn elastysk sykjen foar folgjende analyze. Dit is lykwols gewoan lippentsjinst, elasticsearch bewarret logs yn 'e foarm fan dokuminten mei bepaalde fjilden en wearden, wat betsjut dat de yngenieur ferskate ark moat brûke om it berjocht te parsearjen dat wurdt ferstjoerd fan' e einsystemen. Dit kin op ferskate manieren dien wurde - skriuw sels in programma dat dokuminten sil tafoegje oan 'e databank mei de API, of brûk klearmakke oplossingen. Yn dizze kursus sille wy de oplossing beskôgje logstash, dy't diel útmakket fan 'e ELK-stapel. Wy sille sjen nei hoe't wy kinne stjoere logs út einpunt systemen nei Logstash, en dan sille opsette in konfiguraasje triem te parse en trochferwizing nei de Elasticsearch databank. Om dit te dwaan, nimme wy logs fan 'e Check Point-firewall as it ynkommende systeem.

De kursus beslacht de ynstallaasje fan ELK-stack net, om't d'r in enoarm oantal artikels binne oer dit ûnderwerp; wy sille de konfiguraasjekomponint beskôgje.

Litte wy in aksjeplan opstelle foar Logstash-konfiguraasje:

  1. Kontrolearje dat elasticsearch logs sil akseptearje (kontrolearje de funksjonaliteit en iepenheid fan 'e haven).
  2. Wy beskôgje hoe't wy eveneminten nei Logstash kinne stjoere, in metoade kieze en it útfiere.
  3. Wy konfigurearje Ynput yn it Logstash-konfiguraasjetriem.
  4. Wy konfigurearje Utfier yn it Logstash-konfiguraasjetriem yn debugmodus om te begripen hoe't it logberjocht derút sjocht.
  5. Filter ynstelle.
  6. De juste útfier ynstelle yn ElasticSearch.
  7. Logstash lansearret.
  8. Kontrolearje de logs yn Kibana.

Litte wy nei elk punt yn mear detail sjen:

Kontrolearje dat elasticsearch logs sil akseptearje

Om dit te dwaan, kinne jo it curl-kommando brûke om tagong ta Elasticsearch te kontrolearjen fan it systeem wêrop Logstash is ynset. As jo ​​autentikaasje ynsteld hawwe, dan drage wy ek de brûker / wachtwurd oer fia curl, en spesifisearje poarte 9200 as jo it net hawwe feroare. As jo ​​​​in antwurd krije lykas de hjirûnder, dan is alles yn oarder.

[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 ~]$

As it antwurd net ûntfongen is, dan kinne d'r ferskate soarten flaters wêze: it elasticsearch-proses rint net, de ferkearde poarte is oantsjutte, of de poarte wurdt blokkearre troch in firewall op 'e tsjinner wêr't elasticsearch is ynstalleare.

Litte wy sjen nei hoe't jo logs kinne stjoere nei Logstash fanút in kontrôlepunt-firewall

Fanút Check Point-behearserver kinne jo logs nei Logstash stjoere fia syslog mei it log_exporter-hulpprogramma, jo kinne hjir mear oer lêze artikel, hjir litte wy allinich it kommando litte dat de stream makket:

cp_log_export tafoegje namme check_point_syslog target-tsjinner < > doel-poarte 5555 protokol tcp opmaak generic read-mode semy-ienheid

< > - adres fan de tsjinner dêr't Logstash op rint, doel-poarte 5555 - poarte dêr't wy sille stjoere logs, it ferstjoeren fan logs fia tcp kin lade de tsjinner, dus yn guon gefallen is it krekter te brûken udp.

It ynstellen fan INPUT yn it Logstash-konfiguraasjetriem

2. Elastyske stack: analyze fan feiligens logs. Logstash

Standert stiet it konfiguraasjetriem yn de map /etc/logstash/conf.d/. It konfiguraasjetriem bestiet út 3 betsjuttingsfolle dielen: INPUT, FILTER, OUTPUT. YN YNFIER wy jouwe oan wêr't it systeem logs sil nimme, yn FILTER it logboek parse - ynstelle hoe't jo it berjocht ferdielen yn fjilden en wearden, yn OUTPUT wy konfigurearje de útfierstream - wêr't de parsearde logs sille wurde ferstjoerd.

Litte wy earst INPUT konfigurearje, beskôgje guon fan 'e soarten dy't kinne wêze - triem, tcp en exe.

Tcp:

input {
tcp {
    port => 5555
    host => “10.10.1.205”
    type => "checkpoint"
    mode => "server"
}
}

mode => "tsjinner"
Jout oan dat Logstash ferbiningen akseptearret.

poarte => 5555
host => "10.10.1.205"
Wy akseptearje ferbinings fia IP adres 10.10.1.205 (Logstash), haven 5555 - de haven moat wurde tastien troch de brânmuorre belied.

type => "kontrôlepunt"
Wy markearje it dokumint, heul handich as jo ferskate ynkommende ferbiningen hawwe. Dêrnei kinne jo foar elke ferbining jo eigen filter skriuwe mei it logyske if-konstruksje.

Map:

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

Beskriuwing fan ynstellings:
paad => "/var/log/openvas_report/*"
Wy jouwe de map oan wêryn de triemmen lêzen wurde moatte.

type => "openvas"
Event type.

start_position => "begjin"
By it wizigjen fan in bestân lêst it it hiele bestân; as jo "ein" ynstelle, wachtet it systeem op nije records dy't oan 'e ein fan it bestân ferskine.

Exec:

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

Mei dizze ynfier wurdt in (allinich!) shell-kommando lansearre en de útfier dêrfan wurdt feroare yn in logberjocht.

kommando => "ls -alh"
It kommando waans útfier wy binne ynteressearre yn.

ynterval => 30
Kommando-oprop-ynterval yn sekonden.

Om logs fan 'e firewall te ûntfangen, registrearje wy in filter tcp of pud, ôfhinklik fan hoe't de logs nei Logstash stjoerd wurde.

Wy konfigurearje Utfier yn it Logstash-konfiguraasjetriem yn debugmodus om te begripen hoe't it logberjocht derút sjocht

Nei't wy INPUT hawwe konfigureare, moatte wy begripe hoe't it logberjocht der útsjen sil en hokker metoaden moatte wurde brûkt om it logfilter (parser) te konfigurearjen.

Om dit te dwaan, sille wy in filter brûke dat it resultaat nei stdout útfiert om it orizjinele berjocht te besjen; it folsleine konfiguraasjetriem sil op it stuit sa útsjen:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => “10.10.1.205”
   	 }
}

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

Run it kommando om te kontrolearjen:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Wy sjogge it resultaat, de foto is te klikken:

2. Elastyske stack: analyze fan feiligens logs. Logstash

As jo ​​​​it kopiearje sil it der sa útsjen:

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,

As wy nei dizze berjochten sjogge, begripe wy dat de logs de foarm hawwe: fjild = wearde of kaai = wearde, wat betsjut dat in filter neamd kv geskikt is. Om it juste filter foar elke spesifike saak te kiezen, soe it in goed idee wêze om jo fertroud te meitsjen mei har yn 'e technyske dokumintaasje, of freegje in freon.

Filter ynstelle

Yn 'e lêste etappe hawwe wy kv selektearre, de konfiguraasje fan dit filter wurdt hjirûnder presintearre:

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

Wy selektearje it symboal wêrmei wy it fjild en de wearde sille diele - "=". As wy identike yngongen hawwe yn it log, bewarje wy mar ien eksimplaar yn 'e databank, oars sille jo einigje mei in array fan identike wearden, dat is, as wy it berjocht hawwe "foo = guon foo = guon" skriuwe wy allinich foo = guon.

De juste útfier ynstelle yn ElasticSearch

Sadree't filter is konfigurearre, kinne jo uploade logs nei de databank elastyk sykje:

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

As it dokumint is ûndertekene mei it checkpoint-type, bewarje wy it evenemint yn 'e elasticsearch-database, dy't standert ferbiningen akseptearret op 10.10.1.200 op haven 9200. Elk dokumint wurdt bewarre yn in spesifike yndeks, yn dit gefal bewarje wy yn 'e yndeks "checkpoint-" + aktuele tiiddatum. Elke yndeks kin in spesifike set fjilden hawwe, of wurdt automatysk oanmakke as in nij fjild ferskynt yn in berjocht; fjildynstellingen en har type kinne wurde besjoen yn mappings.

As jo ​​​​autentikaasje konfigureare hawwe (wy sille it letter besjen), moatte de bewiisbrieven foar it skriuwen nei in spesifike yndeks oanjûn wurde, yn dit foarbyld is it "tssolution" mei it wachtwurd "cool". Jo kinne brûkersrjochten ûnderskiede om logs allinich te skriuwen nei in spesifike yndeks en net mear.

Starte Logstash.

Logstash konfiguraasjetriem:

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

Wy kontrolearje it konfiguraasjetriem foar justigens:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastyske stack: analyze fan feiligens logs. Logstash

Start it Logstash-proses:
sudo systemctl start logstash

Wy kontrolearje dat it proses is begon:
sudo systemctl status logstash

2. Elastyske stack: analyze fan feiligens logs. Logstash

Litte wy kontrolearje as de socket op is:
netstat -nat |grep 5555

2. Elastyske stack: analyze fan feiligens logs. Logstash

Kontrolearje de logs yn Kibana.

Neidat alles rint, gean nei Kibana - Untdek, soargje derfoar dat alles goed is konfigureare, de ôfbylding is te klikken!

2. Elastyske stack: analyze fan feiligens logs. Logstash

Alle logs binne yn plak en wy kinne sjen alle fjilden en harren wearden!

konklúzje

Wy seagen hoe't jo in Logstash-konfiguraasjetriem skriuwe, en as gefolch hawwe wy in parser fan alle fjilden en wearden krigen. No kinne wy ​​wurkje mei sykjen en plotten foar spesifike fjilden. Folgjende yn 'e kursus sille wy sjen nei fisualisaasje yn Kibana en meitsje in ienfâldich dashboard. It is it neamen wurdich dat it Logstash-konfiguraasjetriem yn bepaalde situaasjes konstant bywurke wurde moat, bygelyks as wy de wearde fan in fjild ferfange wolle fan in nûmer nei in wurd. Yn folgjende artikels sille wy dit konstant dwaan.

Dus bliuw op 'e hichte (Telegram, facebook, VK, TS Solution Blog), Yandex Zen.

Boarne: www.habr.com

Add a comment