این روزها بازار Nginx در ایران بسیار داغ است. سرعت‌بالای پردازش، حجم کم، لود بالنسر قوی، کانفینگ راحت، front proxy قوی و داشتن اکثر ویژگی‌های آپاچی در خود باعث شده است؛ این وب سرور هم پای آپاچی رقابت کند. تا جایی سایت‌های بزرگی مانند:
Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud 1 Netflix, Udemy.com, Hulu, Pinterest, CloudFlare, WordPress.com, GitHub, SoundCloud
این وب سرور را به‌عنوان وب سرور خود انتخاب کنند. اگر شما هم جزو مدیر سرورهایی باشید که از آپاچی به این وب سرور مهاجرت کرده باشید، قطعاً تأمین امنیت Nginx یکی از دغدغه‌های اصلی شما می‌تواند باشد. در این مقاله قصد داریم راهکارهایی را جهت افزایش امنیت بیان کنیم.

به آخرین نسخه Nginx آپدیت شوید

همه می‌دانیم آپدیت شدن وب سرور سبب افزایش امنیت می‌شود. شاید این نکته بسیار ساده باشند اما خیلی‌ها از این نکات ساده غفلت می‌کنند. وب‌سایت Nginx پس از ارائه هر نسخه از این وب سرور با جمع‌آوری فیدبک‎ها از برنامه‌نویس‌ها و مهندسی امنیت باگ‌ها موجود را شناسایی و پچ می‌کند. می‌توانید سایت‌های ثبت هک را مانیتورینگ کنید؛ آن‌وقت می‌بینید هکرها با پیدا کردن یک اکسپلویت از یک وب سرور صدها سایت را موردحمله قرار می‌دهند. آن‌وقت وب سرور مربوطه این باگ را رفع می‌کند. اگر شما وب سرورتان را بروز نکنید در معرض خطر قرار می‌گیرید.

ماژول‌های غیرضروری را در Nginx غیرفعال کنید

در دنیای امنیت همیشه حذف برنامه‌های غیر استفاده می‌تواند سبب امنیت بیشتر برنامه شود. ماژول‌های غیرضروری می‌توانند همیشه خطری برای نفوذ هکرها باشند.

server_tokens را غیرفعال کنید

server_tokens به Nginx می‌گوید نسخه خود را در صفحات خطا به کاربر نمایش بده. این همان عمل جمع‌آوری اطلاعات برای هکر است که ما با قفل نکردن server_token آن را ساده‌تر کرده‌ایم. نمایش نسخه Nginx می‌تواند به هکر این اجازه را دهد به‌راحتی نقشه حمله خود را به‌طور دقیق برنامه‌ریزی کند. برای غیرفعال کردن server_token به قطعه کد زیر دقت کنید:

ابتدا به مسیر زیر بروید:

etc/nginx/nginx.conf

سپس فایل را با ویرایشگر دلخواه بازکنید و Server_tokens را off کنید:

server {
listen آی پی شما;
Server_tokens off;
server_name tecmintlovesnginx.com www.tecmintlovesnginx.com;
access_log /var/www/logs/tecmintlovesnginx.access.log;
error_log /var/www/logs/tecmintlovesnginx.error.log error;
root /var/www/tecmintlovesnginx.com/public_html;
index index.html index.htm;
}

سپس Nginx را ریستارت نمایید.

systemctl restart nginx
server_token

server_token

دسترسی user agents را غیرفعال کنید

مثلاً هکر یک روبات را طراحی می‌کند و مادام درخواست به وب سرور ارسال می‌کند. از این طریق قصد افزایش ترافیک سایت شما و اتلاف نیرو درنتیجه down کردن سرور را دارد. کاری که به‌عنوان یک مدیر سرور باید انجام دهیم. محدود کردن راه ورود این مخرب‌هاست (ربات‌ها، کرم‌ها، بک دور و…).
به مسیر /etc/nginx/ بروید.
یک فایل با نام blockuseragents.rules بسازید.
قطعه کد زیر را در آن قرار دهید:

map $http_user_agent $blockedagent {
default 0;
~*malicious 1;
~*bot 1;
~*backdoor 1;
~*crawler 1;
~*bandit 1;
}

سپس فایل کانفینگ Nginx را مجدد بازنمایید:

etc/nginx/nginx.conf

و قطعه کد زیر را در آن جایگزین کنید:

include /etc/nginx/blockuseragents.rules;

Nginx را ری استارت نمایید. حالا با دستورات زیر قبل و بعدازاین کار را تست می‌کنیم:

# wget http://192.168.0.25/index.html
# wget --user-agent "I am a bandit haha" http://192.168.0.25/index.html
Block-User-Agents-in-Nginx

Block-User-Agents-in-Nginx

غیرفعال کردن متدهایی که نیازی به آن ندارید

متدهایی که در هسته سایت با آن‌ها کاری ندارید را غیرفعال کنید. معمول سه متد Post,GET,HEAD را نگه می‌داریم و مابقی را غیرفعال می‌کنیم. برای غیرفعال کردن وارد فایل کانفینگ Nginx می‌شویم قطعه کد زیر را جایگزین می‌کنیم:

if ($request_method !~ ^(GET|HEAD|POST)$) {
return 444;
}

جلوگیری از حملات سرریز بافر به Nginx

اگر با مباحث امنیت آشنا باشید احتمالاً حملات سرریز بافر را می‌شناسید. در اینجا یک توضیح مختصر می‌دهیم و نحوه پچ کردن این باگ احتمالی را در Nginx توضیح می‌دهیم. حملات سرریز بافر زمانی اتفاق می‌افتند که هکر یک حجم بیش‌ازاندازه تعریف‌شده اطلاعات را به سمت وب سرور ارسال می‌کند. تصور کنید متغیری داریم که مقدار اطلاعاتی که نگه‌داری می‌کند در حافظه خود ۲۵۶ کیلوبایت است. حال اگر ما به این متغیر ۱۰۲۴ کیلوبایت ارسال کنیم چه می‌شود؟ درواقع متغیر مربوطه فضای کافی برای ذخیره‌سازی و پردازش ندارد و در این زمان چون برای سیستم تعریف‌نشده است که در این مواقع چه باید انجام دهی باعث ایجاد اختلال و درنتیجه حتی هک سرور می‌شود.

برای جلوگیری از حملات سرریز بافر به Nginx در پوشه conf.d در پوشه etc یک فایل با نام Buffer ایجاد نمایید.

/etc/nginx/conf.d/buffer.conf

سپس قطعه کد زیر را در آن قرار دهید:

client_body_buffer_size 1k;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;

تا اینجا کار یک فایل ساخته‌ایم و در آن گفته‌ایم در این‌چنین مواقع چه باید بشود. حال باید به Nginx هم بگوییم طبق قواعد این فایل عمل کن.
فایل کانفینگ را همان‌طور در بالا توضیح داده شد؛ مجدد بازکنید و عبارت زیر را به آن اضافه کنید.

include /etc/nginx/conf.d/Buffer.conf;

دسته‌بندی لاگ‎های Nginx

شاید یکی از مهم‌ترین کارهای یک مدیر سرور مطالعه روزانه لاگ‎های سرور است. درواقع این مطالعه لاگ‎ها است که به ما کمک می‌کند از تهدیدات احتمالی که سرور را تهدید می‌کند مطلع شویم.

اینجاست که باید ابتدا فایل لاگ برداری از Nginx را فعال کنیم و آن را هر روز یا هرچند روز مطالعه کنیم. حال با دسته‌بندی کردن لاگ به طریق زیر عمل می‌کنیم:

ابتدا به فایل کانفینگ Nginx بروید و از وجود این خط اطمینان حاصل کنید. در صورت نبود این خط را اضافه نمایید.

error_log /var/log/nginx/error.log warn;

با عبارت Warn درواقع میگوییم: هر اتفاقی در سرور می‌افتد و حتی اگر جای نگرانی در آن نیست.

حال با دستور gerp در لینوکس می‌توانیم لاگ‎ها را به‌صورت دسته‌بندی مطالعه بفرمایید. مثلاً می‌خواهیم لاگ‎هایی شمال دستور addr را بخوانیم:

grep addr /var/www/logs/tecmintlovesnginx.error.log --color=auto
Stop Hot-linking Images

Stop Hot-linking Images

مانع از هات لینکینگ (سرقت پهنای باند) در Nginx شوید

سرقت پهنای باند این‌طور کار می‌کند که مثلاً شما عکسی را در سایت خود بارگذاری کرده‌اید. سایت دیگری از عکس شما با آدرس مستقیم استفاده می‌کند و از این طریق باعث افزایش پهنای باند مصرفی شما می‌شود. کاری که می‌خواهیم انجام دهیم مانع از این نوع حملات شویم.

تصور کنید پوشه عکس‌های شما در سرور در آدرسی:

site /img

باشد. وارد فایل کانفینگ Nginx شوید و این قطعه را قرار دهید:

location /img/ {
valid_referers none blocked 192.168.0.25;
if ($invalid_referer) {
return 403;
}
}