2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

Өткенде мақала кездестік ELK стек, ол қандай бағдарламалық өнімдерден тұрады. Ал ELK стекімен жұмыс істегенде инженердің алдында тұрған бірінші тапсырма журналдарды кейіннен талдау үшін elasticsearch жүйесінде сақтауға жіберу болып табылады. Дегенмен, бұл жай ғана сөз, elasticsearch журналдарды белгілі өрістер мен мәндері бар құжаттар түрінде сақтайды, яғни инженер соңғы жүйелерден жіберілетін хабарламаны талдау үшін әртүрлі құралдарды пайдалануы керек. Мұны бірнеше жолмен жасауға болады - API арқылы дерекқорға құжаттарды қосатын бағдарламаны өзіңіз жазыңыз немесе дайын шешімдерді қолданыңыз. Бұл курста біз шешімді қарастырамыз Logstash, ол ELK стекінің бөлігі болып табылады. Біз журналдарды соңғы нүкте жүйелерінен Logstash жүйесіне қалай жіберуге болатынын қарастырамыз, содан кейін Elasticsearch дерекқорына талдау және қайта бағыттау үшін конфигурация файлын орнатамыз. Ол үшін кіріс жүйе ретінде Check Point брандмауэрінен журналдарды аламыз.

Курс ELK стекін орнатуды қамтымайды, өйткені бұл тақырып бойынша көптеген мақалалар бар, біз конфигурация компонентін қарастырамыз.

Logstash конфигурациясының әрекет жоспарын құрастырайық:

  1. Elasticsearch журналдарды қабылдайтынын тексеру (порттың функционалдығы мен ашықтығын тексеру).
  2. Біз Logstash-қа оқиғаларды қалай жіберуге, әдісті таңдауға және оны іске асыруға болатынын қарастырамыз.
  3. Logstash конфигурация файлында енгізуді конфигурациялаймыз.
  4. Журнал хабарламасы қалай көрінетінін түсіну үшін біз Logstash конфигурация файлында Отладка режимінде Output параметрін конфигурациялаймыз.
  5. Сүзгіні орнату.
  6. ElasticSearch ішінде дұрыс шығысты орнату.
  7. Logstash іске қосылады.
  8. Кибанадағы журналдарды тексеру.

Әр тармақты толығырақ қарастырайық:

Elasticsearch журналдарды қабылдайтынын тексеру

Бұл әрекетті орындау үшін, Logstash орналастырылған жүйеден Elasticsearch қызметіне кіруді тексеру үшін curl пәрменін пайдалануға болады. Егер сізде аутентификация конфигурацияланса, пайдаланушыны/құпия сөзді өзгертпеген болсаңыз, 9200 портын көрсете отырып, curl арқылы да тасымалдаймыз. Төмендегіге ұқсас жауап алсаңыз, бәрі жақсы.

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

Жауап алынбаса, қателердің бірнеше түрі болуы мүмкін: elasticsearch процесі жұмыс істемейді, қате порт көрсетілген немесе портты elasticsearch орнатылған сервердегі брандмауэр бұғаттаған.

Logstash жүйесіне тексеру нүктесінің брандмауэрінен журналдарды қалай жіберуге болатынын қарастырайық

Check Point басқару серверінен log_exporter утилитасының көмегімен журналдарды Logstash жүйесіне syslog арқылы жіберуге болады, ол туралы толығырақ мына жерден оқи аласыз. мақала, мұнда тек ағынды жасайтын пәрменді қалдырамыз:

cp_log_export қосу атауы check_point_syslog мақсатты сервер < > мақсатты порт 5555 протоколы tcp пішімі жалпы оқу режимі жартылай біріктірілген

< > - Logstash жұмыс істейтін сервердің мекенжайы, мақсатты порт 5555 - біз журналдарды жіберетін порт, tcp арқылы журналдарды жіберу серверді жүктей алады, сондықтан кейбір жағдайларда udp пайдалану дұрысырақ.

Logstash конфигурация файлында INPUT параметрін орнату

2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

Әдепкі бойынша конфигурация файлы /etc/logstash/conf.d/ каталогында орналасқан. Конфигурация файлы 3 мағыналы бөліктен тұрады: INPUT, FILTER, OUTPUT. IN INPUT жүйе журналдарды қай жерден алатынын көрсетеміз СҮЗГІ журналды талдау - хабарламаны өрістер мен мәндерге бөлу жолын орнату OUTPUT біз шығыс ағынын конфигурациялаймыз - онда талданған журналдар жіберіледі.

Алдымен INPUT конфигурациясын алайық, файл, tcp және exe болуы мүмкін кейбір түрлерін қарастырайық.

TCP:

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

режим => «сервер»
Logstash қосылымдарды қабылдайтынын көрсетеді.

порт => 5555
хост => “10.10.1.205”
Біз қосылымдарды IP мекенжайы 10.10.1.205 (Logstash), 5555 порты арқылы қабылдаймыз - портқа брандмауэр саясаты рұқсат беруі керек.

type => "бақылау нүктесі"
Біз құжатты белгілейміз, егер сізде бірнеше кіріс қосылымдар болса, өте ыңғайлы. Әрі қарай, әрбір қосылым үшін логикалық if конструкциясын пайдаланып өзіңіздің сүзгіңізді жаза аласыз.

Файл:

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

Параметрлердің сипаттамасы:
жол => "/var/log/openvas_report/*"
Біз файлдарды оқу керек каталогты көрсетеміз.

type => "openvas"
Оқиға түрі.

start_position => "бастау"
Файлды өзгерткен кезде ол бүкіл файлды оқиды, егер сіз «соңы» параметрін орнатсаңыз, жүйе файлдың соңында жаңа жазбалардың пайда болуын күтеді.

Орындаушы:

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

Бұл енгізуді пайдалану арқылы (тек!) қабық командасы іске қосылады және оның шығысы журнал хабарламасына айналады.

пәрмен => "ls -alh"
Бізді шығысы қызықтыратын пәрмен.

интервал => 30
Пәрменді шақыру аралығы секундтарда.

Брандмауэрден журналдарды алу үшін біз сүзгіні тіркейміз tcp немесе пуд, журналдардың Logstash қызметіне қалай жіберілетініне байланысты.

Журнал хабарламасы қалай көрінетінін түсіну үшін біз Logstash конфигурация файлында Отладка режимінде Output конфигурациялаймыз.

INPUT параметрін конфигурациялаған соң, журнал хабарламасы қандай болатынын және журнал сүзгісін (талдаушы) конфигурациялау үшін қандай әдістерді қолдану керектігін түсінуіміз керек.

Бұл әрекетті орындау үшін бастапқы хабарламаны көру үшін нәтижені stdout файлына шығаратын сүзгіні қолданамыз; қазіргі уақытта толық конфигурация файлы келесідей болады:

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

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

Тексеру үшін пәрменді іске қосыңыз:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Біз нәтижені көреміз, суретті басуға болады:

2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

Егер сіз оны көшірсеңіз, ол келесідей болады:

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,

Бұл хабарламаларға қарап, журналдар келесідей көрінетінін түсінеміз: өріс = мән немесе кілт = мән, яғни kv деп аталатын сүзгі қолайлы. Әрбір нақты жағдай үшін дұрыс сүзгіні таңдау үшін олармен техникалық құжаттамада танысу немесе досыңыздан сұрау жақсы идея болар еді.

Сүзгіні орнату

Соңғы кезеңде біз кв таңдадық, бұл сүзгінің конфигурациясы төменде көрсетілген:

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

Біз өріс пен мәнді бөлетін таңбаны таңдаймыз - «=». Егер журналда бірдей жазбалар болса, біз дерекқорда тек бір дананы сақтаймыз, әйтпесе сіз бірдей мәндердің массивіне ие боласыз, яғни бізде «foo = some foo = some» хабары болса, біз тек foo деп жазамыз. = кейбір.

ElasticSearch ішінде дұрыс шығысты орнату

Сүзгі конфигурацияланғаннан кейін журналдарды дерекқорға жүктеп салуға болады эластикалық ізденіс:

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

Құжат бақылау нүктесі түрімен қол қойылған болса, оқиғаны әдепкі бойынша 10.10.1.200 портындағы 9200 қосылымдарын қабылдайтын elasticsearch дерекқорына сақтаймыз. Әрбір құжат белгілі бір индексте сақталады, бұл жағдайда біз «бақылау нүктесі-» + ағымдағы уақыт күні индексіне сақтаймыз. Әрбір индексте өрістердің белгілі бір жинағы болуы мүмкін немесе хабарда жаңа өріс пайда болған кезде автоматты түрде жасалады; өріс параметрлері мен олардың түрін салыстыруларда көруге болады.

Егер сізде аутентификация конфигурацияланған болса (оны кейінірек қарастырамыз), белгілі бір индекске жазу үшін тіркелгі деректері көрсетілуі керек, бұл мысалда бұл «cool» құпия сөзі бар «tssolution». Журналдарды тек белгілі бір индекске жазу үшін пайдаланушы құқықтарын ажырата аласыз және одан артық емес.

Logstash іске қосыңыз.

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

Конфигурация файлының дұрыстығын тексереміз:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

Logstash процесін бастаңыз:
sudo systemctl бастау logstash

Біз процестің басталғанын тексереміз:
sudo systemctl күйінің журналы

2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

Розетканың қосылғанын тексерейік:
netstat -nat |grep 5555

2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

Кибанадағы журналдарды тексеру.

Барлығы іске қосылғаннан кейін, Kibana - Discover бөліміне өтіңіз, бәрі дұрыс конфигурацияланғанына, суреттің басылатынына көз жеткізіңіз!

2. Эластикалық стек: қауіпсіздік журналдарын талдау. Logstash

Барлық журналдар орнында және біз барлық өрістерді және олардың мәндерін көре аламыз!

қорытынды

Біз Logstash конфигурация файлын қалай жазу керектігін қарастырдық, нәтижесінде барлық өрістер мен мәндердің талдаушысы алдық. Енді біз белгілі бір өрістерді іздеу және сызу арқылы жұмыс істей аламыз. Келесі курста біз Кибанадағы визуализацияны қарастырамыз және қарапайым бақылау тақтасын жасаймыз. Айта кету керек, Logstash конфигурация файлы белгілі бір жағдайларда, мысалы, өріс мәнін саннан сөзге ауыстырғымыз келгенде, үнемі жаңартылып отыруы керек. Келесі мақалаларда біз мұны үнемі жасаймыз.

Сондықтан хабардар болыңыз (Telegram, Facebook, VK, TS Solution блогы), Яндекс Зен.

Ақпарат көзі: www.habr.com

пікір қалдыру