جلوگیری از حملات bruteforce وردپرس در nginx
در این مقاله جلوگیری از حملات bruteforce وردپرس در nginx به شما آموزش داده میشود تا بتوانید این حملات که فایل wp-login.php را هدف میگیرند متوقف کنید. تنظیمات زیر، از حملات bruteforce با استفاده از ماژول HttpLimitReqModule در nginx جلوگیری می کند. این از ماژول های پیش فرض nginx است و نیازی به نصب جداگانه آن ندارید.
تنظیمات Nginx برای مقابله با حملات bruteforce وردپرس
برای تنظیمات کلی در فایل etc/nginx/nginx.conf در بلوک http{..} دستور زیر را قرار دهید:
1 |
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; |
۱۰m سایز ناحیه است. ۱MB میتواند ۱۶۰۰۰ وضعیت را نگهداری کند. اگر تعداد سایت های شما زیاد است و یا سایت هایی با بازدید سنگین دارید ممکن است بخواهید این مقدار را روی ۲۰MB یا ۱۰۰MB تنظیم کنید.
۱r/s به این معناست که یک درخواست در هر ثانیه مجاز است. شما نمیتوانید شکاف ها را مشخص کنید. اگر مایلید این مقدار را باز هم محدود کنید یعنی تعداد درخواست های در هر ثانیه کمتر شود میتوانید ۳۰r/m را امتحان کنید که به معنای ۳۰ درخواست در هر دقیقه یا یک درخواست در هر دو ثانیه است.
تنظیمات برای wp-login.php
کانفیگ بالا برای کل سرور و حتی سایت های غیر وردپرس اعمال میشود و علاوه بر جلوگیری از حملات brutrforce میتوان از آن برای مقابله با حملات ddos نیز استفاده کرد. اما اگر میخواهید فقط برای فایل wp-login.php محدودیت اعمال کنید میتوانید دستور زیر را در بلوک server{. .} اضافه کنید:
1 2 3 4 5 |
location = /wp-login.php { limit_req zone=one burst=1 nodelay; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } |
و یا
1 2 3 4 5 6 7 8 |
location ~ \.php$ { location ~* wp\-login\.php { limit_req zone=one burst=1 nodelay; include fastcgi_params; fastcgi_pass 127.0.0.1:9000; } #other rules } |
وقتی درخواست ها از محدوده تعیین شده تجاوز کند nodelay ارور HTTP status code 503 (Service Unavailable) را برمیگرداند. اگر میخواهید کد خطای ۴۴۴ و یا کد دیگری نمایش داده شود از کد زیر در بلوک http {..} برای تاثیر سراسری و یا در بلوک location {..} برای تاثیر محلی استفاده کنید:
1 |
limit_req_status 444; |