طرح‌چه

بلاک و وایت لیست کردن آیپی ها | Nginx from scratch

۲۸ تیر ۱۴۰۴

بلاک و وایت لیست کردن آیپی ها | Nginx from scratch
یاد میگیریم چطور یک آیپی رو بلاک کنیم یا آیپی های مورد نظرمون رو بلاک یا وایت لیست کنیم تا فقط از طریق یکسری آیپی خاص بتوان به وب سرویس دسترسی داشت.

بعضی مواقع نیاز داریم تا دسترسی به یک مسیر خاص رو بر حسب IP محدود کنیم. برای اینکار میتونیم از ترکیب دستورهای allow و ‍‍deny استفاده کنیم.

با دستور allow می‌تونیم مشخص کنیم چه کسانی اجازه دسترسی دارند و با deny دسترسی سایرین رو محدود کنیم. به همراه دستورهای allow و deny میتونیم از یک IP , CIDR و یا مقدار all استفاده کنیم. (مستندات)

server {
    listen 9050 default_server;

    location / {
        deny all;
        allow 192.168.1.0/24;
        allow 10.1.1.0/16;
        allow 2001:0db8::/32;

        root /var/www/public;
        index index.html;
    }
}

در مثال بالا، اول با deny all همه‌ی دسترسی‌ها را محدود کردیم و بعد با دستورهای allow فقط به IP های دلخواه اجازه‌ی دسترسی دادیم.

در بعضی مواقع نیاز داریم تا تنها دسترسی به HTTP Method خاصی را محدود کنیم, در این حالت میتوان از دستور ‍limit_except استفاده کنیم. این دستور مشخص میکند چه متدهایی نباید محدود شوند!

server {
    listen 9051 default_server;

    location / {
    	limit_except GET {
            deny all;
            allow 192.168.1.0/24;
            allow 10.1.1.0/16;
            allow 2001:0db8::/32;
        }

        root /var/www/public;
        index index.html;
    }
}

نکته: محدود نکردن GET باعث میشود که متد HEAD نیز محدود نشود.

طبق مستندات , متدهای زیر را میتوان همراه با دستور limit_except استفاده کرد:

GET HEAD POST PUT DELETE MKCOL COPY MOVE OPTIONS PROPFIND PROPPATCH LOCK UNLOCK PATCH

با استفاده از دستور satisty میتونیم چندین محدودیت ایجاد کنیم و مشخص کنیم در صورتی با پاس شدن یکی یا همه ی آنها کاربر اجازه دسترسی داشته باشد (مستندات). این دستور به همراه any یا all مورد استفاده قرار میگیرد.

server {
    listen 9052 default_server;

    location / {
        satisfy any;

        allow 192.168.1.0/32;
        deny  all;

        auth_basic           "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd;

        root /var/www/public;
        index index.html;
    }
}

با توجه به مثال بالا از any استفاده کردیم. بدین ترتیب, اگر آیپی کاربر در رنجی که مشخص کردیم باشد و یا یوزرنیم و پسوورد صحیحی ارائه دهد, میتواند به محتوا دسترسی داشته باشد.

سورس کد تمامی مثال هایی که در بالا مطرح کردیم از طریق گیت هاب قابل دسترس هستند.


قسمت قبل: ایجاد پسوورد بر روی یک مسیر | Nginx from scratch

قسمت بعد: فشرده سازی پاسخ ها | Nginx from scratch

دیدگاه ها