آپاچی؛ شب ۱۹: اجازهٔ دسترسی فقط از IPهای مشخص
فهرست نوشته
برای یک بخش مدیریتی میخواهیم فقط کلاینت .20 اجازه داشته باشد. امشب allowlist یا فهرست مجاز IP را با آزمون واقعی از دو ماشین پیاده میکنیم.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: www با HTTPS؛ کلاینت مجاز .20 و غیرمجاز .21، بدون NAT میان آنها و سرور.
IP، هویت کاربر نیست#
IP یک مبدأ شبکه را مشخص میکند. چند کاربر ممکن است پشت NAT یک IP داشته باشند و IP هم ممکن است تغییر کند. این محدودیت برای کاهش دامنهٔ دسترسی مناسب است؛ مجوز حساب کاربری همچنان تصمیم مستقلی است.
یک پوشهٔ admin زیر DocumentRoot و یک index.html ثابت در آن بساز. در VirtualHost HTTPS سایت:
<Location /admin/>
Require ip 192.168.56.20
</Location>
چند آدرس در یک Require ip به معنی اجازه برای هرکدام از آنهاست. اگر واقعاً subnet کامل نیاز داری، CIDR مثل 192.168.56.0/24 مجاز است؛ این مقدار در تمرین ما کلاینت غیرمجاز را هم باز میکند، پس از آن استفاده نکن.
از هر دو ماشین جداگانه:
curl --cacert ~/apache-lab/pki/ca.crt \
--resolve www.example.test:443:192.168.56.10 \
-o /dev/null -sS -w '%{http_code}\n' https://www.example.test/admin/
باید .20 پاسخ 200 و .21 پاسخ 403 بگیرد. فرستادن X-Forwarded-For: 192.168.56.20 از .21 در این توپولوژی نباید دسترسی بدهد. در شب بیستوسوم اثر پراکسی قابل اعتماد را بررسی میکنیم.
IPv6 و مسیر جایگزین#
اگر lab IPv6 راهنما را فعال کردهای، فقط IP fd50:80::20 را نیز به همان directive اضافه کن و از ::21 آزمون منفی بگیر. باز بودن IPv6، پورت دیگر یا URL بدون slash را هم بررسی کن؛ درخواست /admin ممکن است ابتدا به /admin/ هدایت شود، باید پاسخ نهایی همچنان محدود باشد.
بازگشت: پیش از بستن مسیر، کنسول و فایل config سالم داشته باش. برای برگشت، بلوک محدودیت را از backup بازیابی و reload کن؛ مالکیت فایل یا chmod مسئلهٔ این policy نیست.
منبع: Require ip در mod_authz_host ، ترکیب مجوزها .