استفاده از سیستم ارسال لاگ ابر آروان
هنگامیکه وبسایت و یا اپلیکیشن شما از شبکه توزیع محتوا (CDN) و امنیت ابری آروان استفاده میکند، ابر آروان میان بازدیدکنندگانتان و سرورهای اصلی -که وبسرورهای شما در آنها قرار دارند- بهعنوان واسطه حضور دارد. درخواستهایی که بازدیدکنندههای شما میفرستند ابتدا به سرورهای آروان میرسند و سپس در صورت نیاز به سمت سرورهای اصلی شما ارسال میشوند.
درخواستهای بازدیدکنندگان شامل اطلاعات ارزشمندی هستند که برخیشان را بهصورت تجمیعشده در پنل کاربری ابر آروان میتوانید ببینید. اما این درخواستها اطلاعات با ارزش دیگری نیز دارند که ممکن است برای شما بهعنوان دارندهی وبسایت و یا دامنه مفید باشد:
- درخواست برای کدام مسیر از وبسایت شما ارسال شده است؟
- درخواستدهنده از چه مرورگر و سیستمعاملی استفاده میکند؟
- آیپی درخواستدهنده چیست؟
- پاسخی که ابر آروان به درخواست مورد نظر داده، چه بوده؟ (HIT-MISS)
و … .
با استفاده از دریافت لحظهای این دادهها - که به آنها لاگ (Log) میگوییم - میتوانید تحلیلهای بیشماری روی رفتار بازدیدکنندهها و همچنین شناسایی بازدیدکنندههای با رفتار مخرب، انجام دهید؛ مثل:
- شناسایی باتهای مخرب،
- شناسایی خزندههای وب (Crawler) غیرمجاز،
- تحلیل لحظهای رفتار وبسرور،
- شناسایی لحظهای حملات.
قابلیت ارسال اکسس لاگ
سیستم تجمیع و پردازش لاگ، بخشی حیاتی از CDN ابر آروان است؛ بهگونهای که قسمتهای مختلفی از سرویسدهی ابر آروان بهشکل مستقیم به این سرویس زیرساختی وابسته است. کاربران CDN ابر آروان میتوانند با راهاندازی یک لاگ سرور دلخواه که امکان دریافت بهوسیلهی SysLog را داشته باشد و انجام تنظیماتی کم در پنل ابر آروان، لاگهای درخواستهای خود را بهشکل Near Real Time دریافت کنند.
چند instance از سیستم ارسال لاگ روی سرورهای مختلف میتوانند لاگها را بهشکل توزیعشده دریافت کنند. لاگهای دریافتشده بهشکل باینری (Cap'n Proto) هستند. برای راحتی بیشتر کاربران این لاگها ابتدا به JSON تبدیل میشوند، سپس با پروتکل SysLog به کاربران ارسال میشوند. ابر آروان برای ارسال به syslog از استاندارد RFC 3164 استفاده و از پروتکلهای UDP و TCP، همچنین رمزگذاری TLS پشتیبانی میکند.
شیوهی فعالسازی لاگ Access
به پنل کاربری خود وارد شده و سپس بخش CDN و در ادامه قسمت ارسال لاگ را انتخاب کنید. از بین دو گزینهی موجود، با انتخاب گزینهی Access Logs، تنظیمات این قابلیت قابل مشاهده خواهند بود.
ابتدا گزینهی فعالسازی ارسال Access Logs را انتخاب کنید تا این قابلیت فعال شود. در ادامه، اطلاعات مربوط به سروری که میخواهید گزارشهای Access به آن ارسال شود را در بخش مربوط به آدرس سرور وارد کنید. این اطلاعات شامل آدرس، شماره پورت و پروتکل هستند.
نکتهی قابل توجه وجود امکان دریافت لاگ به صورت رمزنگاری شده است. به این منظور، با انتخاب پروتکل TCP و سپس قعالسازی گزینهی «ارتباط امن TLS باید کلید عمومی رمزنگاری خود را آپلود و سپس سپس فایل گواهینامه (.crt) را در کادر مربوطه وارد کنید.
با ورود این اطلاعات گزارشهای دسترسی وبسایت برای شما ارسال خواهند شد.
قابلیت ارسال لاگ WAF
در نسخهی جدید، این امکان فراهم شده است تا لاگهای مربوط به محصول WAF ابر آروان نیز بهشکل لحظهای برای سرور لاگ کاربر ارسال شوند. با استفاده از این قابلیت، کاربران میتوانند در هر لحظه از اتفاقات رخداده روی سرویس WAF فعالشده برای خود مطلع شوند و در صورت نیاز اقداماتی را انجام دهند.
این سرویس اکنون بدون هزینهی اضافی در اختیار کسانی است که از محصول WAF ابر آروان استفاده میکنند. برای استفاده از این امکان، درست مانند سیستم ارسال لاگ ابر آروان، باید دسترسی از سوی کاربر فراهم شود تا مشخصات سرور لاگ وارد شده مورد تایید قرار گیرد. از سوی دیگر، قابلیت WAF ابر آروان باید روی حساب کاربری فعال شده باشد.
شیوهی فعالسازی قابلیت ارسال لاگ WAF
برای فعالسازی این قابلیت، پس از ورود به پنل کاربری ابر آروان، وارد بخش CDN و قسمت ارسال لاگ شوید. در ادامه روی گزینهی WAF Logs و سپس دکمهی "فعالسازی ارسال WAF Logs" کلیک کنید. در انتها، بخش مربوط به آدرس سرور باید با اطلاعات مربوط به آدرس سرور، پورت مورد نظر و همینطور یکی از دو پروتکل TCP و UDP تکمیل شود.
در نظر داشته باشید، با انتخاب TCP گزینهی «ارتباط امن TLS» برای شما فعال میشود که میتوانید لاگها را بهشکل رمزنگاری شده دریافت کنید. در این مرحله برای حفظ امنیت دادهها لازم است تا کلید عمومی رمزنگاری خود را آپلود کنید، سپس فایل گواهینامه (.crt) را در کادر مربوطه وارد کنید.
اکنون قابلیت ارسال لاگ WAF فعال و آمادهی استفاده است.
نمونه یکی از لاگهای ارسالی توسط سیستم ارسال لاگ WAF ابر آروان
لاگ زیر نمونهای از یک لاگ ارسالی توسط سیستم ارسال لاگ WAF ابر آروان است.
```json
Nov 28 16:38:34 93.115.150.121 2020-11-28T16:38:34Z logserver-5 arvancdn[1]: {
"@timestamp": 1606581512.042213,
"product": "zombe",
"timestamp": "2020-11-28T16:38:32Z",
"remote_address": "1.2.3.4",
"domain": "example.com",
"data": {
"request_id": "7141f1c643f8b8a8e1250e47319ec38f",
"uri": "uri",
"method": "GET",
"body": null,
"headers": {
"x-ts-ajax-request": [
"true"
],
"user-agent": [
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66"
],
"sec-fetch-dest": [
"empty"
],
"referer": [
"https://google.com/"
],
"accept-language": [
"fa-IR,fa;q=0.9,en-US;q=0.8,en;q=0.7"
],
"accept": [
"*/*"
],
"sec-fetch-site": [
"same-origin"
],
"sec-fetch-mode": [
"cors"
],
"save-data": [
"on"
],
"host": [
"host"
],
"x-requested-with": [
"XMLHttpRequest"
],
"accept-encoding": [
"gzip, deflate, br"
],
"c1": [
"0"
],
"x-security-request": [
"required"
]
},
"cookies": {
"ASP.NET_SessionId": "kjsasdbvksd",
"_id": "6581080",
"_a": "5097535",
"AS9090": "kj2w32i3yfh293fh"
},
"matched_rules": [
{
"msg": "User agent indicates an automated scan of the site",
"data": "",
"id": 35001,
"matched": [
"6.0;"
]
},
{
"msg": "SQL Comment Sequence",
"data": "",
"id": 41001,
"matched": [
"--qMpckJrerTotdYpoKMtbileV4gOp5L1b5HEk_B1q5XqndjVpp6Sf3ppIaz_aT-",
"--qMpckJrerTotdYpoKMtbileV4gOp5L1b5HEkfIrTfCSc9URDYPkhMDjp6Sf3ppIaz_aT-"
]
},
{
"msg": "Common SQL Comment Sequence",
"data": "",
"id": 51001,
"matched": [
"--qMpckJrerTotdYpoKMtbileV4gOp5L58c1q6j_qAvivkYjLcxaEnijVrf3ppIaz_aT-",
"--qMpckJrerTotdYpoKMtbileVmA9URDYPkhMDjp6Sf3ppIaz_aT-"
]
},
{
"msg": "anomaly score 11 is greater than threshold 8",
"data": "",
"id": 90025,
"matched": null
}
]
}
}
```
از این لاگ میتوان تشخیص داد که گزارش مربوط به دامنه example.com است و به آدرس 1.2.3.4 فرستاده شده، همچنین با توجه به برچسب زمانی، زمان ارسال ۲۸/۱۱/۲۰۲۰ و ساعت ۱۶:۳۸:۳۲ بوده است.
در بخش Data میتوان اطلاعات مفیدی دربارهی درخواست مانند متد آن(HTTP Method)، مسیر درخواست(uri) و همچنین جزییات هدرهای HTTP و تنظیمات صورتگرفته را مشاهده کرد. در بخش Cookies نیز کوکی هایی که به همراه درخواست ارسال شده اند قابل مشاهده است.
همچنین در بخش Matched Rules نیز اطلاعات کاربردی درباره قوانین WAFی است که همخوانی با آنها باعث تشخیص درخواست به عنوان یک حمله شده است. در این قسمت شماره قانون WAF که با id مشخص شده است، متن پیام(msg) و جزییات آن(matched) آورده شده است.
تنظیمات سمت وبسرور اصلی
برای اینکه بتوانید بهشکل داینامیک دادههای لاگ را روی وبسرور خود دریافت، تبدیل و منتقل کنید، میتوانید از ابزارهایی مثل Logstash و Rsyslog استفاده کنید.
نصب Logstash
این ابزار شناختهشدهترین پلتفرم تحلیل لاگ جهان است. به کمک آن میتوانید دادهها را از منابع مختلفی جمعآوری و پردازش کنید. برای شروع لازم است بدانید بسته به سیستمعامل شما، روشهای مختلفی برای نصب Logstash وجود دارد. ما در این مقاله آن را روی اوبونتو نسخهی ۱۶.۰۴ با برنامهی مدیریت بستهی Apt نصب میکنیم.
پیش از نصب، مطمین شوید Java نسخه ۸ یا ۱۱ نصب باشد.
برای نصب Java از دستور زیر استفاده کنید:
sudo apt-get update
sudo apt-get install default-jre
شما به کلید امضا (signing key) الستیک (Elastic) نیاز دارید تا بستهی دانلود شده تایید شود (اگر از پیش بستههایی از Elastic نصب کردهاید از این مرحله رد شوید):
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key
add -
اکنون باید مخزن را برای سیستم تعریف کنید:
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo
tee -a /etc/apt/sources.list.d/elastic-7.x.list
در این مرحله باید مخزن را بهروز کنید و Logstash را نصب کنید:
sudo apt-get update
sudo apt-get install logstash
پیکربندی Logstash
پیکربندی شما عمومن سه بخش دارد: ورودیها، فیلترها و خروجیها. ساختار پیکربندی Logstash به شکل زیر است:
#/etc/logstash/conf.d/
- apache.conf
- haproxy.conf
- syslog.conf
شما میتوانید فایل پیکربندی مجزایی برای هر یک از بخشها داشته باشید. هر یک از این فایلها شامل ورودیها، فیلترها و خروجیهای مورد نیاز است:
input {
tcp {
port => 5140
codec => json
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{GREEDYDATA:Junk}: %{GREEDYDATA:request}"}
}
json { source => "request" }
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["localhost:9200"]
manage_template => false
index => "logs-%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
معرفی Rsyslog
ابزاری متنباز و چندسکویی است که برای مدیریت پیامهای Log به کار میرود. این ابزار ورودیها را از منابع مختلفی دریافت میکند، آنها را تغییر شکل میدهد و خروجیها را به مقصدهای مختلفی میفرستد. Rsyslog میتواند بالای یک میلیون پیام لاگ را در هر ثانیه به مقصدهای محلی (Local) برساند.
تنظیمات استفاده از سیستم ارسال لاگ ابر آروان
برای راهاندازی سیستم ارسال لاگ در پنل کاربری ابر آروان، ابتدا نیاز است تا با ثبت تیکت درخواست فعالشدن این ویژگی را برای ما ارسال کنید. پس از فعالسازی، به پنل کاربری ابر آروان، محصول شبکهی توزیع محتوا (CDN) بروید و پس از انتخاب دامنه، از منوی سمت راست گزینهی ارسال لاگ را انتخاب کنید. پس از انتخاب نوع لاگ مورد نظر و انجام تنظیمات مربوط به آن، تنها پس از چند لحظه ارسال لاگ به سرور شما شروع میشود. یک نمونه از لاگی که ابر آروان برای شما ارسال میکند بهشکل زیر است:
<40> 2019-10-03T21:00:28Z logserver-1 arvancdn[8]: {
"method":"GET",
"scheme":"https",
"domain":"arvancloud.com",
"uri":"/favicons/fa/android-icon-192x192.png",
"referer":"",
"ip":"",
"ua":"Mozilla/5.0 (Linux; Android 7.0; SM-J701F Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36",
"country":"IR",
"asn":44244,
"content_type":"image/png",
"status":200,
"server_port":443,
"bytes_sent":9772,
"bytes_received":6,
"upstream_time":0.06,
"cache":"MISS",
"request_id":"0e34125f60fd6fab90d750c35b9041bc"
}
همانطور که در لاگ بالا مشخص است، اگر قسمتهایی که مربوط به syslog است را کنار بگذاریم بقیهی لاگ از جنس JSON است، بنابراین لاگ به سادگی قابل Parse شدن است.
در لاگ بالا میبینیم method درخواست از نوع GET بوده، پروتکل استفادهشده https است، دامنهی arvancloud.com مورد هدف درخواست بوده، فایل درخواستی به آدرس و اسم favicons/fa/android-icon-192x192.png است، درخواست از کشور ایران بوده، نوع محتوای درخواستی عکس با فرمت png است. شما همچنین میتوانید اطلاعات جزییتری مثل تعداد بایتهای ارسالی و دریافتی و زمان upstream درخواست را مشاهده کنید.