2. Elastinen pino: turvalokien analyysi. Logstash

2. Elastinen pino: turvalokien analyysi. Logstash

Viimeisessä статье tapasimme ELK pino, mistä ohjelmistotuotteista se koostuu. Ja ensimmäinen tehtävä, jonka insinööri kohtaa työskennellessään ELK-pinon kanssa, on lokien lähettäminen elasticsearchiin tallennettavaksi myöhempää analysointia varten. Tämä on kuitenkin pelkkää huutoa, elasticsearch tallentaa lokit dokumenttien muodossa tietyillä kentillä ja arvoilla, mikä tarkoittaa, että insinöörin on käytettävä erilaisia ​​työkaluja jäsentääkseen loppujärjestelmistä lähetettävän viestin. Tämä voidaan tehdä useilla tavoilla - kirjoita itse ohjelma, joka lisää dokumentteja tietokantaan API:n avulla tai käytä valmiita ratkaisuja. Tällä kurssilla pohdimme ratkaisua Logstash, joka on osa ELK-pinoa. Tarkastelemme, kuinka voimme lähettää lokit päätepistejärjestelmistä Logstashiin, ja sitten määritämme määritystiedoston jäsentääksesi ja ohjataksemme Elasticsearch-tietokantaan. Tätä varten otamme saapuvana järjestelmänä lokit Check Pointin palomuurista.

Kurssi ei kata ELK-pinon asennusta, koska tästä aiheesta on valtava määrä artikkeleita; harkitsemme konfigurointikomponenttia.

Tehdään toimintasuunnitelma Logstash-konfiguroinnille:

  1. Tarkistamalla, että elasticsearch hyväksyy lokit (portin toimivuuden ja avoimuuden tarkistaminen).
  2. Pohdimme, kuinka voimme lähettää tapahtumia Logstashille, valita menetelmän ja toteuttaa sen.
  3. Määritämme tulon Logstash-määritystiedostossa.
  4. Määritämme Output Logstash-määritystiedostossa virheenkorjaustilassa ymmärtääksemme, miltä lokiviesti näyttää.
  5. Suodattimen määrittäminen.
  6. Oikean lähdön asettaminen ElasticSearchissa.
  7. Logstash käynnistyy.
  8. Tukkien tarkistus Kibanassa.

Katsotaanpa jokaista kohtaa tarkemmin:

Tarkistamalla, että elasticsearch hyväksyy lokit

Voit tehdä tämän käyttämällä curl-komentoa tarkistaaksesi pääsyn Elasticsearchiin järjestelmästä, jossa Logstash on otettu käyttöön. Jos todennus on määritetty, siirrämme myös käyttäjän/salasanan curlin kautta, määrittämällä portin 9200, jos et ole vaihtanut sitä. Jos saat alla olevan kaltaisen vastauksen, kaikki on kunnossa.

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

Jos vastausta ei saada, voi olla useita virhetyyppejä: elasticsearch-prosessi ei ole käynnissä, väärä portti on määritetty tai palomuuri on estänyt portin palvelimella, johon elasticsearch on asennettu.

Katsotaanpa, kuinka voit lähettää lokit Logstashiin tarkistuspisteen palomuurista

Check Pointin hallintapalvelimelta voit lähettää lokit Logstashille syslogin kautta log_exporter-apuohjelman avulla, voit lukea siitä lisää täältä статье, jätämme tähän vain komennon, joka luo streamin:

cp_log_export lisäysnimi check_point_syslog kohdepalvelin < > kohdeportti 5555-protokollan tcp-muoto yleinen lukutila puoliksi yhtenäistetty

< > - palvelimen osoite jolla Logstash toimii, kohdeportti 5555 - portti johon lähetämme lokit, lokien lähettäminen tcp:n kautta voi ladata palvelimen, joten joissain tapauksissa on oikeampaa käyttää udp:tä.

INPUT:n määrittäminen Logstash-määritystiedostossa

2. Elastinen pino: turvalokien analyysi. Logstash

Oletusarvoisesti asetustiedosto sijaitsee /etc/logstash/conf.d/-hakemistossa. Konfigurointitiedosto koostuu kolmesta merkityksellisestä osasta: INPUT, FILTER, OUTPUT. SISÄÄN INPUT ilmoitamme, mistä järjestelmä ottaa lokit SUODATIN jäsennä loki - määritä, kuinka viesti jaetaan kenttiin ja arvoihin LÄHTÖ määritämme lähtövirran - minne jäsennetyt lokit lähetetään.

Ensin määritetään INPUT, harkitse joitain tyyppejä, jotka voivat olla - tiedosto, tcp ja exe.

TCP:

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

tila => "palvelin"
Osoittaa, että Logstash hyväksyy yhteyksiä.

portti => 5555
isäntä => "10.10.1.205"
Hyväksymme yhteydet IP-osoitteen 10.10.1.205 (Logstash), portin 5555 kautta - portin tulee olla palomuurikäytännön sallima.

tyyppi => "tarkistuspiste"
Merkitsemme asiakirjan, erittäin kätevää, jos sinulla on useita saapuvia yhteyksiä. Tämän jälkeen jokaiselle yhteydelle voit kirjoittaa oman suodattimen käyttämällä loogista if-rakennetta.

Tiedosto:

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

Asetusten kuvaus:
polku => "/var/log/openvas_report/*"
Osoitamme hakemiston, jossa tiedostot on luettava.

tyyppi => "openvas"
Tapahtumatyyppi.

start_position => "alku"
Kun muutat tiedostoa, se lukee koko tiedoston; jos asetat "end", järjestelmä odottaa uusien tietueiden ilmestymistä tiedoston loppuun.

Suorittaja:

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

Tätä syötettä käyttämällä käynnistetään (vain!) shell-komento ja sen tulos muunnetaan lokiviestiksi.

komento => "ls -alh"
Komento, jonka tuotosta olemme kiinnostuneita.

väli => 30
Komennon kutsun aikaväli sekunneissa.

Palomuurin lokien vastaanottamiseksi rekisteröimme suodattimen tcp tai udp, riippuen siitä, kuinka lokit lähetetään Logstashille.

Määritämme ulostulon Logstash-määritystiedostossa virheenkorjaustilassa ymmärtääksemme, miltä lokiviesti näyttää

Kun olemme määrittäneet INPUT:n, meidän on ymmärrettävä, miltä lokiviesti näyttää ja mitä menetelmiä lokisuodattimen (jäsennin) määrittämiseen on käytettävä.

Tätä varten käytämme suodatinta, joka tulostaa tuloksen stdoutiin nähdäksemme alkuperäisen viestin; täydellinen asetustiedosto näyttää tällä hetkellä tältä:

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

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

Suorita komento tarkistaaksesi:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Näemme tuloksen, kuvaa voi klikata:

2. Elastinen pino: turvalokien analyysi. Logstash

Jos kopioit sen, se näyttää tältä:

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,

Näitä viestejä tarkastellessamme ymmärrämme, että lokit näyttävät tältä: kenttä = arvo tai avain = arvo, mikä tarkoittaa, että kv-niminen suodatin on sopiva. Oikean suodattimen valitsemiseksi kuhunkin yksittäiseen tapaukseen on hyvä tutustua niihin teknisessä dokumentaatiossa tai kysyä ystävältäsi.

Suodattimen määrittäminen

Viimeisessä vaiheessa valitsimme kv, tämän suodattimen kokoonpano on esitetty alla:

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

Valitsemme symbolin, jolla jaamme kentän ja arvon - "=". Jos meillä on identtiset merkinnät lokissa, tallennamme vain yhden esiintymän tietokantaan, muuten saat joukon identtisiä arvoja, eli jos meillä on viesti "foo = some foo=some", kirjoitamme vain foo = jotkut.

Oikean lähdön asettaminen ElasticSearchissa

Kun suodatin on määritetty, voit ladata lokit tietokantaan elasticsearch:

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

Jos dokumentti on allekirjoitettu tarkistuspistetyypillä, tallennamme tapahtuman elasticsearch-tietokantaan, joka hyväksyy oletuksena yhteydet 10.10.1.200 portissa 9200. Jokainen dokumentti tallennetaan tiettyyn hakemistoon, tässä tapauksessa tallennetaan hakemistoon "checkpoint-" + nykyinen aikapäivämäärä. Jokaisella indeksillä voi olla tietty joukko kenttiä tai se luodaan automaattisesti, kun viestiin ilmestyy uusi kenttä; kenttäasetukset ja niiden tyyppi voidaan tarkastella kartoituksissa.

Jos todennus on määritetty (tarkastelemme sitä myöhemmin), on määritettävä kirjautumistiedot tiettyyn hakemistoon kirjoittamista varten, tässä esimerkissä se on "tssolution" salasanalla "cool". Voit erottaa käyttäjien oikeudet kirjoittaa lokeja vain tiettyyn hakemistoon, ei enempää.

Käynnistä Logstash.

Logstash-määritystiedosto:

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

Tarkistamme asetustiedoston oikeellisuuden:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Elastinen pino: turvalokien analyysi. Logstash

Aloita Logstash-prosessi:
sudo systemctl käynnistää logstash

Tarkistamme, että prosessi on alkanut:
sudo systemctl status logstash

2. Elastinen pino: turvalokien analyysi. Logstash

Katsotaan, onko pistorasia ylhäällä:
netstat -nat |grep 5555

2. Elastinen pino: turvalokien analyysi. Logstash

Tukkien tarkistus Kibanassa.

Kun kaikki on käynnissä, mene Kibanaan - Tutustu, varmista, että kaikki on määritetty oikein, kuva on napsautettava!

2. Elastinen pino: turvalokien analyysi. Logstash

Kaikki lokit ovat paikoillaan ja näemme kaikki kentät ja niiden arvot!

Johtopäätös

Tarkastelimme Logstash-määritystiedoston kirjoittamista, ja tuloksena saimme jäsentimen kaikista kentistä ja arvoista. Nyt voimme etsiä ja piirtää tiettyjä kenttiä. Seuraavaksi kurssilla tarkastellaan visualisointia Kibanassa ja luodaan yksinkertainen kojelauta. On syytä mainita, että Logstash-määritystiedostoa on jatkuvasti päivitettävä tietyissä tilanteissa, esimerkiksi kun haluamme korvata kentän arvon numerosta sanaksi. Seuraavissa artikkeleissa teemme tämän jatkuvasti.

Pysy siis kuulollaTelegram, Facebook, VK, TS Solution -blogi), Yandex Zen.

Lähde: will.com

Lisää kommentti