در آخر
این دوره نصب پشته ELK را پوشش نمی دهد، زیرا تعداد زیادی مقاله در مورد این موضوع وجود دارد؛ ما جزء پیکربندی را در نظر خواهیم گرفت.
بیایید یک برنامه عملیاتی برای پیکربندی Logstash ترسیم کنیم:
- بررسی اینکه elasticsearch لاگها را میپذیرد (بررسی عملکرد و باز بودن درگاه).
- ما در نظر می گیریم که چگونه می توانیم رویدادها را به Logstash ارسال کنیم، یک روش را انتخاب کرده و آن را پیاده سازی کنیم.
- ما Input را در فایل پیکربندی Logstash پیکربندی می کنیم.
- ما خروجی را در فایل پیکربندی Logstash در حالت اشکال زدایی پیکربندی می کنیم تا بفهمیم پیام log چگونه به نظر می رسد.
- راه اندازی فیلتر
- تنظیم خروجی صحیح در ElasticSearch.
- Logstash راه اندازی شد.
- بررسی سیاهههای مربوط در کیبانا.
بیایید به هر نقطه با جزئیات بیشتری نگاه کنیم:
بررسی اینکه 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 میتوانید گزارشها را از طریق syslog با استفاده از ابزار log_exporter به Logstash ارسال کنید، میتوانید اطلاعات بیشتری در مورد آن در اینجا بخوانید.
cp_log_export افزودن نام check_point_syslog target-server < > پروتکل target-port 5555 فرمت tcp حالت خواندن عمومی نیمه یکپارچه
< > - آدرس سروری که Logstash روی آن اجرا می شود، target-port 5555 - پورتی که ما لاگ ها را به آن ارسال خواهیم کرد، ارسال گزارش ها از طریق tcp می تواند سرور را بارگذاری کند، بنابراین در برخی موارد استفاده از udp صحیح تر است.
راه اندازی INPUT در فایل پیکربندی Logstash
به طور پیش فرض، فایل پیکربندی در دایرکتوری /etc/logstash/conf.d/ قرار دارد. فایل پیکربندی شامل 3 بخش معنی دار است: INPUT، FILTER، OUTPUT. که در INPUT ما نشان میدهیم که سیستم از کجا گزارشها را دریافت میکند FILTER تجزیه log - نحوه تقسیم پیام به فیلدها و مقادیر را تنظیم کنید OUTPUT ما جریان خروجی را پیکربندی می کنیم - جایی که لاگ های تجزیه شده ارسال می شوند.
ابتدا اجازه دهید INPUT را پیکربندی کنیم، برخی از انواعی را که میتوان به کار برد در نظر گرفت - file، 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 می پذیریم - پورت باید توسط خط مشی فایروال مجاز باشد.
نوع => "نقطه بازرسی"
اگر چندین اتصال ورودی دارید، سند را علامت گذاری می کنیم، بسیار راحت است. پس از آن، برای هر اتصال می توانید فیلتر خود را با استفاده از ساختار if منطقی بنویسید.
فایل:
input {
file {
path => "/var/log/openvas_report/*"
type => "openvas"
start_position => "beginning"
}
}
شرح تنظیمات:
path => "/var/log/openvas_report/*"
دایرکتوری را نشان می دهیم که فایل ها باید در آن خوانده شوند.
نوع => "openvas"
نوع رویداد
start_position => "شروع"
هنگام تغییر یک فایل، کل فایل را می خواند، اگر "end" را تنظیم کنید، سیستم منتظر می ماند تا رکوردهای جدید در انتهای فایل ظاهر شوند.
مجری:
input {
exec {
command => "ls -alh"
interval => 30
}
}
با استفاده از این ورودی، یک فرمان پوسته (فقط!) راه اندازی شده و خروجی آن به یک پیام گزارش تبدیل می شود.
فرمان => "ls -alh"
دستوری که ما به خروجی آن علاقه داریم.
فاصله => 30
فاصله فراخوانی فرمان بر حسب ثانیه
برای دریافت لاگ ها از فایروال، یک فیلتر ثبت می کنیم tcp یا udpبسته به نحوه ارسال گزارش ها به Logstash.
ما خروجی را در فایل پیکربندی Logstash در حالت اشکال زدایی پیکربندی می کنیم تا بفهمیم پیام گزارش به چه شکل است.
بعد از اینکه INPUT را پیکربندی کردیم، باید بفهمیم که پیام log چگونه خواهد بود و از چه روش هایی برای پیکربندی فیلتر log (تجزیه کننده) باید استفاده کرد.
برای انجام این کار، از فیلتری استفاده می کنیم که نتیجه را به 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,
با نگاهی به این پیامها متوجه میشویم که گزارشها به صورت زیر هستند: فیلد = مقدار یا کلید = ارزش، یعنی فیلتری به نام kv مناسب است. برای انتخاب فیلتر مناسب برای هر مورد خاص، بهتر است در اسناد فنی با آنها آشنا شوید یا از یک دوست بپرسید.
راه اندازی فیلتر
در آخرین مرحله که 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"
}
}
}
اگر سند با نوع checkpoint امضا شده باشد، رویداد را در پایگاه داده 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 logstash
بیایید بررسی کنیم که آیا سوکت روشن است یا خیر:
netstat -nat |grep 5555
بررسی سیاهههای مربوط در کیبانا.
بعد از اینکه همه چیز اجرا شد، به Kibana - Discover بروید، مطمئن شوید که همه چیز به درستی پیکربندی شده است، تصویر قابل کلیک است!
همه log ها در جای خود هستند و ما می توانیم تمام فیلدها و مقادیر آنها را ببینیم!
نتیجه
ما نحوه نوشتن یک فایل پیکربندی Logstash را بررسی کردیم و در نتیجه تجزیه کننده تمام فیلدها و مقادیر دریافت کردیم. اکنون می توانیم با جستجو و ترسیم فیلدهای خاص کار کنیم. در دوره بعدی به تجسم در کیبانا و ایجاد یک داشبورد ساده خواهیم پرداخت. شایان ذکر است که فایل پیکربندی Logstash در شرایط خاصی نیاز به به روز رسانی مداوم دارد، مثلاً زمانی که می خواهیم مقدار یک فیلد را از یک عدد به یک کلمه جایگزین کنیم. در مقالات بعدی این کار را دائما انجام خواهیم داد.
پس با ما همراه باشید (
منبع: www.habr.com