امن سازی سرویس دهنده وب nginx قسمت دوم

در این مقاله به بررسی نحوه امن سازی سرویس دهنده وب nginx بر روی لینوکس می پردازیم.

برای خواندن قسمت اول اینجا را کیلیک کنید.

توجه داشته باشید که شما میتوانید این مقاله را بر روی centos و debian مورد استفاده قرار دهید.

در ابتدای کار و قبل از شروع به امن سازی سرویس نیاز به امن سازی خود سیستم عامل است که شما میتوانید مقالات ۳ گانه آن را بتریتب قسمت اول , دوم و سوم را در سایت مطالعه کنید.

۶- در این مرحله به امن سازی سرویس دهنده در مفابل buffer overflow  می پردازیم. برای این منظور فایل nginx.conf را با ویرایشگر باز میکنیم و نوارد زیر را در سکشن سرور آن قرار میدهیم.

## Start: Size Limits & Buffer Overflows ##
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
## END: Size Limits & Buffer Overflows ##

همچنین برای اینکه بازدهی سرورمان بالاتر رود نیاز داریم تا timeout های سرویس دهنده خود را tune کنیم . برای این منظور موارد زیر را در همان سکشن server  قرار میدهیم.

## Start: Timeouts ##
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
## End: Timeouts ##

۷- در این مرحله چگونگی کنترل کانکشن های همزان به سرویس دهنده را بررسی کنیم . برای این منظور شما میتوانید از ماژول NginxHttpLimitZone استفاده کنید.

برای کنترل کانکشن های همزمان فایل nginx.conf  را باز میکتیم و موارد زیر را در آن قرار میدهیم.

### Directive describes the zone, in which the session states are stored i.e. store in slimits. ###
### ۱m can handle 32000 sessions with 32 bytes/session, set to 5m x 32000 session ###
limit_zone slimits $binary_remote_addr 5m;
### Control maximum number of simultaneous connections for one session i.e. ###
### restricts the amount of connections from a single ip address ###
limit_conn slimits 5;

نکته: سرویس دهنده را جوری تنظیم میکنیم که فقط به درخواست های domain خودمان پاسخگو باشد. برای این منظور موارد زیر را به فایل nginx.conf اضافه میکنیم.

## Only requests to our Host are allowed i.e. nixcraft.in, images.nowlearn.ir and www.nowlearn.ir
if ($host !~ ^(nowlearn.ir|www.nowlearn.ir|images.nowlearn.ir)$ ) {
return 444;
}
##

نکته: برای اینکه ایمنی سرویس دهنده حفظ شود به آن میگوییم که فقط به درخواست های معتبر نظر POST و … پاسخ دهد. برای این منظور خطوط زیر را در فایل تنظیمات سرویس دهنده قرار میدهیم .

## Only allow these request methods ##
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 444;
}
## Do not accept DELETE, SEARCH and other methods ##

نکته: با استفاده از تنظیمات زیر جلوی بات ها و دانلودرها را میگیریم.

## Block download agents ##
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
return 403;
}
##
## Block some robots ##
if ($http_user_agent ~* msnbot|scrapbot) {
return 403;
}

۸- در این مرجله به آموزش چگونگی بلوکه کردن image hotlinke ها می پردازیم. برای این منظور موارد زیر را در فایل تنظیمات سرویس دهنده nginx مان قرار میدهیم.

# Stop deep linking or hot linking
location /images/ {
valid_referers none blocked www.example.com example.com;
if ($invalid_referer) {
return
۴۰۳;
}
}

۹- در این مرحله جلوگیری از لیست شدن دایرکتوری ها توسط وب سرویس را مورد بررسی قرار میدهیم. برای این منظور تنظیمات زیر را در فایل nginx.conf قرار میدهیم.

location /docs/ {
## block one workstation
deny
۱۹۲٫۱۶۸٫۱٫۱;
## allow anyone in 192.168.1.0/24
allow
۱۹۲٫۱۶۸٫۱٫۰/۲۴;
## drop rest of the world
deny
all;
}

توجه داشته باشید که باید آدرس های IP با توجه به شبکه خود تغییر دهید.

۱۰- در این مرحله به استفاده از SSL در nginx می پردازیم . برای این منظور در سکشن server موارد زیر را قرار میدهیم.

توجه: شما میتوانید برای صادر کردن گواهی امنیتی let’s encrypt از این آموزش استفاده کنید و یا برای صادر کردن CSR از این آموزش استفاده کنید.

server {
server_name nowlearn.ir;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;
access_log /usr/local/nginx/logs/ssl.access.log;
error_log /usr/local/nginx/logs/ssl.error.log;
}

۱۱- جلوگیری از اجرای اسکریپت ها در دایرکتوری های سرویس دهنده یکی از کارهای مهمی است که برای جلوگیری از نفوذ باید انجام دهیم. برای این منظور موارد زیر را در فایل تنظیمات قرار میدهیم.

# deny scripts inside writable directories
location ~* /(images|cache|media|logs|tmp)/.*.(php|pl|py|jsp|asp|sh|cgi)$
{
return 403;
error_page 403 /403_error.html;
}

و در آخر ذکر این دو نکنه قابل اوجه است که شما در صورتی که میتوانید حتما سرویس دهنده های خود را بصورت jail یا chroot شده اجرا و log آنها را فعال کنید.

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *