انجیناکس؛ شب ۳۵: ModSecurity، connector و سازگاری بستهها
فهرست نوشته
ModSecurity یک دیوارهٔ آتش برنامهٔ وب یا WAF است: درخواست HTTP را با مجموعهٔ قواعد بررسی میکند. برای Nginx، موتور، connector و قواعد سه جزء جدا هستند؛ نصب یک بسته الزاماً همهٔ آنها را فعال نمیکند.
این جلسه بخشی از دورهٔ انجیناکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.
محیط: clone آزمایشگاه، Nginx از بستهٔ توزیع و سایت app.nginx.test؛ هنوز هیچ WAF در مسیر درخواست نیست. Snapshot و فهرست نسخهها را نگه دار.
مسیر بستهٔ توزیع#
در Debian 13 و Ubuntu 24.04، بستهٔ connector وجود دارد. در Ubuntu مخزن universe باید از مسیر رسمی فعال باشد؛ پشتیبانی و advisory امنیتی آن را جدا بررسی کن.
apt-cache policy nginx libnginx-mod-http-modsecurity libmodsecurity3
sudo apt install libnginx-mod-http-modsecurity
dpkg-query -W nginx libnginx-mod-http-modsecurity
sudo nginx -t
نام بستهٔ موتور ممکن است با گذار ABI، مثل پسوند t64، فرق کند؛ dependencies واقعی connector را با apt-cache depends ببین. ABI قرارداد سازگاری باینری ماژول و Nginx است. نسخهٔ upstream بهتنهایی نشان نمیدهد patch امنیتی توزیع اعمال شده یا نشده است.
در Alma/Rocky 9، اگر EPEL و CRB مطابق مستندات رسمی همان توزیع فعال شدهاند، مسیر بستهٔ EPEL را بررسی کن:
dnf info nginx nginx-mod-modsecurity
dnf repoquery --requires nginx-mod-modsecurity
sudo dnf install nginx-mod-modsecurity
rpm -q nginx nginx-mod-modsecurity
sudo nginx -t
این شاخه مشروط به حل سالم dependencyهاست؛ بستهٔ EPEL ممکن است با stream دیگری از Nginx سازگار نباشد. --nodeps، جایگزینی خودکار stream و کپی .so از Debian راه حل نیستند. اگر سازگاری وجود ندارد، clone ساخت شب بعد را انتخاب کن. فعالسازی EPEL را از راهنمای Alma/Rocky انجام بده، نه RPM تصادفی.
load شدن را ثابت کن#
sudo nginx -T
nginx -V
خروجی اول را محلی نگه دار؛ تنظیمات میتواند راز داشته باشد. فایل module loader را با dpkg -L libnginx-mod-http-modsecurity یا rpm -ql nginx-mod-modsecurity پیدا کن. load_module باید در main context و فقط یک بار باشد. loader بسته را با load_module دستی تکرار نکن. گزینهٔ configure در nginx -V، فعال بودن یک policy روی server را ثابت نمیکند.
اگر برای بررسی دستورهای connector یک config موقت با modsecurity off; در server app گذاشتی، nginx -t باید آن را بشناسد؛ هنوز درخواست مسدود نخواهد شد. خطای binary incompatible یا undefined symbol را با نسخهٔ core/module، مسیر library و journal بررسی کن و deploy را متوقف کن.
انتخاب نسخه و مسئولیت#
نسخهٔ موتور، connector، Nginx، مخزن و advisoryهای بررسیشده را ثبت کن. موتور OWASP ModSecurity و connector Nginx مستقل بهروزرسانی میشوند. WAF جای رفع آسیبپذیری WordPress، احراز هویت یا کنترل دسترسی را نمیگیرد.
بازگشت: ابتدا directiveهای مربوط به connector را از سایت بردار، nginx -t و reload بگیر؛ سپس بسته یا loader اضافه را مطابق dependencyهای package manager برگردان. بدون برداشتن directiveها، unload کردن ماژول config را خراب میکند.
منبع: بستهٔ Debian ، بستهٔ Ubuntu ، بستهٔ EPEL 9 ، connector رسمی .