← شروع آموزش

WIUNIX ACADEMY

آموزش CrowdSec و Nginx؛ لاگ معتبر، LAPI خصوصی و مسدودسازی قابل‌بازگشت

صفحهٔ 3 از 5؛ مراحل قبلی و پیش‌نیازها را پیش از ادامه مرور کن.

آموزش متناسب با محیط تو

کجا اجرا می‌کنی؟

سیستم‌عامل و نسخه را انتخاب کن تا مراحل، دستورها و راه‌حل‌ها برای همان محیط نمایش داده شوند.

Ubuntu24.04 LTSبررسی‌شده با مستندات رسمی ·

آموزش متناسب با مقادیر تو

تنظیمات این آموزش

مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر می‌کنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری می‌شوند و به سرور یا لینک اشتراک‌گذاری فرستاده نمی‌شوند. پیش از اجرا، DNS، گواهی‌ها و سیاست شبکهٔ واقعی را بررسی کن.

آی‌پی، دامنه یا پورت مثال‌ها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای به‌روز‌شده را کپی کن.

تنظیم مقادیر برای محیط من7 مقدار قابل‌تغییر
06

قدم بعدی

کالکشن Nginx را نصب و بررسی کنید

دریافت فهرست Hub و کالکشن، ثبت‌نام Console یا CAPI نیست. نسخهٔ پارسرها و سناریوها را بررسی و ثبت کنید. برچسب nginx با قالب استاندارد combined کادر بعدی هماهنگ است. acquisition خط می‌خواند، پارسر داده را استخراج می‌کند، سناریو الگو را تشخیص می‌دهد و profile هشدار مناسب را به تصمیم تبدیل می‌کند.

آرشیو خام، کالکشن پایهٔ لینوکسِ فعال‌شده ندارد. syslog-logs مرحلهٔ ورودی non-syslog و dateparse-enrich زمان رویداد را فراهم می‌کنند؛ هر دو پیش از کالکشن Nginx نصب می‌شوند. پیشنهاد عمومی systemctl در خروجی Hub برای این موتور مستقلِ پیش‌زمینه کاربرد ندارد.

bash

ترمینال ماشین آزمایشگاهی مستقل

set -eu
sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec-cli/cscli' -c '/srv/academy-crowdsec/config/engine.yaml' hub update
sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec-cli/cscli' -c '/srv/academy-crowdsec/config/engine.yaml' parsers install crowdsecurity/syslog-logs crowdsecurity/dateparse-enrich
sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec-cli/cscli' -c '/srv/academy-crowdsec/config/engine.yaml' collections install crowdsecurity/nginx
sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec-cli/cscli' -c '/srv/academy-crowdsec/config/engine.yaml' collections inspect crowdsecurity/nginx --no-metrics
از کجا بدانم درست انجام شد؟

کالکشن Nginx و وابستگی‌ها نصب و نسخه‌های واقعی در inspect دیده می‌شوند.

07

قدم بعدی

ثبت bouncer بدون نمایش کلید یا ارسال آن در argv

فرایند Python خروجی کلید را در حافظه می‌گیرد و مستقیماً در فایل جدید0600 می‌نویسد. tracing شل را روشن نکنید، فایل را چاپ نکنید و آن را وارد مقاله، URL یا Git نکنید. گذرواژهٔ خودکار ماشین هم در فایل خصوصی مستقل می‌ماند. خطای میانهٔ کار مجوز بازنویسی فایل نیمه‌کاره نیست؛ نمونهٔ تازه بسازید یا پس از بررسی هویت اختصاصی را لغو کنید.

bash

ترمینال ماشین آزمایشگاهی مستقل

sudo python3 - <<'PY'
import os,subprocess
from pathlib import Path
r=Path('/srv/academy-crowdsec')
cli=[str(r/'crowdsec-v1.8.1/cmd/crowdsec-cli/cscli'),'-c',str(r/'config/engine.yaml')]
creds=r/'config/local-api.yaml'
assert not creds.exists() and not creds.is_symlink(), 'Credentials already present'
subprocess.run(cli+['machines','add','academy-agent','--auto','--file',str(creds),'--url','http://127.0.0.1:18081'],check=True,stdout=subprocess.DEVNULL)
os.chmod(creds,0o600)
p=r/'config/bouncer.conf'
fd=os.open(p,os.O_WRONLY|os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW,0o600)
try:
    key=subprocess.check_output(cli+['bouncers','add','academy_nginx','-o','raw'],text=True).strip()
    assert key and '\n' not in key
    text='API_URL=http://127.0.0.1:18081\nAPI_KEY='+key+'\nMODE=live\nCACHE_EXPIRATION=1\nREQUEST_TIMEOUT=500\nBOUNCING_ON_TYPE=ban\nFALLBACK_REMEDIATION=ban\nRET_CODE=403\nAPPSEC_URL=\n'
    with os.fdopen(fd,'w',encoding='utf-8') as f: f.write(text)
finally:
    key=None
print('Private machine credentials and exclusive bouncer file created; no key displayed')
PY
از کجا بدانم درست انجام شد؟

فقط تأیید بدون اطلاعات محرمانه چاپ می‌شود؛ دو فایل اعتبارنامه مجوز0600 دارند.

08

قدم بعدی

یک فرایند مستقل Nginx تنظیم کنید

تنظیمات رزروشده را با کادر بعدی ذخیره کنید. هیچ دستور real-IP فعال نیست؛ IP اتصال TCP هم در لاگ و هم در bouncer استفاده می‌شود و هدرهای forwarded نادیده می‌مانند. پاسخ زودهنگام return در مرحلهٔ rewrite می‌تواند پیش از hook امنیتی برگردد؛ اینجا فایل واقعی با try_files سرو می‌شود.

bash

ترمینال ماشین آزمایشگاهی مستقل

sudo nano '/srv/academy-crowdsec/config/nginx.conf'
از کجا بدانم درست انجام شد؟

فقط فایل اختصاصی ویرایش شده و چیزی به conf.d سراسری اضافه نمی‌شود.

hook مرحلهٔ access و قالب استاندارد لاگ

محتوای فایل؛ include ماژول‌های سازگار NDK و Lua توزیع را بارگذاری می‌کند. master هنگام راه‌اندازی فایل خصوصی را می‌خواند؛ worker با www-data اجرا می‌شود و به پوشهٔ خصوصی تنظیمات دسترسی ندارد.

nginx · /srv/academy-crowdsec/config/nginx.conf
load_module /usr/lib/nginx/modules/ndk_http_module.so;
load_module /usr/lib/nginx/modules/ngx_http_lua_module.so;
user www-data;
worker_processes 1;
pid /srv/academy-crowdsec/run/nginx.pid;
error_log /srv/academy-crowdsec/logs/nginx-error.log warn;
events { worker_connections 128; }
http {
    lua_package_path '/srv/academy-crowdsec/crowdsec-nginx-bouncer-v1.2.3/lua-mod/lib/?.lua;/srv/academy-crowdsec/rocks/share/lua/5.1/?.lua;;';
    lua_shared_dict crowdsec_cache 10m;
    init_by_lua_block {
        cs = require "crowdsec"
        local ok, err = cs.init("/srv/academy-crowdsec/config/bouncer.conf", "crowdsec-nginx-bouncer/v1.2.3")
        if ok == nil then error(err) end
    }
    log_format academy '$remote_addr - $remote_user [$time_local] '
                       '"$request" $status $body_bytes_sent '
                       '"$http_referer" "$http_user_agent"';
    access_log /srv/academy-crowdsec/logs/access.log academy;
    server {
        listen 127.0.0.1:18080;
        server_name localhost;
        root /srv/academy-crowdsec/www;
        location / {
            access_by_lua_block { cs.Allow(ngx.var.remote_addr) }
            try_files $uri =404;
        }
    }
}
09

قدم بعدی

اعتبارسنجی و اجرای موتور در پیش‌زمینه

در ترمینال A اجرا کنید. دستور آخر در پیش‌زمینه می‌ماند؛ آن را باز نگه دارید. اعتبارسنجی تنظیمات به‌تنهایی تأیید زنجیرهٔ تشخیص و مسدودسازی نیست. موتور صریحاً بدون CAPI اجرا می‌شود.

bash

ترمینال ماشین آزمایشگاهی مستقل

sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec/crowdsec' -c '/srv/academy-crowdsec/config/engine.yaml' -t -no-capi
sudo nginx -t -p '/srv/academy-crowdsec/' -c '/srv/academy-crowdsec/config/nginx.conf'
sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec/crowdsec' -c '/srv/academy-crowdsec/config/engine.yaml' -no-capi
از کجا بدانم درست انجام شد؟

هر دو آزمون تنظیمات موفق‌اند و موتور و API در ترمینال A اجرا می‌شوند.

10

قدم بعدی

ابتدا مدیریت مجاز، سپس وب‌سرور آزمایشگاه

در ترمینال B، پیش از آزمون مسدودسازی فهرست مجاز مدیریت را بسازید. فهرست مجاز بر تصمیم‌های بعدی اثر دارد؛ حذف تصمیم‌های موجود را جداگانه بررسی کنید. کل شبکهٔ مشترک مشتری‌ها را مجاز نکنید. IP آزمون 127.0.0.2 عمداً بیرون از 127.0.0.1/32 است.

bash

ترمینال ماشین آزمایشگاهی مستقل

sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec-cli/cscli' -c '/srv/academy-crowdsec/config/engine.yaml' allowlists create academy-management -d 'Trusted lab management only'
sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec-cli/cscli' -c '/srv/academy-crowdsec/config/engine.yaml' allowlists add academy-management '127.0.0.1/32'
sudo '/srv/academy-crowdsec/crowdsec-v1.8.1/cmd/crowdsec-cli/cscli' -c '/srv/academy-crowdsec/config/engine.yaml' allowlists inspect academy-management
sudo nginx -p '/srv/academy-crowdsec/' -c '/srv/academy-crowdsec/config/nginx.conf'
curl --noproxy '*' --interface '127.0.0.2' --fail http://127.0.0.1:18080/index.html
از کجا بدانم درست انجام شد؟

CIDR موردنظر در فهرست است و درخواست محلی academy-ok برمی‌گرداند.

همهٔ آموزش‌های آکادمی ↗