ในที่สุด
หลักสูตรนี้ไม่ครอบคลุมการติดตั้งสแต็ก ELK เนื่องจากมีบทความจำนวนมากในหัวข้อนี้ เราจะพิจารณาองค์ประกอบการกำหนดค่า
มาจัดทำแผนปฏิบัติการสำหรับการกำหนดค่า Logstash:
- การตรวจสอบว่า elasticsearch จะยอมรับบันทึก (ตรวจสอบการทำงานและความเปิดของพอร์ต)
- เราพิจารณาว่าจะส่งเหตุการณ์ไปยัง Logstash เลือกวิธีการ และนำไปใช้ได้อย่างไร
- เรากำหนดค่าอินพุตในไฟล์กำหนดค่า Logstash
- เรากำหนดค่าเอาต์พุตในไฟล์การกำหนดค่า Logstash ในโหมดแก้ไขข้อบกพร่องเพื่อให้เข้าใจว่าข้อความบันทึกมีลักษณะอย่างไร
- การตั้งค่าตัวกรอง
- การตั้งค่าเอาต์พุตที่ถูกต้องใน ElasticSearch
- เปิดตัว Logstash
- ตรวจสอบบันทึกใน Kibana
มาดูรายละเอียดแต่ละจุดกันดีกว่า:
การตรวจสอบว่า elasticsearch จะยอมรับบันทึก
ในการดำเนินการนี้ คุณสามารถใช้คำสั่ง curl เพื่อตรวจสอบการเข้าถึง Elasticsearch จากระบบที่ใช้งาน Logstash หากคุณได้กำหนดค่าการรับรองความถูกต้องแล้ว เรายังถ่ายโอนผู้ใช้/รหัสผ่านผ่านทาง curl โดยระบุพอร์ต 9200 หากคุณไม่ได้เปลี่ยนแปลง หากคุณได้รับคำตอบที่คล้ายกับด้านล่างนี้ แสดงว่าทุกอย่างเป็นไปตามลำดับ
[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 คุณสามารถส่งบันทึกไปยัง Logstash ผ่าน syslog โดยใช้ยูทิลิตี้ log_exporter คุณสามารถอ่านเพิ่มเติมได้ที่นี่
cp_log_export เพิ่มชื่อ check_point_syslog เซิร์ฟเวอร์เป้าหมาย < > รูปแบบ TCP โปรโตคอลพอร์ตเป้าหมาย 5555 โหมดอ่านทั่วไปแบบกึ่งรวมศูนย์
< > - ที่อยู่ของเซิร์ฟเวอร์ที่ Logstash ทำงาน, พอร์ตเป้าหมาย 5555 - พอร์ตที่เราจะส่งบันทึกไป, การส่งบันทึกผ่าน TCP สามารถโหลดเซิร์ฟเวอร์ได้ ดังนั้นในบางกรณี การใช้ udp จะถูกต้องมากกว่า
การตั้งค่า INPUT ในไฟล์กำหนดค่า Logstash
ตามค่าเริ่มต้น ไฟล์คอนฟิกูเรชันจะอยู่ในไดเร็กทอรี /etc/logstash/conf.d/ ไฟล์การกำหนดค่าประกอบด้วย 3 ส่วนที่มีความหมาย: INPUT, FILTER, OUTPUT ใน INPUT เราระบุว่าระบบจะนำบันทึกมาจากที่ใด FILTER แยกวิเคราะห์บันทึก - ตั้งค่าวิธีแบ่งข้อความออกเป็นช่องและค่าต่างๆ ใน เอาท์พุท เรากำหนดค่าสตรีมเอาต์พุต - โดยที่ไฟล์บันทึกที่แยกวิเคราะห์จะถูกส่งไป
ขั้นแรก มากำหนดค่า INPUT พิจารณาบางประเภทที่สามารถเป็นได้ - ไฟล์, TCP และ exe
ทีซีพี:
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/*"
เราระบุไดเร็กทอรีที่ต้องอ่านไฟล์
ประเภท => "openvas"
ประเภทเหตุการณ์
start_position => "จุดเริ่มต้น"
เมื่อเปลี่ยนไฟล์มันจะอ่านทั้งไฟล์ หากคุณตั้งค่า "สิ้นสุด" ระบบจะรอให้บันทึกใหม่ปรากฏที่ท้ายไฟล์
ผู้บริหาร:
input {
exec {
command => "ls -alh"
interval => 30
}
}
การใช้อินพุตนี้ คำสั่งเชลล์ (เท่านั้น!) จะถูกเรียกใช้ และเอาต์พุตจะเปลี่ยนเป็นข้อความบันทึก
คำสั่ง => "ls -alh"
คำสั่งที่เราสนใจเอาต์พุต
ช่วงเวลา => 30
ช่วงเวลาการเรียกใช้คำสั่งเป็นวินาที
ในการรับบันทึกจากไฟร์วอลล์ เราจะลงทะเบียนตัวกรอง TCP หรือ UDPขึ้นอยู่กับวิธีการส่งบันทึกไปยัง Logstash
เรากำหนดค่าเอาต์พุตในไฟล์การกำหนดค่า Logstash ในโหมดแก้ไขข้อบกพร่องเพื่อให้เข้าใจว่าข้อความบันทึกมีลักษณะอย่างไร
หลังจากที่เรากำหนดค่า INPUT แล้ว เราจำเป็นต้องเข้าใจว่าข้อความบันทึกจะมีลักษณะอย่างไร และต้องใช้วิธีใดในการกำหนดค่าตัวกรองบันทึก (parser)
ในการดำเนินการนี้ เราจะใช้ตัวกรองที่ส่งออกผลลัพธ์ไปที่ 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
เราเห็นผลลัพธ์แล้วคลิกรูปภาพได้:
หากคัดลอกก็จะมีลักษณะดังนี้:
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,
เมื่อดูข้อความเหล่านี้ เราเข้าใจว่าบันทึกมีลักษณะดังนี้: field = value หรือ key = value ซึ่งหมายความว่าตัวกรองที่เรียกว่า kv นั้นเหมาะสม ในการเลือกตัวกรองที่เหมาะสมสำหรับแต่ละกรณี เป็นความคิดที่ดีที่จะทำความคุ้นเคยกับตัวกรองเหล่านี้ในเอกสารทางเทคนิคหรือถามเพื่อน
การตั้งค่าตัวกรอง
ในขั้นตอนสุดท้ายที่เราเลือก kv การกำหนดค่าของตัวกรองนี้จะแสดงด้านล่าง:
filter {
if [type] == "checkpoint"{
kv {
value_split => "="
allow_duplicate_values => false
}
}
}
เราเลือกสัญลักษณ์ที่เราจะแบ่งฟิลด์และค่า - “=” หากเรามีรายการที่เหมือนกันในบันทึก เราจะบันทึกอินสแตนซ์เดียวในฐานข้อมูล มิฉะนั้นคุณจะพบอาร์เรย์ของค่าที่เหมือนกัน นั่นคือหากเรามีข้อความ "foo = some foo=some" เราจะเขียนเฉพาะ foo = บ้าง
การตั้งค่าเอาต์พุตที่ถูกต้องใน ElasticSearch
เมื่อกำหนดค่าตัวกรองแล้ว คุณสามารถอัปโหลดบันทึกไปยังฐานข้อมูลได้ ElasticSearch:
output
{
if [type] == "checkpoint"
{
elasticsearch
{
hosts => ["10.10.1.200:9200"]
index => "checkpoint-%{+YYYY.MM.dd}"
user => "tssolution"
password => "cool"
}
}
}
หากเอกสารลงนามด้วยประเภทจุดตรวจสอบ เราจะบันทึกเหตุการณ์ลงในฐานข้อมูล elasticsearch ซึ่งยอมรับการเชื่อมต่อบน 10.10.1.200 บนพอร์ต 9200 ตามค่าเริ่มต้น เอกสารแต่ละฉบับจะถูกบันทึกลงในดัชนีเฉพาะ ในกรณีนี้ เราจะบันทึกลงในดัชนี “จุดตรวจสอบ-” + วันที่เวลาปัจจุบัน แต่ละดัชนีสามารถมีชุดฟิลด์เฉพาะได้ หรือสร้างขึ้นโดยอัตโนมัติเมื่อฟิลด์ใหม่ปรากฏในข้อความ การตั้งค่าฟิลด์และประเภทของฟิลด์สามารถดูได้ในการแมป
หากคุณมีการกำหนดค่าการตรวจสอบสิทธิ์ (เราจะดูในภายหลัง) จะต้องระบุข้อมูลรับรองสำหรับการเขียนไปยังดัชนีเฉพาะ ในตัวอย่างนี้คือ "tssolution" พร้อมรหัสผ่าน "cool" คุณสามารถแยกความแตกต่างสิทธิ์ของผู้ใช้ในการเขียนบันทึกเฉพาะไปยังดัชนีที่ระบุเท่านั้น และไม่มากไปกว่านั้น
เปิดตัว 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
เริ่มกระบวนการ Logstash:
sudo systemctl เริ่ม logstash
เราตรวจสอบว่ากระบวนการได้เริ่มต้นแล้ว:
บันทึกสถานะ sudo systemctl
ตรวจสอบว่าซ็อกเก็ตอยู่หรือไม่:
netstat -nat |grep 5555
ตรวจสอบบันทึกใน Kibana
หลังจากที่ทุกอย่างทำงานแล้ว ให้ไปที่ Kibana - Discover ตรวจสอบให้แน่ใจว่าทุกอย่างได้รับการกำหนดค่าอย่างถูกต้อง สามารถคลิกรูปภาพได้!
บันทึกทั้งหมดอยู่ในตำแหน่งแล้ว และเราสามารถเห็นฟิลด์และค่าทั้งหมดได้!
ข้อสรุป
เราดูวิธีการเขียนไฟล์การกำหนดค่า Logstash และด้วยเหตุนี้เราจึงได้ parser ของฟิลด์และค่าทั้งหมด ตอนนี้เราสามารถค้นหาและวางแผนสำหรับฟิลด์เฉพาะได้แล้ว ต่อไปในหลักสูตรเราจะดูการแสดงภาพใน Kibana และสร้างแดชบอร์ดที่เรียบง่าย เป็นที่น่าสังเกตว่าไฟล์การกำหนดค่า Logstash จำเป็นต้องได้รับการอัปเดตอย่างต่อเนื่องในบางสถานการณ์ เช่น เมื่อเราต้องการแทนที่ค่าของฟิลด์จากตัวเลขเป็นคำ ในบทความต่อๆ ไป เราจะทำเช่นนี้อย่างต่อเนื่อง
ดังนั้นคอยติดตาม
ที่มา: will.com