Falco را همچون ابزاری برای Kubernetes میشناسند، و تقریباً هر راهنمایی دربارهاش برای خوشهها نوشته شده. اما به خوشهها بسته نیست: فراخوانهای سامانه را پایش میکند، و روی سروری معمولی که سایتی دارد این دقیقاً به همان شیوه کار میکند. تنها اینکه درباره این حالت تقریباً کسی نمینویسد.
و آنجا سودمند است که ابزارهای دیگر خاموشاند. وبشل روی سایت هیچ مجوزی را نقض نمیکند، ورود ناموفقی نمیسازد، و اگر با دست نوشته شده باشد با هیچ امضایی همخوان نیست. اما رفتاری دارد که برای وبسرور نابهنجار است: فرایند PHP-FPM پوستهای اجرا میکند. و همین است آنچه Falco میبیند.
چه چیزی را میبیند
رویدادهای معمول روی سروری عادی:
- پوستهای که وبسرور یا فرایند PHP زاده — عملاً نشانهای بیابهام از وبشل؛
- برنامهای که از
/tmpیا/dev/shmیا/var/tmpاجرا شده؛ - خواندن فایلهای حساس (
/etc/shadow، کلیدهای خصوصی) بهدست فرایندی که کاری با آنها ندارد؛ - تغییر فایلهای دودویی سامانه؛
- اتصال خروجی از فرایندی که نباید از شبکه استفاده کند.
نصب
گزینش کلیدی هنگام نصب انجام میشود: Falco فراخوانهای سامانه را چگونه میگیرد. گزینه امروزی بر eBPF استوار است و نه ساخت پیمانه هسته میخواهد و نه سرایندهای هسته:
sudo falcoctl driver config --type modern_ebpf
sudo systemctl restart falco
پیمانه هسته کلاسیک سرایند میخواهد و پس از هر بهروزرسانی هسته بازساخته میشود — و روی سروری که بهروزرسانیها خودکار نصب میشوند این سرچشمهای تکرارشونده برای سرویسی مرده است. اگر هسته بهاندازه کافی تازه است (۵٫۸ و بالاتر) eBPF را برگزینید و این مسئله را فراموش کنید.
برای اطمینان از اینکه رویدادها واقعاً میرسند:
sudo systemctl status falco
sudo journalctl -u falco -n 50
نویز و برداشتنش
و این کار اصلی است. مجموعه قواعد استاندارد رو به محیطهای ظرف دارد، و روی سروری معمولی بخش چشمگیری از آن یا کاربردی نیست یا پیوسته فعال میشود.
قواعد فرستادهشده (/etc/falco/falco_rules.yaml) ویرایش نمیشوند — فایل هنگام بهروزرسانی جایگزین میگردد. تغییرهای شما به /etc/falco/falco_rules.local.yaml میروند، و قواعد ناخواسته هم همانجا خاموش میشوند:
- rule: Terminal shell in container
enabled: false
آنچه معمولاً روی سروری بدون ظرف نیاز به تنظیم دارد:
- همه قواعد ظرف — بدون ظرف تنها در گزارش جا میگیرند؛
- «Write below etc» — در هر نصب بسته و در هر ویرایش شما روی فایلی از پیکربندی فعال میشود. و به استثنایی برای
aptوdpkgوunattended-upgradesنیاز دارد، وگرنه رویدادها سیلآسا میآیند؛ - «Read sensitive file untrusted» — روی عاملهای پایش و ابزارهای پشتیبانگیری و ابزارهای ممیزی مانند Lynis فعال میشود؛
- اجرا از پوشههای موقت — استثناهای مشروع هست: ساخت برنامهای، یا مرورگری خودکار که راهاندازی را در پوشهای موقت باز میکند. چنین رویدادهایی نگرانکننده به نظر میرسند اما توضیحپذیرند، و ارزش دارد بیدرنگ برای همان مسیر مشخص استثنایی بیفزایید نه اینکه هر بار از نو دریابیدش.
ترتیب معقول همان است که با هر ابزار شناسایی دیگر: هفته نخست تنها پایش کنید و استثنا بیفزایید، و تنها پس از آن رویدادی را که پیدا میشود نشانه بشمارید. و قاعده ساده است — اگر گزارش مرتب رویدادهایی دارد که نمیخوانید، برای شما هیچ کاری نمیکند.
رویدادها را کجا بفرستیم
خروجی در /etc/falco/falco.yaml تنظیم میشود: فایل، ژورنال سامانه، یا لولهکردن به برنامهای بیرونی. و برای یک سرور فایلی با چرخش پس از آن بس است — چرخش را فراموش نکنید، فایل رویدادها مانند هر گزارش دیگری رشد میکند و بهصورت پیشفرض کسی پایشش نمیکند.
و ارزش دارد از اولویتها برای جداسازی استفاده کنید: رویدادهای بحرانی به جایی بروند که بیدرنگ میبینیدشان، و بقیه به ژورنال عمومی برای بررسی بعدی.
Falco و auditd یکی نیستند
هر دو فراخوانهای سامانه را پایش میکنند، اما با هدفهایی متفاوت. auditd آنچه را رخ میدهد ثبت میکند تا تصویر بعدها بازسازی شود: چیزی را ارزیابی نمیکند و از چیزی گزارش نمیدهد، ژورنالی نگه میدارد. اما Falco قواعد را در لحظه رویداد اعمال میکند و میگوید «این مشکوک به نظر میرسد» — یعنی نشانهای میدهد نه ثبتی.
و نگهداشتن هر دو معقول است: ژورنال برای بازسازی و نشانهها برای واکنش. اگر باید یکی را برگزینید، auditd روی سروری سودمندتر است که بازسازی ترتیب رویدادها پس از یک رخداد بیش از همه اهمیت دارد؛ و Falco آنجا که نشانهای زودهنگام درباره استخراجکنندهای در حال اجرا یا وبشلی میخواهید.
آیا روی سروری کوچک ارزش جا گرفتن دارد
پاسخ صادقانه: نه همیشه. Falco فراخوانهای سامانه را پردازش میکند و روی ماشینی شلوغ اثرش بر پردازنده محسوس است. و اگر روی سرور یک سایت است و هنوز نه پایش یکپارچگی دارید و نه بهروزرسانی خودکار درستوحسابی، آغاز از اینجا نیست.
لحظهاش بعدتر میرسد — پس از آنکه پایهها انجام شد و تنها این پرسش ماند که روی سرور چه میگذرد که گزارشها نشانش نمیدهند. و یک دسته از رویدادها را بهتر از همه دیگران روی هم پوشش میدهد: پوستهای که فرایند وبسرور اجرایش کرده است. شکل رویدادها جداشده بر پایه اولویت و قاعده را صفحه نمایشی پایین نشان میدهد.