12 تکنیک برای افزایش امنیت nginx (خنثی کردن حملات هکرها)

12 تکنیک برای افزایش امنیت nginx

شاید بعد از شنیدن مزایای Nginx نسبت به Apache شما  همتصمیم گرفته‌ باشید که وب سرور خودتان را با Nginx جایگزین کنید و آن را تست نمایید، در این صورت آموزش تأمین امنیت nginx به طور حتم برای شما مفید خواهد بود.

در این آموزش ۱۲ راه‌کار عملی برای امن کردن وب سرور nginx را به شما آموزش خواهیم داد که بعضی از آن‌ها به وب سرور Apache نیز شباهت خواهند داشت.

۱۲ راه‌کار برای افزایش امنیت nginx

۱- Nginx را همیشه آپدیت کنید

در این لحظه که این آموزش را برای شما می‌نویسم ورژن آخر Nginx نسخه استیبل ۱٫۱۴ می‌باشد. سعی کنید به طور مداوم نسبت به آپدیت سرویس‌های سرور مخصوصاً وب سرور اقدامات لازم و سریع را داشته باشید.

از دو طریق مخزن لینوکس و سورس کد می‌توانید برای نصب و آپدیت nginx اقدام کنید. نصب از طریق مخزن بسیار راحت‌تر و بی‌دردسرتر است ولی نصب از طریق سورس هم دارای مزایای خاص خود از جمله بروزتر بودن و قابلیت Optimize کردن ماژول‌ها می‌باشد.

 

۲- حذف ماژول‌های غیر ضروری در Nginx

اگر بر روی وب سرور Nginx شما ماژول‌های غیر ضروری وجود دارد که از آن‌ها استفاده نمی‌کنید می‌توانید به صورت زیر آن‌ها را حذف کنید.

./configure --without-module1 --without-module2 --without-module3

در این حالت به جای *module نام ماژول را قرار دهید و دوباره Nginx را کامپایل کنید. مثال عملی این دستور به شکل زیر خواهد بود.

configure  --without-http_dav_module –without-http_spdy_module/.

 

۳- غیرفعال کردن گزینه server_tokens

گزینه server_tokens به هنگام بروز خطا در nginx ورژن آن را به کاربر نمایش خواهد داد. با آگاهی هکر از ورژن Nginx و در صورت وجود حفره امنیتی به راحتی با اکسپلویت کردن حفره مهاجم می‌تواند به سرور شما نفوذ کند.

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

server {   
;listen       192.168.0.25:80   
;Server_tokens        off   
;server_name  modireserver.com www.modireserver.com   
;access_log  /var/www/logs/modireserver.access.log   
;error_log  /var/www/logs/modireserver.error.log error       
;root   /var/www/modireserver.com/public_html
;index  index.html index.htm
}

برای غیرفعال کردن server_tokens مقدار آن را برابر off قرار دهید و بعد از ذخیره فایل برای اعمال تغییرات سرویس nginx را ریست کنید.

مخفی کردن ورژن nginx

 

۴- مسدودسازی HTTP User Agents در Nginx

برای افزایش امنیت nginx توسط این برنامه بدافزارها و اسپمرها می‌توانند به وب سرور nginx حمله کرده و منابع سرور شما را از بین ببرند.

برای غیرفعال کردن لیست user agent های مخرب، یک فایل در مسیر زیر بسازید و درون آن به شکل گفته شده لیست agent ها را قرار دهید.

etc/nginx/blockuseragents.rules/
map $http_user_agent $blockedagent {       

        ;default         0
        ;~*malicious     1 
        ;~*bot           1
        ;~*backdoor      1 
        ;~*crawler       1
        ;~*bandit        1
}

سپس خط زیر را قبل بلاک server قرار دهید.

;include /etc/nginx/blockuseragents.rules

disable user agentsحالا سرویس nginx را ریست کنید. در صورتی که هر user agent با بلک لیست تعیین شده مطابقت داشته باشد دسترسی آن به سرور مسدود خواهد شد و این مورد تاثیر قابل توجهی در امنیت nginx خواهد داشت.

برای تست عملکرد این مورد کافی است هر یک از کدهای زیر که مربوط به دستورات لینوکس هستند را در ترمینال وارد کنید.

wget http://192.168.0.25/index.htmlwget --user-agent "I am a bandit haha" http://192.168.0.25/index.html

آی پی ۱۹۲٫۱۶۸٫۰٫۲۵ در این مثال شناسه IP سرور ماست این عدد را با آی پی سرور خود جایگزین کنید.

در دستور اول خروجی Response Code 200 را بر خواهد گرداند ولی دستور دوم به دلیل اینکه string تعریف شده در فایل blacklist ما یعنی bandit آمده وب سرور دسترسی کاربر را به وب سرور مسدود خواهد کرد و کد ۴۰۳ Forbidden نمایش داده خواهد شد.

block user agents in nginx

 

۵- غیرفعال کردن متدهای غیر ضروری HTTP در NGINX

برای عملکرد مناسب یک وب سرور و پاسخ به درخواست‌های ارسالی سمت سایت ها کار کردن متدهای HEAD,GET,POST کافی خواهد بود و بهتر است مابقی متدها جهت افزایش امنیت nginx غیرفعال شوند.

با قرار دادن کد زیر درون بلاک server هر درخواستی به سمت متدهای غیر مجاز بلاک شده و پیام ۴۴۴ برگردانده خواهد شد.

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

برای تست می توانید توسط ابزار CURL دستور زیر را به سمت سرور ارسال کنید. در این روش از متد DELETE استفاده شده که جز متدهای غیر مجاز محسوب می‌شود.

curl -X DELETE http://192.168.0.25/index.htmlcurl -X POST http://192.168.0.25/index.html

Disable Unwanted HTTP Requests On

 

۶- تعیین محدودیت سایز بافر در Nginx

برای جلوگیری از حملات buffer overflow در وب سرور nginx کافی است یک فایل در مسیر زیر ایجاد کنید.

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/*.conf

 

۷- محدودسازی تعداد IP متصل شده به Nginx

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

;limit_conn_zone $binary_remote_addr zone=addr:5m
;limit_conn addr 1

محدود کردن درخواست ها توسط هر آی پی

توسط دستور زیر می‌توانید بعد از اعمال تغییرات بر روی وب سرور تستی را پیاده‌سازی کنید.

ab -n 10 -c 2 http://192.168.0.25/index.html

 

۸- فعال کردن Log در Nginx

در روش قبلی برای امنیت nginx ما توسط ابزار ab یک تست بر روی سرور انجام دادیم ولی نتیجه را نتوانستیم مشاهده کنیم برای اینکار می توانید از مسیر فایل لاگ که درون بلاک server تعریف شده لاگ را مورد ارزیابی دقیق قرار دهید.

با دستور زیر و با کمک از grep سعی می‌کنیم خروجی را در حالت بهینه مشاهده کنیم.

grep addr /var/www/logs/modireserver.error.log --color=auto

 

۹- جلوگیری از Image Hotlinking در Nginx

این مشکل زمانی رخ می‌دهد که فردی از یک سایت دیگر به عکس درون سایت شما لینک دهد و آن را به کاربران خودش نمایش دهد.

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

اگر به طور مثال شما در یک دایرکتوری با نام img عکس‌های خود را قرار می‌دهید می‌توانید با قرار دادن قطعه کد زیر در بخش virtual host فایل کانفیگ Nginx هر دسترسی خارج از localhost به عکس‌ها را غیرفعال کنید.

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

 

۱۰- غیرفعال کردن SSL و فقط فعال‌سازی TLS در Nginx

در هر زمانی که توانستید استفاده SSL بر روی سرور را غیرفعال و به جای آن از TLS استفاده کنید.

با قرار دادن کد زیر در بلاک های server و یا http می‌توانید TLS را فعال کنید.

;ssl_protocols       TLSv1 TLSv1.1 TLSv1.2

disable ssl and enable tls on nginx

 

۱۱- ساخت Certificate در Nginx

برای شروع یک key و یک Certificate بسازید. اگر بخواهید می‌توانید از رمزنگاری‌های دیگر هم استفاده کنید.

openssl genrsa -aes256 -out modireserver.key 1024
openssl req -new -key modireserver.key -out modireserver.csr
cp modireserver.key modireserver.key.org
openssl rsa -in modireserver.key.org -out modireserver.key
openssl x509 -req -days 365 -in modireserver.csr -signkey modireserver.key -out modireserver.crt

حالا کد زیر را درون یک بلاک مجزای server قرار دهید.

server {
    ;listen 192.168.0.25:443 ssl
    ;server_tokens off
    ;server_name  modireserver.com www.modireserver.com
    ;root   /var/www/modireserver.com/public_html
    ;ssl_certificate /etc/nginx/sites-enabled/certs/modireserver.crt
    ;ssl_certificate_key /etc/nginx/sites-enabled/certs/modireserver.key
    ;ssl_protocols       TLSv1 TLSv1.1 TLSv1.2
}

 

۱۲- ریدایرکت HTTP به HTTPS

بعد از تغییرات مرحله قبل نوبت آن است با ریدایرکت HTTP به HTTPS ترافیک های ارسالی را فقط به سمت یک پروتکل ارجاع دهیم.

خط زیر را درون اولین بلاک server قرار دهید.

;return 301 https://$server_name$request_uri

این کد ترافیک های ارسالی به سمت پروتکل HTTP را به صورت ریدایرکت ۳۰۱ به پروتکل HTTPS هدایت خواهد کرد.

آیا این مطلب برای شما مفید بود؟

میانگین امتیاز ۴.۸ / ۵. تعداد آرا: ۱۸

اشتراک در
اطلاع از
guest

0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها

فرم ثبت نام در مسابقه فتح پرچم

برای شرکت در مسابقه باید با اطلاعات صحیح عضو شوید
ثبت نام در مسابقه
close-link