در دنیای امروز، امنیت وبسایتها یکی از مهمترین دغدغههای صاحبان کسبوکارهای آنلاین و توسعه دهندگان وب است. با افزایش روزافزون حملات سایبری و تهدیدات مختلف، نیاز به پیادهسازی کانفیگهای امنیتی مناسب برای وبسرورها امری ضروری است. در این مقاله، به بررسی یک نمونه کانفیگ امنیتی برای Nginx میپردازیم که میتواند به شما در محافظت از وبسایتتان در برابر انواع مختلف حملات کمک کند.
چرا امنیت وبسایت اهمیت دارد؟
امنیت وبسایت نه تنها برای محافظت از اطلاعات کاربران و دادههای حساس شما اهمیت دارد، بلکه برای حفظ اعتبار و اعتماد مشتریان نیز ضروری است. حملات سایبری میتوانند خسارات جبرانناپذیری به کسبوکارها وارد کنند، از جمله سرقت اطلاعات، از دست رفتن اعتماد مشتریان و خسارات مالی.
پیشنهاد مطالعه: مراقب امنیت وبسایت خودباشید! ۱۵ خطر امنیتی ۲۰۲۴
کانفیگ امنیتی Nginx برای محافظت از وبسایت شما
در این مقاله، یک نمونه کانفیگ امنیتی برای Nginx را بررسی میکنیم که به شما کمک میکند تا امنیت وبسایت خود را در برابر حملات سایبری مختلف افزایش دهید. این تنظیمات شامل پیکربندیهای مختلفی برای مقابله با تهدیدات رایج مانند XSS، تزریق SQL، حملات DDoS و موارد دیگر است.
۱. تنظیمات پایه
در ابتدای فایل nginx.conf
، تنظیمات پایهای مانند کاربر اجرایی و تعداد فرآیندهای کاری Nginx مشخص میشوند:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
۲. تنظیمات امنیتی HTTP
برای غیرفعال کردن نمایش نسخه Nginx و حذف هدر Server از پاسخها:
server_tokens off;
more_clear_headers 'Server';
۳. محدودیتهای درخواست
برای محدود کردن اندازه درخواستها و تنظیم تایماوتها جهت جلوگیری از اتصالات طولانی مدت:
client_max_body_size 10M;
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
۴. فشردهسازی
تنظیمات Gzip برای فشردهسازی پاسخها و کاهش پهنای باند مصرفی:
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
۵. هدرهای امنیتی
هدرهای امنیتی برای جلوگیری از حملات مختلف:
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; frame-src 'none';" always;
add_header X-Frame-Options "DENY" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
۶. تنظیمات SSL
برای استفاده از پروتکلهای TLS و انتخاب رمزنگاریهای قوی:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
۷. ریدایرکت به HTTPS
برای اطمینان از اینکه تمام ترافیک به HTTPS ریدایرکت میشود:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri;
}
۸. تنظیمات سرور SSL
تنظیمات مربوط به SSL و مسیرهای گواهی:
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/ssl/certs/your_certificate.crt;
ssl_certificate_key /etc/ssl/private/your_private_key.key;
root /var/www/yourproject;
index index.html index.htm index.nginx-debian.html;
location /static/ {
alias /var/www/yourproject/static/;
}
location /media/ {
alias /var/www/yourproject/media/;
}
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/run/gunicorn.sock;
}
location ~ /\.ht {
deny all;
}
location ~* \.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)$ {
deny all;
}
}
این تنظیمات به شما کمک میکنند تا امنیت وبسایت خود را بهبود بخشید و از بسیاری از تهدیدات سایبری جلوگیری کنید. با پیادهسازی این پیکربندیها، میتوانید اطمینان حاصل کنید که وبسایت شما در برابر حملات مختلف محافظت شده است.
پیشنهاد مطالعه: نکات امنیتی در Django: مقابله با ۱۲ مدل حمله سایبری در جنگو
نمونه کانفیگ امنیتی برای Nginx
در این بخش، یک نمونه کانفیگ امنیتی برای Nginx ارائه میدهیم که شامل تنظیمات امنیتی برای مقابله با حملات سایبری مختلف و افزایش امنیت وبسایت شما است.
تنظیمات nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# امنیت HTTP
server_tokens off;
more_clear_headers 'Server';
# محدودیت اندازه درخواستها
client_max_body_size 10M;
# زمانهای محدودیت اتصال
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
# تنظیمات لاگ
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log warn;
# فشردهسازی
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# سیاست امنیتی محتوای (CSP)
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; font-src 'self' https://fonts.gstatic.com; frame-src 'none';" always;
# جلوگیری از Clickjacking
add_header X-Frame-Options "DENY" always;
# جلوگیری از XSS
add_header X-XSS-Protection "1; mode=block" always;
# جلوگیری از Sniffing
add_header X-Content-Type-Options "nosniff" always;
# استفاده از HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# تنظیمات سرور SSL
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
# پیکربندی سرور
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name yourdomain.com www.yourdomain.com;
# ریدایرکت به HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name yourdomain.com www.yourdomain.com;
# مسیر گواهی SSL
ssl_certificate /etc/ssl/certs/your_certificate.crt;
ssl_certificate_key /etc/ssl/private/your_private_key.key;
# روت سایت
root /var/www/yourproject;
index index.html index.htm index.nginx-debian.html;
# تنظیمات سرور برای دایرکتوریهای ثابت
location /static/ {
alias /var/www/yourproject/static/;
}
location /media/ {
alias /var/www/yourproject/media/;
}
# تنظیمات پروکسی برای دایرکتوری /app/
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/run/gunicorn.sock;
}
# جلوگیری از دسترسی به فایلهای مخفی
location ~ /\.ht {
deny all;
}
# جلوگیری از دسترسی به فایلهای پشتیبان
location ~* \.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)$ {
deny all;
}
}
}
توضیحات
تنظیمات پایه:
user www-data;
برای اجرای Nginx به عنوان کاربرwww-data
.worker_processes auto;
برای استفاده بهینه از منابع سیستم.
تنظیمات امنیتی HTTP:
server_tokens off;
برای غیرفعال کردن نمایش نسخه Nginx.more_clear_headers 'Server';
برای حذف هدر Server از پاسخها.
محدودیتهای درخواست:
client_max_body_size 10M;
برای محدود کردن اندازه درخواستها.- تنظیمات تایماوت برای جلوگیری از اتصالات طولانی مدت.
فشردهسازی:
- تنظیمات Gzip برای فشردهسازی پاسخها و کاهش پهنای باند مصرفی.
هدرهای امنیتی:
Content-Security-Policy
برای جلوگیری از XSS و تزریق کدهای مخرب.X-Frame-Options "DENY"
برای جلوگیری از حملات Clickjacking.X-XSS-Protection "1; mode=block"
برای جلوگیری از XSS.X-Content-Type-Options "nosniff"
برای جلوگیری از Sniffing.Strict-Transport-Security
برای استفاده از HSTS.
تنظیمات SSL:
- استفاده از پروتکلهای TLSv1.2 و TLSv1.3.
- تنظیمات
ssl_ciphers
برای انتخاب رمزنگاریهای قوی.
ریدایرکت به HTTPS:
- سرور HTTP برای ریدایرکت ترافیک به HTTPS.
تنظیمات سرور SSL:
- مسیرهای گواهی SSL و کلید خصوصی.
- تنظیمات پروکسی برای Gunicorn.
محافظت از فایلها:
- جلوگیری از دسترسی به فایلهای مخفی و پشتیبان.
با استفاده از این تنظیمات، میتوانید امنیت وبسایت خود را به طور قابل توجهی افزایش دهید و از بسیاری از تهدیدات امنیتی رایج جلوگیری کنید.
پیشنهاد مطالعه: ده راهکار افزایش امنیت وردپرس ۲۰۲۳