2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

Zamani Ibara ya tulikutana Mkusanyiko wa ELK, inajumuisha bidhaa gani za programu. Na kazi ya kwanza ambayo mhandisi anakabiliwa nayo wakati wa kufanya kazi na stack ya ELK ni kutuma kumbukumbu kwa ajili ya kuhifadhi katika elasticsearch kwa uchambuzi unaofuata. Walakini, hii ni huduma ya midomo tu, elasticsearch huhifadhi magogo kwa namna ya hati zilizo na uwanja na maadili fulani, ambayo inamaanisha kuwa mhandisi lazima atumie zana anuwai kuchanganua ujumbe unaotumwa kutoka kwa mifumo ya mwisho. Hii inaweza kufanywa kwa njia kadhaa - andika programu mwenyewe ambayo itaongeza hati kwenye hifadhidata kwa kutumia API, au tumia suluhisho zilizotengenezwa tayari. Katika kozi hii tutazingatia suluhisho Logstash, ambayo ni sehemu ya stack ya ELK. Tutaangalia jinsi tunavyoweza kutuma kumbukumbu kutoka kwa mifumo ya mwisho hadi Logstash, na kisha tutasanidi faili ya usanidi ili kuchanganua na kuelekeza kwenye hifadhidata ya Elasticsearch. Ili kufanya hivyo, tunachukua kumbukumbu kutoka kwa firewall ya Check Point kama mfumo unaoingia.

Kozi haitoi usakinishaji wa stack ya ELK, kwani kuna idadi kubwa ya vifungu kwenye mada hii; tutazingatia sehemu ya usanidi.

Wacha tutengeneze mpango wa utekelezaji wa usanidi wa Logstash:

  1. Kuangalia kwamba elasticsearch itakubali kumbukumbu (kuangalia utendaji na uwazi wa bandari).
  2. Tunazingatia jinsi tunavyoweza kutuma matukio kwa Logstash, kuchagua mbinu na kuitekeleza.
  3. Tunasanidi Ingizo katika faili ya usanidi ya Logstash.
  4. Tunasanidi Pato katika faili ya usanidi ya Logstash katika hali ya utatuzi ili kuelewa jinsi ujumbe wa kumbukumbu unavyoonekana.
  5. Kuweka Kichujio.
  6. Kuweka Pato sahihi katika ElasticSearch.
  7. Logstash inazinduliwa.
  8. Akiangalia magogo huko Kibana.

Wacha tuangalie kila nukta kwa undani zaidi:

Kuangalia kwamba elasticsearch itakubali magogo

Ili kufanya hivyo, unaweza kutumia amri ya curl kuangalia upatikanaji wa Elasticsearch kutoka kwa mfumo ambao Logstash inatumiwa. Ikiwa uthibitishaji umesanidiwa, basi pia tunahamisha mtumiaji/nenosiri kupitia curl, tukibainisha bandari 9200 ikiwa hujaibadilisha. Ikiwa unapokea jibu sawa na hapa chini, basi kila kitu kiko katika mpangilio.

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

Ikiwa jibu halijapokelewa, basi kunaweza kuwa na aina kadhaa za makosa: mchakato wa elasticsearch haufanyiki, bandari isiyo sahihi imeelezwa, au bandari imefungwa na firewall kwenye seva ambapo elasticsearch imewekwa.

Wacha tuangalie jinsi unavyoweza kutuma kumbukumbu kwa Logstash kutoka kwa ngome ya ukaguzi

Kutoka kwa seva ya usimamizi wa Check Point unaweza kutuma kumbukumbu kwa Logstash kupitia syslog kwa kutumia log_exporter shirika, unaweza kusoma zaidi juu yake hapa. Ibara ya, hapa tutaacha tu amri inayounda mkondo:

cp_log_export ongeza jina check_point_syslog target-server < > itifaki ya target-port 5555 tcp umbizo la kawaida la hali ya kusoma iliyounganishwa nusu

< > - anwani ya seva ambayo Logstash inaendesha, bandari-lengwa 5555 - bandari ambayo tutatuma kumbukumbu, kutuma kumbukumbu kupitia tcp kunaweza kupakia seva, kwa hivyo katika hali zingine ni sahihi zaidi kutumia udp.

Kuweka INPUT katika faili ya usanidi ya Logstash

2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

Kwa chaguo-msingi, faili ya usanidi iko kwenye saraka /etc/logstash/conf.d/. Faili ya usanidi ina sehemu 3 za maana: INPUT, FILTER, OUTPUT. KATIKA Pembejeo tunaonyesha ambapo mfumo utachukua kumbukumbu kutoka, ndani Kichungi panga logi - weka jinsi ya kugawanya ujumbe katika sehemu na maadili, ndani Pato tunasanidi mkondo wa pato - ambapo kumbukumbu zilizochanganuliwa zitatumwa.

Kwanza, hebu tusanidi INPUT, fikiria baadhi ya aina ambazo zinaweza kuwa - faili, tcp na exe.

Tcp:

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

mode => "seva"
Inaonyesha kuwa Logstash inakubali miunganisho.

bandari => 5555
mwenyeji => β€œ10.10.1.205”
Tunakubali miunganisho kupitia anwani ya IP 10.10.1.205 (Logstash), mlango wa 5555 - mlango lazima uruhusiwe na sera ya ngome.

type => "kituo cha ukaguzi"
Tunaweka alama kwenye hati, rahisi sana ikiwa una viunganisho kadhaa vinavyoingia. Baadaye, kwa kila unganisho unaweza kuandika kichungi chako mwenyewe kwa kutumia mantiki ikiwa itaunda.

Picha:

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

Maelezo ya mipangilio:
njia => "/var/log/openvas_report/*"
Tunaonyesha saraka ambayo faili zinahitaji kusomwa.

type => "openvas"
Aina ya tukio.

start_position => "mwanzo"
Wakati wa kubadilisha faili, inasoma faili nzima; ukiweka "mwisho", mfumo unasubiri rekodi mpya kuonekana mwishoni mwa faili.

Ek.

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

Kwa kutumia pembejeo hii, amri ya shell (pekee!) imezinduliwa na matokeo yake yanageuka kuwa ujumbe wa logi.

amri => "ls -alh"
Amri ambayo matokeo yake tunavutiwa nayo.

muda => 30
Amri muda wa ombi katika sekunde.

Ili kupokea magogo kutoka kwa firewall, tunasajili chujio tcp au udp, kulingana na jinsi magogo yanatumwa kwa Logstash.

Tunasanidi Pato katika faili ya usanidi ya Logstash katika hali ya utatuzi ili kuelewa jinsi ujumbe wa kumbukumbu unavyoonekana.

Baada ya kusanidi INPUT, tunahitaji kuelewa jinsi ujumbe wa kumbukumbu utakavyoonekana na ni njia gani zinahitajika kutumika kusanidi kichujio cha kumbukumbu (kichanganuzi).

Ili kufanya hivyo, tutatumia kichujio ambacho hutoa matokeo kwa stdout ili kutazama ujumbe asili; faili kamili ya usanidi kwa sasa itaonekana kama hii:

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

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

Endesha amri ili kuangalia:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Tunaona matokeo, picha inaweza kubofya:

2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

Ukiinakili itaonekana kama hii:

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,

Kuangalia ujumbe huu, tunaelewa kuwa kumbukumbu zinaonekana kama: shamba = thamani au ufunguo = thamani, ambayo inamaanisha kichujio kinachoitwa kv kinafaa. Ili kuchagua chujio sahihi kwa kila kesi maalum, itakuwa ni wazo nzuri kujijulisha nao katika nyaraka za kiufundi, au kuuliza rafiki.

Kuweka Kichujio

Katika hatua ya mwisho tulichagua kv, usanidi wa kichungi hiki umewasilishwa hapa chini:

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

Tunachagua ishara ambayo tutagawanya shamba na thamani - "=". Ikiwa tuna maingizo yanayofanana kwenye logi, tunahifadhi mfano mmoja tu kwenye hifadhidata, vinginevyo utaishia na safu ya maadili yanayofanana, ambayo ni, ikiwa tunayo ujumbe "foo = some foo=some" tunaandika foo tu. = baadhi.

Kuweka Pato sahihi katika ElasticSearch

Kichujio kikishasanidiwa, unaweza kupakia kumbukumbu kwenye hifadhidata utaftaji wa elastic:

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

Ikiwa hati imesainiwa na aina ya ukaguzi, tunahifadhi tukio kwenye hifadhidata ya elasticsearch, ambayo inakubali miunganisho mnamo 10.10.1.200 kwenye bandari 9200 kwa chaguo-msingi. Kila hati imehifadhiwa kwa index maalum, katika kesi hii tunahifadhi kwenye index "checkpoint-" + tarehe ya sasa ya wakati. Kila faharasa inaweza kuwa na seti maalum ya sehemu, au huundwa kiotomatiki sehemu mpya inapoonekana kwenye ujumbe; mipangilio ya sehemu na aina yake inaweza kutazamwa katika upangaji.

Ikiwa una uthibitishaji umesanidiwa (tutauangalia baadaye), sifa za kuandika kwa fahirisi maalum lazima zibainishwe, katika mfano huu ni "tssolution" na nenosiri "cool". Unaweza kutofautisha haki za mtumiaji kuandika kumbukumbu kwa faharasa maalum tu na si zaidi.

Zindua Logstash.

Faili ya usanidi wa Logstash:

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

Tunaangalia faili ya usanidi kwa usahihi:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

Anza mchakato wa Logstash:
sudo systemctl kuanza logstash

Tunaangalia kuwa mchakato umeanza:
sudo systemctl status logstash

2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

Wacha tuangalie ikiwa tundu liko juu:
netstat -nat |grep 5555

2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

Akiangalia magogo huko Kibana.

Baada ya kila kitu kukimbia, nenda kwa Kibana - Kugundua, hakikisha kwamba kila kitu kimeundwa kwa usahihi, picha inaweza kubofya!

2. Rafu ya elastic: uchambuzi wa kumbukumbu za usalama. Logstash

Kumbukumbu zote ziko mahali na tunaweza kuona sehemu zote na maadili yake!

Hitimisho

Tuliangalia jinsi ya kuandika faili ya usanidi wa Logstash, na matokeo yake tukapata kichanganuzi cha nyanja na maadili yote. Sasa tunaweza kufanya kazi kwa kutafuta na kupanga njama kwa nyanja maalum. Ifuatayo katika kozi tutaangalia taswira katika Kibana na kuunda dashibodi rahisi. Inafaa kutaja kuwa faili ya usanidi wa Logstash inahitaji kusasishwa kila wakati katika hali fulani, kwa mfano, tunapotaka kuchukua nafasi ya thamani ya shamba kutoka nambari hadi neno. Katika makala zinazofuata tutafanya hivyo daima.

Kwa hivyo subiri (telegram, Facebook, VK, TS Solution Blog), Yandex.Zen.

Chanzo: mapenzi.com

Kuongeza maoni