انجیناکس؛ شب ۱۷: محدودیت IP و احراز هویت همزمان
فهرست نوشته
برای بخش مدیریتی، 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 .