برای بخش مدیریتی، IP مجاز و کاربر معتبر را با هم می‌خواهیم. امشب allow/deny و satisfy را با درخواست واقعی از دو کلاینت بررسی می‌کنیم.

این جلسه بخشی از دورهٔ انجین‌اکس در ۵۰ شب است. قرارداد آزمایشگاه، مسیرها و روال اعمال تغییر در راهنمای دوره آمده است.

محیط: www با HTTPS؛ حساب‌های موجود حفظ می‌شوند و AUTH_FILE بیرون webroot است.

ساخت credential#

sudo htpasswd -Bc /etc/nginx/lab-users labreader
sudo chown root:"$NGINX_USER" /etc/nginx/lab-users
sudo chmod 640 /etc/nginx/lab-users

رمز را در prompt وارد کن. -c فایل جدید می‌سازد؛ برای کاربر دوم آن را حذف کن تا کاربران قبلی پاک نشوند. در RHEL label فایل را با restorecon بررسی کن.

پوشهٔ admin و index.html زیر root www بساز. در server:

location /admin/ {
    satisfy all;
    allow 192.168.57.20;
    deny all;
    auth_basic "Nginx lab administration";
    auth_basic_user_file /etc/nginx/lab-users;
    try_files $uri $uri/ =404;
}

allow/deny به‌ترتیب بررسی می‌شوند. satisfy all یعنی هم مبدأ شبکه و هم احراز هویت لازم است؛ any می‌تواند یکی را کافی کند. Basic محرمانگی مستقلی ندارد و فقط روی HTTPS استفاده می‌شود.

آزمون تفکیک‌شده#

از .20 بدون credential باید challenge و با curl -u labreader باید محتوا بگیری. از .21 با credential صحیح نیز باید دسترسی رد شود؛ در غیر این صورت شرط IP را جدا نسنجیده‌ای. هدر جعلی X-Forwarded-For از .21 نباید دسترسی بدهد.

اگر IPv6 اختیاری فعال است، فقط fd57:80::20 را قبل از deny all مجاز و از ::21 آزمون منفی بگیر. IP به معنی هویت شخص نیست؛ پشت NAT چند نفر می‌توانند یک مبدأ داشته باشند.

بازگشت: policy و فایل رمز سالم را بازیابی کن. حذف فایل رمز بدون تغییر config خطای سرویس می‌سازد. ورود برنامه و مجوز نقش همچنان مستقل از این دروازه‌اند.

منبع: access ، auth_basic ، satisfy .