Elastic Stack – که قبلاً با عنوان ELK Stack شناخته می شد – مجموعه ای از نرم افزارهای منبع باز است که توسط Elastic ساخته شده است و به شما امکان می دهد ورودهای حاصل از هر منبع با هر فرمت را جستجو ، تجزیه و تحلیل و تجسم کنید ، روشی که به centralized logging شناخته می شود. centralized logging می تواند در هنگام تلاش برای شناسایی مشکلات سرور مجازی ها یا برنامه های کاربردی مفید باشد ، زیرا این امکان را به شما می دهد تا از طریق تمام ورودهای خود در یک مکان جستجو کنید. این ویژگی همچنین از این لحاظ مفید است که به شما امکان می دهد با پیوند دادن ورودهای چند سرور مجازی در یک بازه زمانی خاص مسائلی را که آن سرور مجازی ها را ارتباط میدهد شناسایی کنید.
Elastic Stack چهار مؤلفه اصلی دارد:
Elasticsearch: یک موتور جستجوی توزیع شده RESTful که تمام داده های جمع آوری شده را ذخیره می کند.
Logstash: مولفه پردازش داده ها از Stack Elastic که داده های ورودی را به Elasticsearch می فرستد.
Kibana: رابط وب برای جستجو و تجسم ورودها.
Beats: انتقال داده های سبک و یک منظوره که می توانند داده ها را از صدها یا هزاران دستگاه به Logstash یا Elasticsearch ارسال کنند.
در این آموزش Elastic Stack را روی سرور مجازی Ubuntu 18.04 نصب خواهید کرد. یاد می گیرید که چگونه تمام مؤلفه های Elastic Stack – از جمله Filebeat را نصب کنید، که یک ضربان برای ارسال و متمرکز کردن ورود ها و فایل ها است – و آن ها را برای جمع آوری و تجسم ورودهای مربوط به سیستم پیکربندی میکند. علاوه بر این ، به دلیل اینکه معمولاً Kibana فقط در localhost موجود است ، ما از Nginx برای پروکسی استفاده می کنیم ، بنابراین از طریق مرورگر وب قابل دسترسی خواهد بود. همه این مؤلفه ها را روی یک سرور مجازی واحد نصب خواهیم کرد که به عنوان سرور مجازی Elastic Stack ما به آن اشاره خواهیم کرد.
توجه: هنگام نصب Elastic Stack ، باید از نسخه مشابه در کل پشته استفاده کنید. در این آموزش آخرین نسخه های کل پشته را نصب خواهیم کرد که در زمان نوشتن این مقاله ، Elasticsearch 7.6.1 ، Kibana 7.6.1 ، Logstash 7.6.1 و Filebeat 7.6.1 هستند.
پیش نیازها
برای تکمیل این آموزش به موارد زیر نیاز دارید:
⦁ سرور مجازی Ubuntu 18.04 شامل کاربر sudo غیر ریشه و فایروال تنظیم شده با ufw که می توانید با پیروی از مقاله ستاپ اولیه سرور مجازی برای Ubuntu 18.04 به این هدف برسید. میزان CPU ، RAM و حافظه مورد نیاز سرور مجازی Elastic stack شما به حجم ورود هایی که انتظار دارید بستگی دارد. برای این آموزش از VPS با مشخصات زیر برای سرور مجازی Elastic stack خود استفاده میکنیم:
⦁ OS: Ubuntu 18.04
⦁ RAM: 4GB
⦁ CPU: 2
⦁ جاوا 8 – که توسط Elasticsearch و Logstash لازم است – روی سرور مجازی شما نصب شده باشد. توجه داشته باشید که جاوا 9 پشتیبانی نمی شود. برای نصب این گزینه ، “نصب Oracle JDK” بخش راهنمای ما درباره نحوه نصب جاوا 8 در اوبونتو 18.04 را دنبال کنید.
⦁ Nginx بر روی سرور مجازی شما نصب شده باشد ، که بعداً در این راهنما به عنوان یک پروکسی معکوس برای Kibana پیکربندی می کنیم. برای تنظیم این برنامه ، راهنمای ما در مورد نحوه نصب Nginx در اوبونتو 18.04 را دنبال کنید.
علاوه بر این ، از آنجا که از Elastic Stack برای دسترسی به اطلاعات ارزشمندی درباره سرور مجازی خود استفاده می کنید که نمی خواهید کاربران غیرمجاز به آنها دسترسی پیدا کنند ، مهم است که با نصب گواهی TLS / SSL ، سرور مجازی خود را ایمن نگه دارید. این کار اختیاری است اما به شدت توصیه میشود.
با این وجود ، از آن جا که در نهایت در طول این راهنما تغییراتی در بلوک سرور مجازی Nginx خود ایجاد خواهید کرد ، به احتمال زیاد منطقی تر خواهد بود که راهنمای Let’s Encrypt در Ubuntu 18.04 را در پایان مرحله دوم این آموزش پیگیری کنید. با توجه به این نکته ، اگر می خواهید پیکربندی Let’s Encrypt را روی سرور مجازی خود انجام دهید ، قبل از انجام این کار به موارد زیر نیاز دارید:
• نام دامنه کاملاً واجد شرایط ( (FQDN. در سراسر این آموزش از example.com استفاده خواهد شد. می توانید نام دامنه را در Namecheap خریداری کنید ، یکی را به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.
• هر دو رکورد DNS زیر برای سرور مجازی شما تنظیم شده باشد. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این مقدمه را در vpsgol DNS دنبال کنید.
o یک رکورد A با example.com که آدرس IP عمومی سرور مجازی شما را نشان می دهد.
o رکورد A با آدرس www.example.com که به آدرس IP عمومی سرور مجازی شما اشاره کند.
مرحله 1 – نصب و پیکربندی Elasticsearch
مولفه های Elasticsearch در مخازن بسته پیش فرض اوبونتو در دسترس نیستند. اما می توانند پس از افزودن لیست منبع بسته بندی Elastic ، با APT نصب کنید.
به منظور محافظت از سیستم خود در برابر جعل بسته ، همه بسته ها با کلید امضای Elasticsearch امضا شده اند. بسته هایی که با استفاده از کلید تأیید شده اند توسط مدیر بسته شما قابل اعتماد خواهند بود. در این مرحله ، کلید GPG عمومی Elasticsearch را وارد کرده و به منظور نصب Elasticsearch ، لیست منبع بسته بندی الاستیک را اضافه می کنید.
برای شروع ، دستور زیر را برای وارد کردن کلید عمومی GPG Elasticsearch در APT اجرا کنید.
⦁ $ wget -qO – https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –
در مرحله بعد ، لیست منبع الاستیک را به دیرکتوری Sources.list.d اضافه کنید ، جایی که APT در جستجوی منابع جدید است:
⦁ $ echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
⦁
⦁
سپس، لیست بسته های خود را به روز کنید تا APT منبع جدید الاستیک را بخواند:
⦁ $ sudo apt update
⦁
در مرحله بعد با این دستور Elasticsearch را نصب کنید:
⦁ $ sudo apt install elasticsearch
⦁
اکنون Elasticsearch نصب شده است و آماده پیکربندی است. از ویرایشگر متن دلخواه خود برای ویرایش فایل اصلی پیکربندی Elasticsearch ، elasticsearch.yml استفاده کنید. در اینجا ، ما از nano استفاده خواهیم کرد:
⦁ $ sudo nano /etc/elasticsearch/elasticsearch.yml
⦁
توجه: فایل پیکربندی Elasticsearch با فرمت YAML است ، به این معنی که ما باید قالب دندانه ای را حفظ کنیم. مطمئن شوید که با ویرایش این فایل هیچ فضای اضافی ایجاد نمی کنید.
Elasticsearch ترافیک را از هر جایی در پورت 9200 گوش می دهد. بهتر است دسترسی خارجی به نمونه Elasticsearch خود را محدود کنید تا از خوانده شدن اطلاعات توسط دیگر افراد یا خاموش کردن خوشه Elasticsearch از طریق REST API جلوگیری کنید. برای محدود کردن دسترسی و در نتیجه افزایش امنیت ، خطی را که network.hostرا مشخص می کند ، پیدا کنید ، آن را حذف کنید و مقدار آن را با localhost مانند این جایگزین کنید:
/etc/elasticsearch/elasticsearch.yml
. . .
network.host: localhost
. . .
elasticsearch.ym را ذخیره کرده و ببندید. اگر از nano استفاده می کنید ، می توانید با فشار دادن CTRL + X ، به دنبال آن Y و سپس ENTER این کار را انجام دهید. سپس سرویس Elasticsearch را با systemctl شروع کنید.
$ sudo systemctl start elasticsearch
⦁
سپس ، دستور زیر را اجرا کنید تا Elasticsearch بتواند هر بار که سرور مجازی خود را راه اندازی می کند اجرا شود:
⦁ $ sudo systemctl enable elasticsearch
⦁
با ارسال یک درخواست HTTP می توانید آزمایش کنید که آیا سرویس Elasticsearch شما اجرا شده است:
⦁ $ curl -X GET “localhost:9200”
⦁
پاسخی را مشاهده خواهید کرد که اطلاعات اصلی در مورد گره محلی شما را نشان می دهد ، مشابه این:
Output
{
“name” : “ElasticSearch”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “SMYhVWRiTwS1dF0pQ-h7SQ”,
“version” : {
“number” : “7.6.1”,
“build_flavor” : “default”,
“build_type” : “deb”,
“build_hash” : “aa751e09be0a5072e8570670309b1f12348f023b”,
“build_date” : “2020-02-29T00:15:25.529771Z”,
“build_snapshot” : false,
“lucene_version” : “8.4.0”,
“minimum_wire_compatibility_version” : “6.8.0”,
“minimum_index_compatibility_version” : “6.0.0-beta1”
},
“tagline” : “You Know, for Search”
}
اکنون که Elasticsearch در حال اجرا و کار است ، بیایید Kibana ، مؤلفه بعدی Elastic Stack را نصب کنیم.
مرحله 2 – نصب و پیکربندی داشبورد Kibana
طبق مستندات رسمی ، باید Kibana را تنها پس از نصب Elasticsearch نصب کنید. نصب با این ترتیب این اطمینان را می دهد که مولفه های مربوط به هر محصول به طور صحیح در جای خود قرار دارند.
از آنجا که شما در مرحله قبل منبع بسته الاستیک را اضافه کرده اید ، می توانید با استفاده از apt فقط مولفه های باقیمانده Elastic Stack را نصب کنید:
⦁ $ sudo apt install kibana
⦁
سپس سرویس Kibana را فعال و راه اندازی کنید:
⦁ $ sudo systemctl enable kibana
⦁
⦁ $ sudo systemctl start kibana
از آنجا که Kibana پیکربندی شده است که فقط به localhost گوش کند ، ما باید یک پروکسی معکوس تنظیم کنیم تا دسترسی خارجی به آن امکان پذیر باشد. برای این منظور از Nginx استفاده خواهیم کرد که قبلاً باید روی سرور مجازی شما نصب شود.
ابتدا از دستور openssl برای ایجاد یک کاربر ادمین Kibana استفاده کنید که برای دسترسی به رابط وب Kibana استفاده خواهید کرد. به عنوان نمونه ما این حساب را kibanaadmin نامگذاری می کنیم ، اما برای اطمینان از امنیت بیشتر توصیه می کنیم برای کاربر خود یک نام غیر استاندارد انتخاب کنید که حدس زدن آن دشوار خواهد بود.
دستور زیر کاربر و پسورد ادمین Kibana را ایجاد کرده و آنها را در فایل htpasswd.users ذخیره می کند. Nginxرا پیکربندی می کنید تا این نام کاربری و رمز عبور را دریافت کرده و این فایل را لحظه به لحظه بخوانید:
⦁ $ echo “kibanaadmin:`openssl passwd -apr1`” | sudo tee -a /etc/nginx/htpasswd.users
⦁
با مشاهده اعلان، رمز عبور را وارد و تأیید کنید. این اطلاعات را به خاطر بسپارید یا یادداشت کنید ، زیرا برای دسترسی به رابط وب Kibana به آن نیاز خواهید داشت.
در مرحله بعد ، یک فایل بلوک سرور مجازی Nginx ایجاد خواهیم کرد. به عنوان نمونه ، ما این فایل را example.com می نامیم ، گرچه ممکن است بهتر باشد یک نام توصیف کننده تر انتخاب کنید. به عنوان مثال ، اگر یک فایل FQDN و DNS برای این سرور مجازی تنظیم کرده اید ، می توانید این فایل را پس از FQDN خود نامگذاری کنید.
⦁ $ sudo nano /etc/nginx/sites-available/example.com
⦁
بلوک کد زیر را در فایل اضافه کنید ، مطمئن شوید که example.com خود را به روز می کنید تا با FQDN یا آدرس IP عمومی سرور مجازی شما مطابقت داشته باشد. این کد Nginx را پیکربندی می کند تا ترافیک HTTP سرور مجازی شما را به برنامه Kibana منتقل کند ، که در حال گوش دادن به localhost: 5601 است. علاوه بر این ، Nginx را برای خواندن فایل htpasswd.users پیکربندی می کند و احتیاج به احراز هویت اساسی دارد.
توجه داشته باشید که اگر از قبل آموزش Nginx را امتحان کرده اید ، ممکن است قبلاً این فایل را ایجاد کرده باشید و آن را با محتوای قبلی پر کرده اید. در این حالت ، قبل از اضافه کردن موارد زیر تمام محتوای موجود در فایل را حذف کنید:
/etc/nginx/sites-available/example.com
server {
listen 80;
server_name example.com;
auth_basic “Restricted Access”;
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
*******_pass http://localhost:5601;
*******_http_version 1.1;
*******_set_header Upgrade $http_upgrade;
*******_set_header Connection ‘upgrade’;
*******_set_header Host $host;
*******_cache_bypass $http_upgrade;
}
}
پس از اتمام ، فایل را ذخیره کنید و ببندید.
در مرحله بعد ، پیکربندی جدید را با ایجاد پیوند سمبولیکی به دیرکتوری sites-enabled فعال کنید. اگر در پیش شرط Nginx یک فایل بلوک سرور مجازی با همین نام ایجاد کرده اید ، نیازی به اجرای این دستور ندارید:
⦁ $ sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
⦁
سپس پیکربندی خطاهای نحوی را بررسی کنید:
⦁ $ sudo nginx -t
⦁
اگر خطایی در خروجی شما گزارش شده بود ، به عقب برگردید و بررسی کنید که محتوایی که در فایل پیکربندی خود قرار داده اید به درستی اضافه شده است. وقتی syntax is ok را در خروجی مشاهده کردید ، پیش بروید و سرویس Nginx را ریستارت کنید:
⦁ $ sudo systemctl restart nginx
اگر راهنمای ستاپ اولیه سرور مجازی را دنبال کرده باشید ، باید فایروال UFW را فعال کنید. برای اجازه اتصال به Nginx ، می توانیم قوانین را با تایپ دستور زیر تنظیم کنیم:
⦁ $ sudo ufw allow ‘Nginx Full’
⦁
توجه: اگر از آموزش مقدماتی Nginx پیروی کرده اید ، ممکن است یک قانون UFW ایجاد کرده باشید که مشخصات Nginx HTTP را از طریق فایروال امکان پذیر کند. از آنجا که پروفایل Nginx Full امکان عبور و مرور HTTP و HTTPS را از طریق فایروال فراهم می کند ، می توانید با خیال راحت قانونی را که در آموزش پیش نیاز ایجاد کرده اید حذف کنید. این کار را با دستور زیر انجام دهید:
⦁ $ sudo ufw delete allow ‘Nginx HTTP’
⦁
اکنون Kibana از طریق FQDN یا آدرس IP عمومی سرور مجازی Elastic Stack شما قابل دسترسی است. می توانید با رفتن به آدرس زیر و وارد کردن اطلاعات ورود به سیستم هنگام درخواست ، صفحه وضعیت سرور مجازی Kibana را بررسی کنید:
http://your_server_ip/status
این صفحه وضعیت اطلاعات مربوط به استفاده از منابع سرور مجازی را نشان می دهد و افزونه های نصب شده را لیست می کند.
توجه: همانطور که در بخش Preferences ذکر شد ، توصیه می شود SSL / TLS را روی سرور مجازی خود فعال کنید. برای به دست آوردن یک گواهینامه رایگان SSL برای Nginx در اوبونتو 18.04 می توانید از راهنمای Let’s Encrypt استفاده کنید. پس از اخذ گواهینامه های SSL / TLS ، می توانید دوباره به این مرحله برگردید و این آموزش را تکمیل کنید.
اکنون که داشبورد Kibana پیکربندی شده است ، بگذارید مؤلفه بعدی را نصب کنیم : Logstash .
مرحله 3 – نصب و پیکربندی Logstash
اگرچه ممکن است Beats داده را مستقیماً به پایگاه داده Elasticsearch ارسال کند ، استفاده از Logstash برای پردازش داده ها معمول است. این کار به شما امکان می دهد انعطاف پذیری بیشتری برای جمع آوری داده ها از منابع مختلف ، تبدیل آن به یک قالب مشترک و انتقال آن به پایگاه داده دیگری داشته باشید.
Logstash را با این دستور نصب کنید:
⦁ $ sudo apt install logstash
⦁
پس از نصب Logstash می توانید به پیکربندی آن بروید. فایل های پیکربندی Logstash در دیرکتوری /etc/logstash/conf.d مستقر هستند. برای اطلاعات بیشتر در مورد دستورات پیکربندی ، می توانید مرجع پیکربندی که Elastic ارائه می دهد را بررسی کنید. وقتی فایل را پیکربندی می کنید ، مفید است که به Logstash به عنوان خط اتصال فکر کنید که داده ها را در یک انتها می گیرد ، آن را به روشی پردازش می کند و سپس به مقصد می فرستد (در این حالت مقصد Elasticsearch است). رابط اتصال Logstash دارای دو عنصر مورد نیاز ، ورودی و خروجی ، و یک عنصر اختیاری ، یعنی فیلتر است. پلاگین های ورودی داده ها را از یک منبع استفاده می کنند ، پلاگین های فیلتر داده ها را پردازش می کنند و پلاگین های خروجی داده ها را در مقصد می نویسند.
یک فایل پیکربندی به نام 02-beats-input.conایجاد کنید که ورودی Filebeat خود را تنظیم کنید:
$ sudo nano /etc/logstash/conf.d/02-beats-input.conf
⦁
پیکربندی ورودی زیر را وارد کنید. این یک ورودی beats را مشخص می کند که پورت TCP 5044 را گوش خواهد کرد.
/etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port => 5044
}
}
فایل را ذخیره کنید و ببندید. در مرحله بعد ، یک فایل پیکربندی به نام 10-syslog-filter.conf ایجاد کنید، که یک فیلتر برای ورودهای سیستم اضافه میکنیم و به syslogs نیز شناخته میشود:
⦁ $ sudo nano /etc/logstash/conf.d/10-syslog-filter.conf
⦁
پیکربندی syslog filter زیر را وارد کنید. این پیکربندی ورودی های سیستم مثال از مستندات الاستیک رسمی گرفته شده است. این فیلتر برای دنبال کردن ورودهای سیستم ورودی برای ساختاردار و مورد استفاده کردن آن ها توسط داشبوردهای از پیش تعریف شده Kibana استفاده میشود.
/etc/logstash/conf.d/10-syslog-filter.conf
filter {
if [fileset][module] == “system” {
if [fileset][name] == “auth” {
grok {
match => { “message” => [“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:[%{POSINT:[system][auth][pid]}])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:[%{POSINT:[system][auth][pid]}])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:[%{POSINT:[system][auth][pid]}])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:[%{POSINT:[system][auth][pid]}])?: s*%{DATA:[system][auth][user]}
- ۰ ۰
- ۰ نظر